Autenticación
Cada petición a https://mcp.postnext.io/api necesita una cabecera Authorization con un token Bearer. Tienes dos formas de obtener uno.
OAuth (recomendado para clientes de IA)
Los clientes de IA ejecutan Dynamic Client Registration en la primera conexión y guían al usuario por una pantalla de consentimiento OAuth. La página /mcp/connect lo hace automáticamente. Tu cliente recibe un token de acceso de 30 días.
Clave de API
Para scripts y CI, genera una clave de API personal en la app de PostNext en Cuenta → Claves de API. La clave empieza por apikey_ y se presenta como un token Bearer como cualquier otro.
Endpoint
Todas las llamadas a herramientas van a un único endpoint JSON-RPC 2.0 sobre HTTPS POST.
Herramientas
list_scheduled_posts
Lista tus publicaciones programadas (en cola para publicar, aún no enviadas).
Argumentos
limitfromDevuelve
Un objeto con posts: [{id, platform, content, scheduledAt, status}]. Hasta limit resultados.
Ejemplo
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 tus borradores (aún no programados).
Argumentos
limitDevuelve
Un objeto con drafts: [{id, platform, content, updatedAt}]. Hasta limit resultados.
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":2,
"params":{"name":"list_drafts","arguments":{"limit":10}}}
list_connected_accounts
Lista las cuentas sociales conectadas a tu equipo.
Argumentos
Sin argumentos.
Devuelve
Un objeto con accounts: [{platform, handle, connected, lastSyncAt}].
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":3,
"params":{"name":"list_connected_accounts","arguments":{}}}
get_account_healthPlan de pago
Obtén un resumen del estado de todas las plataformas conectadas.
Argumentos
platformwindowDaysDevuelve
Un objeto con windowDays, postsScheduled, postsPublished, postsFailed, un desglose byPlatform y topErrors[].
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":4,
"params":{"name":"get_account_health",
"arguments":{"windowDays":30}}}
create_post_draft
Crea un borrador nuevo. Los borradores no se publican automáticamente.
Argumentos
platformcontentmediaUrlsclientRequestIdDevuelve
Un objeto con el nuevo borrador: {id, platform, content, status: "DRAFT", createdAt}.
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":5,
"params":{"name":"create_post_draft",
"arguments":{"platform":"twitter",
"content":"Hello from MCP"}}}
update_post_draft
Actualiza un borrador existente. Se debe proporcionar al menos content o mediaUrls.
Argumentos
postIdcontentmediaUrlsclientRequestIdDevuelve
Un objeto con el borrador actualizado: {id, platform, content, mediaUrls, status, updatedAt}.
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":6,
"params":{"name":"update_post_draft",
"arguments":{"postId":"",
"content":"Updated copy"}}}
connect_channel
Genera una URL de un solo uso que el usuario puede abrir para autorizar una nueva conexión de plataforma.
Argumentos
platformDevuelve
Un objeto con authUrl (enlace de un solo uso que el usuario abre para autorizar), expiresAt y platform.
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":7,
"params":{"name":"connect_channel",
"arguments":{"platform":"linkedin"}}}
schedule_post
Mueve un borrador (estado DRAFT) a la cola de publicación BullMQ con un timestamp futuro. Idempotente dentro de ±60s de deriva; rechaza intentos de reprogramación a otra hora sin cancelar primero.
Argumentos
postIdscheduledAtDevuelve
Un objeto con postId, scheduledAt (ISO), status: SCHEDULED.
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":8,
"params":{"name":"schedule_post",
"arguments":{"postId":"",
"scheduledAt":"2026-05-10T09:00:00Z"}}}
cancel_scheduled_post
Cancela una publicación programada y la elimina de la cola de publicación. El borrador se conserva.
Argumentos
postIdDevuelve
Un objeto con postId y status: CANCELLED.
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":9,
"params":{"name":"cancel_scheduled_post",
"arguments":{"postId":""}}}
delete_draft
Elimina permanentemente un borrador. Rechaza publicaciones que no estén en estado DRAFT (usa cancel_scheduled_post para SCHEDULED).
Argumentos
postIdDevuelve
Un objeto con postId y deleted: true.
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":10,
"params":{"name":"delete_draft",
"arguments":{"postId":""}}}
get_post
Devuelve el PostGroup completo para un postId con contenido por plataforma + estado + timestamps.
Argumentos
postIdDevuelve
Un objeto con postId, status, scheduledAt, createdAt, updatedAt y providers (mapa plataforma → contenido).
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":11,
"params":{"name":"get_post",
"arguments":{"postId":""}}}
search_posts
Búsqueda de subcadena (insensible a mayúsculas) en el contenido de publicaciones del equipo activo. Filtros: status, platform, limit (1-100, predeterminado 20).
Argumentos
querystatusplatformlimitDevuelve
Un objeto con posts: [{postId, status, platforms, snippet, scheduledAt, updatedAt}]. El snippet contiene el contexto coincidente con elipsis a ambos lados.
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":12,
"params":{"name":"search_posts",
"arguments":{"query":"launch","limit":10}}}
list_teams
Devuelve los equipos que el usuario autenticado posee o administra, con el equipo activo marcado.
Argumentos
Sin argumentos.
Devuelve
Un objeto con currentTeamId y teams: [{teamId, teamName, isCurrent}].
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":13,
"params":{"name":"list_teams","arguments":{}}}
set_current_team
Cambia el equipo activo para este token Bearer. El usuario debe ser miembro. Persistente en el documento del token OAuth; la mutación en sesión lo hace efectivo inmediatamente para herramientas posteriores en la misma conversación.
Argumentos
teamIdDevuelve
Un objeto con teamId, teamName, persisted (true si OAuth, false si API key) y un note opcional.
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":14,
"params":{"name":"set_current_team",
"arguments":{"teamId":"team_xxxxx"}}}
get_plan_limits
Lee el nivel de suscripción actual del usuario y las cuotas por nivel (canales, almacenamiento, créditos de IA, publicación). Disponible en todos los planes. Útil antes de herramientas mutadoras para predecir si la llamada será bloqueada.
Argumentos
Sin argumentos.
Devuelve
Un objeto con tier, tierDisplayName, isPaid, isTrial, upgradeUrl, limits (channels/storage/aiCalls/posts cada uno como {limit, current, exceeded} o {limit, allowed}) y creditsAvailable ({total, subscriptionRemaining, purchasedBalance} o null).
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":15,
"params":{"name":"get_plan_limits","arguments":{}}}
get_post_metrics
Obtiene métricas de interacción para una publicación publicada en cada plataforma a la que se envió. Twitter e Instagram devuelven métricas pobladas (likes, retweets/compartidos, comentarios/respuestas, impresiones); LinkedIn, Threads y TikTok devuelven solo estado de publicación y URL (la recolección de interacciones se aplaza a una versión posterior). Un resumen normalizado totals suma likes/comentarios/compartidos/impresiones de cualquier plataforma que haya reportado.
Argumentos
postId ID de publicación de PostNext obtenido de una llamada de listado.
Devuelve
Un objeto con postId, status, providers: [{platform, publishedPostId, publishedUrl, publishedAt, status, metrics}] y totals: {likes, comments, shares, impressions}. metrics es un objeto de contadores numéricos por plataforma, o null cuando la plataforma aún no recopila interacciones.
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":16,
"params":{"name":"get_post_metrics",
"arguments":{"postId":""}}}
get_publish_status
Diagnostica una publicación programada: estado en cola, éxito/error por plataforma, tiempo de procesamiento y jobId del worker. Devuelve isScheduled=false para publicaciones que existen como borrador pero no fueron movidas a la cola de publicación, con un hint apuntando a schedule_post.
Argumentos
postId ID de publicación de PostNext obtenido de una llamada de listado.
Devuelve
Un objeto con postId, isScheduled, status, scheduledAt, publishedAt, platforms, processingTimeMs, jobId, topLevelError y results: [{platform, success, publishedPostId, publishedAt, error}]. Incluye hint cuando isScheduled es false.
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":17,
"params":{"name":"get_publish_status",
"arguments":{"postId":""}}}
update_brand_profile
Actualiza el perfil de marca activo del usuario. Campos permitidos: bio, brandVoice, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize. Cualquier otro se descarta silenciosamente. Resuelve "activo" primero como default del equipo, luego como el primer perfil activo propio del usuario.
Argumentos
brandVoice Array de descriptores de voz de marca (p. ej. ["profesional", "conciso"]).
Other patchable fields: bio, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize.
Devuelve
Un objeto con profileId, name, updated: [nombres de campos parcheados] y los valores actuales de bio, brandVoice, personalityTraits, mainThemes, expertiseAreas, preferredHashtags, audienceSize tras el patch.
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":18,
"params":{"name":"update_brand_profile",
"arguments":{"brandVoice":["professional","concise"]}}}
get_best_time_to_post Paid plan
Recomienda los mejores N slots (díaDeSemana, hora) para la próxima publicación en una plataforma, ordenados por engagement por publicación de los últimos 90 días. Twitter e Instagram devuelven scores ponderados por engagement; LinkedIn, Threads, TikTok ordenan solo por frecuencia. Tiempos en la zona horaria IANA indicada (UTC por defecto). Plan de pago requerido.
Argumentos
platform Plataforma social: twitter, instagram, linkedin, threads, o tiktok.
timezone Nombre de zona horaria IANA (p. ej. Europe/Madrid, America/New_York). Por defecto UTC.
topN Número de recomendaciones de slots a devolver (1-24, por defecto 5).
Devuelve
Un objeto con platform, timezone, sampleWindowDays, sampleSize, metricsAvailable y recommendations: [{dayOfWeek (1-7, Lun=1), dayLabel, hour (0-23), score, basedOn: {posts, avgEngagement}}]. Incluye hint para casos cold-start o sin métricas disponibles.
Ejemplo
{"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
Busca en el catálogo de herramientas MCP por texto libre, categoría o intención. Devuelve categorías, requiresScope, descripciones de una línea y los tags de caso de uso que coincidieron. Disponible en todos los planes (interfaz de discovery).
Argumentos
All optional. Call with no arguments to list every available tool.
query Búsqueda de texto libre en nombres, descripciones y tags de uso de las herramientas.
category Filtra a una categoría: posts, accounts, analytics, brand, teams, discovery, other.
Devuelve
Un objeto con totalTools, matchCount, categories: [string[]] y tools: [{name, category, requiresScope, description, useCases, matchedOn: [name|category|description|use_case]}]. Incluye hint cuando no hay coincidencias o no hay filtro.
Ejemplo
{"jsonrpc":"2.0","method":"tools/call","id":20,
"params":{"name":"search_tools",
"arguments":{"query":"why did my post fail"}}}
Recursos MCP
Los recursos son contexto de solo lectura que el cliente puede obtener vía el método MCP resources/read. Claude los carga al inicio de cada conversación, así tiene contexto de cuenta/equipo/marca sin que tengas que repetirlo.
postnext://account/summary
Email y handle de la cuenta (para que Claude confirme con qué cuenta está operando), plan, créditos de IA usados / límite, conteo de borradores, conteo de programados, canales conectados. Conteos limitados a 100 cada uno para carga rápida.
postnext://channels/connected
Misma forma que el resultado de list_connected_accounts; expuesto como recurso para que Claude lo cargue una vez al inicio de la conversación (sin roundtrip de llamada a herramienta).
postnext://brand-profiles/active
El perfil de marca activo del usuario (predeterminado del equipo, con fallback al primer perfil propio). Devuelve solo campos relevantes para LLM: bio, expertiseAreas, personalityTraits, brandVoice, mainThemes, audienceSize, preferredHashtags.
postnext://teams/current
Metadatos del equipo actual (teamId, teamName) más totalTeamsAvailable. Combina con list_teams + set_current_team para cambiar.
Flujos predefinidos
Atajos del menú slash que orquestan varias herramientas. Elige uno y deja que tu asistente de IA te guíe paso a paso, pidiendo confirmación antes de cualquier cambio.
/weekly-plan
Lee el perfil de marca, los canales conectados y la cola, y propone 5-10 borradores repartidos de lunes a viernes.
/draft-thread
Redacta un hilo de 5-10 publicaciones para Twitter o Threads sobre un tema o URL que tú indiques, con la voz de tu marca.
/audit-queue
Repasa los próximos 7 días de publicaciones programadas y detecta duplicados, saturación de plataformas y huecos.
/channel-sweep
Compara los canales conectados con los soportados y sugiere cuáles conectar o actualizar.
Descubrimiento y endpoints OAuth
Metadatos conformes a estándares para que cualquier cliente MCP pueda autoconfigurarse.
GET /.well-known/oauth-protected-resource/api— RFC 9728GET /.well-known/oauth-authorization-server— RFC 8414GET /oauth/.well-known/openid-configuration— OIDCPOST /oauth/reg— Dynamic Client Registration (RFC 7591)GET /oauth/auth— Authorize (PKCE-S256 required)POST /oauth/token— Token exchange
Código abierto
Las recetas listas para pegar y una referencia para desarrolladores viven en nuestro repositorio público de documentación. Con licencia MIT; pull requests bienvenidos. github.com/postnextio/postnext-mcp
Gestiona tus redes sociales desde cualquier asistente de IA
Planifica, redacta, programa y audita publicaciones en 6 plataformas conversando con Claude, ChatGPT o Cursor. Una conexión segura, todas las funciones de PostNext.