前言

你是否遇到过这些问题:

  • 想让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

✅ 最佳实践

  1. 限制访问范围:始终限制MCP服务器的访问目录,防止越权
  2. 敏感信息处理:使用环境变量传递API Key,不要硬编码
  3. 错误处理:为每个工具添加try-catch和错误提示
  4. 类型定义:使用TypeScript获得更好的类型检查

七、总结

MCP协议让AI工具集成变得前所未有的简单:

  • 标准化:一套协议连接所有工具
  • 可复用:写一次MCP服务器,所有MCP客户端都能用
  • 生态丰富:官方+社区已有数百个现成服务器

下一步建议:

  1. 尝试官方filesystem服务器,熟悉基本用法
  2. 基于本文示例,搭建自己的业务工具服务器
  3. 探索社区MCP服务器,找到适合你工作流的工具

相关资源:

  • MCP官方文档:https://modelcontextprotocol.io
  • Claude Code MCP命令:https://docs.anthropic.com/en/docs/claude-code/mcp

如果本文对你有帮助,欢迎点赞、收藏!有问题欢迎在评论区留言!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐