MCP(Model Context Protocol)—— AI 领域的 USB-C

MCP 是 Anthropic 于 2024 年 11 月推出的开放标准协议,被誉为"AI 领域的 USB-C 接口"。


1.1 什么是 MCP?

Model Context Protocol(MCP) 是 Anthropic 提出的开放标准协议,旨在解决大语言模型(LLM)与外部数据源、工具之间的连接问题。

"MCP 就像 AI 领域的 USB-C 接口------一个统一的标准,让 AI 模型能够无缝连接任何外部系统。" ------ Anthropic 官方

核心价值

价值 说明
标准化接口 统一 AI 模型与外部系统的交互方式
一次开发,处处可用 开发者只需编写一次 MCP 服务器,即可被所有支持的客户端使用
生态互通 打破 AI 应用的孤岛效应
降低集成成本 无需为每个新集成定制代码

1.2 技术架构

MCP 采用客户端-服务器架构,包含三个核心组件:

scss 复制代码
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   MCP Client    │────▶│   MCP Server    │────▶│  External System│
│  (Claude/IDE)   │     │   (Your Code)   │     │  (DB/API/Files) │
└─────────────────┘     └─────────────────┘     └─────────────────┘

核心概念

概念 说明 示例
Resources 只读数据源 文件内容、数据库记录、API 响应
Tools 可执行操作 API 调用、文件写入、数据库查询
Prompts 预定义提示词模板 代码审查模板、分析框架
Sampling 服务器请求 LLM 补全 让 AI 生成内容或做决策

协议层

scss 复制代码
┌─────────────────────────────────────────┐
│            Application Layer            │
│         (Claude Desktop, IDEs)          │
├─────────────────────────────────────────┤
│              MCP Protocol               │
│     (JSON-RPC 2.0 based messages)       │
├─────────────────────────────────────────┤
│           Transport Layer               │
│    (Stdio, HTTP/SSE, Custom)           │
└─────────────────────────────────────────┘

1.3 实战案例:构建企业知识库 MCP 服务器

场景描述

为企业构建一个 MCP 服务器,让 Claude 能够:

  • 搜索内部文档
  • 查询数据库
  • 调用内部 API

项目结构

bash 复制代码
enterprise-mcp-server/
├── src/
│   ├── index.ts          # 入口文件
│   ├── resources/        # 资源定义
│   │   └── documents.ts
│   ├── tools/            # 工具定义
│   │   ├── search.ts
│   │   └── query.ts
│   └── prompts/          # 提示词模板
│       └── analyze.ts
├── package.json
└── tsconfig.json

核心代码实现

typescript 复制代码
// src/index.ts
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
  CallToolRequestSchema,
  ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";

const server = new Server(
  { name: "enterprise-knowledge-base", version: "1.0.0" },
  { capabilities: { resources: {}, tools: {} } }
);

// 注册工具列表
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [
    {
      name: "search_documents",
      description: "搜索企业知识库文档",
      inputSchema: {
        type: "object",
        properties: {
          query: { type: "string", description: "搜索关键词" },
          limit: { type: "number", description: "返回结果数量", default: 10 }
        },
        required: ["query"]
      }
    },
    {
      name: "query_database",
      description: "执行数据库查询",
      inputSchema: {
        type: "object",
        properties: {
          sql: { type: "string", description: "SQL 查询语句" }
        },
        required: ["sql"]
      }
    }
  ]
}));

// 处理工具调用
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  const { name, arguments: args } = request.params;

  switch (name) {
    case "search_documents":
      return await searchDocuments(args.query, args.limit);
    case "query_database":
      return await queryDatabase(args.sql);
    default:
      throw new Error(`Unknown tool: ${name}`);
  }
});

// 文档搜索实现
async function searchDocuments(query: string, limit: number = 10) {
  // 实现文档搜索逻辑
  const results = await fetch(`/api/documents/search?q=${query}&limit=${limit}`);
  return {
    content: [{ type: "text", text: JSON.stringify(await results.json()) }]
  };
}

// 数据库查询实现
async function queryDatabase(sql: string) {
  // 实现数据库查询逻辑
  // 注意:实际应用中需要防止 SQL 注入
  return {
    content: [{ type: "text", text: "查询结果..." }]
  };
}

// 启动服务器
const transport = new StdioServerTransport();
await server.connect(transport);

配置 Claude Desktop 使用 MCP

json 复制代码
// ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)
// %APPDATA%/Claude/claude_desktop_config.json (Windows)

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

资源定义示例

typescript 复制代码
// src/resources/documents.ts
import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";

export function registerDocumentResources(server: Server) {
  // 静态资源
  server.resources.register({
    uri: "docs://company/policies",
    name: "公司规章制度",
    description: "公司内部规章制度文档",
    mimeType: "text/markdown",
    async read() {
      const content = await fetchPolicyDocument();
      return { contents: [{ uri: "docs://company/policies", text: content }] };
    }
  });

  // 动态资源模板
  server.resources.registerTemplate(
    new ResourceTemplate("docs://projects/{projectId}", {
      list: async () => {
        const projects = await listProjects();
        return {
          resources: projects.map(p => ({
            uri: `docs://projects/${p.id}`,
            name: p.name
          }))
        };
      }
    })
  );
}

1.4 MCP 生态系统

官方服务器

Anthropic 提供了多个官方 MCP 服务器:

服务器 功能 链接
Filesystem 文件系统访问 GitHub
PostgreSQL PostgreSQL 数据库 GitHub
SQLite SQLite 数据库 GitHub
GitHub GitHub API 集成 GitHub
Google Drive Google Drive 访问 GitHub
Brave Search 网页搜索 GitHub

社区服务器

项目 描述 链接
OpenMemory MCP AI 记忆共享方案 github.com/mem0ai/mem0...
MCP C# SDK 微软官方 .NET SDK github.com/modelcontex...
MCP Java SDK Java 版本 SDK github.com/modelcontex...

1.5 最佳实践

1. 单一职责原则

每个 MCP 服务器专注一个领域:

bash 复制代码
✅ 好的设计
├── github-mcp-server/      # GitHub 操作
├── database-mcp-server/    # 数据库操作
└── slack-mcp-server/       # Slack 集成

❌ 不好的设计
└── everything-mcp-server/  # 做太多事情

2. 清晰的错误处理

typescript 复制代码
// 提供清晰的错误信息,帮助 AI 理解失败原因
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  try {
    const result = await executeTool(request.params);
    return { content: [{ type: "text", text: JSON.stringify(result) }] };
  } catch (error) {
    return {
      content: [{
        type: "text",
        text: JSON.stringify({
          error: true,
          message: `执行失败: ${error.message}`,
          suggestion: "请检查参数是否正确,或联系管理员"
        })
      }],
      isError: true
    };
  }
});

3. 详细的工具描述

typescript 复制代码
{
  name: "search_code",
  description: `
    在代码库中搜索代码片段。

    使用场景:
    - 查找函数定义
    - 搜索特定模式
    - 定位配置文件

    返回结果包含:
    - 文件路径
    - 行号
    - 匹配上下文
  `,
  inputSchema: { /* ... */ }
}

4. 权限控制

typescript 复制代码
// 实现最小权限原则
const PERMISSIONS = {
  search_documents: "read",
  create_document: "write",
  delete_document: "admin"
};

function checkPermission(tool: string, user: User): boolean {
  const requiredPermission = PERMISSIONS[tool];
  return user.permissions.includes(requiredPermission);
}

1.6 快速开始

安装 MCP SDK

bash 复制代码
# TypeScript
npm install @modelcontextprotocol/sdk

# Python
pip install mcp

创建第一个 MCP 服务器

bash 复制代码
# 使用官方模板
npx @modelcontextprotocol/create-server my-first-server

cd my-first-server
npm install
npm run dev

GitHub 项目推荐

项目 描述 链接
MCP SDK (TypeScript) Anthropic 官方 SDK github.com/modelcontex...
MCP SDK (Python) Python 版本 SDK github.com/modelcontex...
MCP Servers 官方服务器合集 github.com/modelcontex...
MCP Specification 协议规范文档 github.com/modelcontex...

下一篇: 智能体(Agent)


欢迎关注的我的公众号《码上未来》,一起交流AI前沿技术!

扫码二维码加我微信进群聊AI

相关推荐
虎妞05007 小时前
AI 编程助手横评:Cursor vs Copilot vs Claude Code
ai编程·开发工具·cursor·github copilot·claude code
来让爷抱一个7 小时前
MonkeyCode Agent深度解析:AI如何自主完成从编码到部署
开源·ai编程·monkeycode
阿伟AI说7 小时前
Codex 桌面版接入国产模型系列二:Codex++
java·开源软件·ai编程·腾讯云ai代码助手
hoaxxcj7 小时前
AI编程2026:Copilot桌面应用发布,我们正在经历一场不可逆的范式转移
copilot·agent·ai编程·github copilot·编程工具
这个DBA有点耶7 小时前
Vibe Coding 是什么?当“感觉编程”遇上数据库
数据库·人工智能·架构·学习方法·ai编程·程序员创富·改行学it
测试开发技术7 小时前
AI 测试赋能全流程实战 | Agent Skill + AI 赋能「需求分析」
自动化测试·人工智能·自动化·需求分析·ai编程·ai测试
财经资讯数据_灵砚智能8 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年6月12日
人工智能·python·ai·信息可视化·自然语言处理·ai编程·灵砚智能
甲维斯9 小时前
真不想吹Claude Fable了,奈何实力不允许!
人工智能·ai编程·游戏开发
aqi009 小时前
15天学会AI应用开发(六)使用离线大模型对文本生成摘要
人工智能·python·ai编程
知识浅谈9 小时前
人工智能日报 每日AI新闻(2026年6月12日):Agent安全、AI编程与国内高考场景加速落地
人工智能·安全·ai编程