从 0 开发一个 MCP Server:
手把手教你构建 AI 工具调用能力

大模型再强,也无法直接查你的数据库、读本地文件或调用内部 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 vs OpenAI Function Calling vs LangChain Tools
对比维度 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 做对照说明。

setup.sh
# 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 Inspectornpx @modelcontextprotocol/inspector)提供可视化 UI;Claude Desktop 通过 claude_desktop_config.json 联调;Cursor 在 Settings → MCP 添加 Server 配置。

server.py
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_webread_file)。

复杂参数:用 Pydantic BaseModel 定义输入,支持默认值与字段描述:

tools/web_search.py
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 事件循环。错误处理优先返回结构化错误字典(含 errorcode 字段),而非裸抛异常;为长任务设置超时与权限校验。

04 Resources 与 Prompts:数据供给与可复用模板

Resource vs Tool:Resource 是数据提供者(AI 读取),Tool 是动作执行者(AI 调用)。Resource 通过 URI 寻址:file://http://custom://

resources.py
@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/plainapplication/json)、二进制(图片、PDF)、流式(实时行情)。文件系统资源服务器可实现:列出目录、读取文件、订阅文件变化(资源更新通知)。

Prompts 模板:预定义可复用提示词片段,支持动态参数注入,提升团队 Prompt 一致性。可定义包含 userassistant 角色的多轮模板,适用于代码审查、面试模拟、调试助手等场景。

05 HTTP 远程传输、调试测试与生产部署

stdio vs HTTP + SSE 选型
特性 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-filesystemmcp-server-githubmcp-server-brave-searchmcp-server-postgresmcp-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

  1. 选定语言与传输模式:个人开发用 Python + stdio;团队共享选 HTTP + Streamable HTTP。
  2. 搭建项目骨架:按 tools / resources / prompts 分模块,安装 MCP Inspector。
  3. 实现 Hello World 并联调:在 Cursor 或 Claude Desktop 验证工具可见、可调用。
  4. 扩展五类 Tools + Resource:从低风险只读工具起步,逐步加写入与外部 API。
  5. 编写单元测试与 Docker 镜像:CI 中跑 stdio 集成测试,构建可部署镜像。
  6. 部署到 7×24 在线环境:本地笔记本休眠会断开 MCP 会话;纯 Linux VPS 缺少 macOS 沙箱与 Xcode 生态。对需要稳定 MCP 基础设施、多成员共享 Agent 与 iOS CI 的生产场景,CALMVPS 裸金属 Mac 租赁 通常是更优解:独占 M4/M4 Pro、约 120 秒交付、弹性日/周/月/季租。机型见 定价页,远程接入见 帮助中心

MCP 是 AI 工具化的标准协议——掌握它,你就拥有了为任意 LLM 扩展真实世界能力的基础设施技能。你打算用 MCP 开发什么工具?从今天的 Hello World 开始。