My Agent Core Design - MCP
MCP
- MCP 配置只放用户级:
${SOONG_AGENT_HOME}/mcp.json
- MCP server 属于用户信任的外部能力, 项目不直接声明 MCP server.
- 用户级 config 可以启用/禁用某些已存在的 MCP tools.
- MCP server 加载采用 lazy connect: - SDK 启动时只读取
${SOONG_AGENT_HOME}/mcp.json, 形成 server catalog.- run 需要 MCP tools 或 effective tool set 包含 MCP tools 时再连接 server.
- 连接后执行 tool discovery.
- 单个 server 失败只影响该 server 的 tools.
- MCP discovery 使用进程内缓存:
- 缓存 tool list 和 schema.
- cache key 包含 server_id 和 server config hash.
- 缓存带 TTL.
- server config 变化或 TTL 过期后 refresh.
- 第一版不把 MCP discovery cache 持久化到 SQLite.
- MCP server 失败处理:
- 写
mcp_server_failedevent. - 该 server 的 tools 不进入本轮 effective tool set.
- provider tool schema 和本轮可用工具视图都隐藏该 server 的 tools.
- 不让整个 run failed.
- 如果模型后续仍调用该工具, 返回
tool_not_available.
- 写
- MCP tool permission:
- 由 MCP metadata + 用户 config override 决定.
- 默认 unknown/write 需要确认.
- 只有 MCP metadata 或 config 明确标为 readonly 时才自动允许.
- 用户可在 config 里按 server/tool 覆盖 permission 和 tags.
- MCP tool canonical name:
- 使用
mcp.<server_id>.<tool_name>.- server_id 来自
${SOONG_AGENT_HOME}/mcp.json的稳定 key.
- server_id 来自
- 避免跨 server tool name 撞名.
- 使用
This post is licensed under CC BY 4.0 by the author.