5分钟搭建MCP工具服务器:用Model Context Protocol让AI连接一切
·
前言
你是否遇到过这些问题:
- 想让AI帮你查数据库,但它只能看代码,看不到实际数据
- 想让AI直接操作GitHub,但它只能生成命令,无法真正执行
- 不同AI工具各有各的插件系统,换个工具就要重新配置
Model Context Protocol(MCP) 正是为解决这些问题而生的。
MCP是Anthropic推出的开放标准协议,让AI应用能够以统一的方式连接各种外部工具和数据源。本文将手把手教你搭建自己的MCP工具服务器,让AI真正成为你的「全能助手」。
一、MCP协议核心原理
1.1 为什么需要MCP?
传统的AI工具集成是这样的:
AI应用 → 专用插件A → 专用插件B → 专用插件C
(每个插件独立开发,无法复用)
MCP改变了这个架构:
AI应用 ←→ MCP协议 ←→ MCP服务器A
←→ MCP服务器B
←→ MCP服务器C
(所有服务器使用同一协议,即插即用)
MCP的核心优势:
- 标准化:一套协议,连接所有工具
- 可发现性:MCP启动时自动暴露所有可用工具及参数
- 双向通信:AI不仅能调用工具,还能读取资源、获取提示
1.2 MCP的三种能力
MCP服务器向AI暴露三种能力:
MCP服务器
├── Tools(工具) → AI可以调用的函数
├── Resources(资源) → AI可以读取的数据
└── Prompts(提示) → 预定义的提示模板
二、快速搭建MCP服务器
2.1 环境准备
# Node.js 环境(推荐 v18+)
node --version
# 创建项目
mkdir my-mcp-server && cd my-mcp-server
npm init -y
# 安装 MCP SDK
npm install @modelcontextprotocol/sdk
2.2 创建第一个MCP服务器
创建一个天气查询服务器:
// server.js
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
// 创建服务器实例
const server = new McpServer({
name: "weather-server",
version: "1.0.0"
});
// 注册天气查询工具
server.tool(
"get_weather",
"查询指定城市的天气信息",
{
city: { type: "string", description: "城市名称,如北京、上海" }
},
async ({ city }) => {
// 模拟API调用
const weatherData = {
city,
temperature: Math.round(Math.random() * 15 + 15),
condition: ["晴", "多云", "小雨"][Math.floor(Math.random() * 3)],
humidity: Math.round(Math.random() * 40 + 40)
};
return {
content: [
{ type: "text", text: JSON.stringify(weatherData, null, 2) }
]
};
}
);
// 启动服务器
const transport = new StdioServerTransport();
server.run(transport);
2.3 在Claude Code中集成
# 添加MCP服务器
claude mcp add weather -- npx tsx server.js
# 验证是否添加成功
claude mcp list
现在你就可以这样和Claude对话:
用户:帮我查一下上海的天气
Claude:[自动调用get_weather工具]
返回:上海今天晴,气温23°C,湿度65%
三、实战:搭建文件管理MCP服务器
这是一个更实用的例子,让AI能够读取、搜索、编辑项目文件:
// filesystem-server.js
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { readdir, readFile, writeFile, glob } from "fs/promises";
import { join } from "path";
const server = new McpServer({
name: "filesystem-server",
version: "1.0.0"
});
// 列出目录文件
server.tool(
"list_files",
"列出目录下的所有文件",
{
directory: { type: "string", description: "目录路径" }
},
async ({ directory }) => {
const files = await readdir(directory);
return {
content: [{ type: "text", text: JSON.stringify(files) }]
};
}
);
// 搜索文件内容
server.tool(
"search_files",
"在文件中搜索关键词",
{
pattern: { type: "string", description: "搜索模式,如 *.js" },
content: { type: "string", description: "要搜索的内容" }
},
async ({ pattern, content }) => {
const results = [];
// 简化示例,实际需要遍历文件
results.push({
file: "example.js",
matches: [`第15行: ${content}`]
});
return {
content: [{ type: "text", text: JSON.stringify(results, null, 2) }]
};
}
);
const transport = new StdioServerTransport();
server.run(transport);
四、常用MCP服务器推荐
4.1 官方维护的MCP服务器
| 服务器 | 功能 | 安装命令 |
|---|---|---|
| filesystem | 本地文件读写 | npx -y @modelcontextprotocol/server-filesystem /path |
| github | GitHub API操作 | npx -y @modelcontextprotocol/server-github |
| slack | Slack消息发送 | npx -y @modelcontextprotocol/server-slack |
| postgres | PostgreSQL数据库 | npx -y @modelcontextprotocol/server-postgres |
| memory | 持久化记忆 | npx -y @modelcontextprotocol/server-memory |
4.2 社区热门MCP服务器
| 服务器 | 功能 | 适用场景 |
|---|---|---|
| puppeteer | 浏览器自动化 | 网页截图、数据抓取 |
| sentry | 错误追踪查询 | Bug排查 |
| figma | 设计稿读取 | 前端开发 |
| notion | 笔记读写 | 个人知识管理 |
五、MCP协议工作原理图解
5.1 架构图

┌─────────────────────────────────────────────────────────┐
│ AI 应用 │
│ (Claude Code / Cursor) │
└─────────────────────┬───────────────────────────────────┘
│ MCP协议
┌─────────────────────┴───────────────────────────────────┐
│ MCP Host │
│ (负责管理多个MCP服务器连接) │
└──────┬──────────────┬──────────────┬─────────────────────┘
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Server │ │ Server │ │ Server │
│ (文件系统) │ │ (GitHub) │ │ (数据库) │
└──────────┘ └──────────┘ └──────────┘
5.2 请求流程
1. 用户提问: "帮我看看这个项目的README"
│
▼
2. AI分析需要调用readFile工具
│
▼
3. MCP协议发送请求到filesystem服务器
│
▼
4. 服务器读取文件,返回内容
│
▼
5. AI整合结果,返回给用户
六、避坑指南
❌ 常见错误
1. 路径权限不足
# 错误:目录没有读取权限
claude mcp add fs -- npx -y @modelcontextprotocol/server-filesystem /root
# 正确:使用有权限的目录
claude mcp add fs -- npx -y @modelcontextprotocol/server-filesystem ~/projects
2. Node版本过低
# MCP SDK需要Node 18+
node --version # 确保 >= 18.0.0
3. Windows路径格式错误
# Windows需要使用双反斜杠或正斜杠
claude mcp add fs -- npx -y @modelcontextprotocol/server-filesystem C:/Users/Projects
✅ 最佳实践
- 限制访问范围:始终限制MCP服务器的访问目录,防止越权
- 敏感信息处理:使用环境变量传递API Key,不要硬编码
- 错误处理:为每个工具添加try-catch和错误提示
- 类型定义:使用TypeScript获得更好的类型检查
七、总结
MCP协议让AI工具集成变得前所未有的简单:
- 标准化:一套协议连接所有工具
- 可复用:写一次MCP服务器,所有MCP客户端都能用
- 生态丰富:官方+社区已有数百个现成服务器
下一步建议:
- 尝试官方filesystem服务器,熟悉基本用法
- 基于本文示例,搭建自己的业务工具服务器
- 探索社区MCP服务器,找到适合你工作流的工具
相关资源:
- MCP官方文档:https://modelcontextprotocol.io
- Claude Code MCP命令:https://docs.anthropic.com/en/docs/claude-code/mcp
如果本文对你有帮助,欢迎点赞、收藏!有问题欢迎在评论区留言!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)