MCP协议入门:让AI Agent拥有真正的工具能力
引言
在AI Agent开发的早期,我们面临一个尴尬的问题:大模型很聪明,但它”手短”——无法真正操作外部系统。Function Call解决了一部分问题,但每个平台实现各异,工具无法复用,生态碎片化严重。
2024年底,Anthropic推出了MCP(Model Context Protocol),一个开放的标准协议,试图成为AI Agent与外部工具交互的”USB接口”。本文将带你从零理解MCP,并实战搭建你的第一个MCP Server。
什么是MCP协议
MCP全称 Model Context Protocol,是一个开放的标准协议,用于连接AI模型与外部数据源和工具。
用一句话概括:
MCP就是AI Agent的USB接口——插上就能用,不用写驱动。
在MCP出现之前,如果你想让Claude读取本地文件,需要:
- 自己写一个API服务
- 部署到服务器
- 在Claude中配置API端点
- 处理认证、错误重试等边缘情况
有了MCP之后:
- 启动一个MCP Server(现成的或自己写)
- 在Claude Desktop配置一行JSON
- 完成
为什么需要MCP
传统Function Call的局限
Function Call是OpenAI在2023年推出的功能,让模型能够”调用函数”。但它有几个痛点:
- 平台绑定:OpenAI的Function Call格式和Claude的工具调用格式不同,迁移成本高
- 工具不复用:为ChatGPT写的工具,无法直接用于Claude或其他模型
- 开发繁琐:每次接入新工具都要写适配代码
- 缺乏标准:每个开发者都在重复造轮子
MCP的解决思路
MCP的设计哲学很清晰:
- 标准化:一套协议,所有模型通用
- 解耦:工具开发者只需要写一次MCP Server,任何支持MCP的客户端都能用
- 安全:本地运行,数据不离开你的机器(除非你主动发送)
- 可组合:多个MCP Server可以同时运行,组合出强大的工作流
MCP架构原理
MCP采用经典的Client-Server架构,包含三个核心角色:
┌─────────────────────────────────────────────────┐│ Host (宿主) ││ ┌─────────────┐ ┌─────────────┐ ┌─────────┐ ││ │ MCP Client │ │ MCP Client │ │ ... │ ││ │ (Claude) │ │ (Cursor) │ │ │ ││ └──────┬──────┘ └──────┬──────┘ └────┬────┘ ││ │ │ │ │└─────────┼────────────────┼──────────────┼────────┘ │ │ │ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │MCP Server│ │MCP Server│ │MCP Server│ │ (文件系统)│ │ (数据库) │ │ (搜索) │ └──────────┘ └──────────┘ └──────────┘Host(宿主)
Host是运行MCP Client的应用程序,例如:
- Claude Desktop
- Cursor IDE
- Zed Editor
- OpenClaw(支持MCP的AI助手)
MCP Client
Client嵌入在Host中,负责:
- 发现和连接MCP Server
- 将工具列表暴露给模型
- 将模型的工具调用请求转发给Server
- 将执行结果返回给模型
MCP Server
Server是你开发的工具服务,提供三类能力:
- Resources(资源):可以被读取的数据,如文件内容、数据库记录
- Tools(工具):可以被调用的操作,如执行命令、发送邮件
- Prompts(提示词):预定义的提示模板
实战:5分钟搭建你的第一个MCP Server
下面我们用Node.js创建一个简单的MCP Server,提供一个get_current_time工具。
环境准备
# 创建项目目录mkdir my-first-mcp-servercd my-first-mcp-server
# 初始化项目npm init -y
# 安装MCP SDKnpm install @modelcontextprotocol/sdk编写Server代码
创建 index.js:
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: "my-first-mcp-server", version: "1.0.0",});
// 注册一个工具:获取当前时间server.tool( "get_current_time", // 工具名称 "获取指定时区的当前时间", // 工具描述 { timezone: z.string().optional() }, // 参数定义 async ({ timezone }) => { // 执行函数 const now = new Date(); const timeStr = now.toLocaleString("zh-CN", { timeZone: timezone || "Asia/Shanghai", }); return { content: [{ type: "text", text: `当前时间: ${timeStr}` }], }; });
// 启动Serverconst transport = new StdioServerTransport();await server.connect(transport);配置Claude Desktop
在Claude Desktop的配置文件中添加:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{ "mcpServers": { "my-first-mcp-server": { "command": "node", "args": ["/path/to/my-first-mcp-server/index.js"] } }}运行效果
重启Claude Desktop后,你可以在对话中直接使用:
用户:现在几点了?Claude:[调用 get_current_time 工具]Claude:当前时间是 2026年3月16日 11:30:00(北京时间)恭喜!你已经成功创建了第一个MCP Server。
MCP生态现状
MCP生态正在快速发展,以下是一些值得关注的现成工具:
官方Server
| Server | 功能 | 链接 |
|---|---|---|
| filesystem | 文件系统读写 | @modelcontextprotocol/server-filesystem |
| postgres | PostgreSQL数据库操作 | @modelcontextprotocol/server-postgres |
| sqlite | SQLite数据库操作 | @modelcontextprotocol/server-sqlite |
| brave-search | Brave搜索引擎集成 | @modelcontextprotocol/server-brave-search |
社区Server
| Server | 功能 |
|---|---|
| mcp-server-docker | Docker容器管理 |
| mcp-server-git | Git操作 |
| mcp-server-kubernetes | K8s集群管理 |
| mcp-server-google-maps | Google Maps API |
如何找到更多
- GitHub搜索:
topic:mcp-server - 官方文档:https://modelcontextprotocol.io
- Awesome MCP:社区维护的MCP资源列表
总结与展望
MCP协议解决了AI Agent工具调用的标准化问题,让”写一次,到处可用”成为可能。对于开发者来说,这是一个降低成本、提升效率的好机会。
MCP的优势
- 一次开发,多平台使用:写一个MCP Server,Claude、Cursor、Zed都能用
- 标准化接口:不用再为每个AI平台写适配代码
- 本地安全:数据在本地处理,不经过第三方服务器
- 可组合:多个Server组合使用,构建复杂工作流
未来发展方向
- 更多官方Server支持(数据库、云服务等)
- 更好的调试和监控工具
- Server市场/注册中心
- 与更多AI平台的集成
如果你正在开发AI Agent,强烈建议尝试MCP。它可能是AI Agent生态走向标准化的关键一步。
参考链接: