示例代码

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


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

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

【iframe defaul_iframe_type】https://assets.jimmysong.io/images/book/ai-handbook/mcp/development/3cc704461df5cb618eb3bb7f56cdaf39.svg

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

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

from fastmcp import mcp, toolimport 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 协议定义工具、资源与提示,使模型可通过标准接口调用外部系统。下表总结了主流语言及其框架:

语言 框架 / 库 特性
Python fastmcp, mcp-fastapi 装饰器定义工具,支持 stdio / HTTP 模式
TypeScript @anthropic-ai/mcp 官方 SDK,支持快速定义与运行
C# / .NET McpSharp 类型安全与依赖注入
Rust mcp-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 检查。下方时序图展示了自动化测试流程:

【iframe defaul_iframe_type】https://assets.jimmysong.io/images/book/ai-handbook/mcp/development/4144fc45f81bc8fc42c453bf7f4cc54d.svg

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

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


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

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

步骤 操作
安装 @playwright/mcp:npm install @playwright/mcp
在 .vscode/mcp.json 中配置服务器
运行站点(npm run dev)并通过 Chat 指令触发测试
VS Code 会提示授权执行浏览器操作
测试脚本生成于 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 构建、调用与响应解析。下方流程图展示了完整流程:

【iframe defaul_iframe_type】https://assets.jimmysong.io/images/book/ai-handbook/mcp/development/bc4eb545605bcdd15b67393fe9de78d4.svg

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

客户端开发步骤:

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

总结

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

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

核心价值:

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

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

技术落地

未来趋势

2026-1-11 14:43:54

技术落地

生态系统

2026-1-11 14:43:56

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索