Skip to content

MCP SDK 系统

模块概述

版本: v0.34.0 状态: ✅ 已实现 MCP协议版本: 2024-11-05 最后更新: 2026-02-15

MCP SDK 系统提供 Model Context Protocol 服务器构建工具包,支持 HTTP+SSE 和 Stdio 两种传输方式。内置社区注册中心,预收录 8 个常用 MCP Server,支持一键发现和安装。

核心特性

  • Fluent API: 链式调用构建 MCP Server,极简开发体验
  • 双传输: HTTP+SSE (远程) 和 Stdio (本地) 传输方式
  • 多种认证: Bearer, API-Key, Basic, Custom 四种认证方式
  • 社区注册中心: 8 个预收录 Server,支持发现和安装
  • 协议兼容: 完整实现 MCP 2024-11-05 规范
  • TypeScript 支持: 完整类型定义

1. 架构设计

1.1 整体架构图

┌──────────────────────────────────────────────────────────────────┐
│                        前端 (Vue3)                                │
├──────────────────────────────────────────────────────────────────┤
│  MCPServerMarketplace │ MCPServerBuilder │ MCPServerManager      │
│        ↓                      ↓                   ↓               │
│                     Pinia Store: mcp.ts                           │
└──────────────────────────────────────────────────────────────────┘
                              ↕ IPC
┌──────────────────────────────────────────────────────────────────┐
│                        主进程 (Electron)                          │
├──────────────────────────────────────────────────────────────────┤
│                       mcp-sdk-ipc.js                              │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │ MCPServerBuilder │ MCPHttpServer │ MCPStdioServer           │  │
│  └────────────────────────────────────────────────────────────┘  │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │ CommunityRegistry │ SDK Entry (index.js)                   │  │
│  └────────────────────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────────────────────┘
                    ↕ HTTP+SSE / Stdio
┌──────────────────────────────────────────────────────────────────┐
│                     MCP Client (AI应用)                           │
├──────────────────────────────────────────────────────────────────┤
│  Claude Desktop │ ChainlessChain │ 其他MCP客户端                  │
└──────────────────────────────────────────────────────────────────┘

1.2 SDK 分层架构

SDK Entry (index.js)
    ↓ 导出
┌─────────────────────────┐
│     MCPServerBuilder    │  ← Fluent API 构建层
├─────────────────────────┤
│  MCPHttpServer          │  ← HTTP+SSE 传输层
│  MCPStdioServer         │  ← Stdio 传输层
├─────────────────────────┤
│  JSON-RPC 2.0 协议层    │  ← 请求/响应/通知处理
├─────────────────────────┤
│  CommunityRegistry      │  ← 社区注册中心
└─────────────────────────┘

1.3 核心组件

组件文件行数说明
MCPServerBuildermcp-server-builder.js~400Fluent API 构建器
MCPHttpServermcp-http-server.js~450HTTP+SSE 传输
MCPStdioServermcp-stdio-server.js~300Stdio 传输
CommunityRegistrycommunity-registry.js~350社区注册中心
SDK Entryindex.js~50统一导出入口

2. 核心模块

2.1 MCPServerBuilder

Fluent API 链式构建器,快速创建 MCP Server。

使用示例:

javascript
const { MCPServerBuilder } = require('@chainlesschain/mcp-sdk');

const server = new MCPServerBuilder()
  .name('my-server')
  .version('1.0.0')
  .description('自定义MCP服务器')

  // 添加工具
  .addTool({
    name: 'search_notes',
    description: '搜索个人笔记',
    inputSchema: {
      type: 'object',
      properties: {
        query: { type: 'string', description: '搜索关键词' }
      },
      required: ['query']
    },
    handler: async (params) => {
      const results = await noteService.search(params.query);
      return { content: [{ type: 'text', text: JSON.stringify(results) }] };
    }
  })

  // 添加资源
  .addResource({
    uri: 'notes://recent',
    name: '最近笔记',
    description: '最近编辑的笔记列表',
    mimeType: 'application/json',
    handler: async () => {
      return { contents: [{ uri: 'notes://recent', text: '...' }] };
    }
  })

  // 添加提示模板
  .addPrompt({
    name: 'summarize',
    description: '总结笔记内容',
    arguments: [
      { name: 'noteId', description: '笔记ID', required: true }
    ],
    handler: async (args) => {
      return { messages: [{ role: 'user', content: { type: 'text', text: '...' } }] };
    }
  })

  // 配置传输
  .transport('http', { port: 3000, cors: true })

  // 配置认证
  .auth('bearer', { token: process.env.MCP_TOKEN })

  // 构建并启动
  .build();

await server.start();

核心方法:

javascript
class MCPServerBuilder {
  // 基本信息
  name(name) { return this; }
  version(version) { return this; }
  description(description) { return this; }

  // 能力注册
  addTool(toolDef) { return this; }
  addResource(resourceDef) { return this; }
  addPrompt(promptDef) { return this; }

  // 传输配置
  transport(type, options) { return this; }

  // 认证配置
  auth(type, options) { return this; }

  // 中间件
  use(middleware) { return this; }

  // 事件钩子
  onConnect(handler) { return this; }
  onDisconnect(handler) { return this; }
  onError(handler) { return this; }

  // 构建
  build() { return new MCPServer(...); }
}

2.2 MCPHttpServer

HTTP+SSE 传输实现,支持 CORS 和多种认证方式。

功能特性:

  • HTTP POST 接收 JSON-RPC 请求
  • Server-Sent Events (SSE) 推送通知
  • CORS 跨域配置
  • 四种认证方式
  • 请求限流

端点:

方法路径说明
POST/mcp/v1/message发送 JSON-RPC 请求
GET/mcp/v1/sse建立 SSE 连接
GET/mcp/v1/health健康检查
GET/mcp/v1/info服务器信息

核心方法:

javascript
class MCPHttpServer {
  // 启动服务器
  async start() { }

  // 停止服务器
  async stop() { }

  // 处理JSON-RPC请求
  async handleMessage(request) { }

  // 发送SSE事件
  sendSSEEvent(clientId, event, data) { }

  // 广播通知
  broadcast(event, data) { }
}

认证方式:

类型说明Header格式
BearerBearer Token 认证Authorization: Bearer <token>
API-KeyAPI密钥认证X-API-Key: <key>
BasicHTTP Basic 认证Authorization: Basic <base64>
Custom自定义认证用户自定义 Header

2.3 MCPStdioServer

标准输入/输出 (Stdio) 传输实现,用于本地进程间通信。

功能特性:

  • stdin 读取 JSON-RPC 请求 (行分隔)
  • stdout 写入 JSON-RPC 响应
  • stderr 用于日志输出
  • 自动重连和错误恢复

核心方法:

javascript
class MCPStdioServer {
  // 启动监听
  async start() { }

  // 停止监听
  async stop() { }

  // 处理请求
  async handleRequest(request) { }

  // 发送通知
  sendNotification(method, params) { }
}

JSON-RPC 消息格式:

json
// 请求
{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}

// 响应
{"jsonrpc":"2.0","id":1,"result":{"tools":[...]}}

// 通知
{"jsonrpc":"2.0","method":"notifications/resources/updated","params":{"uri":"notes://recent"}}

2.4 CommunityRegistry

社区注册中心,预收录 8 个常用 MCP Server。

预收录服务器:

#名称说明传输
1Filesystem文件系统操作 (读/写/搜索)Stdio
2PostgreSQLPostgreSQL 数据库查询Stdio
3SQLiteSQLite 数据库操作Stdio
4GitGit 仓库操作 (status/log/diff)Stdio
5Brave SearchBrave 搜索引擎集成HTTP
6Puppeteer浏览器自动化Stdio
7Memory知识图谱持久化Stdio
8FetchHTTP 请求和网页抓取Stdio

核心方法:

javascript
class CommunityRegistry {
  // 获取所有预收录服务器
  async getAll() { }

  // 搜索服务器
  async search(query) { }

  // 获取服务器详情
  async getDetail(serverId) { }

  // 安装服务器
  async install(serverId) { }

  // 卸载服务器
  async uninstall(serverId) { }

  // 获取已安装列表
  async getInstalled() { }

  // 检查更新
  async checkUpdates() { }

  // 刷新注册中心
  async refresh() { }
}

3. MCP 协议实现

3.1 支持的方法

生命周期:

方法说明
initialize初始化连接,交换能力
initialized初始化完成通知
ping心跳检测

工具 (Tools):

方法说明
tools/list列出可用工具
tools/call调用工具

资源 (Resources):

方法说明
resources/list列出可用资源
resources/read读取资源内容
resources/subscribe订阅资源更新
resources/unsubscribe取消订阅

提示模板 (Prompts):

方法说明
prompts/list列出可用提示模板
prompts/get获取提示模板内容

通知 (Notifications):

方法说明
notifications/resources/updated资源更新通知
notifications/tools/list_changed工具列表变更通知
notifications/prompts/list_changed提示模板列表变更通知

3.2 能力声明

json
{
  "protocolVersion": "2024-11-05",
  "capabilities": {
    "tools": { "listChanged": true },
    "resources": { "subscribe": true, "listChanged": true },
    "prompts": { "listChanged": true },
    "logging": {}
  },
  "serverInfo": {
    "name": "my-server",
    "version": "1.0.0"
  }
}

4. 前端页面

4.1 MCPServerMarketplace.vue

MCP Server 市场页:

  • 8 个预收录 Server 卡片展示
  • 每个卡片: 名称、描述、传输类型标签、安装状态
  • 搜索筛选
  • 一键安装/卸载
  • 已安装 Server 列表和状态管理
  • Server 配置编辑面板

4.2 MCPServerBuilder UI (集成在现有MCP页面)

可视化 Server 构建:

  • 拖拽式工具/资源/提示模板定义
  • 实时预览生成的配置
  • 传输方式和认证配置表单
  • 测试连接按钮
  • 导出配置文件

5. SDK 入口 (index.js)

javascript
// @chainlesschain/mcp-sdk 导出
module.exports = {
  // 构建器
  MCPServerBuilder,

  // 传输层
  MCPHttpServer,
  MCPStdioServer,

  // 社区
  CommunityRegistry,

  // 工具函数
  createServer: (options) => new MCPServerBuilder().from(options).build(),
  createHttpServer: (options) => new MCPHttpServer(options),
  createStdioServer: (options) => new MCPStdioServer(options),

  // 常量
  PROTOCOL_VERSION: '2024-11-05',
  AUTH_TYPES: ['bearer', 'api-key', 'basic', 'custom'],
  TRANSPORT_TYPES: ['http', 'stdio']
};

6. 安全设计

6.1 传输安全

  • HTTP 传输建议使用 HTTPS (TLS 1.2+)
  • Stdio 传输仅限本地进程
  • CORS 默认关闭,需要显式启用
  • 请求限流保护 (默认 100 req/min)

6.2 认证安全

  • Bearer Token: 推荐长度 32+ 字符
  • API-Key: 支持 Key 轮换
  • Basic Auth: 仅在 HTTPS 下使用
  • Custom Auth: 用户自定义验证逻辑

6.3 输入验证

  • JSON-RPC 请求格式验证
  • 工具输入参数 JSON Schema 验证
  • 资源 URI 格式验证
  • 防止 JSON 注入

6.4 社区安全

  • 预收录 Server 经过审核
  • 安装时显示权限声明
  • 沙箱执行环境
  • 可疑行为检测

7. 配置选项

7.1 HTTP Server 配置

javascript
{
  transport: 'http',
  port: 3000,
  host: '127.0.0.1',
  cors: {
    enabled: false,
    origins: ['*'],
    methods: ['GET', 'POST'],
    headers: ['Content-Type', 'Authorization']
  },
  auth: {
    type: 'bearer',  // 'bearer' | 'api-key' | 'basic' | 'custom'
    token: 'your-secret-token',
    // 或 apiKey: 'your-api-key'
    // 或 username: 'user', password: 'pass'
    // 或 handler: async (req) => { return true/false; }
  },
  rateLimit: {
    enabled: true,
    maxRequests: 100,
    windowMs: 60000
  },
  sse: {
    heartbeatInterval: 30000,
    maxConnections: 50
  }
}

7.2 Stdio Server 配置

javascript
{
  transport: 'stdio',
  encoding: 'utf-8',
  maxMessageSize: 10 * 1024 * 1024, // 10MB
  logToStderr: true
}

8. 文件结构

desktop-app-vue/src/main/mcp/sdk/
├── index.js                 # SDK入口,统一导出
├── mcp-server-builder.js    # Fluent API 构建器
├── mcp-http-server.js       # HTTP+SSE 传输
├── mcp-stdio-server.js      # Stdio 传输
├── community-registry.js    # 社区注册中心
├── json-rpc.js              # JSON-RPC 2.0 协议处理
├── auth/                    # 认证模块
│   ├── bearer.js
│   ├── api-key.js
│   ├── basic.js
│   └── custom.js
└── catalog/                 # 预收录 Server 配置
    ├── filesystem.json
    ├── postgresql.json
    ├── sqlite.json
    ├── git.json
    ├── brave-search.json
    ├── puppeteer.json
    ├── memory.json
    └── fetch.json

desktop-app-vue/src/renderer/
├── pages/mcp/
│   └── MCPServerMarketplace.vue  # MCP Server市场
└── stores/mcp.ts                 # MCP状态管理 (扩展)

9. 使用示例

9.1 最简 Server

javascript
const { createServer } = require('@chainlesschain/mcp-sdk');

const server = createServer({
  name: 'hello-server',
  version: '1.0.0',
  transport: { type: 'stdio' },
  tools: [{
    name: 'hello',
    description: '问候',
    inputSchema: {
      type: 'object',
      properties: { name: { type: 'string' } }
    },
    handler: async ({ name }) => ({
      content: [{ type: 'text', text: `你好, ${name}!` }]
    })
  }]
});

server.start();

9.2 HTTP Server + 认证

javascript
const { MCPServerBuilder } = require('@chainlesschain/mcp-sdk');

const server = new MCPServerBuilder()
  .name('secure-server')
  .version('1.0.0')
  .transport('http', { port: 8080, cors: true })
  .auth('api-key', { key: process.env.API_KEY })
  .addTool({
    name: 'query_data',
    description: '查询数据',
    inputSchema: { type: 'object', properties: { sql: { type: 'string' } } },
    handler: async ({ sql }) => {
      const result = await db.query(sql);
      return { content: [{ type: 'text', text: JSON.stringify(result) }] };
    }
  })
  .build();

await server.start();
console.log('MCP Server 运行在 http://localhost:8080');

10. 相关文档


文档版本: 1.0 最后更新: 2026-02-15

ChainlessChain 系统设计文档 — 面向开发者