@ claude- flow/ mcp
@ claude- flow/ mcp ——一个独立的模型上下文协议服务器:stdio,HTTP和WebSocket传输,一个经过计划检查的工具注册,资源,提示和任务.
支持的环境 : 节点.js 20+ → 无害环境管理 → Linux, macOS, Windows (纯 JavaScript)
快速启动
npm install @claude-flow/mcp
import { createToolRegistry, defineTool } from '@claude-flow/mcp';
const logger = { debug() {}, info() {}, warn: console.warn, error: console.error };
const registry = createToolRegistry(logger);
registry.register(defineTool('echo', 'Echo the input text', {
type: 'object', properties: { text: { type: 'string' } }, required: ['text'],
}, async ({ text }) => ({ echoed: text })));
console.log(registry.getToolNames());
const result = await registry.execute('echo', { text: 'hi' });
console.log(result.isError ?? false, result.content[0].text);
预期产出:
[ 'echo' ]
false {
"echoed": "hi"
}
用于 @claude-flow/cli,它在这个服务器上为 Ruflo 工具服务.
MCP 2025-11-25 协作者 - 独立模式上下文协议服务器安装,并配备全部资源、提示和任务支持
特征
- MCP 2025-11-25 协作者 - 全面规格支持
- 高性能服务器 - <400ms启动时间
- 多重运输 - Stdio、HTTP、WebSocket、进行中
- 资源 - 列表, 读取, 用缓存订阅
- 提示 - 有参数和嵌入式资源的模板
- 任务 - 有进展和取消的同步业务
- 倾斜 - 大型数据集基于光标的平面图
- 连接集合 - 最大10个连接,可配置
- 快速工具注册 - O(1) 查询, < 10ms登记
- 会话管理 - 超时处理、认证
- 警卫 - CORS、Helmet、认证信条
- 无依赖 - 没有@claude-flow/* 依赖关系
安装
npm install @claude-flow/mcp
快速启动
import { quickStart, defineTool } from '@claude-flow/mcp';
// Create and start server
const server = await quickStart({
transport: 'stdio',
name: 'My MCP Server',
});
// Register custom tools
server.registerTool(defineTool(
'greet',
'Greet a user',
{
type: 'object',
properties: {
name: { type: 'string', description: 'User name' }
},
required: ['name']
},
async ({ name }) => ({ message: `Hello, ${name}!` })
));
// Start listening
await server.start();
运输
Stdio (默认)
import { createMCPServer } from '@claude-flow/mcp';
const server = createMCPServer({
transport: 'stdio',
name: 'Stdio Server',
}, logger);
await server.start();
HTTP 密码
const server = createMCPServer({
transport: 'http',
host: 'localhost',
port: 3000,
corsEnabled: true,
corsOrigins: ['http://localhost:8080'],
auth: {
enabled: true,
method: 'token',
tokens: ['secret-token'],
},
}, logger);
await server.start();
// Server at http://localhost:3000
// WebSocket at ws://localhost:3000/ws
网络安全套
const server = createMCPServer({
transport: 'websocket',
host: 'localhost',
port: 3001,
maxConnections: 100,
heartbeatInterval: 30000,
}, logger);
await server.start();
// WebSocket at ws://localhost:3001/ws
工具登记
import { createToolRegistry, defineTool } from '@claude-flow/mcp';
const registry = createToolRegistry(logger);
// Register tool
registry.register({
name: 'calculate',
description: 'Perform calculations',
inputSchema: {
type: 'object',
properties: {
expression: { type: 'string' }
}
},
handler: async ({ expression }) => {
return { result: eval(expression) };
},
category: 'math',
tags: ['calculator'],
});
// Execute tool
const result = await registry.execute('calculate', { expression: '2 + 2' });
// Search tools
const mathTools = registry.getByCategory('math');
const stats = registry.getStats();
会话管理
import { createSessionManager } from '@claude-flow/mcp';
const sessions = createSessionManager(logger, {
maxSessions: 100,
sessionTimeout: 30 * 60 * 1000, // 30 minutes
});
// Create session
const session = sessions.createSession('http');
// Initialize with client info
sessions.initializeSession(session.id, {
protocolVersion: '2024-11-05', // MCP spec: YYYY-MM-DD string
capabilities: { tools: { listChanged: true } },
clientInfo: { name: 'Claude', version: '1.0' },
});
// Get metrics
const metrics = sessions.getSessionMetrics();
// { total: 1, active: 1, authenticated: 0, expired: 0 }
连接池
import { createConnectionPool } from '@claude-flow/mcp';
const pool = createConnectionPool({
maxConnections: 10,
minConnections: 2,
idleTimeout: 30000,
acquireTimeout: 5000,
}, logger, 'http');
// Acquire connection
const conn = await pool.acquire();
// Use connection...
// Release back to pool
pool.release(conn);
// Get stats
const stats = pool.getStats();
// { totalConnections: 5, idleConnections: 4, busyConnections: 1, ... }
API 参考
服务器
interface IMCPServer {
start(): Promise<void>;
stop(): Promise<void>;
registerTool(tool: MCPTool): boolean;
registerTools(tools: MCPTool[]): { registered: number; failed: string[] };
getHealthStatus(): Promise<{ healthy: boolean; error?: string; metrics?: Record<string, number> }>;
getMetrics(): MCPServerMetrics;
getSessions(): MCPSession[];
getSession(sessionId: string): MCPSession | undefined;
terminateSession(sessionId: string): boolean;
}
工具
interface MCPTool<TInput = unknown, TOutput = unknown> {
name: string;
description: string;
inputSchema: JSONSchema;
handler: (input: TInput, context?: ToolContext) => Promise<TOutput>;
category?: string;
tags?: string[];
cacheable?: boolean;
cacheTTL?: number;
timeout?: number;
}
运输
interface ITransport {
readonly type: TransportType;
start(): Promise<void>;
stop(): Promise<void>;
onRequest(handler: RequestHandler): void;
onNotification(handler: NotificationHandler): void;
sendNotification?(notification: MCPNotification): Promise<void>;
getHealthStatus(): Promise<TransportHealthStatus>;
}
内建工具
服务器自动注册这些系统工具 :
| 工具 | 说明 |
|---|---|
system/info | 获取服务器信息 |
system/health | 获得健康状况 |
system/metrics | 获取服务器参数 |
tools/list-detailed | 列出所有详细工具 |
资源(MCP 2025-11-25)
import { createMCPServer, createTextResource } from '@claude-flow/mcp';
const server = createMCPServer({ transport: 'stdio' }, logger);
const resourceRegistry = server.getResourceRegistry();
// Register a text resource
const { resource, handler } = createTextResource(
'file://readme.txt',
'README',
'Welcome to the application!',
{ mimeType: 'text/plain' }
);
resourceRegistry.registerResource(resource, handler);
// Register with custom handler
resourceRegistry.registerResource(
{
uri: 'db://users/{id}',
name: 'User Data',
description: 'Get user by ID',
mimeType: 'application/json',
},
async (uri) => {
const id = uri.split('/').pop();
const user = await fetchUser(id);
return [{ uri, mimeType: 'application/json', text: JSON.stringify(user) }];
}
);
// Subscribe to updates
resourceRegistry.subscribe('file://readme.txt', (uri, content) => {
console.log('Resource updated:', uri);
});
提示(MCP 2025-11-25)
import { createMCPServer, definePrompt, textMessage, interpolate } from '@claude-flow/mcp';
const server = createMCPServer({ transport: 'stdio' }, logger);
const promptRegistry = server.getPromptRegistry();
// Define a prompt with arguments
const codeReviewPrompt = definePrompt(
'code_review',
'Review code for quality and best practices',
async (args) => [
textMessage('user', `Please review this ${args.language} code:\n\n${args.code}`),
],
{
title: 'Code Review',
arguments: [
{ name: 'code', description: 'The code to review', required: true },
{ name: 'language', description: 'Programming language', required: false },
],
}
);
promptRegistry.register(codeReviewPrompt);
// Get prompt with arguments
const result = await promptRegistry.get('code_review', {
code: 'function hello() { return "world"; }',
language: 'JavaScript',
});
任务(MCP 2025-11-25)
import { createMCPServer } from '@claude-flow/mcp';
const server = createMCPServer({ transport: 'stdio' }, logger);
const taskManager = server.getTaskManager();
// Create a long-running task
const taskId = taskManager.createTask(async (reportProgress, signal) => {
for (let i = 0; i <= 100; i += 10) {
if (signal.aborted) throw new Error('Task cancelled');
reportProgress({
progress: i,
total: 100,
message: `Processing... ${i}%`,
});
await new Promise(r => setTimeout(r, 100));
}
return { success: true, processedItems: 100 };
});
// Get task status
const status = taskManager.getTask(taskId);
// Wait for completion
const result = await taskManager.waitForTask(taskId);
// Cancel a task
taskManager.cancelTask(taskId, 'User requested cancellation');
MCP 支持的方法
| 方法 | 说明 |
|---|---|
initialize | 初始化连接 |
tools/list | 列出可用的工具 |
tools/call | 执行工具 |
resources/list | 用页形列出资源 |
resources/read | 读取资源内容 |
resources/subscribe | 订阅更新 |
resources/unsubscribe | 从更新中取消订阅 |
prompts/list | 带有页标的列表提示符 |
prompts/get | 获取参数的快捷键 |
tasks/status | 获取任务状态 |
tasks/cancel | 取消运行中的任务 |
completion/complete | 自动完成参数 |
logging/setLevel | 设置日志级别 |
ping | 保持存活状态 |
绩效目标
| 度量衡 | 目标 |
|---|---|
| 服务器启动 | < 400 分钟 |
| 工具注册 | < 10 分钟 |
| 工具执行间接费用 | < 50 分钟 |
| 连接获取 | < 5 ms 时 |
| 连接释放 | < 1 分钟 |
警卫
认证
const server = createMCPServer({
auth: {
enabled: true,
method: 'token',
tokens: ['your-secret-token'],
},
}, logger);
(简体中文)
const server = createMCPServer({
transport: 'http',
corsEnabled: true,
corsOrigins: ['https://your-domain.com'],
}, logger);
错误代码
const ErrorCodes = {
PARSE_ERROR: -32700,
INVALID_REQUEST: -32600,
METHOD_NOT_FOUND: -32601,
INVALID_PARAMS: -32602,
INTERNAL_ERROR: -32603,
SERVER_NOT_INITIALIZED: -32002,
AUTHENTICATION_REQUIRED: -32001,
};
许可证
麻省理工学院