BulkPublish

Publica, programa y gestiona redes sociales en 11 plataformas con carga de medios y seguimiento de análisis.

Documentación

Servidor MCP de BulkPublish

Un servidor de Model Context Protocol que permite a Claude y otros asistentes de IA interactuar con la API de publicación en redes sociales de BulkPublish.

Qué hace

Este servidor MCP expone las operaciones de la API de BulkPublish como herramientas que los asistentes de IA pueden llamar directamente. Puedes pedirle a Claude que programe publicaciones, consulte análisis, suba medios, gestione etiquetas y más, todo mediante conversación natural.

Instalación

Opción 1: npx (recomendado)

npx @bulkpublish/mcp-server

Opción 2: Instalación global

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

Opción 3: Desde el código fuente

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

Requiere Node ≥ 20.19. npm run build agrupa la interfaz del compositor con Vite (build:ui), luego compila el servidor con tsc.

Configuración

Establece tu clave de API como una variable de entorno:

export BULKPUBLISH_API_KEY=bp_your_api_key_here

Obtén tu clave de API en app.bulkpublish.com/developer.

Claude Desktop

Añade esto a tu archivo de configuración de 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"
      }
    }
  }
}

Si lo instalaste desde el código fuente:

{
  "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

Añade el servidor MCP a tu configuración de Claude Code:

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

Establece la variable de entorno en tu perfil de shell o en el archivo .env:

export BULKPUBLISH_API_KEY=bp_your_api_key_here

Servidor remoto / alojado (HTTP)

La configuración npx/stdio anterior ejecuta el servidor localmente. Los clientes web que no pueden iniciar un proceso local — conectores personalizados de claude.ai y la puerta de enlace de Smithery — se conectan a un endpoint HTTP alojado en su lugar. Junto al binario stdio, el servidor incluye un transporte HTTP Streamable (dist/http.js, ejecutado con npm run start:http):

EndpointPropósito
POST /mcpMCP Streamable HTTP (sin estado)
GET /.well-known/mcp/server-card.jsonMetadatos estáticos para que los registros puedan omitir el escaneo
GET /healthComprobación de actividad

Es multi-tenant — el proceso no contiene ninguna clave de API. Cada llamador proporciona su propia clave bp_… por solicitud a través de la URL de conexión (?key=bp_…), un blob de Smithery ?config=, o un encabezado Authorization: Bearer bp_… / X-BulkPublish-Key. initialize, tools/list y resources/* no necesitan clave (para que los escaneos y el descubrimiento de herramientas funcionen); un tools/call sin una devuelve 401.

Se incluye un Dockerfile:

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

Una vez implementado, agrégalo a claude.ai → Configuración → Conectores → Añadir conector personalizado como https://<host>/mcp?key=bp_…, o publica la URL https://<host>/mcp en Smithery.

Herramientas disponibles

HerramientaDescripción
Publicaciones
create_postCrear y opcionalmente programar una publicación (admite reels, historias, carruseles, hilos mediante postTypeOverrides)
compose_postAbrir una interfaz de compositor interactiva (MCP Apps) para redactar/programar una publicación; se envía mediante create_post
update_postActualizar un borrador o una publicación programada
get_postObtener una sola publicación con todos los detalles
list_postsListar publicaciones con filtros (estado, búsqueda, rango de fechas)
delete_postEliminar una publicación
publish_postPublicar un borrador inmediatamente
retry_postReintentar una publicación fallida
approve_postAprobar una publicación pendiente de aprobación del equipo (roles con post:approve)
reject_postRechazar una publicación pendiente de vuelta a borrador, con una razón opcional
get_post_metricsObtener métricas de interacción (impresiones, me gusta, comentarios, compartidos). Cada entrada de plataforma lleva supportedMetrics — una clave que no esté en esa lista es un 0 almacenado, no una medición
publish_storyPublicar como historia en Facebook o Instagram
bulk_postsEliminar o reintentar múltiples publicaciones en masa
get_queue_slotObtener el próximo espacio de tiempo óptimo para un canal
Canales
list_channelsListar todos los canales de redes sociales conectados
get_channel_healthComprobar la salud del token del canal
get_channel_optionsObtener opciones específicas de la plataforma (tableros, listas de reproducción)
search_mentionsBuscar usuarios para @mencionar (X, Bluesky)
Conjuntos de canales
list_channel_setsListar grupos de canales guardados para apuntar a múltiples canales con un clic
create_channel_setGuardar un grupo de canales con nombre (máx. 50 por organización, nombres únicos por organización)
update_channel_setRenombrar un conjunto o cambiar sus canales
delete_channel_setEliminar un conjunto de canales
Autopublicación RSS
list_rss_feedsListar fuentes RSS/Atom consultadas cada 15 minutos (los nuevos elementos se convierten en publicaciones)
create_rss_feedAñadir una fuente (máx. 20 por organización); mode = draft (predeterminado, los elementos se convierten en borradores) o publish (publicado automáticamente); el fieldMapping opcional controla cómo se renderizan los elementos (plantilla de subtítulo, selección de medios, truncamiento, anulaciones por canal)
update_rss_feedCambiar, pausar o re-apuntar una fuente (cambiar feedUrl la re-baselinea — el backlog no se inunda)
delete_rss_feedDetener y eliminar una fuente
Medios
upload_mediaSubir un archivo de medios desde una URL (o ruta local en el servidor stdio)
get_mediaObtener un archivo de medios por ID
list_mediaListar archivos de medios subidos
delete_mediaEliminar un archivo de medios
create_media_uploadReservar una URL R2 prefirmada para una subida directa desde el navegador (usada por el compositor)
finalize_media_uploadRegistrar un objeto subido como archivo de medios después del PUT del navegador (usado por el compositor)
create_multipart_uploadIniciar una subida fragmentada para medios grandes (videos de hasta 1GB) — URLs prefirmadas para partes fijas de 10MB
complete_multipart_uploadEnsamblar las partes subidas (partNumber + ETag cada una) y registrar el archivo de medios
abort_multipart_uploadCancelar una subida fragmentada en curso y liberar sus partes almacenadas
Etiquetas
create_labelCrear una nueva etiqueta
list_labelsListar todas las etiquetas
update_labelActualizar el nombre o color de una etiqueta
delete_labelEliminar una etiqueta
Análisis
get_analyticsObtener un resumen de análisis para un rango de fechas
Horarios
list_schedulesListar horarios recurrentes
create_scheduleCrear un horario recurrente
update_scheduleActualizar un horario
delete_scheduleEliminar un horario
Cuenta
get_quota_usageComprobar el uso actual de la cuenta (oculto cuando BULKPUBLISH_HIDE_BILLING=1)
Interfaz interactiva (MCP Apps)
compose_postAbrir el compositor de publicaciones interactivo (también listado arriba)
view_analyticsAbrir un panel de análisis interactivo
view_postsAbrir una lista de publicaciones interactiva
view_channelsAbrir una vista de canales interactiva
view_mediaAbrir una galería de medios interactiva
view_quotaAbrir una vista de uso de cuenta interactiva (oculta cuando BULKPUBLISH_HIDE_BILLING=1)

Interfaz interactiva (MCP Apps)

En los hosts que admiten MCP Apps — Claude, ChatGPT, VS Code, Goose, Postman y el playground de Smithery — la herramienta compose_post abre un compositor interactivo renderizado en línea en la conversación: elige canales, escribe contenido, programa opcionalmente y luego envía. Al enviar, llama a create_post a través del puente del host, por lo que el iframe en sandbox nunca contiene tu clave de API. Los hosts sin soporte de MCP Apps simplemente reciben un resumen en texto plano, así que nada se rompe.

Varias herramientas renderizan interfaces — compose_post (compositor), view_analytics, view_posts, view_channels, view_media y view_quota. Cada una es un widget autocontenido bajo src/ui/<name>/, empaquetado en un solo archivo HTML con Vite (una pasada de entrada única por widget — ver scripts/build-ui.mjs) e incrustado en el servidor mediante src/ui/widgets.generated.ts. Comparten los tokens de diseño de la aplicación web de BulkPublish (src/ui/tokens.css), por lo que el aspecto coincide. Una Vista recibe sus datos del structuredContent de la herramienta desencadenante y puede llamar a otras herramientas a través del puente del host — por lo que el iframe en sandbox nunca contiene tu clave de API. Los hosts sin soporte de MCP Apps simplemente reciben un resumen en texto plano.

Ejemplo de conversación

Aquí hay un ejemplo de uso de las herramientas de BulkPublish en Claude:

Tú: Programa una publicación para mañana a las 9 a.m. EST que diga "¡Emocionados de anunciar nuestra nueva función! Mírala en example.com" en todos mis canales conectados.

Claude: Déjame comprobar primero tus canales conectados.

[Llama a list_channels]

Tienes 3 canales activos:

  • X/Twitter: @yourcompany (ID: 1)
  • LinkedIn: Tu página de empresa (ID: 2)
  • Instagram: @yourcompany (ID: 3)

Ahora programaré la publicación para mañana a las 9:00 a.m. hora del Este.

[Llama a create_post con content, channels, scheduledAt: "2025-01-16T14:00:00Z", timezone: "America/New_York", status: "scheduled"]

¡Listo! Tu publicación ha sido programada:

  • ID de publicación: 42
  • Estado: scheduled
  • Programada para: 16 de enero de 2025 a las 9:00 a.m. EST
  • Canales: X/Twitter, LinkedIn, Instagram

Tú: ¿Cómo se desempeñaron mis publicaciones este mes?

Claude: [Llama a get_analytics con from: "2025-01-01", to: "2025-01-31"]

Aquí está tu resumen de análisis de enero:

  • Total de publicaciones: 28
  • Publicadas: 25
  • Fallidas: 1
  • Programadas (pendientes): 2
  • Por plataforma: X/Twitter (25 publicaciones, 24 publicadas), LinkedIn (20 publicaciones, 19 publicadas), Instagram (15 publicaciones, todas publicadas)
  • Mejor día: 12 de enero con 5 publicaciones

Tú: Sube esta imagen y crea una publicación borrador con ella: https://example.com/product-launch.png

Claude: [Llama a upload_media con url]

Imagen subida exitosamente (ID: 15, 1200x630px, 245KB).

[Llama a create_post con content y mediaFileIds]

Publicación borrador creada (ID: 43) con la imagen de lanzamiento del producto adjunta. Puedes revisarla y publicarla cuando estés listo.

Variables de entorno

VariableRequeridaPredeterminadoDescripción
BULKPUBLISH_API_KEYTu clave de API (comienza con bp_)
BULKPUBLISH_BASE_URLNohttps://app.bulkpublish.comURL base de la API (para instancias autoalojadas)

Licencia

MIT