Substack Publisher API

Consulta publicaciones, análisis y datos de suscriptores desde la API oficial de Publisher de Substack.

Documentación

substack-publisher-mcp

Servidor MCP para la API oficial de Publisher de Substack

License: MIT Node.js MCP

Nota: Esta es una herramienta no oficial, desarrollada por la comunidad, y no está afiliada, respaldada ni soportada por Substack, Inc.

Un servidor MCP para la API de Publisher oficial de Substack. Busca y lee publicaciones, obtén análisis de publicaciones y conteos de suscriptores, y consulta suscriptores desde Claude, Cursor o cualquier cliente MCP. Todas las herramientas son de solo lectura.

Demo of substack-publisher-mcp in Claude Code

¿Por qué este servidor?

substack-publisher-mcpOtros servidores MCP de Substack
APIAPI oficial de PublisherAPI interna no oficial
AutenticaciónClave API (estable)Cookies del navegador (frágiles)
EstabilidadAPI oficial y documentadaSe rompe cuando Substack cambia sus internos
Multi-publicaciónSoporte integradoNo disponible

Requisitos previos

  • Node.js 22+. Verifica con node --version; instala desde nodejs.org si falta.
  • Clave API de Substack Publisher. Genera una desde el panel de control de tu publicación en Substack. Si no ves una opción de Publisher API allí, es posible que aún no esté habilitada para tu publicación; consulta la documentación de Publisher API para conocer la disponibilidad.

Inicio rápido

1. Instalación

git clone https://github.com/dkships/substack-publisher-mcp.git
cd substack-publisher-mcp
npm install && npm run build

2. Configura tu cliente MCP

Agrega al archivo de configuración MCP de tu cliente (crea el archivo si no existe):

ClienteArchivo de configuración
Claude Desktop (macOS)~/Library/Application Support/Claude/claude_desktop_config.json
Claude Desktop (Windows)%APPDATA%\Claude\claude_desktop_config.json
Claude Code.mcp.json en el directorio de tu proyecto
Cursor.cursor/mcp.json
{
  "mcpServers": {
    "substack": {
      "command": "node",
      "args": ["/path/to/substack-publisher-mcp/dist/index.js"],
      "env": {
        "SUBSTACK_API_KEY": "your-api-key-here"
      }
    }
  }
}

Usuarios de Claude Code: Agrega "type": "stdio" a la configuración del servidor.

Reinicia tu cliente MCP después de editar la configuración: los servidores se cargan al inicio.

3. Comienza a usarlo

Pregúntale a Claude (o a tu cliente MCP):

  • "¿Qué publicaciones de Substack tengo configuradas?"
  • "Muéstrame mis publicaciones del último mes"
  • "Encuentra mis publicaciones sobre precios"
  • "Abre mi publicación con el slug my-latest-post"
  • "¿Cuántas aperturas y clics obtuvo mi última publicación?"
  • "¿Cuáles son mis conteos de suscriptores de los últimos 30 días?"
  • "Busca al suscriptor jane@example.com"

¿Instalando a través de un agente de IA o registro? Consulta llms-install.md para una guía de configuración condensada y legible por máquina.

Herramientas

HerramientaDescripciónParámetros clave
list_publicationsLista las publicaciones configuradasNinguno
list_postsLista las publicaciones publicadasstartDate, endDate, sortBy, type, maxResults, next
search_postsBúsqueda de texto completo en publicaciones publicadasquery (obligatorio), maxResults (1-100)
get_postObtiene una publicación y su cuerpo por slug de URLurlSlug (obligatorio), bodyFormat
get_post_statsObtiene estadísticas de participación de una publicaciónurlSlug (obligatorio)
get_subscriber_countsObtiene conteos diarios de suscriptores por tipostartDate, endDate
get_subscriberBusca un suscriptor por correo electrónicoemail (obligatorio)

Todas las herramientas excepto list_publications aceptan un parámetro opcional publication cuando hay múltiples publicaciones configuradas.

get_post devuelve el cuerpo de la publicación como Markdown de forma predeterminada. Substack lo envía como un documento ProseMirror codificado en JSON, típicamente aproximadamente el doble de tamaño. Pasa bodyFormat: "prosemirror" para el documento sin procesar o "none" para solo metadatos.

Los filtros de fecha aceptan YYYY-MM-DD. En list_posts, endDate es exclusivo; en get_subscriber_counts, es inclusivo.

Respuestas de ejemplo

get_subscriber_counts
[
  {
    "date": "2025-01-15",
    "total_email_subscribers": 25000,
    "paid_subscribers": 500,
    "free_trial_subscribers": 10,
    "comp_subscribers": 50,
    "gift_subscribers": 15,
    "lifetime_subscribers": 0,
    "founding_subscribers": 25
  }
]
get_post_stats
{
  "clicks": 320,
  "opens": 5400,
  "post_id": 12345678,
  "recipients": 10000,
  "views": 6100,
  "new_free_subscriptions": 80,
  "new_paid_subscriptions": 5,
  "estimated_revenue_increase": 400
}
list_posts
{
  "posts": [
    {
      "post_id": 12345678,
      "title": "My Latest Post",
      "audience": "only_paid",
      "subtitle": "A deep dive into the topic",
      "postDate": "2025-01-15T12:00:00.000Z",
      "urlSlug": "my-latest-post",
      "coverImage": "https://substackcdn.com/image/..."
    }
  ],
  "next": "abc123cursor"
}

next es null en la última página.

Múltiples publicaciones

Si gestionas múltiples publicaciones de Substack, configura una clave API separada para cada una usando el patrón SUBSTACK_API_KEY_<NAME>:

{
  "mcpServers": {
    "substack": {
      "command": "node",
      "args": ["/path/to/substack-publisher-mcp/dist/index.js"],
      "env": {
        "SUBSTACK_API_KEY_MAIN": "your-main-blog-key",
        "SUBSTACK_API_KEY_TECH": "your-tech-newsletter-key",
        "SUBSTACK_API_KEY_COMPANY": "your-company-updates-key"
      }
    }
  }
}

Luego especifica qué publicación consultar:

"Muéstrame los conteos de suscriptores para main" "Lista las publicaciones recientes de la publicación de tecnología"

Usa list_publications para ver todos los nombres de publicaciones configuradas.

Solución de problemas

ProblemaSolución
Error UnauthorizedVerifica que tu clave API sea correcta. La clave va directamente en el encabezado authorization sin prefijo Bearer.
... duplicates publication ... o ... ignoring it al inicioDos variables de entorno se asignan al mismo nombre de publicación (los nombres no distinguen entre mayúsculas y minúsculas, y SUBSTACK_API_KEY es default), o una clave está mal formada. Renombra o elimina la variable adicional.
El servidor no iniciaAsegúrate de haber ejecutado npm run build después de clonar. El servidor se ejecuta desde dist/, no desde src/.
No API keys configuredEstablece SUBSTACK_API_KEY o SUBSTACK_API_KEY_<NAME> en la configuración de tu cliente MCP.
El servidor no aparece en tu clienteVerifica que el archivo de configuración sea JSON válido (sin comas finales) y luego reinicia el cliente.
command not found / spawn node ENOENTNode.js no está instalado o no está en tu PATH. Verifica node --version.
Sigue atascadoRevisa los registros MCP de tu cliente. Claude Desktop en macOS: ~/Library/Logs/Claude/mcp*.log.

Referencia de la API

Este servidor envuelve la API de Publisher de Substack. Consulta la documentación de Substack para obtener detalles sobre los datos disponibles y los límites de velocidad.

Contribuciones

Consulta CONTRIBUTING.md para las pautas.

Licencia

Licencia MIT. Consulta LICENSE para más detalles.


Substack es una marca comercial de Substack, Inc. Este proyecto no está afiliado con Substack, Inc. El uso del nombre Substack es solo con fines descriptivos.