Inicio

Entendiendo los JSON MCPs

Capítulo 9: Entendiendo los JSON MCPs

La Revolución del Protocolo de Comunicación de Modelos

Los Model Context Protocols (MCPs) representan una innovación fundamental en la manera como los sistemas de inteligencia artificial interactúan con herramientas externas y fuentes de datos. No son simplemente otra especificación técnica; son el foundation sobre el cual se construye la verdadera extensibilidad de Claude Code y sistemas similares. Entender los MCPs no es solo útil para casos de uso avanzados - es esencial para aprovechar completamente las capacidades de Claude Code y participar activamente en el ecosistema emergente de herramientas de AI.

El protocolo MCP fundamentalmente redefine la relación entre sistemas de AI y el mundo exterior. Tradicionalmente, las capacidades de un sistema de AI estaban limitadas por las funcionalidades que sus creadores decidían incluir directamente. Los MCPs rompen esta limitación al crear un estándar abierto y extensible que permite que terceros - incluyendo tú - extiendan las capacidades del sistema de manera orgánica y poderosa.

Esta apertura tiene implicaciones profundas. No solo puedes usar herramientas existentes más efectivamente; puedes crear nuevas herramientas que se integren seamlessly con Claude Code, compartirlas con la comunidad, y beneficiarte del trabajo de otros developers que están empujando los límites de lo que es posible.

Anatomía de un MCP: Decodificando la Estructura JSON

El Esqueleto Fundamental

Un MCP (Model Context Protocol) es esencialmente un contract definido en JSON que especifica cómo Claude Code puede interactuar con una herramienta externa. Esta aparente simplicidad esconde una arquitectura sofisticada que permite flexibility extraordinaria mientras mantiene reliability y security.

1{ 2 "name": "database-inspector", 3 "version": "1.0.0", 4 "description": "Herramienta para inspeccionar y analizar estructuras de base de datos", 5 "tools": [ 6 { 7 "name": "query_tables", 8 "description": "Lista todas las tablas en la base de datos", 9 "inputSchema": { 10 "type": "object", 11 "properties": { 12 "database": {"type": "string", "description": "Nombre de la base de datos"} 13 }, 14 "required": ["database"] 15 } 16 } 17 ] 18} 19

Esta structure deceptivamente simple enable Claude Code to understand exactly qué capabilities están available, cómo invocarlas, y qué input se espera. El sistema puede reason about these capabilities y usarlas appropriately sin requiring hard-coded knowledge de cada herramienta específica.

Schema Definitions y Validation

El poder real de los MCPs radica en sus schema definitions. Estos schemas no solo especifican qué inputs son válidos; también provide semantic meaning که allow Claude Code to understand qué should be passed to achieve desired outcomes.

1{ 2 "name": "create_component", 3 "inputSchema": { 4 "type": "object", 5 "properties": { 6 "componentName": { 7 "type": "string", 8 "pattern": "^[A-Z][a-zA-Z0-9]*$", 9 "description": "Nombre del componente en PascalCase" 10 }, 11 "props": { 12 "type": "array", 13 "items": { 14 "type": "object", 15 "properties": { 16 "name": {"type": "string"}, 17 "type": {"type": "string", "enum": ["string", "number", "boolean", "object"]}, 18 "required": {"type": "boolean", "default": false} 19 } 20 } 21 }, 22 "templateType": { 23 "type": "string", 24 "enum": ["functional", "class", "hook"], 25 "description": "Tipo de template para generar el componente" 26 } 27 }, 28 "required": ["componentName", "templateType"] 29 } 30} 31

Las detailed schema definitions enable intelligent parameter inference. Claude Code puede analyze context y automatically determine appropriate values para parameters, reducing the cognitive load en users.

Implementación de MCPs Básicos

Tu Primer MCP: File System Navigator

Vamos a construir un MCP básico که demonstrate core concepts mientras providing immediately useful functionality. Este MCP will provide enhanced file system navigation capabilities.

1{ 2 "name": "advanced-file-navigator", 3 "version": "1.0.0", 4 "description": "Navegación avanzada del sistema de archivos con análisis contextual", 5 "tools": [ 6 { 7 "name": "find_files_by_content", 8 "description": "Busca archivos que contengan patrones específicos", 9 "inputSchema": { 10 "type": "object", 11 "properties": { 12 "pattern": { 13 "type": "string", 14 "description": "Patrón a buscar en el contenido de archivos" 15 }, 16 "fileTypes": { 17 "type": "array", 18 "items": {"type": "string"}, 19 "description": "Tipos de archivo a incluir en la búsqueda", 20 "default": ["js", "ts", "jsx", "tsx"] 21 }, 22 "excludeDirs": { 23 "type": "array", 24 "items": {"type": "string"}, 25 "description": "Directorios a excluir de la búsqueda", 26 "default": ["node_modules", ".git", "dist"] 27 } 28 }, 29 "required": ["pattern"] 30 } 31 } 32 ] 33} 34

Implementation Script

El MCP definition es solo half of the equation. También necesitas el implementation script که actually executes la functionality definida en el JSON schema.

1#!/usr/bin/env node 2 3const fs = require('fs'); 4const path = require('path'); 5const { spawn } = require('child_process'); 6 7class AdvancedFileNavigator { 8 constructor() { 9 this.tools = { 10 find_files_by_content: this.findFilesByContent.bind(this) 11 }; 12 } 13 14 async findFilesByContent(params) { 15 const { pattern, fileTypes = ['js', 'ts', 'jsx', 'tsx'], excludeDirs = ['node_modules', '.git', 'dist'] } = params; 16 17 // Construir comando ripgrep optimizado 18 const command = 'rg'; 19 const args = [ 20 '--type-add', `target:*.{${fileTypes.join(',')}}`, 21 '--type', 'target', 22 '--files-with-matches', 23 '--ignore-case', 24 pattern 25 ]; 26 27 // Añadir exclusiones 28 excludeDirs.forEach(dir => { 29 args.push('--glob', `!${dir}/**`); 30 }); 31 32 try { 33 const result = await this.executeCommand(command, args); 34 const files = result.split('\n').filter(Boolean); 35 36 return { 37 success: true, 38 files: files, 39 totalFound: files.length, 40 searchPattern: pattern, 41 message: `Encontrados ${files.length} archivos que contienen "${pattern}"` 42 }; 43 } catch (error) { 44 return { 45 success: false, 46 error: error.message, 47 message: 'Error ejecutando búsqueda' 48 }; 49 } 50 } 51 52 executeCommand(command, args) { 53 return new Promise((resolve, reject) => { 54 const process = spawn(command, args, { encoding: 'utf8' }); 55 let output = ''; 56 let errorOutput = ''; 57 58 process.stdout.on('data', (data) => { 59 output += data.toString(); 60 }); 61 62 process.stderr.on('data', (data) => { 63 errorOutput += data.toString(); 64 }); 65 66 process.on('close', (code) => { 67 if (code === 0) { 68 resolve(output.trim()); 69 } else { 70 reject(new Error(errorOutput || `Process exited with code ${code}`)); 71 } 72 }); 73 }); 74 } 75} 76 77// MCP Server Implementation 78const navigator = new AdvancedFileNavigator(); 79 80// Handle Claude Code requests 81process.stdin.on('data', async (data) => { 82 try { 83 const request = JSON.parse(data.toString()); 84 const { tool, params } = request; 85 86 if (navigator.tools[tool]) { 87 const result = await navigator.tools[tool](params); 88 console.log(JSON.stringify(result)); 89 } else { 90 console.log(JSON.stringify({ 91 success: false, 92 error: `Tool '${tool}' not found` 93 })); 94 } 95 } catch (error) { 96 console.log(JSON.stringify({ 97 success: false, 98 error: error.message 99 })); 100 } 101}); 102

MCPs Especializados para Desarrollo Web

React Component Generator MCP

Un practical example de un MCP که addresses common development needs: automated React component generation که follows project-specific patterns.

1{ 2 "name": "react-component-generator", 3 "version": "2.0.0", 4 "description": "Generador inteligente de componentes React con TypeScript", 5 "tools": [ 6 { 7 "name": "create_functional_component", 8 "description": "Crea un componente funcional React con TypeScript", 9 "inputSchema": { 10 "type": "object", 11 "properties": { 12 "name": { 13 "type": "string", 14 "pattern": "^[A-Z][a-zA-Z0-9]*$", 15 "description": "Nombre del componente en PascalCase" 16 }, 17 "props": { 18 "type": "array", 19 "items": { 20 "type": "object", 21 "properties": { 22 "name": {"type": "string"}, 23 "type": {"type": "string"}, 24 "optional": {"type": "boolean", "default": false}, 25 "defaultValue": {"type": "string"} 26 }, 27 "required": ["name", "type"] 28 }, 29 "description": "Lista de props del componente" 30 }, 31 "hasStyles": { 32 "type": "boolean", 33 "default": true, 34 "description": "Si incluir archivo de estilos CSS" 35 }, 36 "includeStorybook": { 37 "type": "boolean", 38 "default": false, 39 "description": "Si generar archivo Storybook" 40 } 41 }, 42 "required": ["name"] 43 } 44 } 45 ] 46} 47

Database Migration MCP

Para projects که require sophisticated database management, un specialized MCP puede provide powerful capabilities.

1{ 2 "name": "database-migration-manager", 3 "version": "1.0.0", 4 "description": "Gestor inteligente de migraciones de base de datos", 5 "tools": [ 6 { 7 "name": "generate_migration", 8 "description": "Genera archivos de migración basándose en cambios de schema", 9 "inputSchema": { 10 "type": "object", 11 "properties": { 12 "description": { 13 "type": "string", 14 "description": "Descripción de los cambios en la migración" 15 }, 16 "changes": { 17 "type": "array", 18 "items": { 19 "type": "object", 20 "properties": { 21 "action": { 22 "type": "string", 23 "enum": ["create_table", "alter_table", "drop_table", "create_index"] 24 }, 25 "tableName": {"type": "string"}, 26 "columns": { 27 "type": "array", 28 "items": { 29 "type": "object", 30 "properties": { 31 "name": {"type": "string"}, 32 "type": {"type": "string"}, 33 "nullable": {"type": "boolean", "default": true}, 34 "unique": {"type": "boolean", "default": false} 35 } 36 } 37 } 38 }, 39 "required": ["action", "tableName"] 40 } 41 } 42 }, 43 "required": ["description", "changes"] 44 } 45 } 46 ] 47} 48

Integración y Deployment de MCPs

Local Development Setup

Para develop y test MCPs locally, necesitas establish proper development environment که enables rapid iteration.

1# Setup development environment 2mkdir mcp-development 3cd mcp-development 4 5# Create project structure 6mkdir -p mcps/database-tools 7mkdir -p mcps/react-tools 8mkdir -p mcps/deployment-tools 9 10# Initialize MCP project 11cd mcps/database-tools 12npm init -y 13npm install --save-dev jest @types/node typescript 14

Configuration en Claude Code

Una vez que tienes un MCP developed, necesitas configure Claude Code to use it.

1// ~/.claude/config.json 2{ 3 "mcps": [ 4 { 5 "name": "database-tools", 6 "path": "/path/to/mcps/database-tools/index.js", 7 "enabled": true 8 }, 9 { 10 "name": "react-tools", 11 "path": "/path/to/mcps/react-tools/index.js", 12 "enabled": true 13 } 14 ] 15} 16

Testing y Validation

Comprehensive testing ensures که your MCPs work reliably en different scenarios.

1// test/database-tools.test.js 2const DatabaseTools = require('../index'); 3 4describe('Database Tools MCP', () => { 5 let dbTools; 6 7 beforeEach(() => { 8 dbTools = new DatabaseTools(); 9 }); 10 11 test('should generate valid migration file', async () => { 12 const params = { 13 description: 'Add user authentication table', 14 changes: [ 15 { 16 action: 'create_table', 17 tableName: 'users', 18 columns: [ 19 { name: 'id', type: 'serial', nullable: false }, 20 { name: 'email', type: 'varchar(255)', nullable: false, unique: true }, 21 { name: 'password_hash', type: 'varchar(255)', nullable: false } 22 ] 23 } 24 ] 25 }; 26 27 const result = await dbTools.tools.generate_migration(params); 28 29 expect(result.success).toBe(true); 30 expect(result.migrationFile).toContain('CREATE TABLE users'); 31 expect(result.migrationFile).toContain('email VARCHAR(255) UNIQUE NOT NULL'); 32 }); 33}); 34

Casos de Uso Avanzados

Multi-Service Orchestration MCP

Para complex projects که require coordination across multiple services, un sophisticated MCP can provide orchestration capabilities.

1{ 2 "name": "service-orchestrator", 3 "description": "Orquestador inteligente de microservicios", 4 "tools": [ 5 { 6 "name": "deploy_service_stack", 7 "description": "Despliega un stack completo de servicios con dependencias", 8 "inputSchema": { 9 "type": "object", 10 "properties": { 11 "services": { 12 "type": "array", 13 "items": { 14 "type": "object", 15 "properties": { 16 "name": {"type": "string"}, 17 "version": {"type": "string"}, 18 "environment": {"type": "string", "enum": ["dev", "staging", "prod"]}, 19 "dependencies": { 20 "type": "array", 21 "items": {"type": "string"} 22 } 23 } 24 } 25 }, 26 "strategy": { 27 "type": "string", 28 "enum": ["blue-green", "rolling", "canary"], 29 "default": "rolling" 30 } 31 } 32 } 33 } 34 ] 35} 36

AI-Enhanced Code Review MCP

Un advanced MCP که leverage AI capabilities para enhance code review processes.

1{ 2 "name": "ai-code-reviewer", 3 "description": "Revisor de código potenciado con IA", 4 "tools": [ 5 { 6 "name": "comprehensive_review", 7 "description": "Realiza review completo de código con análisis de calidad", 8 "inputSchema": { 9 "type": "object", 10 "properties": { 11 "files": { 12 "type": "array", 13 "items": {"type": "string"}, 14 "description": "Archivos para revisar" 15 }, 16 "reviewType": { 17 "type": "string", 18 "enum": ["security", "performance", "maintainability", "comprehensive"], 19 "default": "comprehensive" 20 }, 21 "projectContext": { 22 "type": "string", 23 "description": "Contexto del proyecto para review contextualizado" 24 } 25 }, 26 "required": ["files"] 27 } 28 } 29 ] 30} 31

Mejores Prácticas para MCP Development

Error Handling y Resilience

Robust MCPs require comprehensive error handling که provides useful feedback while maintaining system stability.

1class RobustMCPTool { 2 async executeTool(toolName, params) { 3 try { 4 // Validate input parameters 5 const validationResult = this.validateParams(toolName, params); 6 if (!validationResult.valid) { 7 return { 8 success: false, 9 error: 'Invalid parameters', 10 details: validationResult.errors 11 }; 12 } 13 14 // Execute tool with timeout 15 const result = await Promise.race([ 16 this.tools[toolName](params), 17 this.timeoutPromise(30000) // 30 second timeout 18 ]); 19 20 return result; 21 } catch (error) { 22 return { 23 success: false, 24 error: error.message, 25 stack: process.env.NODE_ENV === 'development' ? error.stack : undefined 26 }; 27 } 28 } 29 30 timeoutPromise(ms) { 31 return new Promise((_, reject) => { 32 setTimeout(() => reject(new Error('Operation timeout')), ms); 33 }); 34 } 35} 36

Performance y Scalability

MCPs که handle large datasets or complex operations require careful performance consideration.

1class PerformantMCP { 2 constructor() { 3 this.cache = new Map(); 4 this.rateLimiter = new RateLimiter(100, 60000); // 100 requests per minute 5 } 6 7 async processLargeDataset(params) { 8 // Check rate limits 9 if (!this.rateLimiter.checkLimit()) { 10 return { success: false, error: 'Rate limit exceeded' }; 11 } 12 13 // Check cache first 14 const cacheKey = this.generateCacheKey(params); 15 if (this.cache.has(cacheKey)) { 16 return this.cache.get(cacheKey); 17 } 18 19 // Process in chunks for large datasets 20 const chunkSize = 1000; 21 const results = []; 22 23 for (let i = 0; i < params.data.length; i += chunkSize) { 24 const chunk = params.data.slice(i, i + chunkSize); 25 const chunkResult = await this.processChunk(chunk); 26 results.push(...chunkResult); 27 } 28 29 const finalResult = { success: true, data: results }; 30 this.cache.set(cacheKey, finalResult); 31 32 return finalResult; 33 } 34} 35

El Futuro de los MCPs

Emerging Patterns y Standards

La community around MCPs está rapidly developing best practices y standard patterns که will shape future development.

Integration con Cloud Services

Future MCPs will likely provide seamless integration con cloud services, enabling sophisticated cloud-based workflows directly from Claude Code.

AI-Enhanced MCPs

Next-generation MCPs may incorporate AI capabilities directly, creating tools که can adapt y learn from usage patterns.

Dominando la Extensibilidad

Understanding y creating MCPs transforms you from a consumer de Claude Code capabilities into a creator de new possibilities. Esta skill becomes increasingly valuable as the ecosystem grows y more sophisticated use cases emerge.

The key to mastery είναι understanding که MCPs are not just technical specifications; they're bridges between human intention y computational capability. Well-designed MCPs amplify human creativity by making complex operations accessible through simple, natural language interactions.


Con solid understanding de MCPs, you're equipped to extend Claude Code's capabilities in powerful ways που align perfectly με your specific development needs y organizational requirements.