MCP Server 的实现流程,官方文档已经写的很详细了:
1. 先通过 prompts / resources / tools 的描述信息,定义服务的能力;
2. 再通过 server.setRequestHandler 定义接到客户端请求后,执行怎样的逻辑,响应怎样的数据;
3. 最后把 server 连接到 transport,启动服务在本地监听客户端的 RPC 请求;
MCP 客户端接入流程:
0. 客户端提供一个配置页面,让用户提前把需要用到的 MCP Servers 填到配置里面;
1. 客户端在启动的时候,连接到 transport,通过 client.getServerCapabilities() 获取所有已配置的 MCP Servers 提供的能力,包括 prompts / resources / tools 等;
2. 用户在客户端输入问题,客户端把用户提问 + MCP Servers 的能力描述发送给大模型,做意图识别,大模型返回应该调用哪些服务,应该传哪些参数;
3. 客户端带上 MCP Server 名称和对应的参数,发起一次 RPC 请求,获得 MCP Server 响应的数据;
4. 客户端带上用户提问 + MCP Server 响应的数据,请求大模型回答,可以理解为一次 RAG(Rpc-call-Augmented Generation );
从整个流程看来,MCP 跟 Function Calling 的逻辑基本一致,差异点在于 Function Calling 是 API 调用,MCP 是 JSON-RPC 请求。
MCP 的能力描述和功能逻辑统一封装在 Server 端,而 FC 的能力描述配置在客户端,功能逻辑在 API,相对比较割裂,不容易管理。
MCP Server 更容易做一些通用型操作,比如读取本地文件,读取业务数据库,而 FC API 一般要跟具体的业务绑定,不够灵活。
MCP Server 官方仓库有十几个例子,很值得参考,开发者可以提交自己的 server,先实现一下业务无关的通用 server,比如连接 notion 做个人笔记分析。影响力起来了可以做很多事,参考 WebPilot 插件在 ChatGPT Plugin 的地位。
MCP Client 目前只有 Claude 自己的桌面客户端有比较好的支持,对于第三方 ChatBot 应用是个机会,可以选择早点接入,积累先发优势,MCP Servers 应该很快会起量。