有没有想过?当你用 Claude Code 或 Cursor 写代码时,它们能调用计算器、搜索 GitHub、读取本地文件,这些能力是怎么实现的?答案就是 MCP —— Model Context Protocol。
我花了整整两天时间,翻遍了 MCP 官方文档、GitHub 仓库、以及各大 AI 工具的集成案例,把这件事从头到尾捋了一遍。
01、什么是 MCP 协议
MCP(Model Context Protocol)是一个开源标准,定义了 AI 应用如何连接外部系统。简单说,MCP 就是 AI 世界的 USB-C 接口——统一标准,即插即用。

在 MCP 出现之前,AI 应用和外部工具的集成是个大难题。如果你有 5 个 AI 应用和 10 个工具,就需要写 50 个自定义集成。这就是 N × M 的问题——每增加一个应用或工具,集成工作量就成倍增长。
MCP 把这个问题简化成了 N + M。每个 AI 应用实现一次 MCP 客户端,每个工具实现一次 MCP 服务端,就能自动互联互通。
02、为什么值得学习 MCP
2.1 主流 AI 工具全面支持
MCP 已经获得了行业主流工具的广泛支持:
| 工具 | 角色 | 支持状态 |
|---|---|---|
| Claude Code | 客户端 | ✅ 原生支持 |
| Cursor | 客户端 | ✅ 原生支持 |
| OpenAI Codex | 客户端 | ✅ 原生支持 |
| Google Gemini | 客户端 | ✅ 原生支持 |
| JetBrains AI Assistant | 客户端 | ✅ 原生支持 |
| Visual Studio Code | 客户端 | ✅ 原生支持 |
2.2 掌握 MCP 的职业价值
随着 AI Agent 时代的到来,工具调用能力已经成为 AI 开发者的必备技能。掌握 MCP,意味着:
通用能力:一次学习,适用于所有支持 MCP 的 AI 工具
快速集成:无需为每个 AI 平台单独开发工具集成
生态红利:接入 MCP 生态,自动获得海量工具支持
未来保障:MCP 正在成为 AI 工具集成的事实标准

03、环境准备
开始之前,先把开发环境搭好。
3.1 安装 Python
MCP 支持 Python 和 TypeScript,我们以 Python 为例:
# 检查 Python 版本,需要 3.10+python --version# 如果版本不够,推荐使用 pyenv 管理版本# macOS/Linuxbrew install pyenvpyenv install 3.12pyenv global 3.12# Windows# 从 https://www.python.org/downloads/ 下载安装
3.2 安装 uv(推荐)
uv 是新一代 Python 包管理器,比 pip 快得多:
# macOS/Linuxcurl-LsSf https://astral.sh/uv/install.sh | sh# Windows PowerShellpowershell -ExecutionPolicy RemoteSigned -Command"irm https://astral.sh/uv/install.ps1 | iex"
3.3 创建项目并安装依赖
# 创建项目目录uv init mcp-democd mcp-demo# 创建虚拟环境uv venv# 激活虚拟环境# macOS/Linuxsource .venv/bin/activate# Windows.venv\Scripts\activate# 安装 MCP SDK 和其他依赖uv add mcp python-dotenv
04、MCP 协议基础
4.1 核心概念
MCP 采用客户端-服务端架构:
MCP Client:AI 应用(如 Claude、Cursor),负责发起请求
MCP Server:工具提供者,负责执行工具并返回结果
Transport:通信方式,支持 stdio 和 HTTP+SSE
Tools:服务端暴露的工具,每个工具定义了名称、描述和输入输出格式
4.2 通信机制
MCP 基于 JSON-RPC 2.0 协议进行通信。核心消息类型包括:
请求消息:
{"jsonrpc": "2.0","id": "1","method": "listTools","params": {}}
响应消息:
{"jsonrpc": "2.0","id": "1","result": {"tools": [...] }}
4.3 传输方式
MCP 支持两种传输方式:
| 传输方式 | 适用场景 | 特点 |
|---|---|---|
| stdio | 本地开发、IDE 集成 | 通过标准输入输出通信,简单直接 |
| HTTP+SSE | 远程服务、生产环境 | 通过 HTTP 通信,支持流式响应 |
05、实战教程:构建第一个 MCP 服务器
5.1 创建服务器文件
创建 server.py:
importasynciofrommcpimportcreate_server, Server, ToolfromtypingimportListclassMyMCPServer(Server):"""自定义 MCP 服务器"""asyncdefinitialize(self, params):"""初始化服务器"""print("服务器初始化完成")return {}@Tool(name="calculate",description="执行数学计算",input_schema={"type": "object","properties": {"expression": {"type": "string","description": "数学表达式,如 '2 + 3 * 4'" } },"required": ["expression"] } )asyncdefcalculate(self, expression: str) ->str:"""计算数学表达式"""try:result=eval(expression)returnf"计算结果:{expression} = {result}"exceptExceptionase:returnf"计算失败:{str(e)}"@Tool(name="greet",description="向用户打招呼",input_schema={"type": "object","properties": {"name": {"type": "string","description": "用户名" } },"required": ["name"] } )asyncdefgreet(self, name: str) ->str:"""打招呼"""returnf"你好,{name}!欢迎使用 MCP 服务器。"asyncdefmain():"""启动服务器"""server=MyMCPServer()awaitcreate_server(server).serve()if__name__=="__main__":asyncio.run(main())
5.2 运行服务器
python server.py服务器启动后,会监听标准输入输出,等待客户端连接。
5.3 创建客户端测试
创建 client.py:
importasynciofrommcpimportClientSessionfrommcp.client.stdioimportstdio_clientfromcontextlibimportAsyncExitStackasyncdefmain():"""测试 MCP 客户端"""asyncwithAsyncExitStack() asexit_stack:stdio_transport=awaitexit_stack.enter_async_context(stdio_client(command="python", args=["server.py"]) )stdio, write=stdio_transportsession=awaitexit_stack.enter_async_context(ClientSession(stdio, write) )awaitsession.initialize()tools_response=awaitsession.list_tools()print("可用工具:", [tool.namefortoolintools_response.tools])calc_result=awaitsession.call_tool(tool_name="calculate",arguments={"expression": "2 + 3 * 4"} )print("计算结果:", calc_result.content)greet_result=awaitsession.call_tool(tool_name="greet",arguments={"name": "二哥"} )print("问候结果:", greet_result.content)if__name__=="__main__":asyncio.run(main())
5.4 运行客户端
python client.py预期输出:
可用工具: ['calculate', 'greet']计算结果: 计算结果:2 + 3 * 4 = 14问候结果: 你好,二哥!欢迎使用 MCP 服务器。
06、常见问题与解决方案
6.1 服务器启动失败
问题:python server.py 后没有任何反应
原因:MCP 服务器使用 stdio 模式,需要客户端连接才能输出信息
解决方案:确保客户端正确连接,或者添加日志输出到 stderr
6.2 工具调用超时
问题:调用工具时超时
原因:网络问题或服务端执行时间过长
解决方案:
result=awaitasyncio.wait_for(session.call_tool(tool_name="calculate", arguments={}),timeout=30)
6.3 权限问题
问题:服务器无法访问某些资源
原因:运行服务器的用户权限不足
解决方案:确保服务器以正确的用户权限运行,或配置环境变量
6.4 JSON 解析错误
问题:客户端收到 JSON 解析错误
原因:服务端输出了非 JSON 内容(如 print 语句)
解决方案:服务端不要使用 print,改用 logger 输出到 stderr

07、高级应用
7.1 使用 HTTP+SSE 传输
生产环境推荐使用 HTTP+SSE 传输:
# server_http.pyfrommcpimportcreate_serverfrommcp.server.httpimporthttp_serverasyncdefmain():server=MyMCPServer()awaithttp_server(server).serve(host="0.0.0.0",port=8080 )if__name__=="__main__":asyncio.run(main())
客户端连接:
# client_http.pyfrommcp.client.httpimporthttp_clientasyncdefmain():asyncwithhttp_client("http://localhost:8080") as (stdio, write):session=ClientSession(stdio, write)awaitsession.initialize()
7.2 处理资源文件
MCP 支持资源文件管理:
@Tool(name="read_file", description="读取文件内容")asyncdefread_file(self, path: str) ->str:"""读取指定路径的文件"""withopen(path, "r", encoding="utf-8") asf:returnf.read()
7.3 集成大模型
结合大模型实现智能工具调用:
fromanthropicimportAnthropicasyncdefprocess_with_llm(query: str, session):"""使用大模型处理查询并调用工具"""anthropic=Anthropic()tools_response=awaitsession.list_tools()tools= [{"name": t.name,"description": t.description,"input_schema": t.input_schema } fortintools_response.tools]response=anthropic.messages.create(model="claude-sonnet-4-20250514",max_tokens=1000,messages=[{"role": "user", "content": query}],tools=tools )ifresponse.stop_reason=="tool_use":fortool_useinresponse.content:ifhasattr(tool_use, "tool_use"):result=awaitsession.call_tool(tool_name=tool_use.tool_use.name,arguments=tool_use.tool_use.input )print("工具执行结果:", result.content)
08、未来展望
8.1 MCP 发展趋势
标准化进程加速:MCP 正在成为 AI 工具集成的事实标准
生态扩展:越来越多的工具和 AI 应用加入 MCP 生态
安全增强:更完善的认证和权限管理机制
性能优化:更快的通信协议和更高效的数据传输
8.2 扩展方向
多模态支持:支持图像、音频等多模态数据传输
流式工具调用:支持工具执行过程中的实时数据流
工具发现机制:自动发现和推荐可用的 MCP 服务器
版本管理:完善的协议版本控制和向后兼容
总结
MCP 协议为 AI 应用与外部工具的集成提供了统一标准,解决了 N × M 的集成难题。掌握 MCP,你就能轻松构建具备丰富工具能力的 AI 应用。
现在就动手试试吧!创建你的第一个 MCP 服务器,让 AI 应用真正"动手"做事。
觉得文章有帮助?欢迎点赞、在看、转发,也欢迎关注我的公众号获取更多技术干货!
夜雨聆风