1417 字
7 分钟
MCP协议入门:让AI Agent拥有真正的工具能力

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读取本地文件,需要:

  1. 自己写一个API服务
  2. 部署到服务器
  3. 在Claude中配置API端点
  4. 处理认证、错误重试等边缘情况

有了MCP之后:

  1. 启动一个MCP Server(现成的或自己写)
  2. 在Claude Desktop配置一行JSON
  3. 完成

为什么需要MCP#

传统Function Call的局限#

Function Call是OpenAI在2023年推出的功能,让模型能够”调用函数”。但它有几个痛点:

  1. 平台绑定:OpenAI的Function Call格式和Claude的工具调用格式不同,迁移成本高
  2. 工具不复用:为ChatGPT写的工具,无法直接用于Claude或其他模型
  3. 开发繁琐:每次接入新工具都要写适配代码
  4. 缺乏标准:每个开发者都在重复造轮子

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中,负责:

  1. 发现和连接MCP Server
  2. 将工具列表暴露给模型
  3. 将模型的工具调用请求转发给Server
  4. 将执行结果返回给模型

MCP Server#

Server是你开发的工具服务,提供三类能力:

  1. Resources(资源):可以被读取的数据,如文件内容、数据库记录
  2. Tools(工具):可以被调用的操作,如执行命令、发送邮件
  3. Prompts(提示词):预定义的提示模板

实战:5分钟搭建你的第一个MCP Server#

下面我们用Node.js创建一个简单的MCP Server,提供一个get_current_time工具。

环境准备#

Terminal window
# 创建项目目录
mkdir my-first-mcp-server
cd my-first-mcp-server
# 初始化项目
npm init -y
# 安装MCP SDK
npm 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}` }],
};
}
);
// 启动Server
const 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
postgresPostgreSQL数据库操作@modelcontextprotocol/server-postgres
sqliteSQLite数据库操作@modelcontextprotocol/server-sqlite
brave-searchBrave搜索引擎集成@modelcontextprotocol/server-brave-search

社区Server#

Server功能
mcp-server-dockerDocker容器管理
mcp-server-gitGit操作
mcp-server-kubernetesK8s集群管理
mcp-server-google-mapsGoogle Maps API

如何找到更多#

总结与展望#

MCP协议解决了AI Agent工具调用的标准化问题,让”写一次,到处可用”成为可能。对于开发者来说,这是一个降低成本、提升效率的好机会。

MCP的优势#

  1. 一次开发,多平台使用:写一个MCP Server,Claude、Cursor、Zed都能用
  2. 标准化接口:不用再为每个AI平台写适配代码
  3. 本地安全:数据在本地处理,不经过第三方服务器
  4. 可组合:多个Server组合使用,构建复杂工作流

未来发展方向#

  • 更多官方Server支持(数据库、云服务等)
  • 更好的调试和监控工具
  • Server市场/注册中心
  • 与更多AI平台的集成

如果你正在开发AI Agent,强烈建议尝试MCP。它可能是AI Agent生态走向标准化的关键一步。


参考链接: