大模型再强,也无法直接查你的数据库、读本地文件或调用内部 API——AI 缺的不是智商,而是连接真实世界的手脚。你希望 Claude、GPT 或 Cursor 里的 Agent 能搜索笔记、执行 SQL、触发 Webhook,这正是 MCP(Model Context Protocol) 要解决的问题。
本文面向有一定 Python 或 TypeScript 基础的后端 / AI 工程师,从协议原理到生产部署,手把手带你开发并上线一个可用的 MCP Server。读完应能独立实现 Tools、Resources、Prompts 三大能力,完成 Cursor / Claude Desktop 联调,并跑通个人知识库实战项目。
01 MCP 协议原理:从 Function Calling 到统一工具调用
痛点拆解:现有 AI 模型「不够聪明」的根源,往往是缺乏访问外部工具与实时数据的标准通道。每家 LLM 的 Function Calling 格式不同,换模型就要重写集成层;LangChain Tools 绑定框架,无法跨 IDE 复用。
- 演进路径:Function Calling(厂商私有)→ ChatGPT Plugins(平台锁定)→ MCP(开放协议标准)。Anthropic 于 2024 年 11 月开源 MCP,目标是用一套 JSON-RPC 规范统一 AI 与外部系统的通信。
- 架构角色:MCP Client 位于 AI 侧(Claude Desktop、Cursor、自定义客户端);MCP Server 是你开发的能力提供方。Server 向下对接数据库、API、文件系统,向上暴露三大核心能力:Tools(可调用函数)、Resources(可读取数据)、Prompts(预定义提示词模板)。
- 通信机制:底层基于 JSON-RPC 2.0;传输支持 stdio(本地子进程,延迟极低)与 HTTP + SSE / Streamable HTTP(远程多客户端)。生命周期为:初始化握手 → 能力协商(
tools/list等)→ 请求/响应 → 优雅关闭。
| 对比维度 | MCP | OpenAI Function Calling | LangChain Tools |
|---|---|---|---|
| 标准化程度 | 开放协议,跨模型 | 厂商私有 | 框架绑定 |
| 传输方式 | stdio / HTTP | HTTP | HTTP |
| Resources / Prompts | 原生支持 | 不支持 | 不支持 |
| 生态工具 | 2026 年 10000+ Server | 成熟但锁定 OpenAI | 成熟但锁定框架 |
写一次 MCP Server,Cursor、Claude Desktop、VS Code 等兼容客户端均可调用——这才是 AI 工具化的「USB-C 时刻」。
02 开发环境搭建与第一个 Hello World MCP Server
语言选型:Python(官方 SDK mcp,FastMCP 简洁,推荐新手);TypeScript(@modelcontextprotocol/sdk,适合前端 / 全栈)。本文以 Python 为主,TypeScript 做对照说明。
# Python 环境
python -m venv .venv
source .venv/bin/activate
pip install mcp
# TypeScript 对照
npm init -y
npm install @modelcontextprotocol/sdk
推荐项目结构:server.py(主入口)、tools/(计算器、搜索等)、resources/(文件读取)、prompts/(模板)、tests/(单元测试)、pyproject.toml。
调试工具:官方 MCP Inspector(npx @modelcontextprotocol/inspector)提供可视化 UI;Claude Desktop 通过 claude_desktop_config.json 联调;Cursor 在 Settings → MCP 添加 Server 配置。
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("my-first-server")
@mcp.tool()
def say_hello(name: str) -> str:
"""向指定的人打招呼"""
return f"Hello, {name}! 这是你的第一个 MCP 工具。"
if __name__ == "__main__":
mcp.run()
运行 python server.py,或用 npx @modelcontextprotocol/inspector python server.py 在 Inspector 中验证 say_hello 出现在工具列表。配置 Cursor / Claude Desktop 后,AI 上下文应能发现并调用该工具。
03 Tools 开发:五类实用工具、异步与错误处理
工具基本结构:函数签名即文档——参数类型、返回类型、docstring 会被转为 JSON Schema 供 AI 理解。命名建议用 snake_case,动词开头(search_web、read_file)。
复杂参数:用 Pydantic BaseModel 定义输入,支持默认值与字段描述:
from pydantic import BaseModel, Field
class SearchInput(BaseModel):
query: str = Field(description="搜索关键词")
max_results: int = Field(default=5, description="最多返回结果数")
@mcp.tool()
def web_search(input: SearchInput) -> list[dict]:
"""执行网络搜索,返回相关结果列表"""
...
五类实战工具建议:
- 计算器:安全解析数学表达式(避免
eval注入)。 - 文件读写:限定允许访问的目录白名单。
- HTTP 请求:调用外部 REST API,注意超时与响应大小限制。
- 数据库查询:只读 SQL + 参数化查询,禁止 DDL。
- 时间工具:当前时间、时区转换,Agent 排程必备。
异步工具:IO 密集型操作用 async def + httpx.AsyncClient,避免阻塞 stdio 事件循环。错误处理优先返回结构化错误字典(含 error、code 字段),而非裸抛异常;为长任务设置超时与权限校验。
04 Resources 与 Prompts:数据供给与可复用模板
Resource vs Tool:Resource 是数据提供者(AI 读取),Tool 是动作执行者(AI 调用)。Resource 通过 URI 寻址:file://、http://、custom://。
@mcp.resource("config://app-settings")
def get_app_settings() -> str:
return json.dumps({"version": "1.0", "env": "production"})
@mcp.resource("user://{user_id}/profile")
def get_user_profile(user_id: str) -> str:
return json.dumps(db.query_user(user_id))
资源类型:文本(text/plain、application/json)、二进制(图片、PDF)、流式(实时行情)。文件系统资源服务器可实现:列出目录、读取文件、订阅文件变化(资源更新通知)。
Prompts 模板:预定义可复用提示词片段,支持动态参数注入,提升团队 Prompt 一致性。可定义包含 user 与 assistant 角色的多轮模板,适用于代码审查、面试模拟、调试助手等场景。
05 HTTP 远程传输、调试测试与生产部署
| 特性 | stdio | HTTP + SSE |
|---|---|---|
| 部署 | 本地进程 | 远程服务器 |
| 多客户端 | 不支持 | 支持团队共享 |
| 适用场景 | 个人本地工具 | SaaS / 团队 MCP 服务 |
远程部署示例:FastMCP("remote-server", transport="streamable-http"),配合 uvicorn 监听 0.0.0.0:8000。生产须加固:Bearer Token、API Key 中间件、CORS 白名单、请求频率限制。
调试:MCP Inspector 可测试 Tools 调用、查看 JSON-RPC 日志、模拟错误。单元测试通过 mcp.client.stdio 启动子进程,session.call_tool 断言返回值。
| 错误现象 | 原因 | 解决方案 |
|---|---|---|
| 工具未出现在 AI 中 | 配置路径错误 | 检查 mcp.json / claude_desktop_config.json |
| JSON 序列化失败 | 返回类型不支持 | 转为 str 或 dict |
| 超时断开 | 工具执行过慢 | 改异步 + 设置超时 |
生产部署:Docker 容器化(Python 3.12-slim 基础镜像);Railway / Render 适合个人项目;AWS Lambda / Cloud Run 适合 Serverless;自建 VPS 配合 Nginx 反向代理。监控建议:结构化日志、Prometheus 工具调用指标、Sentry 错误告警、/health 健康检查。版本管理须声明 MCP 协议版本,工具升级保持向后兼容。
06 个人知识库实战、生态数据与六步落地
实战项目:个人知识库 MCP Server——让 AI 搜索本地 Markdown 笔记、语义检索、创建与更新笔记。技术选型:ChromaDB / Qdrant 作向量库,text-embedding-3-small 作嵌入模型,watchfiles 监听文件变化自动重建索引。核心实现:笔记索引工具、语义搜索工具、笔记写入工具、文件 Resource 服务。在 Cursor 中问「我上周记录了什么关于 MCP 的笔记?」,Agent 调用搜索工具返回相关片段。
2026 优质 MCP Server 推荐:mcp-server-filesystem、mcp-server-github、mcp-server-brave-search、mcp-server-postgres、mcp-server-slack。主流客户端(Cursor、Claude Desktop、VS Code、Gemini)均已原生支持 MCP;企业级安全标准与 MCP Marketplace 生态持续成熟。
可引用数据:
- 协议发布:Anthropic 2024 年 11 月开源 MCP,底层 JSON-RPC 2.0,2026 年治理权移交 Linux Foundation AAIF。
- 生态规模:公开 MCP Server 已超过 10,000 个;Python SDK 与 TypeScript SDK 为官方维护主线(发版后请打开 GitHub 核对最新版本)。
- 传输演进:Streamable HTTP 逐步替代纯 SSE,更适合无状态负载均衡与云原生部署。
官方文档与 SDK(发版后请再次打开链接核对):
https://modelcontextprotocol.io
https://github.com/modelcontextprotocol/python-sdk
https://github.com/modelcontextprotocol/typescript-sdk
https://github.com/modelcontextprotocol/inspector
- 选定语言与传输模式:个人开发用 Python + stdio;团队共享选 HTTP + Streamable HTTP。
- 搭建项目骨架:按 tools / resources / prompts 分模块,安装 MCP Inspector。
- 实现 Hello World 并联调:在 Cursor 或 Claude Desktop 验证工具可见、可调用。
- 扩展五类 Tools + Resource:从低风险只读工具起步,逐步加写入与外部 API。
- 编写单元测试与 Docker 镜像:CI 中跑 stdio 集成测试,构建可部署镜像。
- 部署到 7×24 在线环境:本地笔记本休眠会断开 MCP 会话;纯 Linux VPS 缺少 macOS 沙箱与 Xcode 生态。对需要稳定 MCP 基础设施、多成员共享 Agent 与 iOS CI 的生产场景,CALMVPS 裸金属 Mac 租赁 通常是更优解:独占 M4/M4 Pro、约 120 秒交付、弹性日/周/月/季租。机型见 定价页,远程接入见 帮助中心。
MCP 是 AI 工具化的标准协议——掌握它,你就拥有了为任意 LLM 扩展真实世界能力的基础设施技能。你打算用 MCP 开发什么工具?从今天的 Hello World 开始。