最近,大家都在讨论 MCP,为什么突然冒出一个新鲜的词,我们来一探究竟。

MCP是什么
```plain 一句话概括:模型上下文协议(MCP)是一个开放标准化协议,就像AI应用的"USB-C接口",为大型语言模型(LLM)提供标准化的上下文访问方式,允许LLM连接到各种数据源和工具。 ```
MCP(Model Context Protocol),即模型上下文协议,是一个开放协议,它使得LLM应用程序与外部数据源和工具之间能够实现无缝集成。简单来说,MCP是一种标准化的方式,让AI模型能够更容易地与各种工具和服务进行交互。

核心问题探讨
在深入了解MCP之前,让我们先思考几个关键问题:
- MCP的本质和功能是什么
- LLM如何接入MCP
- MCP与传统Function Call的区别
- 为什么各大厂商热衷于接入MCP
- MCP的底层实现原理
MCP的架构设计
```plain 一句话概括:mcp 核心架构是客户端-服务器的设计。 客户端(位于LLM应用内)与服务器建立连接, 通过标准化的JSON-RPC消息传输, 服务器能为LLM应用提供上下文、工具和提示。 ```
查看官方文档(modelcontextprotocol.io/docs/concep...),我们可以总结MCP的核心架构:
- 协议抽象层:MCP将不同工具/服务的API差异封装成统一接口,类似"万能插座",AI只需理解协议规范,无需关注底层实现细节。
- 动态上下文管理:协议会携带会话ID、历史记录等上下文信息,帮助AI理解调用场景(例如在客服场景中自动关联用户订单信息)。
- 异步通信机制:采用类似HTTP长轮询或StreamableHTTP的传输方式,支持AI在等待API响应的同时处理其他任务。

MCP实现示例
以TypeScript SDK为例,[源码地址](https://github.com/modelcontextprotocol/typescript-sdk/tree/main)
我们可以看看如何实现一个MCP服务器:
typescript
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
// 创建一个MCP服务器
const server = new McpServer({
name: "Demo",
version: "1.0.0"
});
// 添加一个加法工具
// 参数:a和b都是数字类型
// 返回:将结果转换为字符串
server.tool("add",
{ a: z.number(), b: z.number() },
async ({ a, b }) => ({
content: [{ type: "text", text: String(a + b) }]
})
);
// 添加一个动态问候资源
// 通过URI模板定义:greeting://{name}
// 返回:包含问候语的内容
server.resource(
"greeting",
new ResourceTemplate("greeting://{name}", { list: undefined }),
async (uri, { name }) => ({
contents: [{
uri: uri.href,
text: `Hello, ${name}!`
}]
})
);
// 启动服务器
// 使用标准输入输出(stdin/stdout)作为传输层
// 开始接收stdin的消息并通过stdout发送消息
const transport = new StdioServerTransport();
await server.connect(transport);
可以看到,上面的代码清晰的展示了怎么使用,使用非常简单。让我们进一步深入解析。
- 通用的服务器类
Server
,处理客户端-服务器通信 - 支持请求-响应模式和通知模式
- 实现了协议版本协商和能力协商机制
MCP与Function Call的区别
为了理解MCP与传统Function Call的区别。
我们先看看使用 Function Call的实现方式:
plain
传统Function Call的实现需要:
- 使用JSON Schema描述每个函数
- 处理模型响应
- 实现外部函数逻辑
- 处理API返回结果
- 将结果返回给模型
javascript
import { OpenAI } from "openai";
const openai = new OpenAI();
const tools = [{
"type": "function",
"name": "get_weather",
"description": "Get current temperature for a given location.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "City and country e.g. Bogotá, Colombia"
}
},
"required": [
"location"
],
"additionalProperties": false
}
}];
const response = await openai.responses.create({
model: "gpt-4.1",
input: [{ role: "user", content: "What is the weather like in Paris today?" }],
tools,
});
console.log(response.output);
再来看看怎么使用 mcp,这里以 openai mcp 为例
python
async with MCPServerStdio(
params={
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", samples_dir],
}
) as server:
tools = await server.list_tools()
agent=Agent(
name="Assistant",
instructions="Use the tools to achieve the task",
mcp_servers=[mcp_server_1, mcp_server_2]
)
而MCP则提供了更高层次的抽象:
- 统一接口:不同工具通过统一协议接入,减少适配成本
- 标准化交互:定义了标准的请求-响应模式
- 工具管理:集中式管理各种工具和服务
- 上下文共享:在不同工具调用间保持上下文信息
- 可扩展性:更容易添加和更新工具,无需频繁更新模型提示

为什么大厂热衷于接入MCP
最近海内外的大厂都纷纷加入了 mcp 的阵营,将自家的产品都接入了 mcp。
plain
大厂之所以积极接入MCP协议,其核心在于这一技术重构了AI与工具、数据的交互范式,并为生态竞争和商业布局提供了战略支点。
主要原因包括:
- 降低集成成本:统一协议减少了不同API的适配工作
- 提高开发效率:开发者可以专注于业务逻辑而非接口适配
- 增强AI能力:让AI能够访问更多外部工具和服务
- 标准化生态:建立标准化的工具调用生态系统
- 提升用户体验:AI可以更流畅地完成复杂任务
MCP的底层实现原理

我们可以看下源码:(具体实现可以查看最下面参考链接)
typescript
// 定义一个泛型协议类,用于处理请求、通知及结果
// Request: 客户端请求类型
// Notification: 服务端通知类型
// Result: 请求处理结果类型
class Protocol<Request, Notification, Result> {
// 设置请求处理器
// 泛型T: 请求数据结构的类型(如JSON Schema)
// 参数 schema: 用于验证/匹配请求的数据结构
// 参数 handler: 异步请求处理函数,接收请求数据及额外参数,返回处理结果
setRequestHandler<T>(
schema: T,
handler: (request: T, extra: RequestHandlerExtra) => Promise<Result>
): void
// 设置通知处理器
// 泛型T: 通知数据结构的类型
// 参数 schema: 用于验证/匹配通知的数据结构
// 参数 handler: 异步通知处理函数,仅接收通知内容
setNotificationHandler<T>(
schema: T,
handler: (notification: T) => Promise<void>
): void
// 发送请求并等待响应
// 泛型T: 预期响应数据的类型
// 参数 request: 要发送的请求对象
// 参数 schema: 用于验证响应数据的结构
// 参数 options: 可选的请求配置(如超时时间)
// 返回: 符合schema结构的响应数据Promise
request<T>(
request: Request,
schema: T,
options?: RequestOptions
): Promise<T>
// 发送单向通知
// 参数 notification: 要发送的通知对象
// 返回: 通知发送确认的Promise
notification(
notification: Notification
): Promise<void>
}
MCP的底层实现主要特点:
- 类型安全设计:通过泛型参数确保请求、通知和结果类型的一致性
- 模式验证:使用schema参数进行数据结构校验(通常为JSON Schema)
- 异步处理:所有方法均基于Promise实现异步通信
- 双向通信:支持请求-响应模式(request)和发布-订阅模式(notification)
- 扩展性:RequestHandlerExtra参数可传递元数据(如请求来源、时间戳等)
总结
MCP作为一个开放协议,正在成为AI与外部工具交互的标准方式。它通过提供统一的抽象层,大大简化了AI调用外部服务的复杂性,使得开发者可以更专注于业务逻辑而非接口适配。
与传统Function Call相比,MCP提供了更高层次的抽象和更丰富的功能,包括统一接口、上下文管理、异步通信等。这也是为什么各大科技公司都在积极接入MCP,它不仅降低了开发成本,也提升了AI应用的能力和用户体验。
随着AI应用的普及,MCP有望成为连接AI与外部世界的重要桥梁,推动AI工具生态系统的标准化和繁荣发展。
相关资料参考:
- Function Call文档:OpenAI Function Calling
- MCP vs Function Call:Comparison Guide
- Anthropic:Introducing the Model Context Protocol
- openai mcp server:openai mcp server
- mcp sdk ts:mcp sdk typescript