AgentGrade
EnglishEspañol日本語中文
← Base de Conocimientos

MCP — Model Context Protocol

¿Qué es MCP?

MCP (Model Context Protocol) es el estándar abierto para conectar asistentes de IA con herramientas externas, fuentes de datos y servicios. Tu servidor expone "herramientas" — funciones con nombre, descripción y esquemas de entrada — y el modelo de IA decide cuándo llamarlas durante una conversación. Creado por Anthropic a finales de 2024 y ahora soportado por Claude, ChatGPT, complementos de IDE y una lista creciente de frameworks de agentes, MCP cumple para la IA el mismo rol que USB cumple para el hardware: un cable, cualquier dispositivo.

Por qué MCP importa

Antes de MCP, cada asistente de IA se conectaba a cada servicio externo mediante código de "plugin" o "function calling" hecho a medida. Cada proveedor de IA tenía su propio formato. Cada integración había que reescribirla por proveedor — una vez para Claude, otra para ChatGPT, otra para Cursor, otra para un agente personalizado.

MCP estandariza la interfaz. Un único servidor MCP funciona con todos los clientes compatibles. Eso significa:

Es la diferencia entre drivers de impresora propietarios y el estándar IP. El protocolo es aburrido. Estandarizarse en él desbloquea un ecosistema.

Cómo funciona

Toda la comunicación usa JSON-RPC 2.0 sobre HTTP POST a un único endpoint (por ejemplo, /mcp):

  1. El cliente envía initialize para establecer la sesión
  2. El servidor responde con su nombre, versión y capacidades
  3. El cliente envía tools/list para descubrir las herramientas disponibles
  4. El servidor devuelve una lista de herramientas con descripciones y esquemas
  5. El cliente envía tools/call con un nombre de herramienta y argumentos
  6. El servidor ejecuta la herramienta y devuelve el resultado

MCP vs alternativas

AspectoFunction calling de OpenAIOpenAPI / SwaggerMCP
Alcance del proveedorUn solo proveedorNeutralNeutral
Diseñado paraLlamadas a herramientas LLMAPIs RESTAgentes de IA
DescubrimientoHardcodeado en el clienteArchivo de spec estáticoEn tiempo de ejecución vía tools/list
StreamingLimitadoSin soporte nativoIntegrado (SSE / Streamable HTTP)
Sesiones con estadoNoNoSí (initialize → llamadas)
AutenticaciónClaves del lado clienteClaves API, OAuthOAuth, bearer, personalizada
EcosistemaSolo OpenAIMaduro, amplioNuevo, creciendo rápido

OpenAPI describe una API REST en tiempo de diseño. MCP describe una superficie de herramientas viva en tiempo de ejecución. Son complementarios — muchos servidores MCP envuelven servicios OpenAPI existentes y los exponen como herramientas invocables por agentes.

Ejemplo de implementación

app.post('/mcp', (req, res) => {
  const { method, params, id } = req.body;

  if (method === 'initialize') {
    return res.json({ jsonrpc: '2.0', id, result: {
      protocolVersion: '2024-11-05',
      capabilities: { tools: {} },
      serverInfo: { name: 'my-service', version: '1.0' }
    }});
  }

  if (method === 'tools/list') {
    return res.json({ jsonrpc: '2.0', id, result: {
      tools: [{
        name: 'search',
        description: 'Search for items',
        inputSchema: {
          type: 'object',
          properties: { query: { type: 'string' } },
          required: ['query']
        }
      }]
    }});
  }

  if (method === 'tools/call') {
    const { name, arguments: args } = params;
    return res.json({ jsonrpc: '2.0', id, result: {
      content: [{ type: 'text', text: 'Search results...' }]
    }});
  }

  res.json({ jsonrpc: '2.0', id, error: { code: -32601, message: 'Method not found' }});
});

Opciones de transporte

MCP soporta tres transportes — elige según dónde se ejecute tu cliente:

Si quieres que un servidor MCP funcione con Claude Desktop y la web de Claude y ChatGPT y Cursor, lanza Streamable HTTP. Casi todos lo hablan ya.

CORS — necesario para agentes basados en navegador

Una clase creciente de clientes MCP corre en el navegador: Claude.ai web, ChatGPT browser, extensiones, widgets de chat embebidos. Cuando JavaScript ejecutándose en claude.ai llama fetch('https://tudominio.com/mcp'), el navegador hace dos cosas por su cuenta:

  1. Envía la petición a tu servidor.
  2. Se niega a entregar la respuesta al JavaScript que la pidió — a menos que tu respuesta incluya un encabezado Access-Control-Allow-Origin que nombre a claude.ai (o *).

Sin encabezados CORS, tu servidor funciona bien y devuelve 200, pero el cliente MCP en el navegador ve un error de red y nunca puede leer el cuerpo. Es el navegador protegiendo a los usuarios. Los clientes del lado servidor como Claude Desktop o el CLI no están sujetos a esto.

Para soportar clientes MCP basados en navegador, envía estos encabezados en cada respuesta de /mcp y maneja el preflight OPTIONS:

app.use('/mcp', (req, res, next) => {
  res.set('Access-Control-Allow-Origin', '*');
  res.set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
  res.set('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization');
  if (req.method === 'OPTIONS') return res.sendStatus(204);
  next();
});

Comodín vs origen específico

Access-Control-Allow-Origin: * está bien para endpoints MCP públicos y de solo lectura. Si tu endpoint MCP requiere autenticación o cobra por las llamadas, devuelve un origen específico (o haz eco del Origin de la petición contra una lista permitida) y pon Access-Control-Allow-Credentials: true. El comodín no se puede usar con credenciales según la especificación CORS.

Por qué importa el preflight

Para una petición "simple" — un GET plano o un POST con Content-Type: text/plain — el navegador simplemente la envía y solo bloquea la respuesta. Pero MCP usa POST con Content-Type: application/json, que el navegador considera lo bastante arriesgado como para consultar primero. Antes de enviar el POST real, manda un OPTIONS preguntando: "¿Aceptarás un POST de este origen con estos encabezados?"

Si tu servidor no responde al OPTIONS con un 2xx y los encabezados CORS correctos, el navegador cancela el POST por completo — nunca llega a tu servidor. Por eso el middleware CORS tiene que manejar ambos: el preflight OPTIONS y el POST real.

Autenticación

Para servidores públicos de solo lectura, ninguna autenticación está bien. Para herramientas privadas o de pago, MCP soporta:

OAuth es el default correcto cuando humanos autorizan en su propio nombre. Los tokens bearer son para servicio-a-servicio. x402 es para llamadas de pago sin estado.

Quién está usando MCP

AgentGrade publica su propio servidor MCP (com.agentgrade/mcp-server) para agentes que quieran escanear sitios desde dentro de un cliente MCP.

Errores comunes y depuración

Conceptos clave

FAQ

¿MCP es un protocolo de Anthropic o un estándar abierto?

Fue creado por Anthropic y publicado como especificación abierta. Las implementaciones de referencia están bajo licencia MIT. OpenAI, vendedores de IDE y frameworks de agentes lo han adoptado de forma independiente — es un estándar comunitario ahora, no un protocolo de un solo proveedor.

¿En qué se diferencia MCP del function calling de OpenAI?

Function calling es una característica de la API de un proveedor. MCP es un protocolo a nivel de transporte que cualquier cliente puede hablar. Con function calling, el modelo y la definición de la herramienta viven dentro de la misma petición OpenAI; con MCP, el modelo vive en el cliente y las herramientas en tu servidor, y se comunican por un formato definido.

¿Debo exponer mi API REST existente como MCP o solo darle al IA mi spec OpenAPI?

Ambos funcionan, pero apuntan a clientes distintos. Modelos con soporte MCP nativo (Claude, Cursor) llaman herramientas directamente vía MCP. Si solo tienes tiempo para uno, lanza MCP — la mayoría de clientes de agente lo prefieren para descubrimiento en tiempo de ejecución.

¿MCP requiere WebSockets?

No. El estándar actual es Streamable HTTP — POST plano a un endpoint, con streaming SSE opcional. Los borradores anteriores usaban WebSockets; esa ruta fue abandonada porque HTTP plano atraviesa CDNs, balanceadores y firewalls corporativos sin configuración.

¿Pueden los servidores MCP cobrar por las llamadas?

Sí. El protocolo no incluye pagos, pero puedes superponer x402: haz que tu servidor devuelva HTTP 402 desde tools/call hasta que el agente adjunte un recibo de pago válido. Es uno de los patrones más activos en el ecosistema de agentes.

¿Cómo listo mi servidor MCP en el registro?

Envía un manifiesto a registry.modelcontextprotocol.io. Smithery.ai espeja el registro y añade funciones de descubrimiento. Listar es gratis y la cola de revisión es corta.

¿Por qué mi servidor MCP es lento?

El protocolo en sí es barato — JSON-RPC sobre HTTP. La lentitud casi siempre es (a) la implementación de la herramienta, o (b) un cold start de serverless. Perfila el handler de tools/call antes de culpar al transporte.

¿Necesito un servidor separado por herramienta, o uno con muchas?

Uno con muchas herramientas es la norma. Agrupa las herramientas por servicio lógico (por ejemplo, todas las operaciones de GitHub en un servidor). Los clientes pueden conectarse a varios servidores a la vez, así que dividir solo tiene sentido cuando los permisos o el hosting difieren.

Madurez de la especificación

Especificación formal. MCP es mantenido por Anthropic con una spec versionada. Versión actual del protocolo: 2024-11-05. Soportado nativamente por Claude, ChatGPT, Cursor y la mayoría de frameworks de agentes. El transporte Streamable HTTP es estable y usado por todos los clientes principales.

Saber más

Relacionado