Especificación Técnica MCP
Documentación técnica completa del Model Context Protocol: JSON-RPC 2.0, transport layer y referencia de implementación.
Especificación del Protocolo
El Model Context Protocol (MCP) es un protocolo abierto basado en JSON-RPC 2.0 que define cómo los clientes y servidores MCP se comunican. La especificación define los mensajes, métodos, tipos de datos y comportamientos esperados.
JSON-RPC 2.0
Protocolo de comunicación estándar basado en JSON para llamadas a procedimientos remotos.
Transport Layer
Soporte para múltiples transportes: stdio, SSE y WebSocket según el caso de uso.
Tipos de Datos
Esquemas JSON Schema estrictos para recursos, herramientas, prompts y mensajes.
JSON-RPC 2.0
MCP utiliza JSON-RPC 2.0 como protocolo de comunicación. Todos los mensajes siguen el formato estándar JSON-RPC.
Estructura de Mensajes JSON-RPC
Todos los mensajes MCP siguen el formato JSON-RPC 2.0 estándar
Request (Solicitud)
{
"jsonrpc": "2.0",
"method": "tools/list",
"id": 1,
"params": {
// Parámetros especÃficos del método
}
}Campos requeridos:
jsonrpc: jsonrpc: Siempre "2.0"method: method: Nombre del método a invocarid: id: Identificador único (número o string)params: params: Parámetros del método (opcional)
Response (Respuesta)
{
"jsonrpc": "2.0",
"id": 1,
"result": {
// Resultado del método
}
}Campos requeridos:
jsonrpc: jsonrpc: Siempre "2.0"id: id: Mismo ID de la solicitudresult: result: Resultado exitoso (o error si falla)
Error Response
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32602,
"message": "Invalid params",
"data": {
// Información adicional del error
}
}
}Inicialización
initialize
Inicializa la conexión entre cliente y servidor
Parámetros:
{
"protocolVersion": "string",
"capabilities": "object",
"clientInfo": "object"
}Respuesta:
{
"protocolVersion": "string",
"capabilities": "object",
"serverInfo": "object"
}initialized
Notificación de que la inicialización está completa
Recursos
resources/list
Lista todos los recursos disponibles
Respuesta:
{
"resources": "Resource[]"
}resources/read
Lee el contenido de un recurso especÃfico
Parámetros:
{
"uri": "string"
}Respuesta:
{
"contents": "Content[]"
}resources/search
Busca recursos que coincidan con una consulta
Parámetros:
{
"query": "string"
}Respuesta:
{
"resources": "Resource[]"
}Herramientas
tools/list
Lista todas las herramientas disponibles
Respuesta:
{
"tools": "Tool[]"
}tools/call
Ejecuta una herramienta especÃfica
Parámetros:
{
"name": "string",
"arguments": "object"
}Respuesta:
{
"content": "Content[]",
"isError": "boolean"
}Prompts
prompts/list
Lista todos los prompts disponibles
Respuesta:
{
"prompts": "Prompt[]"
}prompts/get
Obtiene un prompt especÃfico con sus argumentos
Parámetros:
{
"name": "string",
"arguments": "object"
}Respuesta:
{
"messages": "Message[]",
"description": "string"
}Transport Layer
MCP soporta múltiples mecanismos de transporte para adaptarse a diferentes casos de uso y entornos.
stdio
Comunicación a través de entrada/salida estándar. Ideal para procesos locales.
Caso de uso:
Servidores locales, integración con aplicaciones de escritorio
Ejemplo:
Claude Desktop ejecuta servidores MCP como procesos hijos usando stdio
Ventajas:
- •Simple y directo
- •Sin overhead de red
- •Seguro para procesos locales
- •Soporte universal
Limitaciones:
- •Solo para procesos locales
- •No permite comunicación remota
- •Limitado a un solo cliente
SSE (Server-Sent Events)
Comunicación unidireccional del servidor al cliente sobre HTTP. Útil para notificaciones.
Caso de uso:
Servidores remotos, notificaciones en tiempo real
Ejemplo:
Servidor MCP ejecutándose en un servidor remoto que envÃa actualizaciones
Ventajas:
- •Permite comunicación remota
- •Notificaciones en tiempo real
- •Compatible con HTTP estándar
- •Reconexión automática
Limitaciones:
- •Solo unidireccional (servidor → cliente)
- •Requiere HTTP/HTTPS
- •Más complejo que stdio
WebSocket
Comunicación bidireccional en tiempo real sobre TCP. Para aplicaciones interactivas.
Caso de uso:
Aplicaciones web, comunicación bidireccional en tiempo real
Ejemplo:
Cliente web conectándose a un servidor MCP remoto
Ventajas:
- •Comunicación bidireccional
- •Baja latencia
- •Eficiente para múltiples mensajes
- •Soporte para subprotocolos
Limitaciones:
- •Requiere servidor WebSocket
- •Más complejo de implementar
- •Overhead de protocolo
Referencia Técnica
Tipos de datos, esquemas y estructuras utilizadas en el protocolo MCP.
Tipos de Datos Principales
Resource
{
"uri": "string",
"name": "string",
"description": "string",
"mimeType": "string"
}Tool
{
"name": "string",
"description": "string",
"inputSchema": {
"type": "object",
"properties": {...}
}
}Prompt
{
"name": "string",
"description": "string",
"arguments": [
{
"name": "string",
"description": "string",
"required": boolean
}
]
}Códigos de Error JSON-RPC
-32700Parse error - JSON inválido
-32600Invalid Request - Estructura inválida
-32601Method not found - Método no existe
-32602Invalid params - Parámetros inválidos
-32603Internal error - Error interno del servidor
-32000 a -32099Server error - Errores especÃficos del servidor
Ejemplo Completo: Flujo de Comunicación
Secuencia completa de mensajes JSON-RPC para inicializar y usar un servidor MCP
1. Inicialización
Client → Server
{
"jsonrpc": "2.0",
"method": "initialize",
"id": 1,
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {
"name": "claude-desktop",
"version": "1.0.0"
}
}
}Server → Client
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2024-11-05",
"capabilities": {
"resources": {},
"tools": {}
},
"serverInfo": {
"name": "file-server",
"version": "0.1.0"
}
}
}2. Listar Herramientas
Client → Server
{
"jsonrpc": "2.0",
"method": "tools/list",
"id": 2
}Server → Client
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"tools": [
{
"name": "read_file",
"description": "Lee un archivo",
"inputSchema": {
"type": "object",
"properties": {
"path": {"type": "string"}
}
}
}
]
}
}¿Necesitas más detalles?
Explora la arquitectura, recursos, herramientas y ejemplos prácticos de implementación.