如果你做过 AI 应用开发,大概率遇到过这样的场景:想让大模型读取本地文件、查询数据库、调用某个第三方 API,于是不得不为每一个数据源单独写一套"胶水代码"——工具定义、鉴权逻辑、错误处理,每接入一个新系统就要重复一遍。
如果你同时维护多个 AI 应用(比如一个 IDE 插件、一个桌面助手、一个 Web 服务),情况会更糟:N 个应用 × M 个数据源,意味着 N×M 套集成代码。
MCP(Model Context Protocol,模型上下文协议) 正是为了解决这个问题而生。它由 Anthropic 提出并开源,目标是给"大模型如何连接外部数据和工具"这件事定义一套标准协议,就像 USB-C 统一了外设接口一样。
有了统一协议,数据源和工具的提供方只需要实现一次 MCP Server,任何支持 MCP 的应用都可以直接接入,不需要为每个应用单独适配。
MCP 采用经典的 Host - Client - Server 三层模型:
传输层上,MCP 支持两种主流方式:本地场景常用 stdio(标准输入输出,进程间通信开销小),远程场景常用基于 HTTP 的 SSE(Server-Sent Events) 或可流式传输的 HTTP,方便跨网络访问部署在云端的 Server。
以 Node.js 为例,下面是一个仅暴露"查询天气"这一个工具的极简 MCP Server:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "weather-server",
version: "1.0.0",
});
server.tool(
"get_weather",
"查询指定城市的当前天气",
{ city: z.string().describe("城市名称,例如:上海") },
async ({ city }) => {
// 这里替换为真实的天气 API 调用
const weather = await fetchWeatherFromSomewhere(city);
return {
content: [{ type: "text", text: `${city} 当前天气:${weather}` }],
};
}
);
const transport = new StdioServerTransport();
await server.connect(transport);
任何支持 MCP 的 Host(比如 Claude CLI)只需在配置文件中注册这个 Server 的启动命令,就能让模型在对话中按需调用 get_weather 工具,而无需为每个 Host 单独适配。
MCP 把"AI 模型如何接入外部世界"这件事标准化了:Host 专注对话与决策,Client 负责协议通信,Server 专注暴露能力。这种解耦让工具和数据源的提供方与 AI 应用的开发方可以独立演进,正在成为构建复杂 Agent 系统的基础设施之一。
No comments yet. Be the first!