MCP 集成:聚合工具、连接管理与端到端 MCP 特性
30 秒导读: fast-agent 号称「MCP 原生(MCP-native)」。这句话的实质是:它不是"顺手支持了 MCP",而是把 MCP 协议的双向能力全都铺开——对外,它能同时连一堆 MCP server 并把它们的工具/提示词/资源聚合成一张统一的表;对内,它把 server 反向调用 client 的两条通道(sampling、elicitation)接到自己的模型和真人身上;最后它还能把整个 agent 倒过来暴露成一台 MCP server 供别人连。本章讲清这三件事各自在哪段代码里。
本章聚焦「MCP 到底原生在哪」。至于 Agent 类如何持有这个聚合器(继承链细节),见 02-agent-class-stack.md;模型字符串怎么解析成一个 LLM,见 04-llm-provider-abstraction.md。
1. 这是什么(零基础也能懂)
先说 MCP。 MCP(Model Context Protocol,模型上下文协议)是一个"让 AI 应用和外部工具说同一种话"的标准。一台 MCP server 对外声明"我有这些工具(tool)、这些提示词(prompt)、这些资源(resource)",AI 应用(client)按协议去列举、去调用。你可以把它想成"给 AI 用的 USB 接口":插上一台文件系统 server、一台数据库 server、一台浏览器 server,agent 就多了对应的手脚。
再说 fast-agent 补了什么。 光有协议不够,真实项目里你会同时插好几台 server,于是冒出一堆工程问题:
- 两台 server 都 有个叫
search的工具,调用时到底找谁? - 远程 server 要 OAuth 登录,token 存哪、怎么刷新?
- 连接断了、session 过期了,一次工具调用该不该自动重连重试?
- server 想反过来用"我这边的模型"生成一段文字(sampling),或者想弹个表单问真人一句话(elicitation),这条反向通道谁来接?
fast-agent 的 src/fast_agent/mcp/ 目录就是专门回答这些问题的一层。它给每个 agent 配一个 MCPAggregator(聚合器):把多台 server 合成一张工具表;底下再垫一个 MCPConnectionManager(连接管理器)管住真实的传输、断连、OAuth、心跳。
一句话直觉/类比: 把 MCPAggregator 当成一个总机接线员——agent 只管喊"帮我调 fetch__get",接线员负责查这是哪台分机(server)、那条线通不通(连接)、要不要先验身份(OAuth),然后把话接过去。
用起来什么样。 使用者几乎看不到这层,只在 YAML 里声明有哪些 server:
# 示意:fast-agent.yaml
mcp:
servers:
fetch:
transport: stdio # 本地进程,标准输入输出通信
command: "uvx"
args: ["mcp-server-fetch"]
myremote:
transport: http # 远程 Streamable HTTP server
url: http://localhost:8001/mcp
auth:
oauth: true # 默认就是 true,自动走 OAuth
然后 agent 声明 servers=["fetch", "myremote"],调用时工具已经被聚合、命名空间化好了,直接 fetch__get_url 这样点名即可。