Desplegar un servidor MCP para ChatGPT no consiste simplemente en conseguir que responda /mcp. ChatGPT tiene que poder alcanzarlo, descubrir las herramientas adecuadas, autenticar a los usuarios y decidir cuándo utilizarlas. Para la mayoría de los equipos, el alojamiento gestionado es la opción más sensata; la infraestructura privada debería mantenerse detrás de Secure MCP Tunnel.
Define el límite del despliegue antes de escribir código
La frontera del despliegue condiciona el transporte, el trabajo de autenticación, la carga operativa y la posibilidad de publicar el servidor. ChatGPT actúa como cliente MCP remoto: no inicia directamente un proceso local stdio como hacen algunos clientes de escritorio (OpenAI Help Center).
| Modalidad de despliegue | Conexión de ChatGPT | Más adecuada para | Coste principal |
|---|---|---|---|
| Alojamiento público gestionado | Endpoint HTTPS estable con Streamable HTTP | La mayoría de las aplicaciones para equipos y clientes | Límites de la plataforma y dependencia del proveedor |
| Endpoint público autogestionado | Endpoint HTTPS estable en tu contenedor, VM o clúster | Equipos de plataforma con requisitos de cumplimiento o red | Tú te encargas de TLS, escalado, parches, rollback y monitorización |
| Secure MCP Tunnel | Un endpoint alojado por OpenAI retransmite hacia un servidor privado stdio o HTTP | Sistemas locales, redes privadas y desarrollo | La disponibilidad pasa a depender de un tunnel-client saludable |
Usa alojamiento gestionado por defecto cuando el servidor MCP no mantenga estado, el tráfico sea intermitente y el equipo no opere ya una plataforma pública fiable. Tanto el patrón de route handler de Vercel como el de Worker sin estado de Cloudflare generan el endpoint HTTPS estable que espera ChatGPT; antes de decidir, comprueba las limitaciones de cada plataforma en duración de las peticiones, streaming y estado (Vercel, Cloudflare).
Autogestiona el endpoint público cuando el servidor deba convivir con bases de datos existentes, utilizar la infraestructura de identidad ya implantada, cumplir requisitos de residencia de datos o ejecutar cargas que no encajen en el modelo de duración de un entorno serverless. Esta opción solo está justificada si el equipo ya cuenta con gestión de secretos, rollback de despliegues, alertas y una persona responsable de guardia.
Usa Secure MCP Tunnel cuando exponer una entrada pública no sea el límite de seguridad adecuado. El cliente de túnel de OpenAI establece conexiones HTTPS salientes hacia api.openai.com:443 y reenvía las peticiones a un servidor privado HTTP o stdio; no hace falta ningún listener accesible desde Internet. La documentación de despliegue de OpenAI también indica que Secure MCP Tunnel no cumple el requisito de publicación pública de disponer de un endpoint HTTPS estable y accesible públicamente (documentación del túnel de OpenAI, guía de desarrollo de OpenAI).
De las herramientas locales a un servidor MCP de ChatGPT listo para producción
Un despliegue fiable de un servidor MCP para ChatGPT necesita validaciones independientes para el comportamiento de las herramientas, el protocolo, la accesibilidad en producción y el enrutamiento del modelo. Superar una no garantiza superar la siguiente.
1. Define herramientas concretas y contratos estables
Empieza con una herramienta por cada acción reconocible del usuario. La guía de desarrollo de OpenAI propone separar list_projects, get_project y update_project, en lugar de concentrar modos sin relación en una sola herramienta (documentación para desarrolladores de OpenAI). Cada herramienta necesita un nombre orientado a la acción, una descripción precisa, un esquema de entrada explícito, una salida útil y anotaciones de seguridad correctas.
Marca una herramienta con readOnlyHint: true únicamente si no puede modificar el estado. Usa destructiveHint: true para efectos irreversibles o difíciles de deshacer, y openWorldHint: true cuando la herramienta acceda a entidades externas abiertas. OpenAI documenta estas anotaciones como metadatos dirigidos al modelo que se utilizan para el comportamiento de las herramientas y la gestión de seguridad, pero exige que el servidor aplique la autorización en cada petición protegida (documentación para desarrolladores de OpenAI).
Devuelve identificadores de registro estables en structuredContent cuando una llamada posterior pueda actualizar ese mismo registro. Mantén los tokens, secretos y datos personales innecesarios fuera de content, structuredContent y _meta; OpenAI afirma explícitamente que _meta está oculto para el modelo, pero no es un almacén seguro.
2. Expón Streamable HTTP en local
La conexión remota habitual de ChatGPT utiliza Streamable HTTP, normalmente en /mcp. La ruta es convencional, no obligatoria, pero la URL completa del despliegue debe introducirse en ChatGPT (guía de conexión de OpenAI).
Ejecuta el servidor en local y abre MCP Inspector:
npx @modelcontextprotocol/inspector@latest
Conecta Inspector a una URL como http://localhost:3000/mcp. Comprueba la inicialización y el listado de herramientas; después llama a cada herramienta con una petición válida, un esquema incorrecto, un identificador ausente y un caso sin resultados. En las herramientas protegidas, verifica que las credenciales ausentes o insuficientes provoquen un fallo seguro.
3. Añade el control de acceso de producción antes de exponer el servidor
Un health check público no justifica exponer también las herramientas. Si solo ofrecen datos intencionadamente públicos y de solo lectura, un endpoint sin autenticación puede ser aceptable. Los datos privados, los datos específicos de cada usuario y las acciones requieren autenticación y autorización en todas las peticiones (guía de desarrollo de OpenAI).
En un MCP protegido con OAuth, el servidor actúa como servidor de recursos. Una petición sin autenticar devuelve 401 e indica al cliente dónde encontrar los metadatos del recurso protegido, normalmente en /.well-known/oauth-protected-resource. El flujo de autorización debería utilizar PKCE, tokens con permisos limitados, validaciones estrictas de emisor y audiencia, y compatibilidad con refresh tokens cuando las conexiones persistentes lo requieran (OpenAI Help Center).
No envíes el token de acceso MCP a un servicio ascendente solo porque ambos reconozcan tokens bearer. El token debe estar destinado al recurso que lo recibe; para las llamadas posteriores, utiliza credenciales de servicio o un diseño adecuado de intercambio de tokens (guía de seguridad para despliegues MCP).
4. Despliega un candidato inmutable
Despliega en un endpoint de preview o staging la misma build que ha superado las pruebas de Inspector y promociona después ese artefacto a producción. El endpoint de producción debe usar HTTPS, conservar la ruta MCP completa, alcanzar sus dependencias y guardar los secretos en el almacén de secretos de la plataforma.
Como referencia compacta para Vercel, instala mcp-handler, @modelcontextprotocol/server y zod; monta el Web handler devuelto en app/api/mcp/route.ts; expórtalo para GET y POST; y despliega con:
npx vercel deploy --prod
La URL de conexión de ChatGPT tendrá entonces la forma https://your-project.vercel.app/api/mcp. Vercel documenta una duración predeterminada de 300 segundos para las funciones con Fluid compute y límites superiores en configuraciones de pago elegibles, así que cualquier trabajo que sobreviva a una petición debe trasladarse a un job reanudable en lugar de mantener abierto un stream inactivo (guía de despliegue de Vercel). Mantén la ruta sin estado salvo que el runtime elegido ofrezca un diseño deliberado para compartir estado.
Añade estos cuatro controles operativos antes de conectar ChatGPT:
- Establece timeouts y límites de velocidad para las herramientas costosas.
- Registra los fallos de inicialización y de las herramientas sin guardar tokens ni resultados sensibles.
- Asocia un identificador de release a cada invocación para que cualquier incidente pueda relacionarse con el código desplegado.
- Mantén un procedimiento de rollback probado para las regresiones del esquema de herramientas o de la autorización.
Ejecuta MCP Inspector contra la URL de producción, no solo contra localhost. Vuelve a comprobar el descubrimiento, los esquemas, las anotaciones, la autenticación, las llamadas válidas y los errores. Un balanceador, un proxy, una regla CORS o una redirección del proveedor de identidad pueden fallar aunque la aplicación funcione en local.
Diseña el control de acceso en tres capas
El control de acceso MCP de ChatGPT tiene tres capas de aplicación independientes; activar OAuth solo resuelve la capa de identidad.
| Capa | Punto de aplicación | Decisión necesaria |
|---|---|---|
| Acceso al espacio de trabajo | Controles de administración de ChatGPT | ¿Quién puede crear, publicar, activar o utilizar la aplicación? |
| Identidad del usuario | Servidor de autorización OAuth y servidor de recursos MCP | ¿Qué cuenta realiza la llamada y el token es válido para este servidor? |
| Autorización de recursos y acciones | Gestor de herramientas MCP y backend | ¿Puede este usuario ejecutar esta acción sobre este tenant, registro o entorno? |
En ChatGPT Business, los administradores o propietarios controlan el modo de desarrollador y la publicación. Los espacios Enterprise y Edu añaden RBAC para el acceso de desarrolladores, el acceso a las aplicaciones y las acciones (OpenAI Help Center). Estos controles regulan el uso de la aplicación desde ChatGPT; no demuestran que una persona pueda editar el registro del cliente A en el backend.
El handler MCP debe obtener la identidad a partir de credenciales validadas y aplicar la autorización por tenant y objeto en cada llamada. No aceptes nunca un ID de usuario, ID de organización o rol incluido en los argumentos generados por el modelo como prueba de identidad. Trata todos los argumentos de las herramientas como entradas no confiables.
Separa los permisos de lectura de los de escritura. Una política práctica podría permitir projects:read de forma amplia, reservar projects:write para los editores y exigir una comprobación reciente en el servidor antes de las operaciones destructivas. ChatGPT puede solicitar confirmación para acciones importantes, pero esa confirmación es una medida de experiencia de usuario, no un control de autorización.
La prompt injection también es un problema de control de acceso. Las salidas de las herramientas y los documentos recuperados pueden contener instrucciones maliciosas, por lo que las herramientas de escritura deberían exponer la acción más limitada posible y validar los campos permitidos en el servidor. Una herramienta genérica como execute_action aumenta tanto la ambigüedad del enrutamiento como el radio de impacto.
Conecta, prueba y publica la aplicación en ChatGPT
Conectar el endpoint crea una aplicación en borrador y una instantánea de sus metadatos. Publicarla pone una configuración revisada a disposición del espacio de trabajo; no equivale a desplegar código del servidor.
- Activa el modo de desarrollador según la política aplicable del espacio de trabajo de ChatGPT.
- Abre el flujo de creación de aplicaciones e introduce la URL MCP HTTPS completa, incluido
/mcpcuando esa sea la ruta montada. - Selecciona el mecanismo de autenticación y completa el flujo OAuth si es necesario.
- Ejecuta Scan Tools, revisa cada nombre, esquema, anotación y acción descubiertos y, después, crea el borrador.
- Prueba el borrador en un chat nuevo antes de publicarlo en el espacio de trabajo.
Para un servidor privado, selecciona Tunnel como conexión y elige un túnel asociado o introduce su tunnel_id. El operador necesita Tunnels Read + Use en OpenAI Platform, mientras que el modo de desarrollador de ChatGPT sigue siendo un permiso independiente del espacio de trabajo (documentación del túnel de OpenAI).
Los cambios de metadatos necesitan un ciclo de vida explícito. En una conexión del modo de desarrollador, despliega o reinicia el servidor, abre la conexión, selecciona Refresh, verifica los metadatos modificados y empieza una conversación nueva. La guía actual de OpenAI para Business indica que las aplicaciones publicadas deben recrearse y volver a publicarse para cambiar herramientas o metadatos; los administradores de Enterprise/Edu pueden actualizar acciones, revisar diferencias y activar nuevas acciones, que permanecen desactivadas por defecto (OpenAI Help Center).
Aun así, la política más segura para el servidor es evolucionar de forma compatible. Añade campos opcionales y herramientas nuevas; evita cambiar en silencio el significado de una herramienta existente. Conserva los esquemas antiguos hasta que todas las instantáneas y clientes aprobados hayan migrado.
Prueba el comportamiento que realmente verán los usuarios de ChatGPT
Las pruebas de protocolo demuestran que el servidor puede responder. Las pruebas en ChatGPT demuestran que el modelo selecciona la herramienta prevista, proporciona argumentos adecuados, respeta los límites y evita usarla cuando no corresponde.
El usuario de Reddit u/EmailNo8428 describió así el problema de las dos capas:
“En realidad estás probando dos cosas a la vez: la lógica de tus herramientas y la forma en que un cliente concreto las invoca.” (r/mcp)
Crea un conjunto de evaluación pequeño y versionado con estos casos:
| Caso | Resultado esperado |
|---|---|
| Petición directa | Seleccionar la capacidad indicada con argumentos válidos |
| Petición indirecta | Inferir la herramienta correcta a partir del objetivo del usuario |
| Seguimiento | Reutilizar el identificador estable devuelto anteriormente |
| Petición negativa | No llamar a ninguna herramienta MCP |
| Permiso insuficiente | Devolver un error de autorización útil sin filtrar datos |
| Petición de escritura | Seleccionar la herramienta de escritura más limitada y activar la confirmación correspondiente |
| Petición ambigua | Solicitar la información necesaria en lugar de inventar argumentos |
| Resultado vacío | Devolver un estado vacío válido, no un error de transporte o de esquema |
Registra la herramienta seleccionada, los argumentos, el resultado devuelto, el error y el comportamiento de confirmación. Repite los casos afectados cada vez que cambien el nombre, la descripción, el esquema, la anotación, la regla de autenticación o la forma del resultado de una herramienta; OpenAI prescribe el mismo ciclo de actualización y nueva prueba en su guía de conexión.
Un servidor que supera Inspector pero enruta mal las peticiones en ChatGPT suele necesitar límites de herramientas, descripciones o esquemas más claros. Si enruta correctamente pero devuelve 401, agota el tiempo de espera o pierde el estado, el problema está en la infraestructura o en la autorización. Separar ambos diagnósticos acorta el ciclo de reparación.
Preguntas frecuentes
¿Puede ChatGPT conectarse directamente a un servidor MCP localhost o stdio?
No. ChatGPT se conecta normalmente a un endpoint MCP remoto. Secure MCP Tunnel de OpenAI puede retransmitir hacia un servidor privado stdio o HTTP sin exponer una entrada pública, mientras que un túnel HTTPS temporal puede servir para desarrollo, pero no para publicar un plugin.
¿Un servidor MCP de ChatGPT necesita un endpoint HTTPS público?
Una conexión remota normal y la publicación pública de un plugin requieren HTTPS estable. Un servidor privado en modo de desarrollador puede utilizar Secure MCP Tunnel, que mantiene el servidor dentro del entorno controlado por el cliente.
¿Son obligatorios search y fetch?
No. OpenAI indica que los servidores conectados ya no los necesitan. Implementa los contratos estándar de search y fetch cuando la aplicación deba participar en las superficies de conocimiento corporativo o recuperación de investigación profunda (OpenAI Help Center).
¿Por qué ChatGPT sigue mostrando las herramientas antiguas después del despliegue?
ChatGPT almacena los metadatos descubiertos en lugar de tratar cada despliegue de código como un cambio de herramientas aprobado. Actualiza una conexión del modo de desarrollador y empieza una conversación nueva; las aplicaciones publicadas en el espacio de trabajo siguen el proceso de revisión y republicación correspondiente al plan.