MCP设计原则
原则一:RPC现有的业务接口不等于MCP接口
RPC接口和MCP接口不能等同,RPC接口是为页面交互设计。你的MCP接口要按照对话意图去设计。 这是最常见的误区。开发者在设计 MCP Server 时,很容易直接把现有的微服务或内部 API 包装一层就暴露出去。这样做会导致几个问题:
1.信息过载与噪音
◦RPC 接口:通常返回完整的、结构化的业务对象,包含数十个字段,目的是为了满足各种前端页面的不同需求。
◦MCP 接口:应该返回精简的、对话相关的信息。AI 不需要知道一个“用户对象”的所有字段,它可能只需要“姓名”和“ID”来完成当前对话。多余的信息会成为噪音,消耗宝贵的上下文窗口。
2.意图与动作的不匹配
◦RPC 接口:通常是细粒度的原子操作,如getUser(id),createOrder(item)。
◦MCP 接口:应该对应用户的意图,可能是粗粒度的组合操作。用户的对话是:“帮我订一张明天去北京的机票”,这背后可能对应着searchFlights、checkSeats、createBooking等多个 RPC 调用。MCP Server 应该内部组合这些调用,对外只暴露一个bookFlight的工具。
3.参数设计的差异
◦RPC 接口:参数通常是精确的、结构化的 ID 或代码。
◦MCP 接口:参数应该对自然语言友好。用户会说“帮我找一下上个月张三提交的报销单”,而不是“getExpenseReport(owner: ‘zhangsan', submitDate: ‘2024-05-01')”。所以 MCP 工具的参数可以是“员工姓名”、“时间范围描述”等,由 Server 内部负责将其解析为精确的查询条件。
设计建议:
•包装与适配:MCP Server 应该是现有后端系统的一个智能适配层,而不是直通的代理。
•聚合与精简:将多个细粒度的 RPC 调用聚合成一个粗粒度的、符合对话逻辑的工具。
•数据裁剪:只返回对完成当前对话任务必要的信息,过滤掉无关字段。
原则二:要结合对话场景进行设计
这是 MCP 设计的灵魂。工具不是给代码调用的,是给一个“大脑”(LLM)在对话流中调用的。
1.工具即“对话能力”
◦不要把工具看作是“函数”,而是看作是 AI 在对话中可以使用的“技能”或“能力”。
◦例如,对于一个项目管理工具,RPC 接口可能有getProject,getTask,getUser。而对话场景下的 MCP 工具可能是:
▪findMyPendingTasks:直接获取当前用户待处理的任务。
▪summarizeProjectProgress(projectId):获取项目名称和整体进度摘要。
▪assignTaskToColleague(taskId, colleagueName):通过同事姓名(而非ID)来分配任务。
2.状态管理与多轮对话
◦RPC 是无状态的,每次调用相互独立。
◦MCP 工具可能需要维护或理解上下文。例如,用户问:“哪些任务快到期了?” AI 调用getUrgentTasks。用户接着说:“把第一个任务标记为完成”。
◦这时,第二个工具调用markTaskAsCompleted可能依赖于第一个调用返回的任务列表。虽然 MCP 本身不管理会话状态,但你的工具设计应该预见到这种“上下文引用”的可能性。
3.结果的可读性与引导性
◦RPC 返回 JSON 对象。
◦MCP 返回的结果不仅要被机器解析,其内容本身也应该易于被 AI总结和转化为自然语言回复给用户。有时甚至可以在返回数据中增加一些提示性文字。
◦例如,bookFlight工具返回的可以不只是订单ID,还可以包括:“成功为张三预订了 5月20日 CA1234 航班,北京到上海,已等待支付。” 这样的信息,AI 可以直接读给用户听。
设计建议:
•角色扮演:在设计时,想象自己是一个在特定领域(如客服、数据分析师、秘书)的助手,你需要什么工具来完成工作?
•预测用户意图:思考用户在什么情况下会说什么话,这些话对应了哪些后台操作。
•设计对话流:画出可能的用户对话路径,确保你的工具集能够支撑这些路径。
扩展:其他重要的 MCP 设计原则
1.安全性原则:确保MCP接口不会执行危险操作,对于敏感操作要有确认机制。
2.最小权限原则:只提供完成对话任务所必需的工具和资源,不暴露不必要的功能。
3.用户意图导向:设计工具时应该从用户意图出发,而不是从系统功能出发。
4.结果可解释性:工具返回的结果应该易于理解和解释,以便AI能够生成用户友好的回复。
5.错误处理与鲁棒性:工具应该能够处理各种边界情况,并提供清晰的错误信息,以便AI能够理解并反馈给用户。
6.状态管理:在无状态的协议中,设计工具时要注意会话状态的维护(通常通过上下文来传递)。
7.工具与资源的平衡:不仅提供工具(操作),还可以提供资源(数据),让AI有更多的背景信息。
8.易于使用和发现:工具的名称、描述和参数应该清晰明了,使得AI能够正确选择和使用。
总结
从 RPC 思维到 MCP 思维的转变,核心是:
•从“数据提供者”转变为“对话能力赋能者”。
•从“系统中心化”设计转变为“用户体验中心化”设计。