Skip to content

14 · MCP

用开放协议接入工具生态

📚 系列导航:这是《Agent 开发进阶》的第 14 篇(共 24 篇)。上一篇给 agent 开了眼睛,这一篇把它接进开放工具生态——一个协议,N×M 变 N+M,还要接得安全。下一篇:15 · 该不该上多 Agent

你大概经历过:换一个 agent 框架,之前写的工具封装全得重写;想接同事做的工具,接口对不上,又糊一层胶水。工具和 agent 各自越多,胶水越写越绝望——这正是 MCP(Model Context Protocol)这个开放协议要解决的事。这一篇只干一件事:搞懂 MCP 的原理与边界,并自建一个最小 server 让 agent 调起来。

看完这一篇,你会拿到:

  • 一句能给同事讲明白的"N×M 变 N+M"解释
  • 一份第三方 server 准入检查清单
  • 一个自建最小 MCP server 的函数签名骨架
  • "agent 调用自建 server"端到端跑通的动手验收

01 MCP 解决什么:N×M 变 N+M

M 个工具、N 个 agent 应用,每对组合都要写一遍对接,总量 N×M。就像 USB 之前每种设备配一种插头,MCP 的做法是统一插口:工具方按协议写一次 server,所有支持 MCP 的应用都能用,对接总量变成 N+M(口径以 MCP 官方规范为准)。这是生态杠杆:你写的别人能用,别人写的你能白拿。

💡 一句话总结:MCP 的价值不在单次对接更快,而在对接成果全生态复用。

02 三角色与通信

MCP 规范定义三个角色:host(agent 应用本体)、client(协议客户端,与 server 一对一连接)、server(工具与资源的提供方)。通信走 JSON-RPC:本地常用 stdio,远程走 HTTP 类传输(细节以官方规范为准)。server 还能暴露资源和提示模板,但最常用的是工具。

MCP协议三角色:host client server

💡 一句话总结:host 管应用、client 管连接、server 管工具,互不串线。

03 用现成 server:快速扩能,权限收紧

现成 server 生态不小,接入往往只是加一段配置。接之前两件事:权限最小化——只读够用就绝不给写,文件类 server 限定目录;能力盘点——列出它暴露的每个工具,确认没带进用不到的高危能力。我的习惯:新 server 先按只读跑一周,符合预期再放开写。

💡 一句话总结:现成 server 按最小权限接入,不用的能力不要带。

04 自建最小 server:暴露内部 API

内部系统想让 agent 用?包成 MCP server,写一次处处能接。

python
# 伪代码:最小 MCP server,接口以官方 SDK 文档为准
server = MCPServer(name="internal-data")

@server.tool()
def query_orders(customer_id: str, limit: int = 10) -> str:
    """按客户 ID 查最近订单,只读。"""
    rows = internal_api.get_orders(customer_id, limit)
    return summarize(rows)  # 返回摘要给模型

预期输出:host 侧能发现并调用 query_orders,拿到摘要文本。三条纪律:默认只读、写操作单独授权、返回做摘要。

💡 一句话总结:自建 server 套用工具设计课的全部规范——它就是写给模型看的 API。

05 安全边界:第三方 server 的信任问题

第三方 server 的工具描述会原样进入模型上下文——恶意 server 可以借描述文字影响模型行为。防御三查:逐条读描述(发现诱导性内容直接弃用)、看来源与维护状态(活跃维护优先)、留审计日志(调用可追溯)。

💡 一句话总结:把第三方 server 当外来代码做准入审查,把 MCP 当生态杠杆而非默认架构。

06 动手:自建 server 被 agent 端到端调用

任务:① 照 04 节写个只读查询 server(本地 SQLite 即可);② host 侧接入,确认工具被发现;③ 向 agent 提一个业务问题,触发调用。

验收标准:完整调用链日志——工具发现、调用参数、server 返回、agent 回答;外加越权测试:诱导调用未授权写操作,确认被拒。

两种结果都正常:跑通了,给 server 加第二个工具练粒度设计;工具没被调用,多半是描述没写清"何时用",回第 05 篇修——模型不用工具,几乎总是描述的锅。

07 小结

你现在应该能:讲清 N×M 变 N+M 与三角色、最小权限接入现成 server、自建 server 跑通端到端、对第三方做准入三查。

下一段进多 agent 深水区,第一件事是泼冷水——15 · 该不该上多 Agent


📎 实战案例

某团队无审计接了七八个社区 server,排查发现其中一个的工具描述带诱导指令。补上准入三查、下线 2 个不合规 server 后风险归零——生态越繁荣,准入越刚需。

踩坑

  • 我无审计接了七八个社区 server,其中一个的工具描述带诱导指令——从此第三方必过准入三查。
  • 什么都 MCP 化,内部高频接口多绕一层,压测单次多了几十毫秒——性能敏感路径直连。
  • 我把返回全量 JSON 的内部接口原样包成工具,一次回了 3000 行,两轮把上下文吃穿——server 返回必须做摘要。