BulkPublish

Publique, agende e gerencie mídias sociais em 11 plataformas com upload de mídia e rastreamento de análises.

Documentação

Servidor MCP BulkPublish

Um servidor Model Context Protocol que permite que o Claude e outros assistentes de IA interajam com a API de publicação em redes sociais BulkPublish.

O que ele faz

Este servidor MCP expõe as operações da API BulkPublish como ferramentas que os assistentes de IA podem chamar diretamente. Você pode pedir ao Claude para agendar posts, verificar análises, enviar mídia, gerenciar etiquetas e muito mais — tudo por meio de conversa natural.

Instalação

Opção 1: npx (recomendado)

npx @bulkpublish/mcp-server

Opção 2: Instalação global

npm install -g @bulkpublish/mcp-server
bulkpublish-mcp

Opção 3: A partir do código-fonte

git clone https://github.com/azeemkafridi/bulkpublish-api.git
cd bulkpublish-api/mcp-server
npm install
npm run build
node dist/index.js

Requer Node ≥ 20.19. npm run build empacota a interface do compositor com Vite (build:ui) e depois compila o servidor com tsc.

Configuração

Defina sua chave de API como uma variável de ambiente:

export BULKPUBLISH_API_KEY=bp_your_api_key_here

Obtenha sua chave de API em app.bulkpublish.com/developer.

Claude Desktop

Adicione isto ao seu arquivo de configuração do Claude Desktop:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "bulkpublish": {
      "command": "npx",
      "args": ["-y", "@bulkpublish/mcp-server"],
      "env": {
        "BULKPUBLISH_API_KEY": "bp_your_api_key_here"
      }
    }
  }
}

Se você instalou a partir do código-fonte:

{
  "mcpServers": {
    "bulkpublish": {
      "command": "node",
      "args": ["/absolute/path/to/bulkpublish-api/mcp-server/dist/index.js"],
      "env": {
        "BULKPUBLISH_API_KEY": "bp_your_api_key_here"
      }
    }
  }
}

Claude Code

Adicione o servidor MCP à sua configuração do Claude Code:

claude mcp add bulkpublish -- npx -y @bulkpublish/mcp-server

Defina a variável de ambiente no seu perfil de shell ou no arquivo .env:

export BULKPUBLISH_API_KEY=bp_your_api_key_here

Servidor remoto / hospedado (HTTP)

A configuração npx/stdio acima executa o servidor localmente. Clientes web que não podem iniciar um processo local — conectores personalizados do claude.ai e gateway do Smithery — conectam-se a um endpoint HTTP hospedado. Além do binário stdio, o servidor inclui um transporte HTTP Streamable (dist/http.js, executado com npm run start:http):

EndpointFinalidade
POST /mcpMCP Streamable HTTP (sem estado)
GET /.well-known/mcp/server-card.jsonMetadados estáticos para que registros possam pular a varredura
GET /healthVerificação de atividade

Ele é multi-tenant — o processo não contém chave de API. Cada chamador fornece sua própria chave bp_… por solicitação via URL de conexão (?key=bp_…), um blob ?config= do Smithery ou um cabeçalho Authorization: Bearer bp_… / X-BulkPublish-Key. initialize, tools/list e resources/* não precisam de chave (para que varreduras e descoberta de ferramentas funcionem); um tools/call sem chave retorna 401.

Um Dockerfile está incluído:

docker build -t bulkpublish-mcp . && docker run -p 8080:8080 bulkpublish-mcp

Após a implantação, adicione-o em claude.ai → Configurações → Conectores → Adicionar conector personalizado como https://<host>/mcp?key=bp_…, ou publique a URL https://<host>/mcp no Smithery.

Ferramentas disponíveis

FerramentaDescrição
Posts
create_postCriar e opcionalmente agendar um post (suporta reels, stories, carrosséis, threads via postTypeOverrides)
compose_postAbrir uma interface de compositor interativa (MCP Apps) para rascunhar/agendar um post; envia via create_post
update_postAtualizar um rascunho ou post agendado
get_postObter um único post com detalhes completos
list_postsListar posts com filtros (status, pesquisa, intervalo de datas)
delete_postExcluir um post
publish_postPublicar um post de rascunho imediatamente
retry_postTentar novamente um post com falha
approve_postAprovar um post aguardando aprovação da equipe (funções com post:approve)
reject_postRejeitar um post pendente de volta para rascunho, com um motivo opcional
get_post_metricsObter métricas de engajamento (impressões, curtidas, comentários, compartilhamentos). Cada entrada de plataforma contém supportedMetrics — uma chave que não está nessa lista é um 0 armazenado, não uma medição
publish_storyPublicar como story no Facebook ou Instagram
bulk_postsExcluir em massa ou tentar novamente vários posts
get_queue_slotObter o próximo intervalo de tempo ideal para um canal
Canais
list_channelsListar todos os canais de redes sociais conectados
get_channel_healthVerificar a saúde do token do canal
get_channel_optionsObter opções específicas da plataforma (quadros, playlists)
search_mentionsPesquisar usuários para @menção (X, Bluesky)
Conjuntos de canais
list_channel_setsListar grupos de canais salvos para segmentação multicanal com um clique
create_channel_setSalvar um grupo nomeado de canais (máx. 50 por organização, nomes únicos por organização)
update_channel_setRenomear um conjunto ou alterar seus canais
delete_channel_setExcluir um conjunto de canais
Publicação automática RSS
list_rss_feedsListar feeds RSS/Atom verificados a cada 15 minutos (novos itens viram posts)
create_rss_feedAdicionar um feed (máx. 20 por organização); mode = draft (padrão, itens viram rascunhos) ou publish (publicados automaticamente); fieldMapping opcional controla como os itens são renderizados (modelo de legenda, seleção de mídia, truncamento, substituições por canal)
update_rss_feedAlterar, pausar ou redirecionar um feed (alterar feedUrl redefine sua linha de base — o backlog não é inundado)
delete_rss_feedParar e remover um feed
Mídia
upload_mediaEnviar um arquivo de mídia de uma URL (ou caminho local no servidor stdio)
get_mediaObter um arquivo de mídia por ID
list_mediaListar arquivos de mídia enviados
delete_mediaExcluir um arquivo de mídia
create_media_uploadReservar uma URL R2 pré-assinada para upload direto do navegador (usado pelo compositor)
finalize_media_uploadRegistrar um objeto enviado como arquivo de mídia após o PUT do navegador (usado pelo compositor)
create_multipart_uploadIniciar um upload em partes para mídia grande (vídeos de até 1GB) — URLs pré-assinadas para partes fixas de 10MB
complete_multipart_uploadMontar as partes enviadas (partNumber + ETag de cada) e registrar o arquivo de mídia
abort_multipart_uploadCancelar um upload em partes em andamento e liberar suas partes armazenadas
Etiquetas
create_labelCriar uma nova etiqueta
list_labelsListar todas as etiquetas
update_labelAtualizar o nome ou a cor de uma etiqueta
delete_labelExcluir uma etiqueta
Análises
get_analyticsObter resumo de análises para um intervalo de datas
Agendamentos
list_schedulesListar agendamentos recorrentes
create_scheduleCriar um agendamento recorrente
update_scheduleAtualizar um agendamento
delete_scheduleExcluir um agendamento
Conta
get_quota_usageVerificar o uso atual da conta (oculto quando BULKPUBLISH_HIDE_BILLING=1)
Interface interativa (MCP Apps)
compose_postAbrir o compositor de posts interativo (também listado acima)
view_analyticsAbrir um painel de análises interativo
view_postsAbrir uma lista de posts interativa
view_channelsAbrir uma visualização de canais interativa
view_mediaAbrir uma galeria de mídia interativa
view_quotaAbrir uma visualização de uso da conta interativa (oculto quando BULKPUBLISH_HIDE_BILLING=1)

Interface interativa (MCP Apps)

Em hosts que suportam MCP Apps — Claude, ChatGPT, VS Code, Goose, Postman e o playground do Smithery — a ferramenta compose_post abre um compositor interativo renderizado inline na conversa: escolha canais, escreva conteúdo, agende opcionalmente e envie. Ao enviar, ele chama create_post por meio da ponte do host, para que o iframe em sandbox nunca contenha sua chave de API. Hosts sem suporte a MCP Apps simplesmente recebem um resumo em texto simples, então nada quebra.

Várias ferramentas renderizam interfaces — compose_post (compositor), view_analytics, view_posts, view_channels, view_media e view_quota. Cada uma é um widget autônomo em src/ui/<name>/, empacotado em um único arquivo HTML com Vite (uma única passada de entrada por widget — veja scripts/build-ui.mjs) e incorporado ao servidor via src/ui/widgets.generated.ts. Elas compartilham os tokens de design do aplicativo web BulkPublish (src/ui/tokens.css), então a aparência é consistente. Uma View recebe seus dados do structuredContent da ferramenta acionadora e pode chamar outras ferramentas de volta pela ponte do host — então o iframe em sandbox nunca contém sua chave de API. Hosts sem suporte a MCP Apps simplesmente recebem um resumo em texto simples.

Exemplo de conversa

Aqui está um exemplo de uso das ferramentas BulkPublish no Claude:

Você: Agende um post para amanhã às 9h EST dizendo "Animados para anunciar nosso novo recurso! Confira em example.com" para todos os meus canais conectados.

Claude: Deixe-me verificar seus canais conectados primeiro.

[Chama list_channels]

Você tem 3 canais ativos:

  • X/Twitter: @suaempresa (ID: 1)
  • LinkedIn: Página da Sua Empresa (ID: 2)
  • Instagram: @suaempresa (ID: 3)

Agora vou agendar o post para amanhã às 9h00 no horário do leste.

[Chama create_post com conteúdo, canais, scheduledAt: "2025-01-16T14:00:00Z", timezone: "America/New_York", status: "scheduled"]

Pronto! Seu post foi agendado:

  • ID do post: 42
  • Status: agendado
  • Agendado para: 16 de janeiro de 2025 às 9h00 EST
  • Canais: X/Twitter, LinkedIn, Instagram

Você: Como meus posts se saíram este mês?

Claude: [Chama get_analytics com from: "2025-01-01", to: "2025-01-31"]

Aqui está o resumo de análises de janeiro:

  • Total de posts: 28
  • Publicados: 25
  • Com falha: 1
  • Agendados (pendentes): 2
  • Por plataforma: X/Twitter (25 posts, 24 publicados), LinkedIn (20 posts, 19 publicados), Instagram (15 posts, todos publicados)
  • Melhor dia: 12 de janeiro com 5 posts

Você: Envie esta imagem e crie um post de rascunho com ela: https://example.com/product-launch.png

Claude: [Chama upload_media com url]

Imagem enviada com sucesso (ID: 15, 1200x630px, 245KB).

[Chama create_post com conteúdo e mediaFileIds]

Post de rascunho criado (ID: 43) com a imagem do lançamento do produto anexada. Você pode revisar e publicar quando quiser.

Variáveis de ambiente

VariávelObrigatóriaPadrãoDescrição
BULKPUBLISH_API_KEYSimSua chave de API (começa com bp_)
BULKPUBLISH_BASE_URLNãohttps://app.bulkpublish.comURL base da API (para instâncias auto-hospedadas)

Licença

MIT