Un servidor, siete clientes
El servidor es un único endpoint HTTPS que habla el Model Context Protocol sobre Streamable HTTP: un POST que lleva JSON-RPC, una respuesta JSON, ningún stream que quede abierto. No hay nada que instalar, nada que ejecutar en local y nada por lo que registrarse en los dominios públicos — la URL es toda la configuración:
Endpoint MCPhttps://grabmail.io/mcp
Todo cliente MCP acepta un servidor HTTP remoto, pero cada uno guarda su configuración en un archivo distinto con un nombre de clave ligeramente distinto. Las secciones de más abajo dan la línea exacta para cada uno. Los formatos son los vigentes en septiembre de 2026; la documentación propia de cada cliente es la autoridad si alguno ha cambiado desde entonces.
Comprueba que responde, desde una shell
Antes de tocar ningún cliente, demuestra que el servidor está ahí y mira qué ofrece. Como el transporte es HTTP normal, con un curl basta:
$ curl -s -X POST https://grabmail.io/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq '.result.tools[].name'"create_inbox"
"list_domains"
"list_messages"
"read_message"
"wait_for_message"
"delete_message"Si eso funciona, todos los clientes de más abajo también van a funcionar, y un cliente que después falla es un problema de configuración en el cliente, no un problema del servidor. Si no funciona, comprueba que tu red permite la salida HTTPS hacia grabmail.io — esa es toda su huella.
Claude Code
Un solo comando, desde cualquier directorio. Registra el servidor para tu usuario, así que está disponible en todos los proyectos:
$ claude mcp add --transport http grabmail https://grabmail.io/mcpPara compartirlo con un equipo a través del repositorio en su lugar, acótalo al proyecto. Eso escribe un .mcp.json en la raíz, que se sube al repositorio y que a los compañeros de equipo se les pide aprobar:
$ claude mcp add --transport http --scope project grabmail https://grabmail.io/mcp{
"mcpServers": {
"grabmail": {
"type": "http",
"url": "https://grabmail.io/mcp"
}
}
}Reinicia Claude Code, ejecuta /mcp, y grabmail aparece listado con sus seis herramientas. El servidor también responde a la llamada initialize del protocolo con un breve párrafo de instrucciones, que Claude Code le pasa al modelo — así que el agente llega ya sabiendo que debe repartir el alias y esperar sobre la dirección.
Claude Desktop
Los servidores remotos se añaden desde la aplicación en lugar de desde el archivo de configuración:
- Settings → Connectors → Add custom connector.
- Pega
https://grabmail.io/mcpcomo la URL y ponle un nombre. - Empieza una conversación nueva y las herramientas aparecen bajo el conector.
En una versión que solo acepta servidores locales en claude_desktop_config.json, conecta el endpoint remoto con mcp-remote, que se ejecuta como un proceso local y reenvía hacia la URL:
{
"mcpServers": {
"grabmail": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://grabmail.io/mcp"]
}
}
}Cursor
Cursor lee .cursor/mcp.json en el proyecto (o ~/.cursor/mcp.json para todos los proyectos). Un servidor remoto es una url:
{
"mcpServers": {
"grabmail": {
"url": "https://grabmail.io/mcp"
}
}
}Abre Cursor Settings → MCP para verlo listado y activar sus herramientas. En Agent mode el modelo las llama por su cuenta; en el chat puedes pedirlas por su nombre.
Windsurf
Windsurf guarda sus servidores en ~/.codeium/windsurf/mcp_config.json, y la clave para un servidor remoto es serverUrl en lugar de url — el único sitio donde la forma cambia:
{
"mcpServers": {
"grabmail": {
"serverUrl": "https://grabmail.io/mcp"
}
}
}Cascade muestra el servidor tras actualizar desde el panel de MCP. Se puede llegar al mismo archivo desde Windsurf Settings → Cascade → MCP servers → View raw config.
VS Code
El modo agente de VS Code lee .vscode/mcp.json en el espacio de trabajo, o el archivo a nivel de usuario que escribe MCP: Add Server en la paleta de comandos. Los servidores viven bajo servers, no mcpServers, y uno remoto declara su transporte:
{
"servers": {
"grabmail": {
"type": "http",
"url": "https://grabmail.io/mcp"
}
}
}Aparece un pequeño enlace «Start» encima de la entrada en el editor; después de eso las herramientas aparecen en el selector de herramientas del chat, y el modo agente las llama sin que se le pida.
Codex CLI and Gemini CLI
Codex CLI guarda su configuración en TOML en ~/.codex/config.toml. Un servidor remoto es una tabla con una url:
[mcp_servers.grabmail]
url = "https://grabmail.io/mcp"Gemini CLI lee ~/.gemini/settings.json (o .gemini/settings.json en el proyecto), y la clave para un servidor Streamable HTTP es httpUrl:
{
"mcpServers": {
"grabmail": {
"httpUrl": "https://grabmail.io/mcp"
}
}
}Una versión de cualquiera de los dos que solo acepte servidores locales puede llegar al endpoint a través del mismo puente mcp-remote que se mostró para Claude Desktop: command = "npx", args = ["-y", "mcp-remote", "https://grabmail.io/mcp"].
Las seis herramientas
Sea cual sea el cliente, el modelo ve las mismas seis herramientas con los mismos nombres. No hay ningún estado que gestionar entre llamadas, y ninguna necesita un argumento que la anterior no haya devuelto.
create_inbox- Inventa una dirección nueva y la devuelve con su alias y un
next_stepque dice cuál usar dónde. No se reserva nada del lado del servidor, así que no puede fallar. Admite unprefixlegible opcional. wait_for_message- Bloquea hasta que llega un mensaje a la dirección, hasta 25 segundos, y entonces lo devuelve completo — asunto, remitente, texto plano, HTML. Filtra con
subject_containsofrom_contains; pasasince_idpara ignorar lo que ya hubiera antes. Tras una espera sin novedades respondetimed_outy pide que se la vuelva a llamar. read_message- Un mensaje completo por id. Rara vez hace falta, porque la espera ya devuelve el mensaje entero.
list_messages- Todo lo que espera en una dirección, lo más reciente primero, al instante — incluso cuando no hay nada.
list_domains- Los dominios públicos que cualquiera puede usar, para cuando un formulario acaba de rechazar uno de ellos.
delete_message- Elimina un mensaje ahora en lugar de dentro de 5 días. Idempotente, así que un agente que reintenta no cuesta nada.
El bucle de registro en cuatro llamadas
Esta es la secuencia que necesita casi cualquier tarea, y el cliente no la cambia:
create_inbox. Vuelven una dirección, un alias, y la nota que dice cuál es cuál.- El alias va en el formulario. El sitio recibe una dirección que funciona, que llega al buzón, y que no se puede usar para abrirlo.
wait_for_messagesobre la dirección, justo después de enviar el formulario, consubject_containspuesto a una palabra que va a llevar el correo de confirmación. Bloquea; el agente no hace ningún bucle.- El código sale del mensaje que devolvió la espera. Normalmente no hace falta ninguna llamada más.
Sign up for a trial at https://app.example.com/signup with a fresh GrabMail inbox.
Use the ALIAS in the form, wait for the confirmation code with wait_for_message
on the ADDRESS, enter it, and tell me the resulting login.Qué poner en las instrucciones propias del agente
El servidor le dice al modelo cómo usarlo en el momento de conectar, pero un modelo que ha leído las mismas cuatro reglas en las instrucciones propias de su proyecto las sigue siempre, en lugar de la mayoría de las veces. Añade esto a CLAUDE.md, .cursor/rules, .windsurfrules, AGENTS.md o GEMINI.md — el que lea tu cliente:
## Email
- To receive email, use the `grabmail` MCP server. Call `create_inbox` once per task.
- Put the **alias** it returns into forms; poll the **address** it returns with `wait_for_message`.
- Call `wait_for_message` right after submitting a form, with `subject_contains` set to a word
you expect ("code", "verify", "confirm"). If it returns `timed_out`, call it again — up to
three times — before concluding the mail was not sent.
- Never reuse an inbox across tasks. Never send anything confidential to one: it is public.Las dos reglas más importantes son las que un agente hace mal si no se le dicen: poner el alias en el formulario y consultar la dirección, y tratar un timed_out como «vuelve a llamar», no como «el correo nunca se envió». Un buzón que un agente de IA puede leer repasa las dos en profundidad, incluyendo por qué la espera termina antes de que llegue el correo.
Cuando no funciona
| Síntoma | Causa | Solución |
|---|---|---|
| El servidor no aparece listado | El archivo de configuración está en el sitio equivocado, usa la clave equivocada (url / serverUrl / httpUrl / servers), o no se reinició el cliente. | Copia exactamente el bloque de tu cliente, reinicia, y ejecuta el curl de más arriba para descartar el servidor. |
| Las herramientas aparecen listadas pero el modelo nunca las llama | Las herramientas están desactivadas en el panel de MCP del cliente, o no se le dijo al modelo que existe un paso de correo. | Actívalas, y añade el párrafo de instrucciones de más arriba. |
wait_for_message sigue devolviendo timed_out | El formulario nunca se envió, el alias se escribió mal, el sitio rechazó el dominio, o ya hay 8 esperas en marcha. | Vuelve a llamar hasta tres veces; revisa el propio error del formulario; lee por qué los formularios de registro bloquean el correo desechable. |
| El sitio dice que la dirección no es válida | El dominio público está en una lista de bloqueo de correo desechable. | Usa un dominio propio (un registro MX) o un dominio del fondo que se mantiene fuera de las listas. |
El puente (mcp-remote) no arranca | No hay Node en la máquina, o npx no puede llegar al registro de paquetes. | Instala Node 18 o superior, o usa una versión del cliente que acepte la URL directamente. |
Antes de darlo por terminado
- El
curlde más arriba lista seis herramientas desde tu máquina. - El servidor aparece en el panel de MCP del cliente tras reiniciar, con las herramientas activadas.
- El párrafo de instrucciones está en el archivo que lee tu cliente.
- Un prompt de prueba completó un registro: alias en el formulario, espera sobre la dirección, código leído.
- Nunca se va a enviar nada confidencial a uno de estos buzones — son públicos.
Esa es toda la configuración. El mismo servidor funciona desde cualquier framework que hable MCP, y para agentes construidos sin MCP — una simple función de herramienta en LangChain, el OpenAI Agents SDK o tu propio bucle — correo para agentes de IA muestra la versión REST de los mismos cuatro pasos.
Preguntas
¿Necesito una clave de API o una cuenta para el servidor MCP?
No. Los dominios públicos no piden clave, ni cuenta, ni cabecera, y el servidor MCP expone exactamente lo mismo que expone la API REST. Solo el fondo de pago de dominios que se mantienen fuera de las listas de bloqueo de correo desechable usa un token Bearer, pasado como cabecera Authorization en el endpoint.
¿Es Streamable HTTP o SSE?
Streamable HTTP: un POST, una respuesta JSON. No hay ningún stream de eventos que mantener abierto, que es la razón por la que wait_for_message tiene un límite de 25 segundos — a un cliente que abre un GET esperando SSE se le dice, en JSON normal, que no hay ninguno.
¿Pueden varios agentes compartir el servidor a la vez?
Sí. No hay ningún estado de sesión; cada llamada lleva todo lo que necesita. El único límite compartido es que se ejecutan 8 llamadas a wait_for_message a la vez entre todos — superado eso, la herramienta responde timed_out de inmediato y pide que se la vuelva a llamar, algo que gestiona el párrafo de instrucciones de más arriba.
¿Por qué wait_for_message termina antes de que llegue el correo?
Porque un worker del servidor durmiendo durante minutos es un worker que nadie más puede usar. La espera tiene un límite de 25 segundos y dice timed_out con honestidad en lugar de fallar; el agente vuelve a llamar. Tres llamadas son más de un minuto de espera, que cubre cualquier correo transaccional que realmente se haya enviado.
¿Puede el agente enviar correo también?
No. El servicio solo recibe, por diseño — un servidor gratuito sin cuenta que pudiera enviar sería un relé de spam en menos de una hora. Un agente que tenga que enviar correo necesita un proveedor de envío; este es para leer lo que llega de vuelta.
¿Es privado el buzón para mi agente?
No. Cualquiera que conozca la dirección puede leerlo, tanto en un dominio público como en el tuyo propio. Por eso existe el alias: el sitio recibe una dirección que llega al buzón y que no se puede usar para abrirlo. Nunca dejes que un agente envíe nada confidencial a uno de estos buzones.
¿Qué configuración de cliente es la referencia si estas cambian?
La documentación propia de cada cliente. Las formas de más arriba son las vigentes en septiembre de 2026; el lado del servidor no cambia con ellas — es una URL, y cualquier cliente que pueda llamar a un servidor MCP remoto por HTTP puede llamarlo.


