MCP是什么,可以通俗易懂的讲解一下吗?
看过MCP文档,但是知识点还是模糊
简单来说,就是一个大模型调用到工具函数的一个通用协议,原本的function call可能只是各家是各家的,openai的开发了后,还需要转到claude去用,或者Claude开发的转到openai去用,不那么适配和方便。因为你需要了解这两家各自的标准。
那么MCP出来后呢,就是把这一块给统一了,相当于在工具和大模型之间加了一层通用协议层,大模型和工具之间不需要各自适配,只要工具实现协议的server,大模型客户端实现client从server取工具,即可。那么大家都公认这么一套流程,开发server和通过client获取server中的tool、resource、prompt等,都是一个规范。
不论是python、还是js/ts、或者是go,大家都遵循这个参数标准去做sdk开发,任意大模型调用都很方便通过其去适配开发。
给你个例子看看:
python:
app = Server("example-server")
@app.list_tools()
async def list_tools() -> list[types.Tool]:
return [
types.Tool(
name="calculate_sum",
description="Add two numbers together",
inputSchema={
"type": "object",
"properties": {
"a": {"type": "number"},
"b": {"type": "number"}
},
"required": ["a", "b"]
}
)
]
@app.call_tool()
async def call_tool(
name: str,
arguments: dict
) -> list[types.TextContent | types.ImageContent | types.EmbeddedResource]:
if name == "calculate_sum":
a = arguments["a"]
b = arguments["b"]
result = a + b
return [types.TextContent(type="text", text=str(result))]
raise ValueError(f"Tool not found: {name}")
typescript:
const server = new Server({
name: "example-server",
version: "1.0.0"
}, {
capabilities: {
tools: {}
}
});
// Define available tools
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [{
name: "calculate_sum",
description: "Add two numbers together",
inputSchema: {
type: "object",
properties: {
a: { type: "number" },
b: { type: "number" }
},
required: ["a", "b"]
}
}]
};
});
// Handle tool execution
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "calculate_sum") {
const { a, b } = request.params.arguments;
return {
content: [
{
type: "text",
text: String(a + b)
}
]
};
}
throw new Error("Tool not found");
});
可以看到,虽然不同语言写法不同,但是都遵循一个mcp协议的规范。以tool为例子就是:
types.Tool(
name="calculate_sum",
description="Add two numbers together",
inputSchema={
"type": "object",
"properties": {
"a": {"type": "number"},
"b": {"type": "number"}
},
"required": ["a", "b"]
}
)
都必须按照 name
和 description
和 inputSchema
来规范你的工具的参数。
这样开发完之后,你去适配Claude还是openai又或是google家的,都可以从mcp的标准协议去解析各自的tool,然后传给对应的客户端去使用,大模型可以自由选择目前的工具去调用使用。
MCP,全称 Model Context Protocol(模型上下文协议),可以简单理解为一种让人工智能(AI)与外部工具和数据源无缝交互的标准化协议。它就像给AI装了一个“万能接口”,类似于USB-C接口,统一了AI与各种工具和数据的连接方式。
通俗点说,MCP的作用是让AI更聪明地使用外部资源。例如:
MCP的优势包括:
它的架构分为三部分:
MCP将AI应用设计成了类似微服务的架构,AI应用是调用方,其他工具、资源是被调用的服务,MCP服务器就是服务管理中心。MCP协议就是这套结构里各部分互相通信使用的协议。
当用户向AI提出一个问题:“你能帮我设置一个10分钟后的闹钟吗?”
AI:"我不知道当前时间,我也无法设置闹钟,因为我不会"
这个时候我们就要想办法让AI能做到,然后我们可以将我们的问题再详细一下变成这样:
我:“你能帮我设置一个10分钟后的闹钟吗?备注:我这里有两个函数一个名字为getCurrentTime是获取当前时间,一个是setAlarm设置10分钟后的闹钟,需要一个参数是时间。你可以在需要的时候告诉我你要调用哪个函数,我可以帮你执行,然后把执行结果再发给你。”
AI:“我首先需要知道当前时间,我现在需要调用getCurrentTime”
我:根据返回结果自己写代码调用getCurrentTime获取结果,然后将结果发给AI,"2025-4-27 11:36:42"
AI:"有了当前时间,我现在需要调用setAlarm,传入参数为‘2025-4-27 11:36:42’设置闹钟"
我:自己写代码调用我现在需要调用setAlarm(2025-4-27 11:36:42)“我已经执行setAlarm函数”
AI:"我已帮你设置好10分钟后的闹钟"
好了,恭喜你理解了Function Call的原理,getCurrentTime,setAlarm这两个函数都是在我们自己本地的项目里面定义的,如果有第二个项目要用,或者其他人要用,他们要么自己再写一遍,造一遍轮子,要么你把你的函数封装成库,给他们引入调用,但是别人用的可能是C++,JAVA,JS,Python等等语言,没办法使用你的库,这个时候怎么办呢,有了,我们可以写一个HTTP服务器,暴露这两个接口,他们可以通过HTTP协议调用你这两个函数。
好了再次恭喜你,你也理解了MCP的原理,你这服务就叫做MCP Server,他们就叫做MCP Client
你可以把你的接口说明文档发布到互联网,恭喜你,你定义了一套MCP的协议规范!
当然这些都只是雏形,实际情况比这个复杂,还有很多地方需要完善,比如MCP服务器不仅仅提供Function,还提供prompt模板,resouce资源等
2 回答5.1k 阅读✓ 已解决
3 回答707 阅读
1 回答812 阅读
1 回答570 阅读
561 阅读
553 阅读
Model Context Protocol
简单点说就是让模型能够调用外部工具,类似function calling的功能。
在调用AI模型接口的时候,告诉AI模型它可以调用哪些“工具”,然后客户端收到调用的请求,执行对应的工具,再将工具的返回结果提交给AI模型。
然后这个 mcp 就可以说是一个标准协议,这个协议定义了AI客户端怎么去调用哪些工具、自己开发的工具可以通过实现mcp的协议,让工具被AI客户端调用。