Servidor MCP
SpacePost habla el Model Context Protocol, así que los asistentes de IA pueden enviar correo y gestionar dominios, claves de API, webhooks, audiencias, contactos, campañas, supresiones y tenants en tu nombre.
Cada endpoint de la referencia de la API es una herramienta MCP. Las herramientas se generan a partir del mismo documento OpenAPI que la referencia, así que cuando la API gana una función, el servidor MCP la ofrece automáticamente: no hay una lista aparte que mantener ni que esperar.
Puedes conectarte de dos formas:
- Alojado (recomendado):
https://api.spacepost.dev/mcp, Streamable HTTP, autenticado con tu clave de API. No hay nada que instalar. - Local:
npx -y @spacepost/mcp, un servidor stdio que llama a la API desde tu máquina. Las definiciones de las herramientas vienen dentro del paquete, así que arranca sin conexión.
Conectarse al servidor alojado
Sección titulada «Conectarse al servidor alojado»Envía tu clave de API como token bearer: Authorization: Bearer sp_live_....
claude mcp add --transport http spacepost https://api.spacepost.dev/mcp \ --header "Authorization: Bearer sp_live_YOUR_API_KEY"Usa claude mcp list para confirmarlo.
Claude Desktop inicia servidores locales (stdio) desde claude_desktop_config.json, así que conecta el endpoint alojado con mcp-remote
(Settings, Developer, Edit Config):
{ "mcpServers": { "spacepost": { "command": "npx", "args": [ "-y", "mcp-remote", "https://api.spacepost.dev/mcp", "--header", "Authorization:${SPACEPOST_AUTH}" ], "env": { "SPACEPOST_AUTH": "Bearer sp_live_YOUR_API_KEY" } } }}Reinicia Claude Desktop. O usa el servidor local en su lugar.
Añádelo a .cursor/mcp.json en tu proyecto, o a ~/.cursor/mcp.json de forma global:
{ "mcpServers": { "spacepost": { "url": "https://api.spacepost.dev/mcp", "headers": { "Authorization": "Bearer sp_live_YOUR_API_KEY" } } }}Añádelo a .vscode/mcp.json:
{ "inputs": [ { "id": "spacepost-key", "type": "promptString", "description": "SpacePost API key", "password": true } ], "servers": { "spacepost": { "type": "http", "url": "https://api.spacepost.dev/mcp", "headers": { "Authorization": "Bearer ${input:spacepost-key}" } } }}VS Code te pide la clave la primera vez y la mantiene fuera del archivo.
Limita la lista de herramientas con parámetros de consulta en la URL, por ejemplo https://api.spacepost.dev/mcp?read_only=true&toolsets=emails,domains.
El servidor alojado no tiene estado: cada petición es independiente, así que GET y DELETE sobre /mcp responden 405 y no hay ninguna sesión que reanudar.
Ejecutar el servidor en local
Sección titulada «Ejecutar el servidor en local»| Variable | Obligatoria | Descripción |
|---|---|---|
SPACEPOST_API_KEY |
Sí | Tu clave de API |
SPACEPOST_BASE_URL |
No | URL alternativa de la API, por defecto https://api.spacepost.dev |
SPACEPOST_DEFAULT_FROM |
No | Remitente que se usa cuando el asistente llama a send_email sin from, por ejemplo Acme <hello@acme.com> |
SPACEPOST_READ_ONLY |
No | true equivale a --read-only |
SPACEPOST_TOOLSETS |
No | Igual que --toolsets, por ejemplo emails,domains |
SPACEPOST_PERMISSION |
No | Igual que --permission; define sending_access cuando la clave solo pueda enviar |
claude mcp add spacepost -e SPACEPOST_API_KEY=sp_live_YOUR_API_KEY -- npx -y @spacepost/mcpAñade -e SPACEPOST_DEFAULT_FROM="Acme <hello@acme.com>" para definir un remitente por defecto, o flags después del nombre del paquete, como npx -y @spacepost/mcp --read-only.
{ "mcpServers": { "spacepost": { "command": "npx", "args": ["-y", "@spacepost/mcp"], "env": { "SPACEPOST_API_KEY": "sp_live_YOUR_API_KEY", "SPACEPOST_DEFAULT_FROM": "Acme <hello@acme.com>" } } }}{ "mcpServers": { "spacepost": { "command": "npx", "args": ["-y", "@spacepost/mcp", "--toolsets", "emails,domains"], "env": { "SPACEPOST_API_KEY": "sp_live_YOUR_API_KEY" } } }}{ "inputs": [ { "id": "spacepost-key", "type": "promptString", "description": "SpacePost API key", "password": true } ], "servers": { "spacepost": { "type": "stdio", "command": "npx", "args": ["-y", "@spacepost/mcp"], "env": { "SPACEPOST_API_KEY": "${input:spacepost-key}" } } }}npx -y @spacepost/mcp --help lista las opciones, y --list-tools muestra las herramientas que expone una configuración.
Opciones
Sección titulada «Opciones»| Flag local | Consulta alojada | Efecto |
|---|---|---|
--read-only |
read_only=true |
Solo herramientas para endpoints GET (list_*, get_*, get_broadcast_readiness) |
--permission sending_access |
automático, según tu clave | Solo las herramientas que puede usar una clave sending_access |
--toolsets emails,domains |
toolsets=emails,domains |
Solo herramientas de estas áreas de la API: emails, domains, apikeys, webhooks, audiences, contacts, broadcasts, suppressions, tenants (las secciones de la referencia; se ignoran mayúsculas, espacios y guiones, así que api-keys también funciona) |
Se pueden combinar.
Cómo se corresponden las herramientas con la API
Sección titulada «Cómo se corresponden las herramientas con la API»- Una herramienta por endpoint, con el nombre del
operationIddel endpoint en snake_case:sendEmailpasa a sersend_email,getBroadcastReadinesspasa a serget_broadcast_readiness,pauseTenantpasa a serpause_tenant. La referencia de la API documenta cada campo. - Los argumentos son un único objeto plano: parámetros de ruta (en snake_case, p. ej.
id,audience_id,ref), parámetros de consulta (limit,after,before) y los campos del cuerpo JSON (from,to,subject, …). Si un campo del cuerpo se llama igual que un parámetro, se llamabody_<field>. Un cuerpo que no es un objeto, como el array desend_batch_emails, se pasa comobody. idempotency_keyensend_emailysend_batch_emailsdefine el encabezadoIdempotency-Key, así que los reintentos nunca envían dos veces.- Los resultados son la respuesta JSON de la API, también como contenido estructurado. Los errores llegan con
isError: truey el mismo cuerpo{ "statusCode", "name", "message" }que la API REST, más una pista sobre qué hacer a continuación. - Las anotaciones le dicen al cliente qué hace una herramienta: las de lectura son
readOnlyHint, las de borrado,cancel_emailypause_tenantsondestructiveHint, y las que envían correo (send_email,send_batch_emails,send_broadcast) sonopenWorldHint. Los clientes las usan para decidir cuándo preguntarte antes de ejecutar una herramienta.
Ejemplos de prompts
Sección titulada «Ejemplos de prompts»- “Envía un correo de prueba desde onboarding@test.spacepost.dev a delivered@test.spacepost.dev diciendo hola.”
- “Añade el dominio acme.com y dime qué registros DNS debo crear.”
- “¿Se entregó el correo que le envié ayer a ada@example.com?”
- “Cancela el correo programado para la lista beta.”
- “Crea un webhook a https://acme.com/hooks para rebotes y quejas.”
- “Prepara un borrador de campaña para mi audiencia Newsletter, revisa si tiene problemas de entregabilidad, pero no la envíes todavía.”
- “¿Cuáles de mis tenants están pausados y por qué?”