Claude Code | | 约 12 分钟 | 4,494 字

MCP 深度指南:AI 时代的通用插件系统

Model Context Protocol (MCP) 正在成为 AI 工具的事实标准。本文深入解析 MCP 的工作原理、安全考量,并手把手教你构建自己的 MCP Server。

Model Context Protocol (MCP) 正在成为 AI 开发领域最受关注的技术之一。从 Claude Code 到 OpenAI Agents SDK,MCP 正在重新定义 AI 工具的扩展方式。本文将带你深入理解 MCP,并手把手构建你的第一个 MCP Server。

什么是 MCP?

MCP (Model Context Protocol) 是一个开放标准,旨在让 AI 助手安全地与外部工具和数据源连接。简单来说,它就是 AI 世界的”USB-C 接口”——无论什么设备,只要支持 USB-C,就能互联互通。

为什么需要 MCP?

在 MCP 出现之前,AI 工具与外部系统的集成是这样的:

Claude: "我需要查一下数据库"
开发者: "好,我写一个 Python 脚本"
Claude: "我需要调用 GitHub API"
开发者: "好,我再写一个集成"
Claude: "我需要..."
开发者: "别说了,我写还不行吗?"

每个 AI 工具都需要单独的集成方案,导致:

  1. 重复开发:同样的功能要为不同 AI 产品写多遍
  2. 碎片化:用户需要在不同工具间切换
  3. 维护负担:每次 API 升级都是噩梦

MCP 的出现就是为了解决这个问题。

MCP 工作原理

架构概览

MCP 采用客户端-服务器架构:

┌─────────────┐      ┌─────────────┐      ┌─────────────┐
│  AI 模型    │ ←──→ │  MCP Host   │ ←──→ │  MCP Server │
│ (Claude)    │      │ (你的电脑)  │      │ (工具服务)   │
└─────────────┘      └─────────────┘      └─────────────┘
  • MCP Host: 运行 AI 的环境(如 Claude Code、Cursor)
  • MCP Server: 提供具体功能的外部服务
  • AI Model: 通过 MCP 协议与 Server 通信

核心概念

MCP 定义了三种资源类型:

  1. Tools (工具): AI 可以调用的函数
  2. Resources (资源): AI 可以读取的数据
  3. Prompts (提示): 预定义的提示模板

MCP 安全问题:S 代表 Security

最近 Hacker News 上关于 MCP 安全性的讨论非常热烈。

主要安全担忧

  1. Supabase MCP 可以泄露整个数据库

    • 配置不当的 MCP Server 可能暴露敏感数据
  2. GitHub MCP 被利用访问私有仓库

    • 恶意 MCP Server 可能获取未授权的代码访问权限
  3. 输出投毒风险

    • “No output from your MCP server is safe”

安全最佳实践

{
  "mcpServers": {
    "my-server": {
      "command": "node",
      "args": ["/path/to/server.js"],
      "env": {
        // 敏感信息通过环境变量传递
        "API_KEY": "安全的存储方式"
      }
    }
  }
}

提示:永远不要在 MCP Server 配置中硬编码敏感信息

实战:构建你的第一个 MCP Server

让我们用 Node.js 创建一个简单的 MCP Server。

1. 初始化项目

mkdir my-mcp-server && cd my-mcp-server
npm init -y
npm install @modelcontextprotocol/server stdio

2. 创建 Server 代码

import { Server } from '@modelcontextprotocol/server/stdio';
import { z } from 'zod';

const server = new Server(
  {
    name: 'my-first-mcp-server',
    version: '1.0.0',
  },
  {
    capabilities: {
      tools: {},
    },
  }
);

// 定义一个简单的工具:获取当前时间
server.setRequestHandler('tools/list', async () => {
  return {
    tools: [
      {
        name: 'get_current_time',
        description: '获取当前时间',
        inputSchema: {
          type: 'object',
          properties: {
            timezone: {
              type: 'string',
              description: '时区,如 "Asia/Shanghai"',
              default: 'UTC',
            },
          },
        },
      },
    ],
  };
});

server.setRequestHandler('tools/call', async (request) => {
  const { name, arguments: args } = request.params;

  if (name === 'get_current_time') {
    const now = new Date();
    const formatter = new Intl.DateTimeFormat('zh-CN', {
      timeZone: args.timezone || 'UTC',
      dateStyle: 'full',
      timeStyle: 'medium',
    });

    return {
      content: [
        {
          type: 'text',
          text: formatter.format(now),
        },
      ],
    };
  }

  throw new Error(`Unknown tool: ${name}`);
});

server.run();

3. 配置 Claude Code

CLAUDE.md 所在目录创建 mcp.json:

{
  "mcpServers": {
    "time-server": {
      "command": "node",
      "args": ["/path/to/my-mcp-server/index.js"]
    }
  }
}

4. 使用

现在你可以让 Claude 调用这个工具:

请告诉我现在的北京时间

Claude 会自动调用 get_current_time 工具并返回结果。

有趣的 MCP Server 推荐

Hacker News 上涌现了许多创意十足的 MCP Server:

项目功能热度
Browser MCP浏览器自动化616
GitMCP自动为 GitHub 仓库创建 MCP185
MCP-ShieldMCP 安全扫描134
Ghidra MCPAI 辅助逆向工程298
Apple Health MCP健康数据分析199
WhatsApp MCPWhatsApp 消息控制229
Blender MCP3D 场景自然语言控制151

MCP vs Skills:选哪个?

最近社区有个热门讨论:Claude Skills are awesome, maybe a bigger deal than MCP (738 points)

特性MCPSkills
适用场景外部工具/数据集成自定义指令/工作流
复杂度较高简单
灵活性有限
学习曲线平缓

建议

  • 简单任务 → 用 Skills
  • 需要外部数据/工具 → 用 MCP

总结

MCP 正在成为 AI 工具扩展的事实标准。虽然安全性还有待完善,但随着 OpenAI、Google 等大厂的加入,MCP 的生态正在快速成熟。

如果你正在开发 AI 应用的扩展能力,MCP 绝对值得深入研究。

参考来源

评论

加载中...

相关文章

分享:

评论

加载中...