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 采用客户端-服务器架构,包含三个核心组件:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ MCP Client │────▶│ MCP Server │────▶│ External System│
│ (Claude/IDE) │ │ (Your Code) │ │ (DB/API/Files) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
核心概念
| 概念 | 说明 | 示例 |
|---|---|---|
| Resources | 只读数据源 | 文件内容、数据库记录、API 响应 |
| Tools | 可执行操作 | API 调用、文件写入、数据库查询 |
| Prompts | 预定义提示词模板 | 代码审查模板、分析框架 |
| Sampling | 服务器请求 LLM 补全 | 让 AI 生成内容或做决策 |
协议层
┌─────────────────────────────────────────┐
│ 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
项目结构
enterprise-mcp-server/
├── src/
│ ├── index.ts # 入口文件
│ ├── resources/ # 资源定义
│ │ └── documents.ts
│ ├── tools/ # 工具定义
│ │ ├── search.ts
│ │ └── query.ts
│ └── prompts/ # 提示词模板
│ └── analyze.ts
├── package.json
└── tsconfig.json
核心代码实现
// 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
// ~/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"]
}
}
}
资源定义示例
// 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 服务器专注一个领域:
✅ 好的设计
├── github-mcp-server/ # GitHub 操作
├── database-mcp-server/ # 数据库操作
└── slack-mcp-server/ # Slack 集成
❌ 不好的设计
└── everything-mcp-server/ # 做太多事情
2. 清晰的错误处理
// 提供清晰的错误信息,帮助 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. 详细的工具描述
{
name: "search_code",
description: `
在代码库中搜索代码片段。
使用场景:
- 查找函数定义
- 搜索特定模式
- 定位配置文件
返回结果包含:
- 文件路径
- 行号
- 匹配上下文
`,
inputSchema: { /* ... */ }
}
4. 权限控制
// 实现最小权限原则
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
# TypeScript
npm install @modelcontextprotocol/sdk
# Python
pip install mcp
创建第一个 MCP 服务器
# 使用官方模板
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