Qué es un servidor MCP (visión avanzada)
Model Context Protocol (MCP) es una especificación que permite que los clientes de IA (Claude, Cursor, GitHub Copilot, etc.) y las aplicaciones se comuniquen mediante un protocolo estandarizado. MCP define tres primitivas principales.
La ventaja de construir un servidor MCP con Laravel es que puedes reutilizar tal cual el ecosistema de Laravel: Eloquent, caché, autenticación, validación, etc.
Esta guía avanzada entra en detalles de implementación práctica. Para los conceptos básicos de MCP, consulta Nivel intermedio: Laravel MCP.
Instalación y configuración inicial
1
Instala el paquete
Instala el paquete con Composer.
2
Publica el archivo de rutas
Con
vendor:publish genera routes/ai.php, donde se registran los servidores MCP.3
Genera la clase del servidor
Crea la clase del servidor con un comando Artisan.Registra las tools, resources y prompts en la clase generada
app/Mcp/Servers/DatabaseServer.php.4
Registra el servidor
Registra el servidor en El servidor web se accede vía HTTP POST. El servidor local funciona como un comando Artisan y se usa para integrarlo con clientes de IA basados en CLI.
routes/ai.php.Implementación de tools
Las tools son funciones que la IA puede invocar. Puedes usar sin cambios el contenedor de servicios, la validación y Eloquent de Laravel.Crear una tool
handle y schema en la clase generada.
Definir parámetros (schema)
Enschema, usa el builder Illuminate\Contracts\JsonSchema\JsonSchema para declarar los parámetros aceptados.
Anotaciones de tool
Las anotaciones del protocolo MCP permiten a los clientes de IA valorar la seguridad de la tool.Respuesta estructurada
Para devolver respuestas en JSON fácil de parsear por el cliente de IA, usaResponse::structured.
Respuesta en streaming
Para procesos largos, devuelve un Generator para emitir progreso.Registro condicional
Puedes exponer una tool solo a los usuarios que cumplan cierta condición.Implementación de recursos
Los recursos son datos que la IA lee como contexto. Sirven para documentación, información de configuración o datos dinámicos.Recurso estático
Recurso dinámico (plantilla URI)
Con una plantilla URI, puedes ofrecer recursos dinámicos según los parámetros de la URL.app://users/42/profile, y el valor de {userId} se obtiene con $request->get('userId').
Anotaciones de recurso
Puedes indicar la prioridad y la audiencia del recurso.Implementación de prompts
Los prompts son plantillas reutilizables que puede usar el cliente de IA. Estandarizan consultas repetitivas o flujos de trabajo complejos.Crear un prompt
Autenticación y autorización
Autenticación por token con Sanctum
La forma más sencilla. El cliente MCP envía la cabeceraAuthorization: Bearer <token>.
Autenticación con OAuth 2.1
Para una autenticación más robusta, usa Laravel Passport.AppServiceProvider.
Autenticación con middleware personalizado
Si utilizas tokens propios, valida elAuthorization con un middleware personalizado.
Autorización dentro de la tool
Dentro dehandle de la tool o el recurso, usa $request->user() para hacer controles de autorización finos.
Ejemplo práctico: tools de base de datos
Ejemplo completo de tools que buscan y crean datos usando Eloquent.Clase servidor
Tool de búsqueda (solo lectura)
Tool de creación (escritura)
Ejemplo práctico: tool de manipulación de archivos
Ejemplo de tool que manipula archivos con la facade Storage.Pruebas
Puedes escribir tests unitarios para servidores, tools, recursos y prompts MCP con las funcionalidades de test estándar de Laravel.Test de una tool
ConServer::tool() invocas la tool directamente para testearla.
Test de recursos y prompts
Principales métodos de aserción
Depuración con MCP Inspector
Para depuración interactiva, usa MCP Inspector.Consideraciones de despliegue
HTTP streaming y SSE
Si vas a usar respuestas en streaming (Generator) en el servidor web, revisa la configuración del servidor.Combinación con Laravel Octane
Para servidores MCP de alto tráfico, considera Laravel Octane (FrankenPHP o Swoole). Reduce drásticamente la sobrecarga por petición.Rate limiting
Limita las peticiones al servidor MCP con el middlewarethrottle.