一种旨在帮助AI代理理解并处理Frappe应用程序的模型上下文协议(MCP)。此工具提供了对Frappe代码库进行语义分析和探索的能力。

find_symbols:支持模糊匹配的跨应用源文件符号搜索find_field_usage:在代码中查找特定DocType字段的引用search_frappe_docs:支持模糊匹配和类别过滤的嵌入式Frappe框架文档搜索read_frappe_doc:通过ID读取特定Frappe文档文件的全部内容get_doctype:通过名称获取全面的DocType信息(例如,“销售发票”)get_doctype_db_schema:获取特定DocType的数据库模式create_doctype:生成包含JSON元数据、Python控制器和JS表单文件的DocType结构analyze_links:通过检查链接、表格和选择字段来分析和映射DocType之间的关系list_doctypes:列出当前Frappe应用中的所有可用DocType,可选地按模块过滤create_web_page:生成包含HTML、CSS和JavaScript结构的网页文件create_custom_page:生成包含表单和后端API端点的Frappe自定义页面框架create_test_template:为Frappe DocType创建具有适当测试结构的测试模板文件create_report:创建报告模板文件(脚本报告、查询报告或报告构建器)run_tests:使用bench run-tests命令执行特定模块、DocType或整个应用的单元测试run_bench_command:运行带有参数的任意bench命令(例如,迁移、安装应用)run_db_command:通过bench mariadb命令执行SQL查询bench_execute:通过bench execute命令执行Frappe函数,可选地带有参数和关键字参数git clone https://github.com/anvie/frappe-mcp.git
cd frappe-mcp
cargo build --release
创建一个frappe-mcp.conf文件以配置您的Frappe应用(参见下面的配置部分)
运行MCP服务器:
cargo run -- --config frappe-mcp.conf run
服务器将在首次运行或源文件更改时自动分析您的Frappe应用程序。
使用Claude Code:
claude mcp add frappe_mcp ./target/release/frappe_mcp run
确保您在运行claude的同一目录下有frapppe-mcp.conf文件。
使用MCP Inspector测试服务器:
cargo build --release
npx @modelcontextprotocol/inspector -- ./target/release/frappe_mcp --config frappe-mcp.conf run
可用的测试方法包括上述列出的所有工具:find_symbols,get_doctype,create_doctype,run_tests,analyze_links,create_web_page,find_field_usage,run_bench_command,get_doctype_db_schema,run_db_command,search_frappe_docs,read_frappe_doc,list_doctypes,create_custom_page,create_test_template,create_report,bench_execute
创建一个frappe-mcp.conf文件以配置服务器。示例配置:
frappe_bench_dir = "/path/to/frappe-bench"
app_relative_path = "your-app-name"
app_name = "Your App Name"
site = "yoursite.localhost"
配置参数:
frappe_bench_dir:指向您的Frappe基准目录的路径app_relative_path:基准/apps文件夹内应用目录的名称app_name:应用的显示名称site:Frappe站点名称(未指定时默认为“frontend”)虽然服务器会在启动时自动分析您的应用,但您也可以手动运行分析:
cargo run -- --config frappe-mcp.conf analyze --app-dir /path/to/frappe-bench/apps/your-app
这将生成一个包含有关您的应用模块和DocType结构化信息的analyzed_output.dat文件。
functool子命令允许从命令行直接执行MCP函数,这对于测试和调试非常有用:
# 获取DocType信息
cargo run -- functool get-doctype "Sales Invoice"
cargo run -- functool get-doctype "Sales Invoice" json # 仅JSON输出
# 列出模块中的所有DocType
cargo run -- functool list-doctypes "Selling"
# 在代码库中搜索符号
cargo run -- functool find-symbols "get_doc" "accounts" true 10
# 查找字段使用情况
cargo run -- functool find-field-usage "Sales Invoice" "customer" 20
# 运行bench命令
cargo run -- functool run-bench-command "list-apps"
可用函数:
get-doctype:获取全面的DocType信息list-doctypes:列出DocType,可选地按模块过滤find-symbols:在代码中搜索函数/类符号find-field-usage:查找DocType字段被引用的位置run-bench-command:执行bench命令服务器内置了CLI命令,用于搜索嵌入式Frappe文档:
注意:文档通过基于短哈希的ID(例如,“48b014”)而不是文件路径引用,以避免与文件系统操作混淆。使用search-docs找到文档ID。
# 搜索关于DocType的文档
cargo run -- search-docs "DocType" --category doctypes --limit 5
# 对API文档进行模糊搜索
cargo run -- search-docs "databse" --category api --fuzzy
# 跨所有类别搜索
cargo run -- search-docs "getting started"
# 首先搜索以获取文档ID
cargo run -- search-docs "Frappe Framework Documentation" --limit=1
# 然后使用其ID阅读文档
cargo run -- read-doc "48b014" # 主文档索引的ID
# 阅读创建DocType指南
cargo run -- read-doc "3b7f1e" # 创建_doctypes.md的ID
# 阅读API文档
cargo run -- read-doc "454ba4" # database_api.md的ID
--category:按类别过滤(doctypes,api,tutorial)--fuzzy:启用模糊搜索(默认:true)--limit:结果的最大数量(默认:10)作者:Robin Syihab