乐于分享
好东西不私藏

MCP 协议入门:让你的 AI 应用轻松调用外部工具

MCP 协议入门:让你的 AI 应用轻松调用外部工具
大家好,我是CC哥。

有没有想过?当你用 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_serverServerToolfromtypingimportListclassMyMCPServer(Server):"""自定义 MCP 服务器"""asyncdefinitialize(selfparams):"""初始化服务器"""print("服务器初始化完成")return {}@Tool(name="calculate",description="执行数学计算",input_schema={"type""object","properties": {"expression": {"type""string","description""数学表达式,如 '2 + 3 * 4'"                }            },"required": ["expression"]        }    )asyncdefcalculate(selfexpressionstr->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(selfnamestr->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"])        )stdiowrite=stdio_transportsession=awaitexit_stack.enter_async_context(ClientSession(stdiowrite)        )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 (stdiowrite):session=ClientSession(stdiowrite)awaitsession.initialize()

7.2 处理资源文件

MCP 支持资源文件管理:

@Tool(name="read_file"description="读取文件内容")asyncdefread_file(selfpathstr->str:"""读取指定路径的文件"""withopen(path"r"encoding="utf-8"asf:returnf.read()

7.3 集成大模型

结合大模型实现智能工具调用:

fromanthropicimportAnthropicasyncdefprocess_with_llm(querystrsession):"""使用大模型处理查询并调用工具"""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 应用真正"动手"做事。


觉得文章有帮助?欢迎点赞、在看、转发,也欢迎关注我的公众号获取更多技术干货!