AntV MCP服务器实现的学习和解读
???? 学习目标
通过这个项目,您将掌握:
- MCP 协议的核心概念 :理解模型上下文协议的设计理念
- 服务器架构设计 :学会构建可扩展的工具服务器
- 多传输协议支持 :掌握 stdio、SSE、HTTP 等传输方式
- 类型安全实践 :学习 TypeScript + Zod 的最佳实践
- 工具系统设计 :理解如何设计和实现工具接口
???? 第一部分:MCP 协议基础理解
1.1 什么是 MCP?
MCP(Model Context Protocol)是一个标准化协议,用于 AI 模型与外部工具和数据源的交互。它定义了:
- 工具调用 :AI 可以调用的功能接口
- 资源访问 :AI 可以访问的数据资源
- 提示模板 :预定义的交互模板
1.2 核心组件分析
让我们从 server.ts 开始:
// 1. 服务器创建 - 这是整个 MCP 服务器的入口点
export function createServer(): Server {
const server = new Server(
{
name: "mcp-server-chart", // 服务器标识
version: "0.8.x", // 版本信息
},
{
capabilities: {
tools: {}, // 声明支持工具调用能力
},
},
);
关键学习点 :
- MCP 服务器必须声明自己的能力(capabilities)
- 每个服务器都有唯一的名称和版本标识
- 这里的 tools: {} 表示支持工具调用功能
???? 第二部分:工具系统架构
2.1 工具注册机制
function setupToolHandlers(server: Server): void {
// 处理工具列表请求 - AI 询问"你有哪些工具?"
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: getEnabledTools().map((chart) => chart.tool),
}));
// 处理工具调用请求 - AI 说"我要使用某个工具"
server.setRequestHandler(CallToolRequestSchema, async (request) => {
return await callTool(request.params.name, request.params.arguments);
});
}
学习要点 :
- ListToolsRequestSchema :响应工具发现请求
- CallToolRequestSchema :处理具体的工具调用
- 这是标准的 MCP 请求-响应模式
2.2 工具定义结构
每个工具都遵循统一的结构,以线图表为例:
const tool = {
name: "generate_line_chart", // 工具名称(唯一标识)
description: "Generate a line chart...", // 工具描述(AI 理解用途)
inputSchema: zodToJsonSchema(schema), // 输入参数 Schema
};
核心概念 :
- name :工具的唯一标识符
- description :帮助 AI 理解何时使用这个工具
- inputSchema :定义输入参数的结构和验证规则









