MCP 简介
MCP 是什么?
MCP全称为模型上下文协议,是统一不同大语言模型(LLM)与外部工具之间的集成的标准协议
一、工具是什么?
工具是提供给LLM获取外部知识 || 执行外部功能的接口
- 上网搜东西:比如问“最新的新闻是什么?”,它就去调用“浏览器搜索工具”查给相关信息,再总结返回给用户看
- 给学生一发5积分:它就会调用相关接口,发送积分,再把发放结果返回给用户看
二、为什么称为标准协议?
接口(工具)的调用是需要标准的输入的结构
- 折腾提示词:通过构造提示词,使 LLM 能给到准确的入参
我有一个搜索的工具,当你需要搜索时,可以调用,并按照以下格式输出
**输出格式:**
{
"tool": "search",
"content": string
}
**示例:**
{
"tool": "search"
"joke": "今天北京天气怎么样?"
}
请直接输出 JSON,不要添加任何其他文字说明。
提示词的输出不一定是准确的,所以还需要通过正则等代码重新获取调用入参的结果,但即便这样也还是可能会有问题
- function_call:后面openai官方,给出了function_call的形式
functions = [
{
"name": "search",
"description": "调用搜索引擎,获取信息",
"parameters": {
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "搜索内容",
},
},
"required": ["content"],
},
}
]
query = '今天北京天气怎么样?'
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo-0613",
messages=[{"role": "user", "content": query}],
functions=functions,
)
message = response["choices"][0]["message"]
print(message)
openai 推出后,反响非常好,后面的 LLM 厂商也跟着推出了自己的 "function_call"
比如 claude:
{
"model": "claude-3-opus-20240229",
"max_tokens": 1024,
"tools": [ {
"name": "search",
"description": "调用搜索引擎,获取信息",
"input_schema": {
"type": "object",
"properties": {
"content": {
"type": "string",
"description": "搜索内容"
}
}
,
"required": ["content"]
}
}
],
"messages": [ {
"role": "user",
"content": "今天北京天气怎么样?"
}
]
}
- MCP:Anthropic 推出一个标准的协议层,即统一结构的输入 input_schema,然后他们去封装这个统一的输入 input_schema 到其他 LLM function_call 的转换

MCP 和 Function Call 对比
| 特性 | Function Call | MCP |
|---|---|---|
| 简单性 | ✔ 简单直接,容易理解和实现 | ✘ 相对复杂,实现和理解成本较高 |
| 标准化 | ✘ 缺乏标准协议,每家实现不完全一致 | ✔ 标准化协议,JSON-RPC通信标准 |
| 功能范围 | ✘ 功能单一,只能调用函数 | ✔ 更完整的功能:工具、资源和提示三位一体 |
| 模型绑定 | ✘ 特定模型 | ✔ 通用性,不绑定特定的AI模型 |
| 通信方式 | ✘ 只支持同步调用,缺乏事件机制 | ✔ 双向通信,支持事件和通知 |
| 权限控制 | ✘ 每家可控制不统一 | ✔ 细粒度权限,明确的控制机制 |
MCP Inspector —— MCP Server调试器

启动命令
npx @modelcontextprotocol/inspector