ADR-006: MCP 协议迁移预留

修改记录

日期

变更

2026-07-18

初始创建

ADR-006++

状态

说明

验证

MCP 迁移

工具数增长到 3-5 个时迁移

未开始

状态

⏸ 待触发(工具数达 3-5 个时迁移)。

当前维持手写 Function Calling。原决策见 ADR-005 § 决策 3

背景

当前 Agent 的工具调用采用手写 Function Calling 方式:

  • 工具定义在 prompts.py:POI_TOOL_DEF(1 个工具 poi_lookup

  • 注册在 tools/__init__.py:TOOL_REGISTRY

  • 调用链路在 routes.py 聊天端点:两阶段——先非流式检测 tool_call → 执行工具 → SSE 发 tool_result → 再流式输出 LLM 回复

当前工具数仅 1 个时,这套手写方案明确够用。但当工具数增长到 3-5 个时,管理和扩展的开销会上升。

现状 vs MCP

维度

手写 FC(现状)

MCP 协议

工具注册

TOOL_REGISTRY 字典,手动维护

通过 MCP Server 动态发现

调用协议

硬编码 HTTP→高德 API

标准化 JSON-RPC

工具拆分

所有函数同进程

每个工具可独立部署

扩展新工具

改 routes.py + TOOL_REGISTRY

加 MCP Server

依赖

无额外依赖

mcp Python 包

复杂度

简单直接

引入序列化/传输/协议层

迁移路径(预留方案)

当工具数增长到 3-5 个时,按以下步骤迁移:

  1. 创建 MCP Server:包装 TOOL_REGISTRY 中的函数,通过 FastMCP 暴露为标准工具

  2. MCP Client 替换routes.py 聊天端点改用 MCP Client 调用,替代手写 tool_call 检测

  3. 逐步迁移:新旧并存,新工具通过 MCP Server 注册,旧工具保持手写

  4. 全量切换:确认所有工具通过 MCP 运作后,移除手写 FC 路径

数据流

TOOL_REGISTRY ──→ MCP Server ──→ MCP Client ──→ routes.py chat 端点
                                                      ↓
                                                SSE tool_result