Substack Publisher API

Consulte postagens, análises e dados de assinantes da API oficial do Publisher do Substack.

Documentação

substack-publisher-mcp

Servidor MCP para a API oficial do Publisher da Substack

License: MIT Node.js MCP

Nota: Esta é uma ferramenta não oficial, desenvolvida pela comunidade, e não é afiliada, endossada ou suportada pela Substack, Inc.

Um servidor MCP para a API do Publisher oficial da Substack. Pesquise e leia posts, obtenha análises de posts e contagens de assinantes, e consulte assinantes a partir do Claude, Cursor ou qualquer cliente MCP. Todas as ferramentas são somente leitura.

Demo of substack-publisher-mcp in Claude Code

Por que este servidor?

substack-publisher-mcpOutros servidores MCP da Substack
APIAPI oficial do PublisherAPI interna não oficial
AutenticaçãoChave de API (estável)Cookies de navegador (frágil)
EstabilidadeAPI oficial e documentadaQuebra quando a Substack altera internos
Multi-publicaçãoSuporte integradoNão disponível

Pré-requisitos

  • Node.js 22+. Verifique com node --version; instale a partir de nodejs.org se estiver ausente.
  • Chave da API do Publisher da Substack. Gere uma no painel da Substack da sua publicação. Se você não vir uma opção de API do Publisher lá, ela pode não estar habilitada para sua publicação ainda; consulte a documentação da API do Publisher para disponibilidade.

Início Rápido

1. Instalação

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

2. Configure seu cliente MCP

Adicione ao arquivo de configuração MCP do seu cliente (crie o arquivo se ele não existir):

ClienteArquivo de configuração
Claude Desktop (macOS)~/Library/Application Support/Claude/claude_desktop_config.json
Claude Desktop (Windows)%APPDATA%\Claude\claude_desktop_config.json
Claude Code.mcp.json no diretório do seu projeto
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"
      }
    }
  }
}

Usuários do Claude Code: Adicione "type": "stdio" à configuração do servidor.

Reinicie seu cliente MCP após editar a configuração — os servidores são carregados na inicialização.

3. Comece a usar

Pergunte ao Claude (ou ao seu cliente MCP):

  • "Quais publicações da Substack eu tenho configuradas?"
  • "Mostre-me meus posts do último mês"
  • "Encontre meus posts sobre preços"
  • "Abra meu post com o slug my-latest-post"
  • "Quantas aberturas e cliques meu último post recebeu?"
  • "Quais são minhas contagens de assinantes nos últimos 30 dias?"
  • "Consulte o assinante jane@example.com"

Instalando por meio de um agente de IA ou registro? Consulte llms-install.md para um guia de configuração condensado e legível por máquina.

Ferramentas

FerramentaDescriçãoParâmetros principais
list_publicationsLista publicações configuradasNenhum
list_postsLista posts publicadosstartDate, endDate, sortBy, type, maxResults, next
search_postsPesquisa de texto completo em posts publicadosquery (obrigatório), maxResults (1-100)
get_postObtém um post e seu corpo pelo slug da URLurlSlug (obrigatório), bodyFormat
get_post_statsObtém estatísticas de engajamento de um posturlSlug (obrigatório)
get_subscriber_countsObtém contagens diárias de assinantes por tipostartDate, endDate
get_subscriberConsulta um assinante por e-mailemail (obrigatório)

Todas as ferramentas, exceto list_publications, aceitam um parâmetro opcional publication quando várias publicações estão configuradas.

get_post retorna o corpo do post como Markdown por padrão. A Substack o envia como um documento ProseMirror codificado em JSON, tipicamente cerca de duas vezes o tamanho. Passe bodyFormat: "prosemirror" para o documento bruto ou "none" para apenas metadados.

Filtros de data aceitam YYYY-MM-DD. Em list_posts, endDate é exclusivo; em get_subscriber_counts, é inclusivo.

Exemplos de respostas

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 é null na última página.

Múltiplas publicações

Se você gerencia várias publicações da Substack, configure uma chave de API separada para cada uma usando o padrão 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"
      }
    }
  }
}

Em seguida, especifique qual publicação consultar:

"Mostre-me contagens de assinantes para main" "Liste posts recentes da publicação de tecnologia"

Use list_publications para ver todos os nomes de publicações configuradas.

Solução de problemas

ProblemaSolução
Erro UnauthorizedVerifique se sua chave de API está correta. A chave vai diretamente no cabeçalho authorization sem prefixo Bearer.
... duplicates publication ... ou ... ignoring it na inicializaçãoDuas variáveis de ambiente mapeiam para o mesmo nome de publicação (nomes são insensíveis a maiúsculas/minúsculas, e SUBSTACK_API_KEY é default), ou uma chave está malformada. Renomeie ou remova a variável extra.
O servidor não iniciaCertifique-se de executar npm run build após clonar. O servidor roda a partir de dist/, não src/.
No API keys configuredDefina SUBSTACK_API_KEY ou SUBSTACK_API_KEY_<NAME> na configuração do seu cliente MCP.
O servidor não aparece no seu clienteVerifique se o arquivo de configuração é JSON válido (sem vírgulas finais) e reinicie o cliente.
command not found / spawn node ENOENTO Node.js não está instalado ou não está no seu PATH. Verifique node --version.
Ainda travadoVerifique os logs MCP do seu cliente. Claude Desktop no macOS: ~/Library/Logs/Claude/mcp*.log.

Referência da API

Este servidor encapsula a API do Publisher da Substack. Consulte a documentação da Substack para detalhes sobre dados disponíveis e limites de taxa.

Contribuindo

Consulte CONTRIBUTING.md para diretrizes.

Licença

Licença MIT. Consulte LICENSE para detalhes.


Substack é uma marca registrada da Substack, Inc. Este projeto não é afiliado à Substack, Inc. O uso do nome Substack é apenas para fins descritivos.