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

约 25 分钟阅读 · MACCOME

若你有 Python 或 TypeScript 基础,却苦于 Claude / Cursor 无法查数据库、调内部 API、读写项目文件——本文给出可独立部署的生产级 MCP Server 全流程。① 先搞懂 MCP 协议(Function Calling → Plugins → MCP 演进、JSON-RPC、三大原语);② 用 FastMCP 从 Hello World 到 Tools / Resources / Prompts 全栈实现;③ 经 MCP Inspector 调试、HTTP+SSE 远程部署、Docker 上线,并完成 ChromaDB 个人知识库实战。协议层「为何是 AI 时代 HTTP」见MCP 协议解读;与Agent Skill 指南互补。

六种 MCP 开发痛点(2026 年)

  1. 跳过协议直接写 SDK:不懂 tools/list 与 JSON-RPC 生命周期,「工具不出现」排错动辄数小时。
  2. 用 REST 路由冒充 MCP:Flask 包一层不等于动态发现与 JSON Schema 自描述。
  3. 把所有能力塞进 Tools:只读文件应走 Resources;可复用工作流应走 Prompts——混用导致权限与缓存混乱。
  4. 只在 Cursor 里测、不用 MCP Inspector:Inspector 可隔离 Server 与 Host 配置问题,查看原始 RPC 载荷。
  5. 在会睡眠的笔记本上跑 HTTP+SSE:合盖即断流;生产需 7×24 在线节点。
  6. 密钥硬编码进源码:API Key 应经环境变量或 Host 托管鉴权,禁止提交 Git。

大模型「不够聪明」的根因之一:缺乏访问外部工具与实时数据的能力。你希望让 AI 查库、调 API、操作文件——这正是 MCP(Model Context Protocol)要标准化的通信层。

一、什么是 MCP?先搞懂协议再写代码

1.1 MCP 的诞生背景

工具调用能力演进路径:Function Calling → Plugins → MCP。Anthropic 于 2024 年 11 月开源 MCP,解决 AI 与外部工具之间缺乏统一协议的问题。2026 年 OpenAI、Google、Microsoft 全面入局,生态已超 10,000 个 Server(详见协议深度文)。

1.2 协议架构:Client ↔ Server

Client(Claude Desktop、Cursor、自定义客户端)与 Server(你开发的部分)经 JSON-RPC 2.0 通信。Server 向下对接三大核心能力:

  • Tools:AI 可调用的函数(搜索、计算、数据库查询)
  • Resources:AI 可读取的资源(文件、URL、数据流)
  • Prompts:预定义的提示词模板

1.3 通信机制

  • 传输:stdio(本地进程)、HTTP + SSE(远程服务)
  • 生命周期:初始化握手 → 能力协商 → 请求/响应 → 关闭
对比维度MCPOpenAI Function CallingLangChain Tools
标准化开放协议标准厂商私有框架绑定
传输stdio / HTTPHTTPHTTP
跨模型部分
Resources / Prompts原生支持不支持不支持
生态快速增长(2026 万级 Server)成熟成熟

二、开发环境准备

2.1 选择语言

  • Python(推荐新手):官方 SDK mcp / FastMCP,简洁易上手
  • TypeScript(前端/全栈):@modelcontextprotocol/sdk

本文以 Python FastMCP 为主,TypeScript 做对照说明。

bash
# Python
python -m venv .venv && source .venv/bin/activate
pip install "mcp[cli]" fastmcp httpx pydantic uvicorn

# TypeScript(对照)
npm init -y && npm install @modelcontextprotocol/sdk

2.2 推荐项目结构

text
my-mcp-server/
├── server.py            # 主入口
├── tools/               # 计算器、搜索、HTTP 等
├── resources/           # 文件读取
├── prompts/             # 提示词模板
├── tests/test_tools.py
├── pyproject.toml
└── README.md

2.3 调试工具

  • MCP Inspectornpx @modelcontextprotocol/inspector 官方调试 UI
  • Claude Desktopclaude_desktop_config.json 联调
  • Cursor~/.cursor/mcp.json 或项目级 .cursor/mcp.json

三、第一个 MCP Server:Hello World

python
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()
bash
python server.py
# 或 Inspector 调试
npx @modelcontextprotocol/inspector python server.py

3.3 Cursor / Claude Desktop 接入

json
{
  "mcpServers": {
    "my-first-server": {
      "command": "/path/to/.venv/bin/python",
      "args": ["/path/to/server.py"]
    }
  }
}

四、Tools:开发可被 AI 调用的工具

函数签名即文档:参数类型、返回类型、docstring 会生成 JSON Schema 供模型阅读。支持 Pydantic 复杂入参:

python
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]:
    """执行网络搜索,返回相关结果列表"""
    ...

4.3 五个实用工具示例

  1. 计算器:安全求值数学表达式
  2. 文件读写:限定目录内的 read/write
  3. HTTP 请求:调用外部 REST API
  4. 数据库查询:只读 SQL(参数化防注入)
  5. 时间工具:当前时间、时区转换

4.4 异步工具

python
import httpx

@mcp.tool()
async def fetch_url(url: str) -> str:
    """获取指定 URL 的内容"""
    async with httpx.AsyncClient(timeout=30.0) as client:
        response = await client.get(url)
        return response.text

4.5 错误处理最佳实践

  • 返回结构化错误信息 vs 直接抛异常——模型需可读文案
  • 为慢 IO 设置超时;破坏性操作在 docstring 中明确标注
  • 路径与 SQL 做权限校验与白名单

五、Resources:让 AI 读取动态内容

Resource 是数据提供者,Tool 是动作执行者。URI 寻址:file://http://custom://

python
# 静态资源
@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:
    user = db.query_user(user_id)
    return json.dumps(user)

资源类型:文本(text/plainapplication/json)、二进制(图片、PDF)、流式实时数据。文件系统实战:列出目录、读取内容、可选订阅文件变化。

六、Prompts:可复用提示词模板

预定义片段,支持动态参数注入,提升一致性与可维护性。多轮模板可包含 userassistant 角色(面试模拟、代码调试助手等场景)。

python
from mcp.types import PromptMessage, TextContent

@mcp.prompt()
def code_review_prompt(language: str, code: str) -> list[PromptMessage]:
    """代码审查提示词模板"""
    return [
        PromptMessage(
            role="user",
            content=TextContent(
                type="text",
                text=f"请对以下 {language} 代码审查:质量、Bug、安全、性能。\n```{language}\n{code}\n```"
            )
        )
    ]
原语RPC 方法典型场景
Toolstools/list, tools/call查库、发 Webhook、写文件
Resourcesresources/list, resources/read只读文档、配置快照
Promptsprompts/list, prompts/get代码审查、事故复盘模板

七、HTTP 传输模式(远程 MCP Server)

特性stdioHTTP + SSE
部署本地进程远程服务器
延迟极低依赖网络
多客户端不支持支持
适用本地 Cursor / ClaudeSaaS / 团队共享
python
mcp = FastMCP("remote-server")

if __name__ == "__main__":
    mcp.run(transport="streamable-http", host="0.0.0.0", port=8000)

生产安全:Bearer Token、API Key 中间件、CORS、请求频率限制。2026 年初调研显示约 1,000 个 MCP Server 公网暴露且未鉴权——切勿裸奔上线。

八、调试与测试

MCP Inspector 流程:启动 → 测试 tools/call → 查看请求/响应日志 → 模拟错误场景。单元测试示例:

python
import pytest
from mcp.client.session import ClientSession
from mcp.client.stdio import StdioServerParameters, stdio_client

@pytest.mark.asyncio
async def test_calculator_tool():
    server_params = StdioServerParameters(command="python", args=["server.py"])
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            result = await session.call_tool("calculate", {"expression": "2 + 2"})
            assert result.content[0].text == "4"
错误原因解决方案
工具未出现在 AI 中配置路径错误检查 mcp.json / config.json 路径
JSON 序列化失败返回类型不支持转为 str 或 dict
超时断开工具执行太慢异步 + 超时控制
权限拒绝文件路径受限配置允许访问目录白名单

九、生产部署

Docker 容器化、Railway / Render 一键部署、AWS Lambda / Cloud Run Serverless、自建 VPS + Nginx 反向代理。监控:结构化日志、Prometheus 工具调用指标、Sentry 错误告警、健康检查接口。版本管理:声明 MCP 协议版本、向后兼容的工具升级、能力协商。

dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "server.py"]

十、实战:个人知识库 MCP Server

需求:让 AI 搜索本地 Markdown 笔记、语义检索、创建/更新笔记。

技术选型:ChromaDB / Qdrant 向量库、text-embedding-3-small 嵌入、watchfiles 监听文件变化。

  1. 索引工具:扫描 ~/notes/**/*.md 写入向量库
  2. 语义搜索工具:返回相关片段与来源路径
  3. 笔记写入工具:追加带时间戳条目(Host 侧确认)
  4. 文件资源服务note://{slug}resources/read 暴露

效果:在 Cursor 中问「我上周关于 MCP 记了什么?」——AI 调用搜索工具返回笔记片段。官方资源:modelcontextprotocol.ioPython SDKMCP Inspector

十一、MCP 生态与未来展望(2026)

  • 优质 Servermcp-server-filesystemmcp-server-githubmcp-server-brave-searchmcp-server-postgresmcp-server-slack
  • 趋势:主流 AI 客户端原生 MCP、Marketplace 发展、企业级安全标准(AAIF / Linux Foundation)
  • 学习路径:精读协议规范 → 发布公开 Server → 探索 MCP + Agent 组合 → 贡献开源生态

MCP 与 Agent Skill(SKILL.md) 互补:Skill 是宿主内能力包;MCP 是跨宿主工具协议。

八步落地:从本地验证到生产上线

  1. 读协议:Host / Client / Server 与三大原语(本篇 + 协议文)。
  2. 搭环境:venv + FastMCP + Inspector 可启动。
  3. Hello World:一个 Tool,Inspector 验证 tools/list
  4. 五类工具:计算器、文件、HTTP、DB、时间——覆盖真实业务。
  5. Resources + Prompts:只读文档走 Resource;周报复用走 Prompt。
  6. 接入 Cursor / Claude Desktop:真会话里测多步任务。
  7. HTTP+SSE + 鉴权:团队共享时上 TLS 与 Token。
  8. Docker + 7×24 节点:勿依赖会睡眠的笔记本。

三条可写进技术评审的硬核数据

  • 10,000+ MCP Server(2026)——写一次,Cursor / Claude Desktop / VS Code Continue 等多 Host 可用。
  • 企业集成成本降 38–55%——同一 Server 在 Claude → GPT → Gemini 间切换无需重写工具层。
  • Apple Silicon 本地 STDIO 往返通常 <50 ms;HTTP+SSE 局域网额外 5–30 ms——延迟敏感 Agent 需按传输方式选型。

结语:MCP 是 AI 工具化的标准协议

本地 STDIO 适合 Hello World;生产会在三处翻车:合盖杀子进程与 SSE、共享开发机 Python 漂移、多步 Agent 需数小时不间断在线。笔记本与 Docker Desktop 混跑 HTTP Server 长期稳定性不足;团队共用的开发机权限边界模糊,也不适合承载生产级 MCP 会话。

对需要稳定 MCP 长连接与 Agent 编排的环境,把 Server 落在 MACCOME Mac mini(M4 / M4 Pro)独占云主机上,通常比在本地与睡眠策略搏斗更省总成本。公开档位见租赁价格说明,接入见帮助中心

掌握 MCP Server 开发,是 2026 年 AI 工程师的核心竞争力之一。你打算用 MCP 开发什么工具?从本篇的 Hello World 开始,下周就能在 Cursor 里用上自己的第一个 Server。

常见问题

Python FastMCP 和 TypeScript MCP SDK 该选哪个?

后端优先 FastMCP:装饰器注册三大原语、内置 STDIO/HTTP+SSE、Cursor 兼容好。Node 团队用 @modelcontextprotocol/sdk 封装现有 API。

MCP Tools、Resources、Prompts 有什么区别?

Tools 执行有副作用的操作;Resources 提供只读 URI 内容;Prompts 返回可注入对话的模板——见上文第四至六节。

和 Agent Skill(SKILL.md)什么关系?

Skill 是 Cursor 内能力包;MCP 是跨宿主工具标准。详见Agent Skill 指南

生产环境 MCP Server 该跑在哪?

避免笔记本合盖断连。MACCOME M4/M4 Pro 云 Mac 适合 7×24 MCP 与 Agent。报价见租赁价格页