1. 什么是 MCP?
MCP(Model Context Protocol,模型上下文协议)是 Anthropic 于 2024 年底推出的一种开放协议,旨在标准化 AI 模型与外部数据源、工具之间的通信方式。你可以把它理解为 AI 世界的「USB-C 接口」——通过统一的协议,让大语言模型能够方便地连接数据库、文件系统、API 服务等各种外部资源。
在 MCP 出现之前,每个 AI 应用接入外部工具都需要定制开发,接口五花八门,维护成本极高。MCP 的出现改变了这一局面:它定义了客户端、服务器和工具之间的标准交互方式,让开发者只需实现一次协议,就能让模型访问任意兼容 MCP 的资源。
2. MCP 的核心架构
MCP 采用客户端-服务器架构,包含三个核心角色:
- MCP Host(宿主):运行 AI 模型的应用,如 Claude Desktop、Cursor、VS Code 等,负责发起请求并展示结果。
- MCP Client(客户端):在 Host 内部与 MCP Server 建立连接的组件,负责协议通信。
- MCP Server(服务器):暴露工具、资源和提示词的独立服务,可以是本地进程,也可以是远程服务。
一次典型的调用流程如下:
- Host 中的 AI 模型收到用户指令,判断需要调用外部工具。
- Client 通过 MCP 协议向 Server 发送工具调用请求。
- Server 执行实际操作(如查询数据库、调用 API),并返回结构化结果。
- Client 将结果回传给模型,模型据此生成最终回复。
3. MCP 的三大核心原语
MCP 协议定义了三种核心原语,理解它们是开发 MCP Server 的基础:
3.1 Tools(工具)
工具是模型可以调用的函数,例如「查询天气」「发送邮件」「执行 SQL」。每个工具都有名称、描述和参数定义(JSON Schema),模型根据描述决定何时调用。
3.2 Resources(资源)
资源是暴露给模型读取的数据,例如文件内容、数据库记录、API 响应。资源通过 URI 定位,支持只读访问,适合让模型获取上下文信息。
3.3 Prompts(提示词)
提示词是可复用的交互模板,定义了用户与模型之间的标准对话模式。例如「代码审查」「周报生成」等固定流程,可以封装为提示词供用户一键触发。
4. 环境准备
在开始实战之前,请确保你的开发环境满足以下要求:
- Node.js 18 或更高版本(推荐 20+)
- Python 3.10 或更高版本(用于 Python SDK 示例)
- 一个支持 MCP 的客户端,如 Claude Desktop、Cursor 或 VS Code
安装 MCP 官方 SDK:
# 安装 TypeScript SDK npm install @modelcontextprotocol/sdk 安装 Python SDK pip install mcp5. 实战一:用 TypeScript 开发一个天气查询 MCP Server
下面我们通过一个完整的示例,演示如何用 TypeScript 开发一个天气查询 MCP Server。这个 Server 暴露一个get_weather工具,接收城市名参数,返回模拟的天气数据。
5.1 初始化项目
mkdir mcp-weather-server cd mcp-weather-server npm init -y npm install @modelcontextprotocol/sdk zod5.2 编写 Server 代码
创建server.ts文件:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; // 创建 MCP Server 实例 const server = new McpServer({ name: "weather-server", version: "1.0.0", }); // 注册一个工具:查询天气 server.tool( "get_weather", "根据城市名称查询当前天气", { city: z.string().describe("城市名称,如 北京、上海") }, async ({ city }) => { // 这里可以替换为真实的天气 API 调用 const weatherData = { city, temperature: 25, condition: "晴", humidity: 40, }; return { content: [ { type: "text", text: JSON.stringify(weatherData, null, 2), }, ], }; } ); // 启动 Server,使用标准输入输出传输 const transport = new StdioServerTransport(); await server.connect(transport); console.error("Weather MCP Server 已启动");5.3 编译并运行
npx tsc server.ts --outDir dist --module NodeNext --target ES2022 node dist/server.js此时 Server 会在标准输入输出上监听 MCP 请求。你可以通过 MCP Inspector 或支持 MCP 的客户端连接测试。
6. 实战二:用 Python 开发一个数据库查询 MCP Server
接下来我们用 Python 开发一个数据库查询 Server,演示如何通过 MCP 让模型安全地执行 SQL 查询。
6.1 安装依赖
pip install mcp sqlite36.2 编写 Server 代码
创建db_server.py文件:
import sqlite3 from mcp.server.fastmcp import FastMCP 创建 MCP Server mcp = FastMCP("db-server") 初始化数据库 conn = sqlite3.connect(":memory:") cursor = conn.cursor() cursor.execute("CREATE TABLE users (id INTEGER, name TEXT, age INTEGER)") cursor.executemany( "INSERT INTO users VALUES (?, ?, ?)", [(1, "Alice", 30), (2, "Bob", 25), (3, "Charlie", 35)], ) conn.commit() @mcp.tool() def query_users(min_age: int = 0) -> str: """查询用户列表,可按最小年龄过滤""" cursor.execute("SELECT * FROM users WHERE age >= ?", (min_age,)) rows = cursor.fetchall() return "\n".join(str(row) for row in rows) @mcp.tool() def get_user(user_id: int) -> str: """根据 ID 查询单个用户""" cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,)) row = cursor.fetchone() return str(row) if row else "用户不存在" if name == "main": mcp.run()6.3 运行 Server
python db_server.py这个 Server 暴露了两个工具:query_users和get_user,模型可以根据用户问题自动选择合适的工具并传入参数。
7. 在客户端中配置和使用 MCP Server
开发完 Server 后,我们需要在客户端中配置才能使用。以 Claude Desktop 为例,编辑配置文件claude_desktop_config.json:
{ "mcpServers": { "weather": { "command": "node", "args": ["/path/to/dist/server.js"] }, "database": { "command": "python", "args": ["/path/to/db_server.py"] } } }重启客户端后,模型就能自动发现并调用这些工具。例如,你可以直接问:「北京今天天气怎么样?」模型会调用get_weather工具并返回结果。
8. MCP 的传输方式与安全考虑
MCP 支持两种主要传输方式:
- stdio(标准输入输出):适用于本地进程,客户端直接启动 Server 子进程,通过标准输入输出通信,配置简单。
- HTTP/SSE(Server-Sent Events):适用于远程服务,Server 部署在服务器上,客户端通过 HTTP 请求访问,支持跨网络调用。
在使用 MCP 时,需要注意以下安全事项:
- 权限控制:Server 应实现最小权限原则,只暴露必要的工具和数据。
- 输入校验:对模型传入的参数进行严格校验,防止注入攻击。
- 审计日志:记录所有工具调用,便于追踪和排查问题。
- 敏感数据保护:避免在工具返回结果中泄露密钥、密码等敏感信息。
9. MCP 的生态与未来展望
MCP 自发布以来,生态发展迅速。目前已有大量官方和社区维护的 Server,覆盖数据库、文件系统、浏览器自动化、开发工具、云服务等众多领域。主流 AI 客户端如 Claude Desktop、Cursor、VS Code、JetBrains 等都已原生支持 MCP。
MCP 的出现,让 AI 应用从「对话机器人」向「智能体(Agent)」演进迈出了关键一步。未来,随着协议不断完善和生态持续壮大,MCP 有望成为 AI 与外部世界交互的事实标准,让开发者能够以更低的成本构建强大的 AI 应用。
10. 总结
本文从概念、架构、核心原语到实战开发,系统介绍了 MCP 协议。我们通过 TypeScript 和 Python 两个完整示例,演示了如何开发 MCP Server 并在客户端中配置使用。MCP 的核心价值在于标准化和复用:一次开发,处处可用。无论你是 AI 应用开发者还是技术爱好者,掌握 MCP 都将为你的 AI 开发之路打开新的可能。
建议你动手实践本文的示例,并尝试接入真实的 API 或数据库,体验 MCP 带来的开发效率提升。