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
- 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).
- Este MCP publica cada variação com idempotência, OAuth, tentativas de API e agendamento—aplicando automaticamente as restrições da plataforma.
- 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.
| Ferramenta | Propósito |
|---|---|
post_publish | Publicação imediata; idempotente em (content.id, channel) |
post_schedule | Coloca variações na fila para schedule_at, publica o resto imediatamente |
post_drain | Dispara todas as postagens agendadas que já venceram — execute via cron |
post_status | Estado por canal para uma peça de conteúdo ou canal |
post_unpublish | Exclusão de melhor esforço (DEV.to define como não publicado; outros variam) |
channel_hints | Metadados por canal: limites de caracteres, suporte a Markdown, vocabulário de tags |
profile_list | Nomes dos perfis de distribuição configurados |
subreddit_list | Catá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 canal | Nível | Autenticação |
|---|---|---|
devto | Auto | DEV_TO_API_KEY |
hashnode | Auto | HASHNODE_TOKEN + HASHNODE_PUBLICATION_ID |
github_discussions | Auto | GITHUB_TOKEN + GITHUB_DISCUSSION_REPO |
reddit | Auto-portão | REDDIT_CLIENT_ID/SECRET/USERNAME/PASSWORD |
bluesky | Auto | BLUESKY_IDENTIFIER + BLUESKY_PASSWORD |
linkedin | Fallback de navegador | retorna needs_browser + URL de composição |
medium | Fallback de navegador | retorna needs_browser + URL de composição |
twitter / x | Fallback de navegador | retorna 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ável | Padrão | Propósito |
|---|---|---|
DISTRIBUTION_BACKEND | yaml | Backend de estado (apenas yaml na v1) |
DISTRIBUTION_BACKEND_DIR | ~/.distribution-mcp | Diretó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
- agency-os — plano de controle
- content-distribution-mcp — este pacote
- automatelab.tech — blog e tutoriais
Licença
MIT