CÓMO CREAR UN SERVIDOR MCP CON PHP DE FORMA SENCILLA
MCP es un estándar abierto que permite a los modelos de IA, como Claude, Cursor, etc., conectarse de forma segura a herramientas, datos y recursos externos. En la práctica, se crea un “servidor” que expone acciones, datos y prompts, y el cliente de IA puede usarlos.Existe un "SDK" oficial de PHP, "mcp/sdk", mantenido en colaboración con la PHP Foundation y Symfony. Con el que se puede crear un servidor MCP en muy pocas líneas de código.
Requisitos
- PHP 8.1 o superior
- Composer
Paso 1: Crear el proyecto e instalar el SDK
Abrir una terminal y ejecutar:
mkdir mi-mcp-server
cd mi-mcp-server
composer require mcp/sdk
composer require symfony/finder # necesario para el descubrimiento automático de atributos
Paso 2: Crear el servidor
Crea un archivo llamado "server.php":
#!/usr/bin/env php
2,
'version' => '1.0.0'
];
}
}
// Arranca el servidor
exit(
Server::builder()
->setServerInfo('Mi Calculadora MCP', '1.0.0')
->setDiscovery(__DIR__, ['.'], excludeDirs: ['vendor'])
->build()
->run(new StdioTransport())
);
¿Qué hace este código?
- "#[McpTool]" convierte un método en una herramienta que la IA puede llamar.
- El nombre de la tool se toma del método (add, multiply).
- La descripción se toma del docblock.
- Los parámetros tipados, int $a", int $b", generan automáticamente el esquema JSON Schema.
- "#[McpResource]" expone datos de solo lectura con una URI.
- El transporte STDIO es el más usado para clientes locales (Claude Desktop, editores, etc.).
Un docblock, también llamado DocBlock o PHPDoc, es un comentario especial en PHP que documenta el código de forma estructurada. Se escribe justo encima de una clase, método, función o propiedad y empieza con "/**" en lugar del comentario normal "/*"
Paso 3: Probar el servidor
La forma más fácil de probarlo es con el MCP Inspector:
npx @modelcontextprotocol/inspector php server.php
Se abrirá una interfaz web donde puedes listar las tools, llamar a los métodos "add" o "multiply" y leer el resource, método "settings" del ejemplo . También puede ser ejecutardo directamente:
php server.php
El servidor se queda esperando mensajes por STDIO.
Paso 4: Conectarlo a un cliente
Ejemplo Claude Desktop, abrir el fichero "claude_desktop_config.json· añadie algo como:
{
"mcpServers": {
"calculadora-php": {
"command": "php",
"args": ["/ruta/completa/a/tu/server.php"]
}
}
}
Reiniciar Claude Desktop y ya se podrá usarel mcp desde el chat.
En e ejemplo se usa Claude, pero s epuede usar en VsCode, u otros y mirar como se configura en cada caso..
Conceptos básicos
mkdir mi-mcp-server
cd mi-mcp-server
composer require mcp/sdk
composer require symfony/finder # necesario para el descubrimiento automático de atributos
#!/usr/bin/env php
2,
'version' => '1.0.0'
];
}
}
// Arranca el servidor
exit(
Server::builder()
->setServerInfo('Mi Calculadora MCP', '1.0.0')
->setDiscovery(__DIR__, ['.'], excludeDirs: ['vendor'])
->build()
->run(new StdioTransport())
);
npx @modelcontextprotocol/inspector php server.php
php server.php
{
"mcpServers": {
"calculadora-php": {
"command": "php",
"args": ["/ruta/completa/a/tu/server.php"]
}
}
}
| Concepto | Qué es | Ejemplo |
|---|---|---|
| Tool | Acción que la IA puede ejecutar | add, buscarUsuario, etc. |
| Resource | Datos de solo lectura (configuración, archivos, etc.) | config://... |
| Prompt | Plantillas de prompts predefinidos | (también se pueden registrar) |
| Transport | Cómo se comunica el servidor | STDIO (local) o HTTP (remoto) |
Transportes disponibles
- STDIO → ideal para uso local, como Claude Desktop, Cursor, etc.
- Streamable HTTP → para servir el MCP desde una aplicación web .
Consejos prácticos
Recursos oficiales
- Documentación: php.sdk.modelcontextprotocol.io
- Repositorio: github.com/modelcontextprotocol/php-sdk
- Paquete Composer: mcp/sdk