Install any skill in seconds. Free to start, no credit card required.
Get Started Free →MCP server optimization and transport layer enhancement for claude-flow v3. Implements connection pooling, load balancing, tool registry optimization, and performance monitoring for sub-100ms response times.
.claude/skills/ruvnet-v3-mcp-optimization/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 468% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 159% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 154% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 198% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 427% | 0% |
Optimizes claude-flow v3 MCP (Model Context Protocol) server implementation with advanced transport layer optimizations, connection pooling, load balancing, and comprehensive performance monitoring to achieve sub-100ms response times.
bash# Initialize MCP optimization analysis Task("MCP architecture", "Analyze current MCP server performance and bottlenecks", "mcp-specialist") # Optimization implementation (parallel) Task("Connection pooling", "Implement MCP connection pooling and reuse", "mcp-specialist") Task("Load balancing", "Add dynamic load balancing for MCP tools", "mcp-specialist") Task("Transport optimization", "Optimize transport layer performance", "mcp-specialist")
Current MCP Issues:
├── Cold Start Latency: ~1.8s MCP server init
├── Connection Overhead: New connection per request
├── Tool Registry: Linear search O(n) for 213+ tools
├── Transport Layer: No connection reuse
└── Memory Usage: No cleanup of idle connections
Target Performance:
├── Startup Time: <400ms (4.5x improvement)
├── Tool Lookup: <5ms (O(1) hash table)
├── Connection Reuse: 90%+ connection pool hits
├── Response Time: <100ms p95
└── Memory Efficiency: 50% reductiontypescript// src$core$mcp$mcp-server.ts import { Server } from '@modelcontextprotocol$sdk$server$index.js'; import { StdioServerTransport } from '@modelcontextprotocol$sdk$server$stdio.js'; interface OptimizedMCPConfig { // Connection pooling maxConnections: number; idleTimeoutMs: number; connectionReuseEnabled: boolean; // Tool registry toolCacheEnabled: boolean; toolIndexType: 'hash' | 'trie'; // Performance requestTimeoutMs: number; batchingEnabled: boolean; compressionEnabled: boolean; // Monitoring metricsEnabled: boolean; healthCheckIntervalMs: number; } export class OptimizedMCPServer { private server: Server; private connectionPool: ConnectionPool; private toolRegistry: FastToolRegistry; private loadBalancer: MCPLoadBalancer; private metrics: MCPMetrics; constructor(config: OptimizedMCPConfig) { this.server = new Server({ name: 'claude-flow-v3', version: '3.0.0' }, { capabilities: { tools: { listChanged: true }, resources: { subscribe: true, listChanged: true }, prompts: { listChanged: true } } }); this.connectionPool = new ConnectionPool(config); this.toolRegistry = new FastToolRegistry(config.toolIndexType); this.loadBalancer = new MCPLoadBalancer(); this.metrics = new MCPMetrics(config.metricsEnabled); } async start(): Promise<void> { // Pre-warm connection pool await this.connectionPool.preWarm(); // Pre-build tool index await this.toolRegistry.buildIndex(); // Setup request handlers with optimizations this.setupOptimizedHandlers(); // Start health monitoring this.startHealthMonitoring(); // Start server const transport = new StdioServerTransport(); await this.server.connect(transport); this.metrics.recordStartup(); } }
typescript// src$core$mcp$connection-pool.ts interface PooledConnection { id: string; connection: MCPConnection; lastUsed: number; usageCount: number; isHealthy: boolean; } export class ConnectionPool { private pool: Map<string, PooledConnection> = new Map(); private readonly config: ConnectionPoolConfig; private healthChecker: HealthChecker; constructor(config: ConnectionPoolConfig) { this.config = { maxConnections: 50, minConnections: 5, idleTimeoutMs: 300000, // 5 minutes maxUsageCount: 1000, healthCheckIntervalMs: 30000, ...config }; this.healthChecker = new HealthChecker(this.config.healthCheckIntervalMs); } async getConnection(endpoint: string): Promise<MCPConnection> { const start = performance.now(); // Try to get from pool first const pooled = this.findAvailableConnection(endpoint); if (pooled) { pooled.lastUsed = Date.now(); pooled.usageCount++; this.recordMetric('pool_hit', performance.now() - start); return pooled.connection; } // Check pool capacity if (this.pool.size >= this.config.maxConnections) { await this.evictLeastUsedConnection(); } // Create new connection const connection = await this.createConnection(endpoint); const pooledConn: PooledConnection = { id: this.generateConnectionId(), connection, lastUsed: Date.now(), usageCount: 1, isHealthy: true }; this.pool.set(pooledConn.id, pooledConn); this.recordMetric('pool_miss', performance.now() - start); return connection; } async releaseConnection(connection: MCPConnection): Promise<void> { // Mark connection as available for reuse const pooled = this.findConnectionById(connection.id); if (pooled) { // Check if connection should be retired if (pooled.usageCount >= this.config.maxUsageCount) { await this.removeConnection(pooled.id); } } } async preWarm(): Promise<void> { const connections: Promise<MCPConnection>[] = []; for (let i = 0; i < this.config.minConnections; i++) { connections.push(this.createConnection('default')); } await Promise.all(connections); } private async evictLeastUsedConnection(): Promise<void> { let oldestConn: PooledConnection | null = null; let oldestTime = Date.now(); for (const conn of this.pool.values()) { if (conn.lastUsed < oldestTime) { oldestTime = conn.lastUsed; oldestConn = conn; } } if (oldestConn) { await this.removeConnection(oldestConn.id); } } private findAvailableConnection(endpoint: string): PooledConnection | null { for (const conn of this.pool.values()) { if (conn.isHealthy && conn.connection.endpoint === endpoint && Date.now() - conn.lastUsed < this.config.idleTimeoutMs) { return conn; } } return null; } }
typescript// src$core$mcp$fast-tool-registry.ts interface ToolIndexEntry { name: string; handler: ToolHandler; metadata: ToolMetadata; usageCount: number; avgLatencyMs: number; } export class FastToolRegistry { private toolIndex: Map<string, ToolIndexEntry> = new Map(); private categoryIndex: Map<string, string[]> = new Map(); private fuzzyMatcher: FuzzyMatcher; private cache: LRUCache<string, ToolIndexEntry>; constructor(indexType: 'hash' | 'trie' = 'hash') { this.fuzzyMatcher = new FuzzyMatcher(); this.cache = new LRUCache<string, ToolIndexEntry>(1000); // Cache 1000 most used tools } async buildIndex(): Promise<void> { const start = performance.now(); // Load all available tools const tools = await this.loadAllTools(); // Build hash index for O(1) lookup for (const tool of tools) { const entry: ToolIndexEntry = { name: tool.name, handler: tool.handler, metadata: tool.metadata, usageCount: 0, avgLatencyMs: 0 }; this.toolIndex.set(tool.name, entry); // Build category index const category = tool.metadata.category || 'general'; if (!this.categoryIndex.has(category)) { this.categoryIndex.set(category, []); } this.categoryIndex.get(category)!.push(tool.name); } // Build fuzzy search index await this.fuzzyMatcher.buildIndex(tools.map(t => t.name)); console.log(`Tool index built in ${(performance.now() - start).toFixed(2)}ms for ${tools.length} tools`); } findTool(name: string): ToolIndexEntry | null { // Try cache first const cached = this.cache.get(name); if (cached) return cached; // Try exact match const exact = this.toolIndex.get(name); if (exact) { this.cache.set(name, exact); return exact; } // Try fuzzy match const fuzzyMatches = this.fuzzyMatcher.search(name, 1); if (fuzzyMatches.length > 0) { const match = this.toolIndex.get(fuzzyMatches[0]); if (match) { this.cache.set(name, match); return match; } } return null; } findToolsByCategory(category: string): ToolIndexEntry[] { const toolNames = this.categoryIndex.get(category) || []; return toolNames .map(name => this.toolIndex.get(name)) .filter(entry => entry !== undefined) as ToolIndexEntry[]; } getMostUsedTools(limit: number = 10): ToolIndexEntry[] { return Array.from(this.toolIndex.values()) .sort((a, b) => b.usageCount - a.usageCount) .slice(0, limit); } recordToolUsage(toolName: string, latencyMs: number): void { const entry = this.toolIndex.get(toolName); if (entry) { entry.usageCount++; // Moving average for latency entry.avgLatencyMs = (entry.avgLatencyMs + latencyMs) / 2; } } }
typescript// src$core$mcp$load-balancer.ts interface ServerInstance { id: string; endpoint: string; load: number; responseTime: number; isHealthy: boolean; maxConnections: number; currentConnections: number; } export class MCPLoadBalancer { private servers: Map<string, ServerInstance> = new Map(); private routingStrategy: RoutingStrategy = 'least-connections'; addServer(server: ServerInstance): void { this.servers.set(server.id, server); } selectServer(toolCategory?: string): ServerInstance | null { const healthyServers = Array.from(this.servers.values()) .filter(server => server.isHealthy); if (healthyServers.length === 0) return null; switch (this.routingStrategy) { case 'round-robin': return this.roundRobinSelection(healthyServers); case 'least-connections': return this.leastConnectionsSelection(healthyServers); case 'response-time': return this.responseTimeSelection(healthyServers); case 'weighted': return this.weightedSelection(healthyServers, toolCategory); default: return healthyServers[0]; } } private leastConnectionsSelection(servers: ServerInstance[]): ServerInstance { return servers.reduce((least, current) => current.currentConnections < least.currentConnections ? current : least ); } private responseTimeSelection(servers: ServerInstance[]): ServerInstance { return servers.reduce((fastest, current) => current.responseTime < fastest.responseTime ? current : fastest ); } private weightedSelection(servers: ServerInstance[], category?: string): ServerInstance { // Prefer servers with lower load and better response time const scored = servers.map(server => ({ server, score: this.calculateServerScore(server, category) })); scored.sort((a, b) => b.score - a.score); return scored[0].server; } private calculateServerScore(server: ServerInstance, category?: string): number { const loadFactor = 1 - (server.currentConnections / server.maxConnections); const responseFactor = 1 / (server.responseTime + 1); const categoryBonus = this.getCategoryBonus(server, category); return loadFactor * 0.4 + responseFactor * 0.4 + categoryBonus * 0.2; } updateServerMetrics(serverId: string, metrics: Partial<ServerInstance>): void { const server = this.servers.get(serverId); if (server) { Object.assign(server, metrics); } } }
typescript// src$core$mcp$optimized-transport.ts export class OptimizedTransport { private compression: boolean = true; private batching: boolean = true; private batchBuffer: MCPMessage[] = []; private batchTimeout: NodeJS.Timeout | null = null; constructor(private config: TransportConfig) {} async send(message: MCPMessage): Promise<void> { if (this.batching && this.canBatch(message)) { this.addToBatch(message); return; } await this.sendImmediate(message); } private async sendImmediate(message: MCPMessage): Promise<void> { const start = performance.now(); // Compress if enabled const payload = this.compression ? await this.compress(message) : message; // Send through transport await this.transport.send(payload); // Record metrics this.recordLatency(performance.now() - start); } private addToBatch(message: MCPMessage): void { this.batchBuffer.push(message); // Start batch timeout if not already running if (!this.batchTimeout) { this.batchTimeout = setTimeout( () => this.flushBatch(), this.config.batchTimeoutMs || 10 ); } // Flush if batch is full if (this.batchBuffer.length >= this.config.maxBatchSize) { this.flushBatch(); } } private async flushBatch(): Promise<void> { if (this.batchBuffer.length === 0) return; const batch = this.batchBuffer.splice(0); this.batchTimeout = null; // Send as single batched message await this.sendImmediate({ type: 'batch', messages: batch }); } private canBatch(message: MCPMessage): boolean { // Don't batch urgent messages or responses return message.type !== 'response' && message.priority !== 'high' && message.type !== 'error'; } private async compress(data: any): Promise<Buffer> { // Use fast compression for smaller messages return gzipSync(JSON.stringify(data)); } }
typescript// src$core$mcp$metrics.ts interface MCPMetrics { requestCount: number; errorCount: number; avgResponseTime: number; p95ResponseTime: number; connectionPoolHits: number; connectionPoolMisses: number; toolLookupTime: number; startupTime: number; } export class MCPMetricsCollector { private metrics: MCPMetrics; private responseTimeBuffer: number[] = []; private readonly bufferSize = 1000; constructor() { this.metrics = this.createInitialMetrics(); } recordRequest(latencyMs: number): void { this.metrics.requestCount++; this.updateResponseTimes(latencyMs); } recordError(): void { this.metrics.errorCount++; } recordConnectionPoolHit(): void { this.metrics.connectionPoolHits++; } recordConnectionPoolMiss(): void { this.metrics.connectionPoolMisses++; } recordToolLookup(latencyMs: number): void { this.metrics.toolLookupTime = this.updateMovingAverage( this.metrics.toolLookupTime, latencyMs ); } recordStartup(latencyMs: number): void { this.metrics.startupTime = latencyMs; } getMetrics(): MCPMetrics { return { ...this.metrics }; } getHealthStatus(): HealthStatus { const errorRate = this.metrics.errorCount / this.metrics.requestCount; const poolHitRate = this.metrics.connectionPoolHits / (this.metrics.connectionPoolHits + this.metrics.connectionPoolMisses); return { status: this.determineHealthStatus(errorRate, poolHitRate), errorRate, poolHitRate, avgResponseTime: this.metrics.avgResponseTime, p95ResponseTime: this.metrics.p95ResponseTime }; } private updateResponseTimes(latency: number): void { this.responseTimeBuffer.push(latency); if (this.responseTimeBuffer.length > this.bufferSize) { this.responseTimeBuffer.shift(); } this.metrics.avgResponseTime = this.calculateAverage(this.responseTimeBuffer); this.metrics.p95ResponseTime = this.calculatePercentile(this.responseTimeBuffer, 95); } private calculatePercentile(arr: number[], percentile: number): number { const sorted = arr.slice().sort((a, b) => a - b); const index = Math.ceil((percentile / 100) * sorted.length) - 1; return sorted[index] || 0; } private determineHealthStatus(errorRate: number, poolHitRate: number): 'healthy' | 'warning' | 'critical' { if (errorRate > 0.1 || poolHitRate < 0.5) return 'critical'; if (errorRate > 0.05 || poolHitRate < 0.7) return 'warning'; return 'healthy'; } }
typescript// src$core$mcp$tool-precompiler.ts export class ToolPrecompiler { async precompileTools(): Promise<CompiledToolRegistry> { const tools = await this.loadAllTools(); // Create optimized lookup structures const nameIndex = new Map<string, Tool>(); const categoryIndex = new Map<string, Tool[]>(); const fuzzyIndex = new Map<string, string[]>(); for (const tool of tools) { // Exact name index nameIndex.set(tool.name, tool); // Category index const category = tool.metadata.category || 'general'; if (!categoryIndex.has(category)) { categoryIndex.set(category, []); } categoryIndex.get(category)!.push(tool); // Pre-compute fuzzy variations const variations = this.generateFuzzyVariations(tool.name); for (const variation of variations) { if (!fuzzyIndex.has(variation)) { fuzzyIndex.set(variation, []); } fuzzyIndex.get(variation)!.push(tool.name); } } return { nameIndex, categoryIndex, fuzzyIndex, totalTools: tools.length, compiledAt: new Date() }; } private generateFuzzyVariations(name: string): string[] { const variations: string[] = []; // Common typos and abbreviations variations.push(name.toLowerCase()); variations.push(name.replace(/[-_]$g, '')); variations.push(name.replace(/[aeiou]$gi, '')); // Consonants only // Add more fuzzy matching logic as needed return variations; } }
typescript// src$core$mcp$multi-level-cache.ts export class MultiLevelCache { private l1Cache: Map<string, any> = new Map(); // In-memory, fastest private l2Cache: LRUCache<string, any>; // LRU cache, larger capacity private l3Cache: DiskCache; // Persistent disk cache constructor(config: CacheConfig) { this.l2Cache = new LRUCache<string, any>({ max: config.l2MaxEntries || 10000, ttl: config.l2TTL || 300000 // 5 minutes }); this.l3Cache = new DiskCache(config.l3Path || './.cache$mcp'); } async get(key: string): Promise<any | null> { // Try L1 cache first (fastest) if (this.l1Cache.has(key)) { return this.l1Cache.get(key); } // Try L2 cache const l2Value = this.l2Cache.get(key); if (l2Value) { // Promote to L1 this.l1Cache.set(key, l2Value); return l2Value; } // Try L3 cache (disk) const l3Value = await this.l3Cache.get(key); if (l3Value) { // Promote to L2 and L1 this.l2Cache.set(key, l3Value); this.l1Cache.set(key, l3Value); return l3Value; } return null; } async set(key: string, value: any, options?: CacheOptions): Promise<void> { // Set in all levels this.l1Cache.set(key, value); this.l2Cache.set(key, value); if (options?.persistent) { await this.l3Cache.set(key, value); } // Manage L1 cache size if (this.l1Cache.size > 1000) { const firstKey = this.l1Cache.keys().next().value; this.l1Cache.delete(firstKey); } } }
typescriptconst mcpDashboard = { metrics: [ 'Request latency (p50, p95, p99)', 'Error rate by tool category', 'Connection pool utilization', 'Tool lookup performance', 'Memory usage trends', 'Cache hit rates (L1, L2, L3)' ], alerts: [ 'Response time >200ms for 5 minutes', 'Error rate >5% for 1 minute', 'Pool hit rate <70% for 10 minutes', 'Memory usage >500MB for 5 minutes' ] };
v3-core-implementation - Core domain integration with MCPv3-performance-optimization - Overall performance optimizationv3-swarm-coordination - MCP integration with swarm coordinationv3-memory-unification - Memory sharing via MCP toolsbash# Full MCP server optimization Task("MCP optimization implementation", "Implement all MCP performance optimizations with monitoring", "mcp-specialist")
bash# Connection pool optimization Task("MCP connection pooling", "Implement advanced connection pooling with health monitoring", "mcp-specialist")
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | fail→pass | 6,884 | 1,905 | -72% | 1 | 1 | 0% | 1,096 | 6,229 | +468% | 0 | 0 | — |
case-01 | fail→pass | 19,098 | 18,887 | -1% | 1 | 1 | 0% | 4,141 | 10,736 | +159% | 0 | 0 | — |
case-02 | fail→pass | 20,358 | 22,261 | +9% | 1 | 1 | 0% | 4,384 | 11,139 | +154% | 0 | 0 | — |
case-03 | fail→fail | 26,925 | 19,583 | -27% | 1 | 1 | 0% | 5,383 | 10,253 | +90% | 0 | 0 | — |
case-04 | fail→pass | 14,078 | 8,280 | -41% | 1 | 1 | 0% | 2,518 | 7,497 | +198% | 0 | 0 | — |
case-06 | fail→pass | 7,064 | 2,603 | -63% | 1 | 1 | 0% | 1,222 | 6,437 | +427% | 0 | 0 | — |
case-07 | pass→pass | 9,193 | 4,619 | -50% | 1 | 1 | 0% | 1,579 | 6,827 | +332% | 0 | 0 | — |
case-08 | fail→pass | 11,150 | 3,691 | -67% | 1 | 1 | 0% | 1,759 | 6,563 | +273% | 0 | 0 | — |
case-09 | fail→fail | 13,145 | 7,599 | -42% | 1 | 1 | 0% | 2,409 | 7,270 | +202% | 0 | 0 | — |
case-10 | fail→pass | 6,323 | 1,849 | -71% | 1 | 1 | 0% | 1,063 | 6,232 | +486% | 0 | 0 | — |
case-11 | fail→pass | 11,216 | 3,603 | -68% | 1 | 1 | 0% | 1,939 | 6,668 | +244% | 0 | 0 | — |
case-12 | pass→pass | 16,347 | 9,921 | -39% | 1 | 1 | 0% | 3,013 | 7,863 | +161% | 0 | 0 | — |
case-13 | pass→pass | 11,116 | 3,312 | -70% | 1 | 1 | 0% | 1,820 | 6,536 | +259% | 0 | 0 | — |
case-14 | fail→pass | 11,011 | 6,222 | -43% | 1 | 1 | 0% | 1,971 | 7,035 | +257% | 0 | 0 | — |
case-15 | fail→pass | 9,754 | 2,835 | -71% | 1 | 1 | 0% | 1,749 | 6,506 | +272% | 0 | 0 | — |
case-16 | fail→pass | 21,604 | 1,589 | -93% | 1 | 1 | 0% | 1,678 | 6,182 | +268% | 0 | 0 | — |
case-17 | pass→pass | 12,269 | 2,729 | -78% | 1 | 1 | 0% | 2,214 | 6,449 | +191% | 0 | 0 | — |
case-18 | fail→pass | 12,708 | 3,047 | -76% | 1 | 1 | 0% | 2,420 | 6,462 | +167% | 0 | 0 | — |
case-19 | fail→pass | 12,395 | 2,346 | -81% | 1 | 1 | 0% | 2,320 | 6,401 | +176% | 0 | 0 | — |
case-20 | pass→pass | 20,905 | 24,973 | +19% | 1 | 1 | 0% | 4,520 | 11,551 | +156% | 0 | 0 | — |
case-21 | pass→pass | 17,459 | 18,239 | +4% | 1 | 1 | 0% | 3,551 | 10,224 | +188% | 0 | 0 | — |
case-22 | pass→pass | 15,077 | 15,508 | +3% | 1 | 1 | 0% | 2,837 | 9,043 | +219% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +59 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.