Content Distribution MCP

Servidor MCP que distribui um único conteúdo em 8+ canais (DEV.to, Hashnode, GitHub Discussions, Reddit, Bluesky, LinkedIn, Medium, Twitter) com adaptação automática específica para cada plataforma, publicação idempotente, regras anti-spam por comunidade e gerenciamento centralizado de estado.

Documentação

content-distribution-mcp

Publique seu conteúdo em qualquer lugar—sem reescrever para cada plataforma.

Um servidor MCP que distribui uma única peça de conteúdo em 8+ canais (DEV.to, Hashnode, GitHub Discussions, Reddit, Bluesky, LinkedIn, Medium, Twitter) com adaptação automática específica por plataforma, publicação idempotente, regras anti-spam por comunidade e gerenciamento centralizado de estado.

O Problema Que Ele Resolve

Criar e publicar conteúdo em escala é cheio de fricção:

  • Formatos diferentes: O Reddit remove formatação, o Twitter tem limites de caracteres, o DEV.to suporta incorporações e mídia rica. Cada um precisa de texto personalizado.
  • Regras da plataforma: Subreddits impõem tempos de espera e requisitos de flair. Comunidades têm padrões de postagem e filtros de automoderador. O LinkedIn suprime links externos.
  • Caos de estado: Quais postagens foram ao ar e onde? E se uma publicação falhar no meio? Aquele post no Reddit foi removido automaticamente pelos filtros de spam?

Este MCP lida com a complexidade da distribuição. Escreva sua mensagem principal uma vez, gere variações específicas por plataforma, publique em todos os lugares com segurança.

Como Funciona

  1. Seu agente gera variações de texto específicas por canal (títulos reescritos, texto reduzido, tags apropriadas para a plataforma, tom ajustado ao público).
  2. Este MCP publica cada variação com idempotência, OAuth, tentativas de API e agendamento—aplicando automaticamente as restrições da plataforma.
  3. Você controla quais plataformas recebem o quê. O MCP retorna dicas por canal (limites de caracteres, vocabulários de tags, tempos de espera), mas deixa as decisões criativas com você.

Sem chamadas de LLM internamente. Sem agentes isolados. Apenas uma API limpa para distribuição de conteúdo em múltiplas plataformas em escala.

Instalação

npx @automatelab/content-distribution-mcp

Ou adicione-o permanentemente ao seu host MCP.

Conecte ao seu host MCP

Claude Code — adicione ao .claude/mcp.json:

{
  "mcpServers": {
    "content-distribution": {
      "command": "npx",
      "args": ["-y", "@automatelab/content-distribution-mcp"]
    }
  }
}

Claude Desktop — adicione ao claude_desktop_config.json:

{
  "mcpServers": {
    "content-distribution": {
      "command": "npx",
      "args": ["-y", "@automatelab/content-distribution-mcp"]
    }
  }
}

n8n — use o nó MCP Client, aponte para npx @automatelab/content-distribution-mcp via stdio.

Cursor / Windsurf / qualquer host MCP — mesmo padrão npx -y content-distribution-mcp.

Configure as credenciais

O servidor lê as credenciais de um Perfil de Distribuição armazenado em ~/.distribution-mcp/profiles.yaml:

# ~/.distribution-mcp/profiles.yaml
default:
  credentials:
    DEV_TO_API_KEY: "your-devto-api-key"
    HASHNODE_TOKEN: "your-hashnode-token"
    HASHNODE_PUBLICATION_ID: "your-pub-id"
    GITHUB_TOKEN: "ghp_..."
    GITHUB_DISCUSSION_REPO: "owner/repo"
    REDDIT_CLIENT_ID: "..."
    REDDIT_CLIENT_SECRET: "..."
    REDDIT_USERNAME: "..."
    REDDIT_PASSWORD: "..."
    BLUESKY_IDENTIFIER: "you.bsky.social"
    BLUESKY_PASSWORD: "..."
  subreddits:
    - ClaudeAI
    - LocalLLaMA

Defina credenciais apenas para os canais que você pretende usar. LinkedIn, Medium e Twitter/X retornam needs_browser com uma URL de composição — nenhuma credencial é necessária.

Superfície de ferramentas MCP

Oito ferramentas, com nomes em notação de pontos formando uma árvore navegável (post.*, channel.*, profile.*, subreddit.*). Cada ferramenta declara um outputSchema (os chamadores podem verificar os tipos das respostas) e annotations do MCP (dicas de somente leitura / destrutivo / idempotente / mundo aberto). Sem chamadas de LLM dentro do servidor.

FerramentaPropósito
post_publishPublicação imediata; idempotente em (content.id, channel)
post_scheduleColoca variações na fila para schedule_at, publica o resto imediatamente
post_drainDispara todas as postagens agendadas que já venceram — execute via cron
post_statusEstado por canal para uma peça de conteúdo ou canal
post_unpublishExclusão de melhor esforço (DEV.to define como não publicado; outros variam)
channel_hintsMetadados por canal: limites de caracteres, suporte a Markdown, vocabulário de tags
profile_listNomes dos perfis de distribuição configurados
subreddit_listCatálogo de subreddits: tempos de espera, vocabulário de flair, última postagem

Mudança de quebra da v2.2.0. As ferramentas foram renomeadas de nomes planos (publish, schedule, ...) para notação de pontos (post_publish, post_schedule, ...). Atualize quaisquer prompts, habilidades de agente ou nós do n8n que faziam referência aos nomes antigos.

Canais

Chave do canalNívelAutenticação
devtoAutoDEV_TO_API_KEY
hashnodeAutoHASHNODE_TOKEN + HASHNODE_PUBLICATION_ID
github_discussionsAutoGITHUB_TOKEN + GITHUB_DISCUSSION_REPO
redditAuto-portãoREDDIT_CLIENT_ID/SECRET/USERNAME/PASSWORD
blueskyAutoBLUESKY_IDENTIFIER + BLUESKY_PASSWORD
linkedinFallback de navegadorretorna needs_browser + URL de composição
mediumFallback de navegadorretorna needs_browser + URL de composição
twitter / xFallback de navegadorretorna needs_browser + URL de composição

Exemplo de chamada de agente

// post_publish tool
{
  "content": {
    "id": "n8n-webhook-setup@2026-05-20",
    "title": "How to set up an n8n webhook",
    "body_md": "...",
    "tags": ["automation", "n8n", "tutorial"],
    "canonical_url": "https://yourblog.com/n8n-webhook-setup",
    "author": "You"
  },
  "variants": [
    {
      "channel": "devto:main",
      "title": "How to set up an n8n webhook",
      "body": "...",
      "tags": ["automation", "n8n", "tutorial", "devops"],
      "canonical_url": "https://yourblog.com/n8n-webhook-setup",
      "extras": {}
    },
    {
      "channel": "reddit:ClaudeAI",
      "title": "Built a webhook automation with n8n",
      "body": "Here's how I set it up...",
      "tags": [],
      "extras": { "flair": "Project" }
    }
  ],
  "profile_name": "default"
}

Idempotência

Executar novamente post_publish com o mesmo par content.id + channel retorna o live_url existente imediatamente, sem fazer outra chamada de API da plataforma. É seguro tentar novamente em caso de falha.

Agendamento

Variações com schedule_at (ISO-8601 com fuso horário, ex.: "2026-05-21T09:00:00+00:00") são armazenadas em ~/.distribution-mcp/scheduled.yaml e disparadas na próxima chamada a post_drain. Execute drain via cron:

# fire due posts every 5 minutes
*/5 * * * * npx -y content-distribution-mcp drain

Ou chame a ferramenta MCP post_drain diretamente de um agente.

Variáveis de ambiente

VariávelPadrãoPropósito
DISTRIBUTION_BACKENDyamlBackend de estado (apenas yaml na v1)
DISTRIBUTION_BACKEND_DIR~/.distribution-mcpDiretório para arquivos de estado em YAML

Requisitos

  • Node.js 18 ou posterior

Arquitetura

Agent (Claude Code / n8n / Cursor / any MCP host)
  │  generates per-channel copy, calls MCP tools
  ▼
content-distribution-mcp  (this package, stdio transport)
  │  no LLM calls — pure I/O
  ├── adapters/   devto · hashnode · github-discussions · reddit · bluesky · browser
  └── backends/   yaml (post log · profiles · schedule queue · subreddit catalog)

Funciona com qualquer cliente MCP

Nenhum código específico da Anthropic em qualquer lugar. Verifique:

grep -ri "anthropic" node_modules/content-distribution-mcp/dist/  # returns nothing

Parte do stack AutomateLab

Licença

MIT