📦 一、自建 MCP Server 实践指南
MCP 协议的魅力不仅在于模型调用外部工具的能力,更在于它开放、语言无关、适配灵活。本节通过构建一个天气查询服务,实战掌握 MCP Server 的开发流程。
✅ 技术栈选择与环境准备
- 语言:采用 Python,因其使用广泛、开发门槛低,适合快速入门。MCP 协议本身是语言无关的。
- Python 版本要求:
- macOS:≥ 3.10,建议使用 Homebrew 安装。
- Windows:官网下载并安装最新版 Python。
- 工具链:
uv:现代化 Python 包管理工具。- VS Code:主力开发编辑器。
- Cine 插件:用于测试 MCP Server 的 VS Code 插件。
🧱 步骤流程
-
创建项目
uv new weather cd weather uv venv source .venv/bin/activate # Windows 用 .venv\Scripts\activate -
安装依赖
uv add mcp-cli httpx -
编辑核心代码(weather.py)
- 使用
fast_mcp初始化 MCP Server。 - 定义请求 NWS(美国气象局)的辅助函数。
- 实现并注册两个工具函数
get_alerts和get_forecast。 - 使用
@mcp.tool()装饰器注册工具,注释(docstring)将被自动解析为工具描述和参数定义。 - 以
transport="stdio"启动 MCP Server。
- 使用
-
运行示例:
uv run weather.py
🧪 二、分析 MCP 输入输出通信机制
📥 如何查看 MCP 交互过程?
默认使用 Cine 测试时,输入输出是被隐藏的。为观察底层通信,可编写 mcplogger.py 脚本,作为中间人转发 stdin/stdout 数据并记录日志。
python mcplogger.py uv run weather.py
🧾 日志分析(MCP.IO.log)
日志分为三个阶段:
1. 握手阶段
-
客户端发起问候
{ "type": "hello", "client": "Cine", "protocol_version": "2024-11-05" } -
服务器回应
{ "type": "hello_reply", "server": "WEATHER", "version": "1.0.0", "capabilities": {...} }
2. 工具发现阶段
客户端请求工具列表,服务器返回注册的所有 tool 定义,包括:
namedescription(从 docstring 提取)input_schema(基于 JSON Schema 规范)
3. 工具调用阶段
当模型需要执行功能时:
- 客户端向 MCP Server 发送调用请求,包含 tool 名称及参数
- MCP Server 执行并返回结构化结果(如天气描述文本)
🧑💻 三、跳过 Host,手动交互 MCP Server
由于 MCP 协议采用 stdin/stdout 通信格式,理解协议结构后,你可以在终端中手动构造 JSON 与 MCP Server 交互,而无需 Cine、ChatStudio 等 MCP Host 工具。
这也说明 MCP Server 是独立于模型和客户端存在的。你甚至可以构造脚本将其集成到非 AI 系统中使用。
🧠 四、重新理解 MCP 协议的本质
MCP 实际定义了什么?
- 工具注册机制:告知 Host 当前 MCP Server 有哪些工具(Tool)可用。
- 调用约定:定义工具的参数格式、执行方式、结果格式。
什么不属于 MCP 协议?
- ❌ 模型交互机制(Function Calling / XML 等)
- ❌ 用户输入解析方式
- ❌ 自然语言与结构化数据的映射流程
核心观点:
“MCP协议规定的是函数的发现与调用,而不是模型如何理解这些函数。”
换句话说:MCP 只是帮助模型感知“这个世界上还有什么工具可以用”,而不干涉模型如何进行语言解析。
✅ 总结
本教程从实战到原理,逐步揭示了 MCP 的工作机制与核心理念:
- MCP Server 是一个通用、语言无关的函数服务平台
- MCP 协议关注的是工具层的注册与调用,不规定模型如何处理上下文
- 理解 MCP 协议本质,可以实现更灵活、更高性能的大模 型插件体系
🚀 下一步建议:尝试开发你自己的工具(如文件检索、数据库查询等),将其注册为 MCP Server,扩展大模型的实用能力。
评论区