MCP

Referência de ferramentas

Cada ferramenta que o servidor MCP do PostNext expõe, com suas entradas, estrutura de retorno e um exemplo pronto para copiar e colar.

Autenticação

Toda requisição para https://mcp.postnext.io/api precisa de um header Authorization com um token Bearer. Você tem duas formas de conseguir um.

OAuth (recomendado para clientes de IA)

Os clientes de IA executam Dynamic Client Registration na primeira conexão e conduzem o usuário por uma tela de consentimento OAuth. A página /mcp/connect faz isso automaticamente. Seu cliente recebe um token de acesso de 30 dias.

Chave de API

Para scripts e CI, gere uma chave de API pessoal no app do PostNext em Conta → Chaves de API. A chave começa com apikey_ e é apresentada como um token Bearer comum.

Endpoint

Todas as chamadas de ferramentas vão para um único endpoint JSON-RPC 2.0 via HTTPS POST.

POST https://mcp.postnext.io/api

Ferramentas

list_scheduled_posts

Lista seus posts agendados (na fila para publicação, mas ainda não enviados).

Argumentos

limitnumber ·opcional · default 20
Número máximo de resultados a retornar (1-100, padrão 20).
fromstring (ISO 8601) ·opcional
Timestamp ISO; retorna apenas posts agendados neste horário ou depois dele.

Retorna

Um objeto com posts: [{id, platform, content, scheduledAt, status}]. Até limit resultados.

Exemplo

curl -X POST https://mcp.postnext.io/api \
  -H "Authorization: Bearer apikey_xxx" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/call","id":1,
       "params":{"name":"list_scheduled_posts",
                 "arguments":{"limit":5}}}'

list_drafts

Lista seus rascunhos (ainda não agendados).

Argumentos

limitnumber ·opcional · default 20
Número máximo de resultados a retornar (1-100, padrão 20).

Retorna

Um objeto com drafts: [{id, platform, content, updatedAt}]. Até limit resultados.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":2,
 "params":{"name":"list_drafts","arguments":{"limit":10}}}

list_connected_accounts

Lista as contas sociais conectadas à sua equipe.

Argumentos

Sem argumentos.

Retorna

Um objeto com accounts: [{platform, handle, connected, lastSyncAt}].

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":3,
 "params":{"name":"list_connected_accounts","arguments":{}}}

get_account_healthPlano pago

Obtém um resumo de saúde em todas as plataformas conectadas.

Argumentos

platformenum ·opcional
Plataforma social: twitter, instagram, linkedin, threads ou tiktok.
windowDays7 | 30 | 90 ·opcional · default 30
Janela de análise em dias: 7, 30 ou 90 (padrão 30).

Retorna

Um objeto com windowDays, postsScheduled, postsPublished, postsFailed, um detalhamento byPlatform e topErrors[].

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":4,
 "params":{"name":"get_account_health",
           "arguments":{"windowDays":30}}}

create_post_draft

Cria um novo rascunho. Rascunhos não são publicados automaticamente.

Argumentos

platformenum ·obrigatório
Plataforma social: twitter, instagram, linkedin, threads ou tiktok.
contentstring ·obrigatório
Corpo do post (1-2200 caracteres).
mediaUrlsarray<string> ·opcional
Até 10 URLs de imagens ou vídeos.
clientRequestIdstring ·opcional
Chave de idempotência opcional. A mesma chave dentro de 5 minutos retorna o resultado em cache.

Retorna

Um objeto com o novo rascunho: {id, platform, content, status: "DRAFT", createdAt}.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":5,
 "params":{"name":"create_post_draft",
           "arguments":{"platform":"twitter",
                        "content":"Hello from MCP"}}}

update_post_draft

Atualiza um rascunho existente. Pelo menos um dos campos content ou mediaUrls deve ser fornecido.

Argumentos

postIdstring ·obrigatório
ID do post no PostNext obtido em uma chamada de listagem.
contentstring ·opcional
Corpo do post (1-2200 caracteres).
mediaUrlsarray<string> ·opcional
Até 10 URLs de imagens ou vídeos.
clientRequestIdstring ·opcional
Chave de idempotência opcional. A mesma chave dentro de 5 minutos retorna o resultado em cache.

Retorna

Um objeto com o rascunho atualizado: {id, platform, content, mediaUrls, status, updatedAt}.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":6,
 "params":{"name":"update_post_draft",
           "arguments":{"postId":"",
                        "content":"Updated copy"}}}

connect_channel

Gera uma URL de uso único que o usuário pode abrir para autorizar a conexão com uma nova plataforma.

Argumentos

platformenum ·obrigatório
Plataforma social: twitter, instagram, linkedin, threads ou tiktok.

Retorna

Um objeto com authUrl (link de uso único que o usuário abre para autorizar), expiresAt e platform.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":7,
 "params":{"name":"connect_channel",
           "arguments":{"platform":"linkedin"}}}

schedule_post

Move um rascunho (status DRAFT) para a fila de publicação BullMQ em um timestamp futuro. Idempotente dentro de ±60s de drift; rejeita tentativas de reagendamento em outro horário sem cancelamento explícito.

Argumentos

postIdstring ·obrigatório
ID do post no PostNext obtido em uma chamada de listagem.
scheduledAtstring (ISO 8601) ·obrigatório
Timestamp ISO 8601; não pode estar mais de 5 minutos no passado.

Retorna

Um objeto com postId, scheduledAt (ISO), status: SCHEDULED.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":8,
 "params":{"name":"schedule_post",
           "arguments":{"postId":"",
                        "scheduledAt":"2026-05-10T09:00:00Z"}}}

cancel_scheduled_post

Cancela uma publicação agendada e a remove da fila. O rascunho subjacente é preservado.

Argumentos

postIdstring ·obrigatório
ID do post no PostNext obtido em uma chamada de listagem.

Retorna

Um objeto com postId e status: CANCELLED.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":9,
 "params":{"name":"cancel_scheduled_post",
           "arguments":{"postId":""}}}

delete_draft

Exclui permanentemente um rascunho. Recusa publicações não-DRAFT (use cancel_scheduled_post para SCHEDULED).

Argumentos

postIdstring ·obrigatório
ID do post no PostNext obtido em uma chamada de listagem.

Retorna

Um objeto com postId e deleted: true.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":10,
 "params":{"name":"delete_draft",
           "arguments":{"postId":""}}}

get_post

Retorna o PostGroup completo para um postId com conteúdo por plataforma + status + timestamps.

Argumentos

postIdstring ·obrigatório
ID do post no PostNext obtido em uma chamada de listagem.

Retorna

Um objeto com postId, status, scheduledAt, createdAt, updatedAt e providers (mapa plataforma → conteúdo).

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":11,
 "params":{"name":"get_post",
           "arguments":{"postId":""}}}

search_posts

Busca de substring (insensível a maiúsculas) no conteúdo de publicações da equipe ativa. Filtros: status, platform, limit (1-100, padrão 20).

Argumentos

querystring ·obrigatório
Substring para buscar (3-200 caracteres; metacaracteres regex são escapados).
statusenum ·opcional
Opcional: DRAFT | SCHEDULED | PUBLISHED | FAILED | CANCELLED.
platformenum ·opcional
Plataforma social: twitter, instagram, linkedin, threads ou tiktok.
limitnumber ·opcional · default 20
Número máximo de resultados a retornar (1-100, padrão 20).

Retorna

Um objeto com posts: [{postId, status, platforms, snippet, scheduledAt, updatedAt}]. O snippet contém o contexto correspondente com reticências em ambos os lados.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":12,
 "params":{"name":"search_posts",
           "arguments":{"query":"launch","limit":10}}}

list_teams

Retorna as equipes que o usuário autenticado possui ou administra, com a equipe ativa marcada.

Argumentos

Sem argumentos.

Retorna

Um objeto com currentTeamId e teams: [{teamId, teamName, isCurrent}].

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":13,
 "params":{"name":"list_teams","arguments":{}}}

set_current_team

Troca a equipe ativa para este token Bearer. O usuário precisa ser membro. Persistido no documento do token OAuth; a mutação em sessão torna efetivo imediatamente para ferramentas seguintes na mesma conversa.

Argumentos

teamIdstring ·obrigatório
teamId alvo de list_teams. Membresia é revalidada no servidor.

Retorna

Um objeto com teamId, teamName, persisted (true se OAuth, false se API key) e um note opcional.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":14,
 "params":{"name":"set_current_team",
           "arguments":{"teamId":"team_xxxxx"}}}

get_plan_limits

Lê o nível de assinatura atual do usuário e as cotas por nível (canais, armazenamento, créditos de IA, publicação). Disponível em todos os planos. Útil antes de ferramentas mutadoras para prever se a chamada será bloqueada.

Argumentos

Sem argumentos.

Retorna

Um objeto com tier, tierDisplayName, isPaid, isTrial, upgradeUrl, limits (channels/storage/aiCalls/posts cada um como {limit, current, exceeded} ou {limit, allowed}) e creditsAvailable ({total, subscriptionRemaining, purchasedBalance} ou null).

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":15,
 "params":{"name":"get_plan_limits","arguments":{}}}

get_post_metrics

Busca métricas de engajamento de uma publicação publicada em cada plataforma para a qual foi enviada. Twitter e Instagram retornam métricas populadas (curtidas, retweets/compartilhamentos, comentários/respostas, impressões); LinkedIn, Threads e TikTok retornam apenas status de publicação e URL (a coleta de engajamento foi adiada para uma versão posterior). Um resumo normalizado totals soma curtidas/comentários/compartilhamentos/impressões das plataformas que reportaram.

Argumentos

postId ID do post no PostNext obtido em uma chamada de listagem.

Retorna

Um objeto com postId, status, providers: [{platform, publishedPostId, publishedUrl, publishedAt, status, metrics}] e totals: {likes, comments, shares, impressions}. metrics é um objeto de contadores numéricos por plataforma, ou null quando a plataforma ainda não coleta engajamento.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":16,
 "params":{"name":"get_post_metrics",
           "arguments":{"postId":""}}}

get_publish_status

Diagnostica uma publicação agendada: status da fila, sucesso/erro por plataforma, tempo de processamento e jobId do worker. Retorna isScheduled=false para publicações que existem como rascunho mas não foram movidas para a fila, com um hint apontando para schedule_post.

Argumentos

postId ID do post no PostNext obtido em uma chamada de listagem.

Retorna

Um objeto com postId, isScheduled, status, scheduledAt, publishedAt, platforms, processingTimeMs, jobId, topLevelError e results: [{platform, success, publishedPostId, publishedAt, error}]. Inclui hint quando isScheduled é false.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":17,
 "params":{"name":"get_publish_status",
           "arguments":{"postId":""}}}

update_brand_profile

Atualiza o perfil de marca ativo do usuário. Campos permitidos: bio, brandVoice, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize. Qualquer outro campo é descartado silenciosamente. Resolve "ativo" primeiro como default da equipe, depois o primeiro perfil ativo próprio do usuário.

Argumentos

brandVoice Array de descritores de voz de marca (ex. ["profissional", "conciso"]).

Other patchable fields: bio, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize.

Retorna

Um objeto com profileId, name, updated: [nomes dos campos patchados] e os valores atuais de bio, brandVoice, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize após o patch.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":18,
 "params":{"name":"update_brand_profile",
           "arguments":{"brandVoice":["professional","concise"]}}}

get_best_time_to_post Plano pago

Recomenda os melhores N slots (diaDaSemana, hora) para a próxima publicação em uma plataforma, ordenados por engajamento por publicação dos últimos 90 dias. Twitter e Instagram retornam scores ponderados por engajamento; LinkedIn, Threads, TikTok ordenam apenas por frequência. Horários no fuso IANA informado (UTC por padrão). Plano pago obrigatório.

Argumentos

platform Plataforma social: twitter, instagram, linkedin, threads ou tiktok.

timezone Nome do fuso horário IANA (ex. America/Sao_Paulo, Europe/London). Padrão UTC.

topN Número de recomendações de slots a retornar (1-24, padrão 5).

Retorna

Um objeto com platform, timezone, sampleWindowDays, sampleSize, metricsAvailable e recommendations: [{dayOfWeek (1-7, Seg=1), dayLabel, hour (0-23), score, basedOn: {posts, avgEngagement}}]. Inclui hint para casos cold-start ou sem métricas disponíveis.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":19,
 "params":{"name":"get_best_time_to_post",
           "arguments":{"platform":"twitter","timezone":"Europe/Berlin","topN":5}}}

search_tools

Pesquisa o catálogo de ferramentas MCP por texto livre, categoria ou intenção. Retorna categorias, requiresScope, descrições de uma linha e os tags de caso de uso que corresponderam. Disponível em qualquer plano (superfície de descoberta).

Argumentos

All optional. Call with no arguments to list every available tool.

query Busca de texto livre em nomes, descrições e tags de uso das ferramentas.

category Filtra para uma categoria: posts, accounts, analytics, brand, teams, discovery, other.

Retorna

Um objeto com totalTools, matchCount, categories: [string[]] e tools: [{name, category, requiresScope, description, useCases, matchedOn: [name|category|description|use_case]}]. Inclui hint quando não há correspondência ou não há filtro.

Exemplo

{"jsonrpc":"2.0","method":"tools/call","id":20,
 "params":{"name":"search_tools",
           "arguments":{"query":"why did my post fail"}}}

Recursos MCP

Recursos são contexto somente leitura que o cliente pode buscar via método MCP resources/read. O Claude os carrega no início de cada conversa, então tem contexto de conta/equipe/marca sem que você tenha que repetir.

postnext://account/summary

Email e handle da conta (para que o Claude confirme com qual conta está operando), plano, créditos de IA usados / limite, contagem de rascunhos, contagem de agendados, canais conectados. Contagens limitadas a 100 cada para carga rápida.

postnext://channels/connected

Mesma forma que o resultado de list_connected_accounts; exposto como recurso para o Claude carregá-lo uma vez no início da conversa (sem roundtrip de chamada de ferramenta).

postnext://brand-profiles/active

O perfil de marca ativo do usuário (padrão da equipe, com fallback para o primeiro perfil próprio). Retorna apenas campos relevantes para LLM: bio, expertiseAreas, personalityTraits, brandVoice, mainThemes, audienceSize, preferredHashtags.

postnext://teams/current

Metadados da equipe atual (teamId, teamName) mais totalTeamsAvailable. Combine com list_teams + set_current_team para trocar.

Fluxos prontos

Atalhos do menu de barra que orquestram várias ferramentas. Escolha um e deixe seu assistente de IA conduzir uma tarefa de várias etapas, pedindo confirmação antes de qualquer alteração.

/weekly-plan

Lê o perfil da marca, os canais conectados e a fila de publicações, e propõe de 5 a 10 rascunhos distribuídos de segunda a sexta.

/draft-thread

Escreve uma thread de 5 a 10 publicações no Twitter ou no Threads sobre um tema ou URL que você indicar, na voz da sua marca.

/audit-queue

Revisa os próximos 7 dias de publicações agendadas e aponta duplicatas, sobrecarga de plataforma e lacunas.

/channel-sweep

Compara os canais conectados com o conjunto suportado e sugere quais conectar ou atualizar.

Endpoints de descoberta e OAuth

Metadados em conformidade com padrões para que qualquer cliente MCP se autoconfigure.

  • GET /.well-known/oauth-protected-resource/api — RFC 9728
  • GET /.well-known/oauth-authorization-server — RFC 8414
  • GET /oauth/.well-known/openid-configuration — OIDC
  • POST /oauth/reg — Dynamic Client Registration (RFC 7591)
  • GET /oauth/auth — Authorize (PKCE-S256 required)
  • POST /oauth/token — Token exchange

Código aberto

Receitas prontas para colar e uma referência voltada para desenvolvedores vivem no nosso repositório público de documentação. Licença MIT; pull requests são bem-vindas. github.com/postnextio/postnext-mcp

Gerencie seus canais sociais de qualquer assistente de IA

Planeje, redija, agende e audite publicações em 6 plataformas conversando com Claude, ChatGPT ou Cursor. Uma conexão segura, todos os recursos do PostNext.

×