|
|
hai 2 semanas | |
|---|---|---|
| services | hai 2 semanas | |
| tests | hai 2 semanas | |
| tools | hai 2 semanas | |
| .env.example | hai 2 semanas | |
| .gitignore | hai 2 semanas | |
| README.md | hai 2 semanas | |
| app.py | hai 2 semanas | |
| config.py | hai 2 semanas | |
| mcp_protocol.py | hai 2 semanas | |
| requirements.txt | hai 2 semanas |
这是一个轻量的 Python MCP Gateway,用来把 Workbuddy 的 MCP 工具调用转发到现有 ThinkPHP 授权接口和工具接口。
当前仓库已经具备一个可运行的 stdio MCP 入口,以及一套经过测试的核心模块,覆盖:
.env 优先的配置加载session_key 隔离auth_code 换票、续期、失效的认证客户端bind_auth_code 授权绑定工具query_order 工具注册initialize / tools/list / tools/call 请求处理当前实现仍然保持“薄网关”原则:
query_order 开始员工侧 Workbuddy 使用网络 UNC 路径启动 Gateway:
{
"mcpServers": {
"fms": {
"command": "python",
"args": [
"\\\\192.168.1.241\\mcp\\app.py",
"serve-stdio"
]
}
}
}
不要把 Y:\mcp\app.py 写进 Workbuddy 配置;那只是开发机映射盘视角。
以下命令在 mcp/ 目录下执行。
python app.py list-tools
python app.py bind --auth-code AUTH123
员工正式使用时不需要执行这条命令。Workbuddy 拉起 serve-stdio 后,员工应在 Workbuddy 中调用 bind_auth_code 工具完成绑定。
python app.py call --tool query_order --keyword SO20260706001 --page 1 --limit 20
python \\192.168.1.241\chenjiacheng\mcp\app.py serve-stdio
这个命令可作为 Workbuddy 本地命令模式下的 MCP 服务入口,由 Workbuddy 自动拉起,不要求员工手动执行。
当前代码直接支持以下文档口径的配置键:
FMS_API_BASEFMS_AUTH_BASEFMS_TOOLS_BASEFMS_CLIENT_TYPEFMS_TIMEOUT_MSFMS_TIMEOUT_SECONDSFMS_REFRESH_SKEW_SECONDSFMS_LOG_LEVELFMS_TOKEN_STOREFMS_TOKEN_STORE_PATHFMS_REDIS_HOSTFMS_REDIS_PORTFMS_REDIS_DBFMS_REDIS_PASSWORDFMS_REDIS_PREFIXFMS_SESSION_KEY同时兼容早期实现中的这些键名:
MCP_AUTH_BASE_URLMCP_TOOLS_BASE_URLMCP_CLIENT_TYPEMCP_TIMEOUT_SECONDSMCP_REFRESH_SKEW_SECONDSMCP_LOG_LEVELMCP_TOKEN_STOREMCP_TOKEN_STORE_PATHMCP_REDIS_HOSTMCP_REDIS_PORTMCP_REDIS_DBMCP_REDIS_PASSWORDMCP_REDIS_PREFIXMCP_SESSION_KEY说明:
config.py 会自动尝试读取 mcp/.env。.env 优先,系统环境变量只在 .env 缺少该配置时兜底。FMS_API_BASE,当前实现会同时把它作为 auth 和 tools 的基础地址。base 与 fmsoperate 部署在不同域名,应分别提供 FMS_AUTH_BASE 与 FMS_TOOLS_BASE。当前 mcp/ 目录建议使用 .env 保存共享 Gateway 配置。
推荐配置如下:
FMS_AUTH_BASE=http://chenjiacheng.base.dahuo.fudingri.com
FMS_TOOLS_BASE=http://chenjiacheng.fmsoperate.dahuo.fudingri.com
FMS_CLIENT_TYPE=workbuddy
FMS_TIMEOUT_SECONDS=10
FMS_REFRESH_SKEW_SECONDS=120
FMS_LOG_LEVEL=info
FMS_TOKEN_STORE=redis
FMS_REDIS_HOST=192.168.1.241
FMS_REDIS_PORT=6379
FMS_REDIS_DB=20
FMS_REDIS_PASSWORD=
FMS_REDIS_PREFIX=fms:mcp:workbuddy:
不要在共享 .env 中写死 FMS_SESSION_KEY。默认情况下 Gateway 会用员工本机的 COMPUTERNAME / USERNAME 自动生成稳定 session_key,Redis key 形如:
fms:mcp:workbuddy:{session_key}
这样多个员工通过同一个 \\192.168.1.241\chenjiacheng\mcp\app.py 启动时,也不会共用同一个 token。
当前推荐使用 Redis:
FMS_TOKEN_STORE=redis
Redis 存储行为:
bind_auth_code 成功后把 mcp_token 写入 RedisFMS_REDIS_PREFIX + session_keysession_key 优先读取 FMS_SESSION_KEY,未配置时自动从员工本机信息生成revoke 成功后会删除当前 session 的 Redis key文件存储仍保留为兜底方式:
FMS_TOKEN_STORE=file
FMS_TOKEN_STORE_PATH=C:/fms-mcp/.mcp_token.json
如果使用网络共享 app.py,不要把 FMS_TOKEN_STORE_PATH 指向 \\192.168.1.241\chenjiacheng\mcp\ 共享目录。
当前员工正式使用路径是:
auth_codepython \\192.168.1.241\chenjiacheng\mcp\app.py serve-stdio 拉起 Gatewaybind_auth_code,输入授权码完成绑定exchange 时带上 session_keyquery_order 等工具python app.py bind --auth-code ... 仅保留给开发、联调和排障使用。
python -m unittest discover -s tests -p "test_*.py"
当前 Gateway 已可作为本地 stdio MCP 进程使用,但仍保持最小边界: