MiaoMcp
将本地 FastMCP 工具和任意数量的远程 MCP 服务同时接入小智。目前本地提供:
calculator.calculate:安全计算基础算术表达式;time.get_current:查询指定 IANA 时区的当前日期和时间,默认北京时间。
每个启用的 MCP Server 都拥有独立的 WebSocket 连接、进程和重连循环。一个远程服务故障不会阻塞其他服务。
配置
编辑根目录下被 Git 忽略的 mcp_config.json:
{
"xiaozhi": {
"endpoint": "wss://小智后台生成的完整接入点URL"
},
"mcpServers": {
"miaomcp-local": {
"type": "stdio",
"command": "miaomcp-server"
},
"modelscope-weather": {
"type": "sse",
"url": "https://mcp.api-inference.modelscope.net/服务ID一/sse"
},
"modelscope-search": {
"type": "sse",
"url": "https://mcp.api-inference.modelscope.net/服务ID二/sse"
}
}
}
在 mcpServers 中继续添加条目即可接入更多服务。支持的类型:
stdio:本地 MCP 命令;sse:远程 SSE MCP,自动通过mcp-proxy转换;streamablehttp或http:远程 Streamable HTTP MCP;- 设置
"disabled": true可临时停用某项。
需要请求头的服务可以配置:
{
"type": "sse",
"url": "https://example.com/sse",
"headers": {
"Authorization": "Bearer token"
}
}
mcp_config.json 和其中的 URL、token 都不应提交。可提交模板见 mcp_config.example.json。
运行
uv sync
uv run miaomcp
指定其他配置文件:
uv run miaomcp --config /path/to/mcp_config.json
仅启动本地 stdio 工具服务:
uv run miaomcp-server
添加本地工具
在 src/miaomcp/tools/ 中编写业务函数,然后在 src/miaomcp/server.py 使用 @mcp.tool() 注册。不需要修改网关或配置。
项目结构
src/miaomcp/
├── cli.py 命令行入口
├── server.py 本地 FastMCP 服务及工具注册
├── gateway/
│ ├── config.py 配置模型、加载与校验
│ ├── commands.py stdio 与远程代理命令构造
│ ├── bridge.py 单个 MCP 与小智的双向桥接
│ └── manager.py 多服务并发和断线重连
└── tools/
├── calculator.py 安全计算器
└── current_time.py 时区时间查询
tests/ 按模块组织的测试
mcp_config.example.json 可提交的配置模板
mcp_config.json 本地敏感配置,Git 忽略
pyproject.toml 项目元数据、依赖和命令入口
测试
uv run python -m unittest discover -s tests -v