从原理到实战:一文看懂 MCP(Model Context Protocol)
MCP(Model Context Protocol)是连接AI与外部工具的标准通信协议,使AI Agent能够安全、标准化地调用外部能力。其架构包含用户、AI Agent、AI模型和MCP Server四部分:用户提出问题,Agent调度工具调用,模型判断意图并生成工具调用指令,MCP Server执行具体操作并返回结果。通过一个获取操作系统版本的实战示例,展示了MCP如何将Python函数暴露
前言
AI Agent 正在成为新一代应用的核心形态。
过去的大模型更像“会聊天的助手”,但现在,AI 正在逐渐拥有“调用外部能力”的能力:它不仅能回答问题,还能读取文件、操作系统、查询数据库、调用 API,甚至执行自动化任务。
而 MCP(Model Context Protocol)就是连接 AI 与外部能力的重要协议。
很多人第一次接触 MCP 时,会把它理解成:
“给 AI 提供工具调用能力的一种协议。”
这个理解没有错,但 MCP 的真正价值,其实是:
它让 AI Agent 拥有了标准化接入外部世界的能力。
本文会从以下几个角度,完整讲清 MCP:
- MCP 的核心架构
- MCP 的完整执行流程
- 一个获取操作系统版本的 MCP 实战
- 如何接入 Codex
一、什么是 MCP?
MCP(Model Context Protocol)可以理解成:
AI 模型与外部工具之间的标准通信协议。
它解决的是:
AI 如何安全、标准化地调用外部能力。
比如:
- 获取本机操作系统版本
- 查询数据库
- 获取 GitHub Issue
- 抓取 X(Twitter)内容
- 调用浏览器
- 操作本地文件
这些能力并不是大模型本身拥有的。
模型本身只是“会推理”。
真正执行动作的是:
- MCP Server
- 外部工具
- Agent Runtime
因此:
MCP 本质上是 AI 世界中的“工具协议层”。
二、MCP 架构详解
整个架构主要由四部分组成:
1. 用户(User)
用户负责:
- 提出问题
- 下达任务
- 提供上下文
例如:
请输出我当前操作系统的版本号
2. AI Agent
AI Agent 是整个系统中的“调度中心”。
它的核心职责:
(1)管理上下文
负责维护:
- 用户输入
- 会话历史
- 可用工具
- 当前任务状态
(2)读取可用 MCP Skill
Agent 会读取:
当前系统有哪些可以调用的 MCP Server
例如:
- system-tools
- github-tools
- browser-tools
(3)调度工具调用
Agent 不负责真正推理。
它更像:
“AI 世界里的操作系统”
负责:
- 调度模型
- 管理工具
- 管理状态
- 转发结果
3. AI Model(大模型)
AI Model 负责:
- 理解用户意图
- 推理
- 判断是否需要调用工具
- 提取工具参数
- 组织最终语言
例如:
用户说:
请输出我当前操作系统版本
模型会判断:
这个能力我本身不具备,
需要调用 system-tools MCP
然后模型会返回:
{
"tool": "get_system_info",
"arguments": {}
}
4. MCP Server(Skill)
MCP Server 才是真正执行能力的地方。
它可以理解成:
AI 的外挂能力模块。
例如:
- 获取系统版本
- 调用数据库
- 查询股票
- 获取天气
- 操作浏览器
MCP Server 一般由开发者自己实现。
三、MCP 的完整执行流程
下面结合流程图,完整解释一次 MCP 调用过程。

Step 1:用户提出问题
用户输入:
请输出我当前操作系统的版本号
Step 2:Agent 获取可用 Skill
Agent 会读取:
当前注册了哪些 MCP Server
例如:
- system-tools
- github-tools
- browser-tools
Step 3:同步上下文给 AI Model
Agent 会把:
- 用户问题
- 可用 Skill
- Tool Description
一起发送给模型。
Step 4:模型思考
模型开始推理:
用户问的是操作系统版本
然后发现:
自己无法获取本机系统信息
但是:
system-tools 可以处理
Step 5:模型生成 Tool Call
模型返回:
{
"tool": "get_system_info",
"arguments": {}
}
这里最关键的一点是:
模型本身不执行工具。
它只是:
- 判断调用哪个工具
- 提取参数
Step 6:Agent 调用 MCP Server
Agent 收到 tool call 后,真正调用:
get_system_info()
Step 7:MCP 返回结果
MCP Server 返回:
{
"system": "Darwin",
"release": "24.1.0",
"machine": "arm64"
}
Step 8:Agent 将结果返回给模型
Agent 会把:
{
"system": "Darwin",
"release": "24.1.0"
}
重新发送给模型。
Step 9:模型组织自然语言
模型最终生成:
你当前的操作系统是 macOS,
内核版本为 Darwin 24.1.0,
架构为 ARM64。
Step 10:Agent 返回给用户
最终输出给用户。
至此,一次完整 MCP 调用结束。
四、MCP 实战:获取操作系统版本
下面用一个真实 MCP 示例:
获取当前操作系统版本。
代码如下:
import platform
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("system-tools")
@mcp.tool(
description="""
Retrieve detailed operating system information from the current machine.
Use this tool when the user asks about:
- operating system version
- macOS version
- Windows version
- Linux distribution
- machine architecture
- local system information
- runtime environment
"""
)
def get_system_info() -> dict:
uname = platform.uname()
return {
"system": uname.system,
"node": uname.node,
"release": uname.release,
"version": uname.version,
"machine": uname.machine,
"processor": uname.processor,
"platform": platform.platform(),
"python_version": platform.python_version(),
}
if __name__ == "__main__":
mcp.run()
五、一个 MCP 由哪些部分组成?
从结构上来说,一个 MCP 通常由四部分组成。
1. MCP Server
mcp = FastMCP("system-tools")
这里创建了一个 MCP 服务。
名字叫:
system-tools
它会暴露一组工具给 AI 使用。
2. Tool(工具)
@mcp.tool(...)
这里定义了一个 Tool。
Tool 本质上:
就是 AI 可以调用的函数。
3. Tool Description
description="""
Retrieve detailed operating system information...
"""
这部分非常关键。
因为:
AI 是否能正确调用 Tool,很大程度取决于 Description。
模型不会“读代码”。
它主要依赖:
- tool name
- tool description
来判断:
什么时候调用
4. Tool Function
def get_system_info() -> dict:
这里是真正执行逻辑的地方。
使用:
platform.uname()
获取:
- 系统版本
- CPU 架构
- Python 版本
六、代码逐行解析
创建 MCP 实例
mcp = FastMCP("system-tools")
作用:
- 创建 MCP Server
- 注册工具
- 提供通信协议
注册 Tool
@mcp.tool(...)
作用:
- 把 Python 函数暴露给 AI
等价于:
向 AI 注册能力
Description 的作用
这是 MCP 里最容易被忽略,但最重要的部分。
例如:
Use this tool when the user asks about:
- macOS version
- Linux distribution
这其实是在“教模型”:
什么时候调用这个工具
Description 写得越好:
- Tool 命中率越高
- 参数提取越准确
Tool Return
return {
"system": uname.system,
}
返回值通常建议:
- JSON 化
- 结构清晰
- 字段稳定
因为:
最终这些数据还会再次送回模型。
启动 MCP Server
mcp.run()
启动 MCP 服务。
此时:
Codex / Claude Desktop / Cursor 等 Agent 就可以连接这个 MCP。
七、如何将 MCP 集成到 Codex 中
接下来是最关键的一步:
如何让 Codex 自动调用这个 MCP。
1. 安装 Python 环境
建议:
brew install python@3.10
创建虚拟环境:
python3.10 -m venv .venv
source .venv/bin/activate
2. 安装 MCP SDK
安装:
pip3.10 install "mcp[cli]"
如果安装失败,通常是 Python 版本过低。
MCP SDK 一般要求:
Python >= 3.10
3. 保存 MCP 文件
例如:
system_tools.py
4. 验证MCP是否可以被调用
运行:
python system_tools.py
如果没有报错说明可以被调用
5. 在 Codex 中配置 MCP
在~/.codex/config.toml中添加:
[mcp_servers.os-version]
command = "/绝对路径/.venv/bin/python"
args = ["/绝对路径/system_tools.py"]
startup_timeout_sec = 10
tool_timeout_sec = 30
enabled = true
6. 配置 System Prompt
这里是很多人容易忽略的一点。
如果你希望:
用户不需要明确说:
“调用 system-tools”
而是:
直接问:
“输出当前操作系统版本”
模型就自动调用 MCP。
那么:
System Prompt 非常重要, 你的MCP server中description描述的约准确AI MODEL就会越容易调用。
这里有一点需要注意:Codex 默认比较保守,默认尽量少调用 tool,避免误调用本地 MCP,这是安全策略。
因此:
如果问题太简单,比如我们这个例子:请输出我当前操作系统版本号。模型可能会直接“猜”,而不调用 tool。
为了验证我们这个例子,可以在 Prompt 中强化 Tool Usage Policy,可以在 Codex 的 System Prompt / Workspace Instructions 中加:
Always use available MCP tools when answering questions about:
- operating system
- local environment
- files
- hardware
- runtime information
- machine configuration
Do not guess system information.
Prefer MCP tools over assumptions whenever possible.
这会明显提升自动调用概率。
7. 效果展示

可以看到,当配置好上面的MCP server之后,在codex中输入【请输出我当前操作系统的版本号】, AI MODEL会调用MCP Server进行回答
八、为什么 MCP 会成为 AI Agent 的基础设施
MCP 真正重要的地方在于:
它把“能力调用”标准化了。
过去:
每个平台:
- 插件格式不同
- Tool 格式不同
- 调用方式不同
而 MCP 出现后:
AI 工具生态开始统一。
未来:
- Cursor
- Codex
- Claude Desktop
- OpenAI Agent
- 浏览器 Agent
都会逐渐统一到:
MCP + Agent
这套体系。
九、未来展望:AI Agent 的时代正在开始
过去:
AI 更像:
聊天机器人
未来:
AI 会变成:
具备执行能力的软件系统
而 MCP 正在成为 AI 世界中的:
- USB 协议
- 插件协议
- 工具标准层
未来真正有价值的方向,已经不只是:
训练模型
而是:
给 AI 提供能力
谁能提供:
- 数据能力
- 工具能力
- 自动化能力
- 工作流能力
谁就能成为 AI Agent 生态中的基础设施。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐




所有评论(0)