Model Context Protocol (MCP) es el estándar de Anthropic para conectar herramientas externas con Claude Code. Cuando la gente habla de "construir un MCP server", generalmente piensa en Node.js o Python — los lenguajes de los ejemplos oficiales. Pero si tu stack es PHP, la pregunta que surge es legítima: ¿necesito aprender Node para esto, o puedo hacerlo en PHP?

La respuesta corta: depende de qué necesitás que haga tu MCP server.

Qué es técnicamente un MCP server

Un MCP server es un proceso que expone un conjunto de "tools" al cliente MCP (Claude Code). La comunicación puede ser:

  • stdio: el cliente lanza el proceso, se comunica por stdin/stdout. Simple, sin red, sin auth.
  • SSE (Server-Sent Events): el cliente se conecta a un endpoint HTTP y el server pushea eventos. Requiere una URL accesible, permite auth con headers.

El transporte stdio es el más simple — Claude Code lanza el proceso MCP directamente. El transporte SSE es el que permite tener el server en un VPS remoto con autenticación.

Node.js — las ventajas reales

El SDK oficial de MCP de Anthropic es TypeScript/JavaScript. Eso significa:

  • Documentación más completa y ejemplos directamente aplicables
  • La comunidad de MCP servers open source casi toda en Node
  • El servidor puede correr como proceso stdio — sin necesitar un web server
  • Ideal para herramientas locales: leer archivos, ejecutar git, llamar APIs

Un MCP server en Node con transporte stdio se implementa así:

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

const server = new Server({ name: "mi-server", version: "1.0.0" }, {
  capabilities: { tools: {} }
});

server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [{
    name: "get_config",
    description: "Retorna la configuración del proyecto actual",
    inputSchema: { type: "object", properties: {} }
  }]
}));

const transport = new StdioServerTransport();
await server.connect(transport);

PHP — cuándo tiene sentido

PHP no tiene un SDK oficial de MCP, pero el protocolo es JSON sobre HTTP. Si tu MCP server necesita:

  • Consultar una base de datos MySQL que ya tenés en Hostinger
  • Leer archivos de un directorio existente en el servidor
  • Exponer lógica de negocio ya escrita en PHP
  • Vivir en el mismo hosting compartido que el resto del proyecto

...entonces PHP es una opción válida, especialmente con transporte HTTP simple (no SSE completo sino endpoints REST que Claude llama vía una tool de fetch). El problema es que PHP en hosting compartido no puede mantener una conexión SSE abierta durante minutos — el tiempo de ejecución máximo suele ser 30-60 segundos.

Para PHP en Hostinger, la arquitectura que funciona es tools síncronas sobre HTTP normal:

<?php
// endpoint: GET /mcp/search?query=csrf+php
header('Content-Type: application/json');

$query = $_GET['query'] ?? '';
$results = search_knowledge($query); // tu función PHP existente

echo json_encode(['results' => $results]);

Claude no llama esto directamente como MCP — sino a través de una tool definida en un server wrapper mínimo en Node o Python que hace el fetch a tu PHP.

Python — la opción intermedia

Cerebro MCP usa Python con FastAPI. Python tiene ventajas sobre ambos para MCP servers con RAG:

  • pgvector + sentence-transformers: el stack de embeddings más maduro está en Python
  • FastAPI: SSE nativo, async, con tipado fuerte
  • Requiere VPS: no corre en hosting compartido

La tabla de decisión

Escenario Recomendación
MCP server local para tus proyectos (solo vos) Node.js con stdio
MCP server con RAG semántico sobre base de notas Python (FastAPI + pgvector)
Exponer lógica PHP existente a Claude PHP como backend + wrapper Node mínimo
MCP como SaaS (múltiples usuarios, auth) Python o Node en VPS — no PHP compartido
Herramientas de filesystem o git locales Node.js con stdio

La limitación real de PHP compartido

El mayor problema de PHP en Hostinger para MCP no es el lenguaje — es la infraestructura. SSE requiere que el proceso viva mientras la conexión esté abierta. Apache con PHP-FPM mata el proceso al terminar el script. Podés usar set_time_limit(0) y while(true), pero la mayoría de los planes compartidos tienen un timeout global de 60-120 segundos que no podés sobreescribir.

Para un MCP server que necesite ser persistente y manejar múltiples conexiones simultáneas, necesitás un VPS con control sobre el proceso. PHP puede ser parte de la solución (como backend de datos), pero el proceso MCP en sí conviene que sea Node o Python.

Lo que usamos en Cerebro MCP

Cerebro MCP usa la combinación que aprovecha las fortalezas de cada stack:

  • PHP + Hostinger: auth (Google OAuth), gestión de usuarios, API keys, billing, portal web — todo lo que requiere un web server tradicional y vive bien en hosting compartido.
  • Python + FastAPI en VPS: el MCP server real con SSE, búsqueda semántica con pgvector, indexado del vault. Requiere proceso persistente y no es posible en hosting compartido.

Esta separación de responsabilidades permite que el billing y la gestión de usuarios usen el stack más económico y familiar (PHP/Hostinger) mientras que la parte técnicamente exigente corre en el entorno adecuado (VPS con Python).