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

相关推荐
溪饱鱼3 小时前
如何节省OpenClaw 80%的Token消耗
人工智能·aigc·ai编程
智算菩萨3 小时前
深度剖析GPT - 5.3 - Codex:技术架构、性能表现与国内API接入全攻略
人工智能·gpt·ai·chatgpt·架构·ai编程·codex
测试_AI_一辰4 小时前
Agent & RAG 测试工程笔记 13:RAG检索层原理拆解:从“看不懂”到手算召回过程
人工智能·笔记·功能测试·算法·ai·ai编程
Mintopia4 小时前
GPT-5.3-Codex 底层逻辑是什么,为什么编码强?
前端·人工智能·ai编程
qqxhb4 小时前
15|Prompt 结构化:目标-上下文-约束-输出格式
prompt·ai编程·context·output·结构化·goal·constraints
chushiyunen4 小时前
人工智能-function calling(函数调用)
数据库·ai编程
诸神缄默不语5 小时前
论文阅读笔记:AI编程用的AGENTS.md应该不写或少写
论文阅读·笔记·ai编程
刘 大 望5 小时前
MCP详细介绍以及IDE和Spring AI中应用
java·ide·人工智能·spring·ai·aigc·ai编程
小陈工5 小时前
2026年3月23日技术资讯洞察:AI Agent失控,Claude Code引领AI编程新趋势
开发语言·数据库·人工智能·后端·python·性能优化·ai编程