{"_id":"@aiyou-dev/mcp","_rev":"2-b3ff55735ce6ca5f1e88b4eef7760799","name":"@aiyou-dev/mcp","dist-tags":{"latest":"3.0.0-alpha.8"},"versions":{"3.0.0-alpha.8":{"name":"@aiyou-dev/mcp","version":"3.0.0-alpha.8","keywords":["mcp","model-context-protocol","claude","gemini","ai-agents","json-rpc","stdio","websocket","tool-registry","aiyou-dev"],"author":{"url":"https://faugust.com","name":"Francisco August","email":"support@faugust.com"},"license":"MIT","_id":"@aiyou-dev/mcp@3.0.0-alpha.8","maintainers":[{"name":"augustdev","email":"francisco.august.fa@gmail.com"}],"homepage":"https://aiyou.dev","bugs":{"url":"https://github.com/faugustdev/aiyou-dev/issues"},"dist":{"shasum":"6334bb8e095cb6d685083f9de9fe38c06279cbe6","tarball":"https://registry.npmjs.org/@aiyou-dev/mcp/-/mcp-3.0.0-alpha.8.tgz","fileCount":70,"integrity":"sha512-EEj00YNf6dSH4PKTWMWPzlqIVDRgYNEjZnd56Zb0t3rOjzp7ozKSKUemTPSa9Pn+cu/3T7Gt00XEEAM9W1a/qw==","signatures":[{"sig":"MEQCIGXQzCr3TYTZq+F+RpkstrKZZZJCqXwTQzafdnpmr+W+AiABbR4TsiEOPfACxTcjoqdZcOdTfTShN9CCZX1ihS0/ug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":428698},"main":"dist/index.js","type":"module","_from":"file:aiyou-dev-mcp-3.0.0-alpha.8.tgz","types":"dist/index.d.ts","exports":{".":"./dist/index.js","./*":"./dist/*.js"},"scripts":{"test":"vitest run","build":"tsc"},"_npmUser":{"name":"augustdev","email":"francisco.august.fa@gmail.com"},"_resolved":"/private/var/folders/q9/d37fsdnx6cx5_yjppth4w1rm0000gn/T/499c44026d8b84c41fee007f793fe5d8/aiyou-dev-mcp-3.0.0-alpha.8.tgz","_integrity":"sha512-EEj00YNf6dSH4PKTWMWPzlqIVDRgYNEjZnd56Zb0t3rOjzp7ozKSKUemTPSa9Pn+cu/3T7Gt00XEEAM9W1a/qw==","repository":{"url":"git+https://github.com/faugustdev/aiyou-dev.git","type":"git","directory":"v3/@aiyou-dev/mcp"},"_npmVersion":"11.11.0","description":"Standalone MCP (Model Context Protocol) server - stdio/http/websocket transports, connection pooling, tool registry","directories":{},"sideEffects":false,"_nodeVersion":"25.8.0","dependencies":{"ws":"^8.14.2","ajv":"^8.12.0","cors":"^2.8.5","helmet":"^7.1.0","express":"^4.18.2"},"publishConfig":{"tag":"latest","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.0.16","@types/ws":"^8.5.10","@types/cors":"^2.8.17","@types/express":"^4.17.21"},"_npmOperationalInternal":{"tmp":"tmp/mcp_3.0.0-alpha.8_1773621593425_0.28744513687514806","host":"s3://npm-registry-packages-npm-production"},"deprecated":"This package has been replaced by @aiyou-dev/cli"}},"time":{"created":"2026-03-16T00:39:53.323Z","modified":"2026-03-31T01:15:23.178Z","3.0.0-alpha.8":"2026-03-16T00:39:53.630Z"},"bugs":{"url":"https://github.com/faugustdev/aiyou-dev/issues"},"author":{"url":"https://faugust.com","name":"Francisco August","email":"support@faugust.com"},"license":"MIT","homepage":"https://aiyou.dev","keywords":["mcp","model-context-protocol","claude","gemini","ai-agents","json-rpc","stdio","websocket","tool-registry","aiyou-dev"],"repository":{"url":"git+https://github.com/faugustdev/aiyou-dev.git","type":"git","directory":"v3/@aiyou-dev/mcp"},"description":"Standalone MCP (Model Context Protocol) server - stdio/http/websocket transports, connection pooling, tool registry","maintainers":[{"name":"augustdev","email":"francisco.august.fa@gmail.com"}],"readme":"# @claude-flow/mcp\n\n[![npm version](https://img.shields.io/npm/v/@claude-flow/mcp.svg)](https://www.npmjs.com/package/@claude-flow/mcp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-blue.svg)](https://www.typescriptlang.org/)\n[![MCP 2025-11-25](https://img.shields.io/badge/MCP-2025--11--25-blue.svg)](https://modelcontextprotocol.io)\n[![Standalone](https://img.shields.io/badge/Module-Standalone-green.svg)](https://github.com/ruvnet/claude-flow)\n\n> **MCP 2025-11-25 Compliant** - Standalone Model Context Protocol server implementation with full Resources, Prompts, and Tasks support\n\n## Features\n\n- **MCP 2025-11-25 Compliant** - Full specification support\n- **High-Performance Server** - <400ms startup time\n- **Multiple Transports** - stdio, HTTP, WebSocket, in-process\n- **Resources** - list, read, subscribe with caching\n- **Prompts** - templates with arguments and embedded resources\n- **Tasks** - Async operations with progress and cancellation\n- **Pagination** - Cursor-based pagination for large datasets\n- **Connection Pooling** - Max 10 connections, configurable\n- **Fast Tool Registry** - O(1) lookup, <10ms registration\n- **Session Management** - Timeout handling, authentication\n- **Security** - CORS, Helmet, auth tokens\n- **Zero Dependencies** - No @claude-flow/* dependencies\n\n## Installation\n\n```bash\nnpm install @claude-flow/mcp\n```\n\n## Quick Start\n\n```typescript\nimport { quickStart, defineTool } from '@claude-flow/mcp';\n\n// Create and start server\nconst server = await quickStart({\n  transport: 'stdio',\n  name: 'My MCP Server',\n});\n\n// Register custom tools\nserver.registerTool(defineTool(\n  'greet',\n  'Greet a user',\n  {\n    type: 'object',\n    properties: {\n      name: { type: 'string', description: 'User name' }\n    },\n    required: ['name']\n  },\n  async ({ name }) => ({ message: `Hello, ${name}!` })\n));\n\n// Start listening\nawait server.start();\n```\n\n## Transports\n\n### Stdio (Default)\n\n```typescript\nimport { createMCPServer } from '@claude-flow/mcp';\n\nconst server = createMCPServer({\n  transport: 'stdio',\n  name: 'Stdio Server',\n}, logger);\n\nawait server.start();\n```\n\n### HTTP\n\n```typescript\nconst server = createMCPServer({\n  transport: 'http',\n  host: 'localhost',\n  port: 3000,\n  corsEnabled: true,\n  corsOrigins: ['http://localhost:8080'],\n  auth: {\n    enabled: true,\n    method: 'token',\n    tokens: ['secret-token'],\n  },\n}, logger);\n\nawait server.start();\n// Server at http://localhost:3000\n// WebSocket at ws://localhost:3000/ws\n```\n\n### WebSocket\n\n```typescript\nconst server = createMCPServer({\n  transport: 'websocket',\n  host: 'localhost',\n  port: 3001,\n  maxConnections: 100,\n  heartbeatInterval: 30000,\n}, logger);\n\nawait server.start();\n// WebSocket at ws://localhost:3001/ws\n```\n\n## Tool Registry\n\n```typescript\nimport { createToolRegistry, defineTool } from '@claude-flow/mcp';\n\nconst registry = createToolRegistry(logger);\n\n// Register tool\nregistry.register({\n  name: 'calculate',\n  description: 'Perform calculations',\n  inputSchema: {\n    type: 'object',\n    properties: {\n      expression: { type: 'string' }\n    }\n  },\n  handler: async ({ expression }) => {\n    return { result: eval(expression) };\n  },\n  category: 'math',\n  tags: ['calculator'],\n});\n\n// Execute tool\nconst result = await registry.execute('calculate', { expression: '2 + 2' });\n\n// Search tools\nconst mathTools = registry.getByCategory('math');\nconst stats = registry.getStats();\n```\n\n## Session Management\n\n```typescript\nimport { createSessionManager } from '@claude-flow/mcp';\n\nconst sessions = createSessionManager(logger, {\n  maxSessions: 100,\n  sessionTimeout: 30 * 60 * 1000, // 30 minutes\n});\n\n// Create session\nconst session = sessions.createSession('http');\n\n// Initialize with client info\nsessions.initializeSession(session.id, {\n  protocolVersion: { major: 2024, minor: 11, patch: 5 },\n  capabilities: { tools: { listChanged: true } },\n  clientInfo: { name: 'Claude', version: '1.0' },\n});\n\n// Get metrics\nconst metrics = sessions.getSessionMetrics();\n// { total: 1, active: 1, authenticated: 0, expired: 0 }\n```\n\n## Connection Pool\n\n```typescript\nimport { createConnectionPool } from '@claude-flow/mcp';\n\nconst pool = createConnectionPool({\n  maxConnections: 10,\n  minConnections: 2,\n  idleTimeout: 30000,\n  acquireTimeout: 5000,\n}, logger, 'http');\n\n// Acquire connection\nconst conn = await pool.acquire();\n\n// Use connection...\n\n// Release back to pool\npool.release(conn);\n\n// Get stats\nconst stats = pool.getStats();\n// { totalConnections: 5, idleConnections: 4, busyConnections: 1, ... }\n```\n\n## API Reference\n\n### Server\n\n```typescript\ninterface IMCPServer {\n  start(): Promise<void>;\n  stop(): Promise<void>;\n  registerTool(tool: MCPTool): boolean;\n  registerTools(tools: MCPTool[]): { registered: number; failed: string[] };\n  getHealthStatus(): Promise<{ healthy: boolean; error?: string; metrics?: Record<string, number> }>;\n  getMetrics(): MCPServerMetrics;\n  getSessions(): MCPSession[];\n  getSession(sessionId: string): MCPSession | undefined;\n  terminateSession(sessionId: string): boolean;\n}\n```\n\n### Tool\n\n```typescript\ninterface MCPTool<TInput = unknown, TOutput = unknown> {\n  name: string;\n  description: string;\n  inputSchema: JSONSchema;\n  handler: (input: TInput, context?: ToolContext) => Promise<TOutput>;\n  category?: string;\n  tags?: string[];\n  cacheable?: boolean;\n  cacheTTL?: number;\n  timeout?: number;\n}\n```\n\n### Transport\n\n```typescript\ninterface ITransport {\n  readonly type: TransportType;\n  start(): Promise<void>;\n  stop(): Promise<void>;\n  onRequest(handler: RequestHandler): void;\n  onNotification(handler: NotificationHandler): void;\n  sendNotification?(notification: MCPNotification): Promise<void>;\n  getHealthStatus(): Promise<TransportHealthStatus>;\n}\n```\n\n## Built-in Tools\n\nThe server automatically registers these system tools:\n\n| Tool | Description |\n|------|-------------|\n| `system/info` | Get server information |\n| `system/health` | Get health status |\n| `system/metrics` | Get server metrics |\n| `tools/list-detailed` | List all tools with details |\n\n## Resources (MCP 2025-11-25)\n\n```typescript\nimport { createMCPServer, createTextResource } from '@claude-flow/mcp';\n\nconst server = createMCPServer({ transport: 'stdio' }, logger);\nconst resourceRegistry = server.getResourceRegistry();\n\n// Register a text resource\nconst { resource, handler } = createTextResource(\n  'file://readme.txt',\n  'README',\n  'Welcome to the application!',\n  { mimeType: 'text/plain' }\n);\nresourceRegistry.registerResource(resource, handler);\n\n// Register with custom handler\nresourceRegistry.registerResource(\n  {\n    uri: 'db://users/{id}',\n    name: 'User Data',\n    description: 'Get user by ID',\n    mimeType: 'application/json',\n  },\n  async (uri) => {\n    const id = uri.split('/').pop();\n    const user = await fetchUser(id);\n    return [{ uri, mimeType: 'application/json', text: JSON.stringify(user) }];\n  }\n);\n\n// Subscribe to updates\nresourceRegistry.subscribe('file://readme.txt', (uri, content) => {\n  console.log('Resource updated:', uri);\n});\n```\n\n## Prompts (MCP 2025-11-25)\n\n```typescript\nimport { createMCPServer, definePrompt, textMessage, interpolate } from '@claude-flow/mcp';\n\nconst server = createMCPServer({ transport: 'stdio' }, logger);\nconst promptRegistry = server.getPromptRegistry();\n\n// Define a prompt with arguments\nconst codeReviewPrompt = definePrompt(\n  'code_review',\n  'Review code for quality and best practices',\n  async (args) => [\n    textMessage('user', `Please review this ${args.language} code:\\n\\n${args.code}`),\n  ],\n  {\n    title: 'Code Review',\n    arguments: [\n      { name: 'code', description: 'The code to review', required: true },\n      { name: 'language', description: 'Programming language', required: false },\n    ],\n  }\n);\n\npromptRegistry.register(codeReviewPrompt);\n\n// Get prompt with arguments\nconst result = await promptRegistry.get('code_review', {\n  code: 'function hello() { return \"world\"; }',\n  language: 'JavaScript',\n});\n```\n\n## Tasks (MCP 2025-11-25)\n\n```typescript\nimport { createMCPServer } from '@claude-flow/mcp';\n\nconst server = createMCPServer({ transport: 'stdio' }, logger);\nconst taskManager = server.getTaskManager();\n\n// Create a long-running task\nconst taskId = taskManager.createTask(async (reportProgress, signal) => {\n  for (let i = 0; i <= 100; i += 10) {\n    if (signal.aborted) throw new Error('Task cancelled');\n\n    reportProgress({\n      progress: i,\n      total: 100,\n      message: `Processing... ${i}%`,\n    });\n\n    await new Promise(r => setTimeout(r, 100));\n  }\n\n  return { success: true, processedItems: 100 };\n});\n\n// Get task status\nconst status = taskManager.getTask(taskId);\n\n// Wait for completion\nconst result = await taskManager.waitForTask(taskId);\n\n// Cancel a task\ntaskManager.cancelTask(taskId, 'User requested cancellation');\n```\n\n## MCP Methods Supported\n\n| Method | Description |\n|--------|-------------|\n| `initialize` | Initialize connection |\n| `tools/list` | List available tools |\n| `tools/call` | Execute a tool |\n| `resources/list` | List resources with pagination |\n| `resources/read` | Read resource content |\n| `resources/subscribe` | Subscribe to updates |\n| `resources/unsubscribe` | Unsubscribe from updates |\n| `prompts/list` | List prompts with pagination |\n| `prompts/get` | Get prompt with arguments |\n| `tasks/status` | Get task status |\n| `tasks/cancel` | Cancel a running task |\n| `completion/complete` | Auto-complete arguments |\n| `logging/setLevel` | Set log level |\n| `ping` | Keep-alive |\n\n## Performance Targets\n\n| Metric | Target |\n|--------|--------|\n| Server startup | <400ms |\n| Tool registration | <10ms |\n| Tool execution overhead | <50ms |\n| Connection acquire | <5ms |\n| Connection release | <1ms |\n\n## Security\n\n### Authentication\n\n```typescript\nconst server = createMCPServer({\n  auth: {\n    enabled: true,\n    method: 'token',\n    tokens: ['your-secret-token'],\n  },\n}, logger);\n```\n\n### CORS\n\n```typescript\nconst server = createMCPServer({\n  transport: 'http',\n  corsEnabled: true,\n  corsOrigins: ['https://your-domain.com'],\n}, logger);\n```\n\n## Error Codes\n\n```typescript\nconst ErrorCodes = {\n  PARSE_ERROR: -32700,\n  INVALID_REQUEST: -32600,\n  METHOD_NOT_FOUND: -32601,\n  INVALID_PARAMS: -32602,\n  INTERNAL_ERROR: -32603,\n  SERVER_NOT_INITIALIZED: -32002,\n  AUTHENTICATION_REQUIRED: -32001,\n};\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}