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

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

  • Usar tipos estrictos y docblocks claros: el SDK genera el esquema automáticamente.
  • Mantener las tools pequeñas y con una sola responsabilidad.
  • Para proyectos más grandes se pueden registrar tools manualmente en lugar de usar discovery.
  • El SDK también permite crear clientes MCP, para conectarte a otros servidores.
  • Recursos oficiales