MCP 协议:模型上下文接入

模型上下文协议(Model Context Protocol,MCP)由 Anthropic 于 2024 年 11 月提出,是一套开放标准,用来以统一方式把大模型连接到外部数据源与工具,避免每个应用各自重造集成。它定义了主机、客户端与服务器三种角色,以及资源、工具、提示模板三类原语,目标是让「接一个数据源」像插一根标准接口一样简单。对开发者而言,MCP 降低了把模型接入业务系统的门槛。

是什么

MCP 采用客户端与服务器架构,类比「USB-C 接口」:模型应用作为主机(Host)内置 MCP 客户端,通过标准协议连接一个个 MCP 服务器,每个服务器暴露资源(Resources)、工具(Tools)与提示模板(Prompts)。资源是可读的数据(如文件、数据库记录),工具是可执行的函数,提示模板是可复用的提示片段。三类原语覆盖了大部分集成需求。

为什么需要它

在没有标准之前,把同一个工具接到不同模型要写不同的适配代码。MCP 把「模型侧」与「能力侧」解耦:服务器实现一次,任意兼容 MCP 的客户端都能复用,降低了重复集成成本。对生态而言,这鼓励第三方贡献通用服务器,形成可共享的能力市场。新模型只要支持 MCP 客户端,就能立刻用上已有服务器。

怎么用

一个最小服务器用 TypeScript SDK 暴露一个工具:

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";

const server = new McpServer({ name: "demo", version: "1.0.0" });
server.tool("add", { a: Number, b: Number },
  async ({ a, b }) => ({ content: [{ type: "text", text: String(a + b) }] }));

客户端通过 stdio 或 HTTP(Streamable HTTP 与 SSE)传输与服务器通信。主机负责把服务器的工具动态注入模型可见的上下文中,由模型决定是否调用。传输方式可按部署形态选择。

注意点

  • 传输层有 stdio 与 HTTP 两种,本地进程常用 stdio,远程多用 HTTP。
  • 工具权限与可见范围应由客户端控制,避免服务器越权访问。
  • 协议仍在演进,接入前核对所用 SDK 的版本与规范是否一致。
  • 多个服务器并存时注意命名冲突与重复工具的处理。

实践建议

接入时建议先从一个本地 stdio 服务器起步,验证工具发现与调用链路,再扩展到远程 HTTP 服务器。对敏感数据源,应在服务器端做鉴权与最小化授权,而不是把所有权限都交给模型。多服务器场景下,可用命名前缀区分来源,并在客户端做统一的能力目录,便于排障与监控调用频次。

小结

MCP 用开放标准统一了「模型接入外部能力」的方式:客户端、服务器与传输层各司其职,资源、工具、提示模板三类原语覆盖了常见集成场景。它把模型与数据源解耦,让能力可被一次实现、多处复用。

参考与延伸阅读

本文累计阅读