Desarrollo Intermedio

MCP (Model Context Protocol)

Protocolo abierto creado por Anthropic que estandariza cómo los agentes AI se conectan a aplicaciones y servicios externos.

Pronunciación

/ɛm siː piː/
"em-si-pi"
Escuchar en: Forvo

Qué es

MCP (Model Context Protocol) es un protocolo abierto desarrollado por Anthropic que define cómo los modelos de AI (como Claude, ChatGPT, Gemini) se conectan a aplicaciones y servicios externos.

Piensa en MCP como un “USB para AI”: un estándar que permite que cualquier AI se conecte a cualquier servicio de forma consistente.

Pronunciación

IPA: /ɛm siː piː/

Suena como: “em-si-pi” - se pronuncian las tres letras por separado

Errores comunes:

  • ❌ “mcpé” (no es una palabra, son iniciales)
  • ❌ “eme-ce-pe” (usar pronunciación inglesa)

Por qué existe MCP

El problema antes de MCP

┌─────────────────────────────────────────────────────────┐
│                   SIN ESTÁNDAR (Antes)                  │
├─────────────────────────────────────────────────────────┤
│                                                          │
│   Claude ────→ Plugin Anthropic ────→ Tu App            │
│                                                          │
│   ChatGPT ───→ Plugin OpenAI ───────→ Tu App            │
│                (diferente formato)                       │
│                                                          │
│   Gemini ────→ Extension Google ────→ Tu App            │
│                (otro formato más)                        │
│                                                          │
│   = 3 integraciones diferentes para lo mismo            │
│                                                          │
└─────────────────────────────────────────────────────────┘

La solución con MCP

┌─────────────────────────────────────────────────────────┐
│                   CON MCP (Ahora)                        │
├─────────────────────────────────────────────────────────┤
│                                                          │
│   Claude  ─┐                                             │
│            │                                             │
│   ChatGPT ─┼────→ MCP Server ────→ Tu App               │
│            │      (un formato)                           │
│   Gemini  ─┘                                             │
│                                                          │
│   = 1 integración sirve para todas las AI               │
│                                                          │
└─────────────────────────────────────────────────────────┘

Arquitectura MCP

MCP define tres componentes principales:

ComponenteRolEjemplo
HostLa aplicación AIClaude Desktop, Cursor
ClientMantiene conexión con serversLibrería MCP
ServerExpone recursos y herramientasTu backend

Flujo de comunicación

┌──────────┐      ┌──────────┐      ┌──────────┐
│   Host   │      │  Client  │      │  Server  │
│ (Claude) │ ←──→ │  (MCP)   │ ←──→ │ (Tu API) │
└──────────┘      └──────────┘      └──────────┘
     │                 │                  │
     │   "Lista mis    │                  │
     │    tareas"      │                  │
     │ ───────────────→│                  │
     │                 │  tools/list      │
     │                 │ ────────────────→│
     │                 │                  │
     │                 │  [getTasks,      │
     │                 │   createTask]    │
     │                 │ ←────────────────│
     │                 │                  │
     │                 │  tools/call      │
     │                 │  getTasks()      │
     │                 │ ────────────────→│
     │                 │                  │
     │                 │  [{id:1, ...}]   │
     │                 │ ←────────────────│
     │   "Tienes 5     │                  │
     │    tareas..."   │                  │
     │ ←───────────────│                  │

Ejemplo práctico: Servidor MCP básico

// server.ts - Un servidor MCP mínimo
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

const server = new Server({
  name: "mi-servidor-tareas",
  version: "1.0.0",
});

// Definir herramientas disponibles
server.setRequestHandler("tools/list", async () => ({
  tools: [
    {
      name: "obtener_tareas",
      description: "Obtiene la lista de tareas pendientes",
      inputSchema: {
        type: "object",
        properties: {
          estado: {
            type: "string",
            enum: ["pendiente", "completada", "todas"]
          }
        }
      }
    }
  ]
}));

// Implementar la herramienta
server.setRequestHandler("tools/call", async (request) => {
  if (request.params.name === "obtener_tareas") {
    const tareas = await fetchTareasFromDB(request.params.arguments.estado);
    return { content: [{ type: "text", text: JSON.stringify(tareas) }] };
  }
});

// Iniciar servidor
const transport = new StdioServerTransport();
await server.connect(transport);

Capacidades de MCP

MCP permite exponer tres tipos de capacidades:

1. Tools (Herramientas)

Funciones que la AI puede ejecutar:

{
  "name": "enviar_email",
  "description": "Envía un email a un destinatario",
  "inputSchema": {
    "type": "object",
    "properties": {
      "to": { "type": "string" },
      "subject": { "type": "string" },
      "body": { "type": "string" }
    },
    "required": ["to", "subject", "body"]
  }
}

2. Resources (Recursos)

Datos que la AI puede leer:

{
  "uri": "file:///config/settings.json",
  "name": "Configuración del sistema",
  "mimeType": "application/json"
}

3. Prompts (Plantillas)

Instrucciones reutilizables:

{
  "name": "revisar_codigo",
  "description": "Template para code review",
  "arguments": [
    { "name": "archivo", "required": true }
  ]
}

Servidores MCP populares

ServidorFunciónMantenedor
filesystemAcceso a archivos localesAnthropic
githubOperaciones con reposAnthropic
postgresConsultas a PostgreSQLAnthropic
slackMensajes y canalesComunidad
google-driveArchivos de DriveComunidad

Configuración en Claude Desktop

// ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "mi-servidor": {
      "command": "node",
      "args": ["/path/to/server.js"],
      "env": {
        "API_KEY": "tu-api-key"
      }
    }
  }
}

Seguridad en MCP

Principios de seguridad

  1. Menor privilegio: Exponer solo lo necesario
  2. Validación: Verificar todos los inputs
  3. Autenticación: Usar tokens para acceso
  4. Auditoría: Registrar todas las operaciones

Ejemplo de validación

server.setRequestHandler("tools/call", async (request) => {
  // Validar que la herramienta existe
  if (!allowedTools.includes(request.params.name)) {
    throw new Error("Herramienta no permitida");
  }

  // Validar parámetros
  const validated = schema.parse(request.params.arguments);

  // Ejecutar con permisos limitados
  return executeWithSandbox(request.params.name, validated);
});

Términos relacionados

  • [[Agentic AI]] - AI que actúa de forma autónoma usando herramientas
  • [[API]] - Interfaz de programación de aplicaciones
  • [[Webhook]] - Callback HTTP para eventos

Recursos oficiales: