待处理

MCP 开发实践与示例代码

MCP 让 AI 从“对话”进化为“行动”,开发者只需少量代码即可让模型具备真实世界操作能力。

模型上下文协议(MCP)让大语言模型(LLM, Large Language Model)具备直接操作外部系统的能力,使智能体从对话系统进化为行动系统。本章通过示例展示如何从零构建、连接与部署 MCP 服务器和客户端,涵盖从工具开发、远程调用、IDE 集成到安全规范的完整流程。

构建你的第一个 MCP 服务器:天气查询示例

MCP 服务开发通常从简单的工具型服务入手。下方流程图展示了天气查询 MCP 服务器的开发步骤:

图 1: 天气查询 MCP 服务器开发流程
图 1: 天气查询 MCP 服务器开发流程

下面是使用 FastMCP 快速实现天气查询服务器的代码示例:

from fastmcp import mcp, tool
import httpx

@tool(name="get_alerts", description="查询指定地区的天气预警")
async def get_alerts(zone: str):
    async with httpx.AsyncClient() as client:
        url = f"https://api.weather.gov/alerts/active/zone/{zone}"
        resp = await client.get(url)
        data = resp.json()
        return {"type": "text", "text": f"{len(data['features'])} 条预警"}

@tool(name="get_forecast", description="获取七天天气预报")
async def get_forecast(lat: float, lon: float):
    async with httpx.AsyncClient() as client:
        url = f"https://api.weather.gov/points/{lat},{lon}/forecast"
        resp = await client.get(url)
        forecast = resp.json()['properties']['periods']
        text = "\n".join([f"{p['name']}: {p['detailedForecast']}" for p in forecast])
        return {"type": "text", "text": text}

if __name__ == "__main__":
    mcp.run(transport="stdio")
STDIO 模式注意事项
在 STDIO 模式下,严禁直接向标准输出打印非 JSON 数据。日志请使用 stderr 或专用日志库。

使用参考服务器

MCP 官方与社区已提供丰富的参考服务器,可直接学习其实现方式。下表总结了常用参考服务器类别与功能:

类别服务器功能
基础能力server-filesystem以安全方式读写本地文件系统
记忆模块server-memory存储上下文记忆与知识图谱
协作平台server-github访问代码仓库、提交 PR、搜索文件
时间/系统工具server-clock、server-env提供时间、环境变量访问能力
表 1: MCP 参考服务器类别与功能

下面是 Claude Desktop / MCP Client 的参考服务器配置示例:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/allowed/path"]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {"GITHUB_PERSONAL_ACCESS_TOKEN": "<你的 token>"}
    }
  }
}

这些参考实现展示了工具(tools)、资源(resources)与提示(prompts)的完整结构,是学习 MCP 设计规范的最佳入口。

连接远程 MCP 服务器

远程服务器将 SaaS 服务以 MCP 接口形式暴露。下表总结了常见平台及其功能:

平台功能
Asana / Linear / Jira创建任务、同步进度
Intercom / Slack客服对话与事件推送
PayPal / Stripe / Plaid支付、退款与对账
表 2: 常见远程 MCP 服务器平台与功能

下面是 Claude API 的远程 MCP 服务器请求示例:

{
  "model": "claude-3-sonnet-20240229",
  "messages": [...],
  "mcp_servers": [
    {
      "url": "https://mcp.asana.com/sse",
      "name": "asana",
      "allowed_tools": ["create_task", "list_tasks"]
    }
  ]
}
远程服务器安全提示
远程服务器非官方运营,连接前务必审查其安全策略与隐私条款,仅信任受验证的端点。

搭建自定义 MCP 服务器

MCP Server 的核心职责是通过 JSON-RPC 协议定义工具、资源与提示,使模型可通过标准接口调用外部系统。下表总结了主流语言及其框架:

语言框架 / 库特性
Pythonfastmcp, mcp-fastapi装饰器定义工具,支持 stdio / HTTP 模式
TypeScript@anthropic-ai/mcp官方 SDK,支持快速定义与运行
C# / .NETMcpSharp类型安全与依赖注入
Rustmcp-rs异步高性能实现,适合服务端部署
表 3: 主流 MCP Server 框架与特性

Python + FastMCP 实战示例

下面代码展示了如何用 FastMCP 实现文件检索与搜索工具:

from fastmcp.server import MCPServer, tool, resource

@resource(name="project_files", description="用户项目目录", path="/home/user/project", writable=False)
def project_files(): pass

@tool(name="search_in_file", description="在文件中搜索关键词")
def search_in_file(filename: str, keyword: str) -> str:
    with open(filename) as f:
        lines = [line for line in f if keyword in line]
    return "\n".join(lines) or "未找到"

if __name__ == "__main__":
    server = MCPServer(tools=[search_in_file], resources=[project_files])
    server.run_stdio()

运行后,该服务将向客户端暴露:

  • 一个可列出 /home/user/project 文件的资源;
  • 一个 search_in_file 工具,可在文件内搜索关键词。

Playwright MCP 与 Context7:生态型实践

MCP 生态中有多种工具型与资源型服务器。下表总结了典型项目及其功能定位:

项目类型功能定位
Playwright MCP工具型 Server网页交互与自动化测试
Context7资源型 Server实时代码文档检索
表 4: 生态型 MCP 项目与功能定位

Playwright MCP 提供浏览器操作能力(基于 Accessibility Tree),支持打开网页、操作 DOM、执行 E2E 测试、生成测试脚本与 UI 检查。下方时序图展示了自动化测试流程:

图 2: Playwright MCP 自动化测试流程
图 2: Playwright MCP 自动化测试流程

Context7 为模型提供实时、版本对应的代码文档检索,常用于框架 API 对齐、文档到代码自动联动、RAG for Docs 场景。

VS Code 集成 Playwright MCP:端到端实践

VS Code 集成 Playwright MCP 可实现自动化测试与脚本生成。下表总结了集成流程与关键操作:

步骤操作
1安装 @playwright/mcp:npm install @playwright/mcp
2.vscode/mcp.json 中配置服务器
3运行站点(npm run dev)并通过 Chat 指令触发测试
4VS Code 会提示授权执行浏览器操作
5测试脚本生成于 tests/ 目录,可复运行或回放
表 5: VS Code 集成 Playwright MCP 流程

安全与工程规范

MCP 开发需遵循安全守则与工程规范。下表总结了关键建议:

关键点建议
最小权限仅暴露必要路径和 API
日志与审计记录调用历史,便于追踪
数据脱敏敏感资源仅允许只读访问
认证机制支持 OAuth2 / JWT
协作控制通过 Zen MCP 等工具统一调度多个模型
异步框架使用 asyncio / FastAPI 提升并发性能
输入输出严格定义 JSON Schema
STDIO 输出禁止非 JSON 调试输出
提示模板结合 prompts 引导模型调用逻辑
错误处理遵循 JSON-RPC 错误规范
表 6: MCP 安全与工程规范建议

客户端开发与集成流程

MCP 客户端开发流程包括初始化、工具查询、Prompt 构建、调用与响应解析。下方流程图展示了完整流程:

图 3: MCP 客户端开发与集成流程
图 3: MCP 客户端开发与集成流程

客户端开发步骤:

  1. 初始化连接(stdio 或 HTTP);
  2. 查询可用工具;
  3. 构建 Prompt 模板;
  4. 发送 JSON-RPC 调用;
  5. 接收结果并交由模型解释。

总结

MCP 的出现让模型首次具备操作系统层的可编程性。通过少量代码,开发者即可让 AI:

  • 查询实时数据
  • 操作文件与数据库
  • 执行自动化测试
  • 调用外部 SaaS 服务

核心价值:

  • 标准化:统一工具调用语义
  • 可组合:多 Server 协作组成 AI 应用
  • 可扩展:支持跨语言、跨运行时
  • 可控与可观测:具备企业级安全与审计能力

MCP 不只是协议,更是下一代智能体的运行时标准。

参考文献