sprkly.app-mcp

sprkly.app permite a los usuarios publicar su contenido de formato corto en tiktok, facebook, instagram, youtube, threads mediante lenguaje natural.

Documentación

Inicio rápido

Dos formas de autenticarse. Elige según lo que admita tu cliente.

Recomendado

Conectar con OAuth

Para Claude Cowork, claude.ai, Claude Desktop, Claude Code y ChatGPT. Añade el endpoint como conector personalizado e inicia sesión. No hay nada que copiar, y la conexión está vinculada a tu inicio de sesión de sprkly en lugar de a un secreto de larga duración.

  1. 1. Añade https://sprkly.app/api/mcp como conector personalizado.
  2. 2. Haz clic en Conectar y aprueba los permisos.
  3. 3. Pregunta a tu agente qué tienes programado. Configuración por cliente, justo debajo →

Scripts, CI, agentes autoalojados

Enviar una clave de API

Crea una clave en Configuración → Claves de API y envíala como token de portador. No hay paso de intercambio ni token de corta duración que renovar.

curl -s https://sprkly.app/api/mcp \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

MCP está incluido en la prueba gratuita. Es el mismo derecho que la API REST, así que una clave que funciona para uno funciona para ambos. Cuando una prueba termina sin un plan, las llamadas devuelven 403 con plan_required.

Configuración del cliente

Cada cliente, paso a paso. Los agentes alojados inician sesión con OAuth; cualquier cosa que se ejecute localmente puede usar una clave de API de Configuración → Claves de API en su lugar.

Claude Cowork

Inicia sesión con OAuth

Dale a Cowork tu cola de publicaciones para que pueda planificar y programar junto con el resto de tu trabajo.

  1. 1.En Cowork, abre Configuración (tu avatar, abajo a la izquierda) y haz clic en Conectores.
  2. 2.Haz clic en Añadir conector personalizado.
  3. 3.En el diálogo, pega la URL del servidor de abajo en el campo URL. El nombre puede ser cualquiera. "sprkly" se lee mejor.
  4. 4.Haz clic en Añadir. sprkly aparece en la lista de conectores. Haz clic en Conectar junto a él.
  5. 5.Se abre una pestaña de inicio de sesión de sprkly. Inicia sesión y haz clic en Aprobar en la pantalla de consentimiento.

El formulario, campo por campo

Nombre

sprkly

URL

https://sprkly.app/api/mcp

Listo cuando: La tarjeta del conector cambia a Conectado, y al preguntarle a Cowork "¿qué tengo programado esta semana?" responde desde tu calendario real.

Cowork se conecta desde la nube de Anthropic, no desde tu portátil. Nada que instalar. "No se pudo alcanzar el servidor MCP" casi siempre significa una URL mal escrita. Cópiala, no la vuelvas a escribir.

Los límites son reales, no sugerencias

  • No hay herramienta de publicar ahora. Todo pasa por la misma cola, límites de plan y ruta de aprobación que tus propias publicaciones.
  • Eliminar es un borrado suave que puedes deshacer durante 30 días; un agente no puede tocar una publicación que ya se ha publicado.
  • Un agente solo ve tus propias cuentas, y una clave de API puede limitarse a un subconjunto de ellas.
  • Cada llamada de herramienta se registra. Desconéctate en cualquier momento desde Configuración.

Preguntas

¿Qué agentes de IA pueden conectarse a sprkly?

Cualquier cliente que hable el Protocolo de Contexto del Modelo. Eso incluye Claude Cowork, claude.ai, Claude Desktop, Claude Code, ChatGPT en modo desarrollador, Codex, Cursor, VS Code y herramientas de automatización como n8n. Cualquier otra cosa puede llamar al endpoint por HTTP simple con una clave de API.

¿Necesito instalar algo?

No. sprkly ejecuta un servidor MCP alojado, así que pegas una URL en tu agente e inicias sesión. No hay nada que ejecutar en tu máquina ni nada que mantener actualizado.

¿Puede un agente de IA publicar sin preguntarme?

Solo puede programar en cuentas que ya hayas conectado, y solo si se lo pides. También puedes requerir aprobación humana, así que cualquier cosa que un agente ponga en cola espera tu visto bueno antes de publicarse. Las publicaciones que ya se han publicado no pueden ser eliminadas por un agente en absoluto.

¿Cuánto cuesta?

Nada extra. El acceso a MCP está incluido en cada plan de pago de sprkly y usa el mismo derecho que la API REST.

¿Puedo limitar qué cuentas ve un agente?

Sí. Limita una clave de API a cuentas específicas en Configuración y el agente solo puede leer y publicar en esas. Los alcances también controlan si puede escribir en absoluto o solo leer.

Ejemplo práctico

Inicializa, lista las herramientas y luego programa una publicación. Sustituye tu propia credencial.

TOKEN="sk_live_…"
MCP="https://sprkly.app/api/mcp"

# 1. Initialize (no credentials needed)
curl -s "$MCP" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize",
       "params":{"protocolVersion":"2025-11-25",
                 "capabilities":{},
                 "clientInfo":{"name":"curl","version":"1.0"}}}'

# 2. Which accounts can I post to?
curl -s "$MCP" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
       "params":{"name":"sprkly_list_profiles","arguments":{}}}'

# 3. Check the caption before committing to it
curl -s "$MCP" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call",
       "params":{"name":"sprkly_validate_post_policy",
                 "arguments":{"caption":"Launch day.",
                              "platforms":["instagram"],
                              "mediaUrlsCount":1}}}'

# 4. Queue it
curl -s "$MCP" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":4,"method":"tools/call",
       "params":{"name":"sprkly_schedule_post",
                 "arguments":{"caption":"Launch day.",
                              "profile_ids":["profile_…"],
                              "media_urls":["https://example.com/launch.jpg"],
                              "scheduled_time":"2026-08-04T18:00:00.000Z"}}}'

Lo que toda publicación necesita

Cuatro cosas siempre son necesarias: un pie de foto, al menos una plataforma, una hora y medios para las plataformas que lo exigen. Dos plataformas quieren más, y sprkly_schedule_post rechaza la llamada en lugar de adivinar.

CampoRequerido paraNotas
captioncada publicaciónSe verifica contra el límite de longitud de cada plataforma antes de poner nada en cola.
titleTikTok, YouTubeAmbas plataformas muestran el título, no el pie de foto. YouTube lo limita a 100 caracteres.
platform_meta.tiktok.privacyLevelTikTokTikTok rechaza una publicación sin uno. Envía el nivel que el usuario pidió; si no es uno que este creador permita, el error nombra los niveles que sí lo son. O léelos primero con sprkly_get_tiktok_posting_options.
media_urls / media_idsInstagram, TikTokNinguna aceptará una publicación solo de texto. Pasa un enlace directamente y sprkly lo lleva a su almacenamiento por sí mismo.

El orden del array es el orden de las diapositivas. Para un carrusel o un conjunto de fotos, la secuencia que envías en media_urls o media_ids es la secuencia que se publica. La diapositiva 1 tiene más peso: Instagram recorta cada otra diapositiva para que coincida con su forma, y Threads y Facebook publican solo esa.

Una lista de archivos no es una lista ordenada. Google Drive, Dropbox y la mayoría de los nodos de automatización devuelven archivos en orden de subida, que rara vez coincide con la intención. Ordena por nombre de archivo antes de construir el array, y nombra los archivos para que el orden funcione: 01.jpg, 02.jpg, 03.jpg. Rellena el cero, porque como texto 10 se ordena antes que 2. Cuando el orden se infirió en lugar de darse, dilo en la respuesta en lugar de presentarlo como seguro.

Herramientas

16 herramientas. Los argumentos de abajo son exactamente lo que devuelve tools/list.

sprkly_add_media_from_url WriteIdempotent

Descarga una imagen o video de un enlace público a sprkly y obtén un media_id de vuelta, para reutilizarlo en varias publicaciones. Normalmente NO necesitas esto: sprkly_schedule_post acepta un enlace directamente en media_urls y lo lleva a su almacenamiento por sí mismo cuando la plataforma objetivo lo requiere. Recurre a esta herramienta solo cuando el usuario quiera un media_id para adjuntar a más de una publicación. Los enlaces compartidos de Google Drive y Dropbox se convierten automáticamente; el archivo debe compartirse públicamente. Límite de 50 MB.

ArgumentoTipoDescripción
urlrequeridostringEnlace https directo al archivo de imagen o video. Debe ser accesible públicamente.

Tú dices "Usa este clip para las tres publicaciones de esta semana: https://cdn.example.com/clips/launch.mp4”

El agente llama

sprkly_add_media_from_url({
  "url": "https://cdn.example.com/clips/launch.mp4"
})

Devuelve un mediaId que puedes adjuntar a varias publicaciones. Para una SOLA publicación no llames a esto en absoluto: pon el enlace directamente en media_urls en sprkly_schedule_post y se lleva al almacenamiento allí.

sprkly_delete_scheduled_post WriteDestructiveIdempotent

Elimina una publicación de la cola. Esto es un borrado suave. El usuario puede restaurarla desde la pestaña Eliminadas durante 30 días. Las publicaciones que ya se han publicado no se pueden eliminar de esta manera. Siempre confirma con el usuario antes de llamar.

ArgumentoTipoDescripción
post_idrequeridostringEl id de la publicación programada a eliminar.

Tú dices "Descarta la publicación del martes, ya está desactualizada."

El agente llama

sprkly_delete_scheduled_post({
  "post_id": "post_abc123"
})

Borrado suave: restaurable desde la pestaña Eliminadas durante 30 días. Los agentes confirman con el usuario antes de llamar.

sprkly_draft_post Write

Redacta un pie de foto a partir de una sugerencia de contenido y guárdalo como borrador en sprkly, ajustado al límite de longitud más estricto entre las plataformas objetivo. Devuelve un id de borrador; el borrador aparece en /drafts para que el usuario lo revise.

ArgumentoTipoDescripción
content_hintrequeridostringDe qué debería tratar la publicación: un tema, frase o mensaje clave.
platformsstring[]Plataformas previstas, usadas para elegir el límite de longitud del pie de foto.
tonestringVoz para el borrador. casual · profesional · promocional
namestringEtiqueta opcional para el borrador.
profile_idsstring[]Cuentas opcionales para preseleccionar en el borrador. De sprkly_list_profiles.

Tú dices "Redacta algo cálido sobre el nuevo espacio del estudio para Instagram."

El agente llama

sprkly_draft_post({
  "content_hint": "first look at the new studio space",
  "platforms": [
    "instagram"
  ],
  "tone": "casual"
})

sprkly_get_account_summary Solo lectura

Nivel de plan, estado de prueba, número de cuentas conectadas, recuentos de publicaciones programadas por estado y las próximas tres publicaciones. Nunca devuelve tokens ni secretos.

Sin argumentos.

Tú dices "¿Cómo se ve mi cuenta de sprkly?"

El agente llama

sprkly_get_account_summary({})

sprkly_get_analytics Solo lectura

Cómo rindieron realmente las publicaciones del usuario: vistas totales y participación, cambio semana a semana / mes a mes / año a año, su mejor hora de publicación, día de la semana y categoría de contenido, y las mejores publicaciones detrás de esos números. Cada recomendación lleva un recuento de samples\ — di lo escaso que es el evidencia en lugar de presentar un patrón de una publicación como un hallazgo. Cada porcentaje período a período lleva los recuentos de publicaciones y totales brutos de los que proviene: cítalos, porque un gran porcentaje sobre una base diminuta no es un gran cambio. topPosts\ está agrupado por plataforma y clasificado solo dentro de cada grupo; relativeToPlatformBest\ compara una publicación con otras en SU PROPIA plataforma y nunca entre plataformas, así que usa el value\ absoluto y su etiqueta metric\ para sopesar una plataforma contra otra. Instagram contribuye solo con me gusta y comentarios, y Threads y Facebook no producen métricas en absoluto, así que lee coverage\ antes de comparar plataformas.

ArgumentoTipoDescripción
daysentero (1 a 365)Cuántos días atrás analizar. Por defecto 30.
profile_idsstring[]Limita a estas cuentas. Omite para cada cuenta que esta conexión pueda ver.

Tú dices "¿Cómo me fue con mis publicaciones el mes pasado, y cuándo debería publicar?"

El agente llama

sprkly_get_analytics({
  "days": 30
})

Devuelve los números y la evidencia detrás de ellos. El consejo es tuyo para dar: verifica samples\ y coverage\ antes de llamar a algo un patrón.

Tú dices "¿Cuál de mis publicaciones de TikTok funcionó mejor esta semana?"

El agente llama

sprkly_get_analytics({
  "days": 7,
  "profile_ids": [
    "prof_tiktok_main"
  ]
})

sprkly_get_billing_summary Solo lectura

Estado de suscripción, plan actual, fin de período, identificadores comprados y los últimos eventos de facturación. Sin detalles de método de pago; el id de cliente de Stripe está truncado.

Sin argumentos.

Tú dices "¿En qué plan estoy y cuándo se renueva?"

El agente llama

sprkly_get_billing_summary({})

sprkly_get_post_approval_status Solo lectura

Si una publicación está esperando revisión humana, aprobada o rechazada, incluyendo notas del revisor y marcas de tiempo.

ArgumentoTipoDescripción
post_idrequeridostringEl id de la publicación programada.

Tú dices "¿Ya se aprobó la publicación de lanzamiento?"

El agente llama

sprkly_get_post_approval_status({
  "post_id": "post_abc123"
})

sprkly_get_post_status Solo lectura

Detalle completo de una publicación: estado, objetivos, tiempos programados y publicados, enlace permanente y la razón del fallo si no se publicó. Los medios vuelven como mediaIds en orden de diapositivas, no como enlaces. Los ids y los ids de perfil son detalles técnicos: habla con el usuario sobre cuentas por identificador y sobre publicaciones por su pie de foto, y no leas ids en voz alta a menos que pidan uno.

ArgumentoTipoDescripción
post_idrequeridostringEl id de la publicación programada.

Tú dices "¿El reel de anoche realmente salió?"

El agente llama

sprkly_get_post_status({
  "post_id": "post_abc123"
})

sprkly_get_tiktok_posting_options Solo lectura

Los niveles de privacidad de TikTok permitidos de este creador y la configuración de interacción, obtenidos en vivo de TikTok. Normalmente NO necesitas esto antes de programar: sprkly_schedule_post verifica privacyLevel contra esta misma lista por sí mismo y, cuando está mal, devuelve los niveles que funcionarían. Llama a esto solo cuando el usuario pregunte cuáles son sus opciones, o quieras ofrecerle una elección.

ArgumentoTipoDescripción
profile_idrequeridostringEl id de perfil de TikTok a consultar, de sprkly_list_profiles.

Tú dices "¿Qué opciones de privacidad tengo en TikTok?"

El agente llama

sprkly_get_tiktok_posting_options({
  "profile_id": "prof_tt_studio"
})

Para mostrar al usuario sus opciones. NO lo ejecutes antes de sprkly_schedule_post como regla general: esa llamada valida privacyLevel por sí misma y nombra los niveles permitidos cuando uno está mal.

sprkly_list_connected_social_accounts Solo lectura Cada cuenta social ACTIVA vinculada a esta cuenta de sprkly: plataforma, usuario, número de seguidores y si necesita reconexión. Las cuentas desconectadas/inactivas nunca se listan, por lo que cualquier profileId devuelto aquí es un destino de publicación válido. Nunca devuelve tokens de acceso.

Sin argumentos.

Usted dice "¿Qué cuentas sociales tengo conectadas?"

El agente llama

sprkly_list_connected_social_accounts({})

sprkly_list_profiles Solo lectura

Los ids de perfil necesarios para dirigir una publicación, con la plataforma y el usuario de cada uno. Llame a esto antes de sprkly_schedule_post.

Sin argumentos.

Usted dice "¿Dónde puedes publicar por mí?"

El agente llama

sprkly_list_profiles({})

Los agentes llaman a esto primero: los ids de perfil que devuelve son a los que sprkly_schedule_post se dirige.

sprkly_list_scheduled_posts Solo lectura

La cola de publicaciones, de más reciente a más antigua, con una vista previa del título, destinos, estado y motivo de error. Admite un filtro de estado y paginación con cursor.

ArgumentoTipoDescripción
statusstringFiltrar por estado. draft · pending_approval · scheduled · posted · failed
limitinteger (1 a 50)Número máximo de publicaciones a devolver.
cursorstringCursor de paginación. Pase el valor nextCursor de una respuesta anterior.

Usted dice "¿Qué tengo en cola esta semana?"

El agente llama

sprkly_list_scheduled_posts({
  "status": "scheduled",
  "limit": 20
})

sprkly_request_post_approval Escritura

Envía una publicación en borrador para revisión humana. Mueve la publicación a pending_approval y devuelve un id de aprobación para consultar con sprkly_get_post_approval_status. Use esto cuando el usuario quiera que una persona dé el visto bueno antes de que se publique algo.

ArgumentoTipoDescripción
post_idrequeridostringEl id de la publicación en borrador a enviar.
notestringContexto opcional para el revisor.

Usted dice "Pon la semana en cola, pero déjame dar el visto bueno antes de que salga algo."

El agente llama

sprkly_request_post_approval({
  "post_id": "post_abc123",
  "note": "Captions drafted from the Tuesday shoot. Check the TikTok hook."
})

sprkly_schedule_post Escritura

Pone una publicación en cola para publicarse, en UNA llamada. Adjunte medios pasando el enlace del usuario directamente a media_urls: sprkly lo descarga en su propio almacenamiento para las plataformas que lo necesitan, así que no es necesario ejecutar primero una herramienta de subida. Ejecuta las mismas comprobaciones de cuota, contenido duplicado y pre-vuelo de plataforma que la aplicación sprkly. Instagram y TikTok requieren medios en el momento del envío; YouTube y TikTok requieren un título, y TikTok también requiere platform_meta.tiktok.privacyLevel — simplemente envíe el nivel que el usuario pidió y esta herramienta nombra los valores permitidos si no es uno de ellos. Lee los bytes reales de los medios y la respuesta dice lo que realmente se publicará en cada plataforma (un Reel, un carrusel de 3 diapositivas, un conjunto de fotos, un video de feed de Página) además de cualquier cosa que valga la pena transmitir: comuníquelo al usuario. Confirme la fecha, hora y cuentas de destino con el usuario primero. Si una plataforma de destino tiene más de una cuenta conectada y no se proporciona profile_ids, la herramienta devuelve needsAccountChoice con las opciones en lugar de programar — presente esa elección al usuario y luego vuelva a llamar.

ArgumentoTipoDescripción
captionstringTítulo de la publicación, máximo 2200 caracteres.
platformsstring[]Plataformas a las que publicar. Una plataforma con exactamente una cuenta conectada se dirige directamente; una con varias hace que la herramienta responda needsAccountChoice para que el usuario elija.
profile_idsstring[]Cuentas específicas a las que publicar, de sprkly_list_profiles. Cuando se proporcionan, esta lista ES el conjunto de destino — las plataformas no se expanden.
all_accountsbooleanPublicar explícitamente en TODAS las cuentas conectadas en cada plataforma listada, omitiendo la pregunta needsAccountChoice. Solo pase true cuando el usuario haya dicho que quiere todas las cuentas.
scheduled_timestringMarca de tiempo ISO 8601 para publicar. Debe estar en el futuro. Si se omite, la publicación sale en la próxima ejecución del publicador, aproximadamente un minuto desde ahora — no hay selección inteligente de horario, así que pase un tiempo explícito a menos que el usuario quiera que se publique inmediatamente. sprkly_get_analytics puede sugerir uno.
media_urlsstring[]URLs de imágenes o videos accesibles públicamente para adjuntar, en orden de diapositivas. Pase los enlaces para CUALQUIER plataforma. Instagram y Threads los obtienen directamente; para TikTok, YouTube y Facebook sprkly descarga el archivo en su propio almacenamiento mientras programa, así que un enlace también funciona allí y cualquier problema con él se informa ahora, en esta llamada. Los enlaces compartidos de Google Drive y Dropbox se convierten automáticamente. Solo JPEG, PNG, WebP, GIF, MP4, MOV y WebM: AVIF y HEIC (el predeterminado de la cámara iPhone) se rechazan con instrucciones de re-exportación, porque sprkly no puede convertirlos. Cada archivo debe ser accesible públicamente y tener menos de 50 MB.
media_idstringId de un solo archivo de medios ya subido a sprkly. Abreviatura para un media_ids de un elemento.
media_idsstring[]Ids de archivos de medios ya subidos a sprkly, en orden de diapositivas. El orden del array es el orden de publicación. Use estos cuando el usuario ya tenga medios en sprkly, o cuando un archivo vaya a varias publicaciones; para un enlace que el usuario acaba de darle, media_urls es menos pasos. Cada foto en un conjunto debe tener la MISMA forma o la llamada se rechaza: expórtelas todas a 1080x1920 (9:16), 1080x1440 (3:4), 1080x1350 (4:5) o 1080x1080 (1:1). Instagram acepta como máximo 10 diapositivas; los conjuntos de fotos de TikTok aceptan hasta 35.
titlestringTítulo de la publicación. Requerido para YouTube (máximo 100 caracteres) y TikTok (máximo 150 caracteres).
categorystringCategoría de contenido opcional, p. ej. "fitness".
platform_metaobjectOpciones de publicación específicas de la plataforma, claveadas por plataforma.

Usted dice "Programa esto en Instagram y TikTok el jueves a las 6pm."

El agente llama

sprkly_schedule_post({
  "caption": "Behind the scenes of the studio setup",
  "platforms": [
    "instagram",
    "tiktok"
  ],
  "scheduled_time": "2026-08-13T18:00:00+08:00",
  "media_id": "media_abc123",
  "title": "Behind the scenes of the studio setup",
  "platform_meta": {
    "tiktok": {
      "privacyLevel": "PUBLIC_TO_EVERYONE"
    }
  }
})

Con dos cuentas de Instagram conectadas, esto devuelve needsAccountChoice y el agente pregunta: "Tienes 2 cuentas de Instagram, ¿cuál?" Luego vuelve a llamar con profile_ids. Las publicaciones de TikTok necesitan un título y un privacyLevel de sprkly_get_tiktok_posting_options.

Usted dice "Sí, la cuenta del estudio. Lo mismo para TikTok."

El agente llama

sprkly_schedule_post({
  "caption": "Behind the scenes of the studio setup",
  "platforms": [
    "instagram",
    "tiktok"
  ],
  "profile_ids": [
    "prof_ig_studio",
    "prof_tt_studio"
  ],
  "scheduled_time": "2026-08-13T18:00:00+08:00",
  "media_id": "media_abc123",
  "title": "Behind the scenes of the studio setup",
  "platform_meta": {
    "tiktok": {
      "privacyLevel": "PUBLIC_TO_EVERYONE"
    }
  }
})

Usted dice "Publica estas cinco tarjetas como carrusel en Instagram y TikTok."

El agente llama

sprkly_schedule_post({
  "caption": "Five things nobody tells you about scheduling",
  "platforms": [
    "instagram",
    "tiktok"
  ],
  "scheduled_time": "2026-08-14T09:00:00+08:00",
  "media_ids": [
    "media_c1",
    "media_c2",
    "media_c3",
    "media_c4",
    "media_c5"
  ],
  "title": "Five things nobody tells you about scheduling",
  "platform_meta": {
    "tiktok": {
      "privacyLevel": "PUBLIC_TO_EVERYONE"
    }
  }
})

El orden de media_ids es el orden de diapositivas, y los ids provienen de medios ya en sprkly. Si el usuario hubiera pegado cinco enlaces en su lugar, media_urls los toma en el mismo orden y sprkly los obtiene mientras programa.

Usted dice "Publica esto en TikTok mañana a las 9am, solo para mí por ahora: https://drive.google.com/file/d/1AbCdEf/view?usp=sharing”

El agente llama

sprkly_schedule_post({
  "caption": "Testing the new scheduler",
  "platforms": [
    "tiktok"
  ],
  "scheduled_time": "2026-08-16T09:00:00+08:00",
  "media_urls": [
    "https://drive.google.com/file/d/1AbCdEf/view?usp=sharing"
  ],
  "title": "Testing the new scheduler",
  "platform_meta": {
    "tiktok": {
      "privacyLevel": "SELF_ONLY"
    }
  }
})

Una llamada. El enlace compartido de Drive se convierte a su forma de descarga y se obtiene al almacenamiento de sprkly durante esta llamada, así que un enlace roto o privado se informa aquí en lugar de fallar silenciosamente al momento de publicar. No llame a una herramienta de subida primero, y no busque el nivel de privacidad primero.

sprkly_update_scheduled_post EscrituraIdempotente

Cambie el título, la hora de publicación, las cuentas de destino o los medios adjuntos en una publicación que aún no se ha publicado. Solo las publicaciones con estado "scheduled" se pueden editar.

ArgumentoTipoDescripción
post_idrequeridostringEl id de la publicación programada.
captionstringTítulo de reemplazo, máximo 2200 caracteres.
scheduled_timestringNueva hora de publicación ISO 8601. Debe estar en el futuro.
profile_idsstring[]Cuentas de destino de reemplazo. Las plataformas se derivan de ellas.
media_idstringId de archivo de medios sprkly de reemplazo. Abreviatura para un media_ids de un elemento.
media_idsstring[]Medios de reemplazo, en orden de diapositivas. Reemplaza todo el conjunto, no agrega — pase cada diapositiva que quiera que la publicación conserve.

Usted dice "Mueve la publicación del viernes a la mañana del sábado."

El agente llama

sprkly_update_scheduled_post({
  "post_id": "post_abc123",
  "scheduled_time": "2026-08-15T09:00:00+08:00"
})

sprkly_validate_post_policy Solo lectura

Verifica un título contra las reglas de publicación de cada plataforma de destino antes de programar: longitud del título, requisitos de medios, límites de hashtags, si los enlaces son clicables, títulos requeridos de YouTube y advertencias de PII o contenido prohibido. Análisis puro. No escribe nada.

ArgumentoTipoDescripción
captionrequeridostringEl título a verificar.
platformsrequeridostring[]Plataformas de destino contra las que verificar.
mediaUrlsCountinteger (0 a -)Cuántas imágenes o videos se adjuntarán. Instagram y TikTok requieren al menos uno.
hashtagsstring[]Hashtags publicados junto con el título, si no ya están en él.
titlestringTítulo de la publicación. Requerido para YouTube, máximo 100 caracteres.
platformMetaobjectOpciones de publicación específicas de la plataforma, claveadas por plataforma.

Usted dice "Verifica este título contra las reglas de TikTok primero."

El agente llama

sprkly_validate_post_policy({
  "caption": "Three edits that doubled watch time. Full breakdown in the comments.",
  "platforms": [
    "tiktok"
  ],
  "mediaUrlsCount": 1
})

Ejecute esto antes de programar: detecta un título demasiado largo, medios faltantes o un título de YouTube faltante mientras aún son baratos de corregir.

Transporte

HTTP transmisible, sin estado. Los mensajes JSON-RPC 2.0 se envían por POST a un único endpoint y se responden con application/json. No se emite ningún id de sesión, así que no hay nada que rastrear entre llamadas.

MétodoComportamiento
POSTLleva cada mensaje MCP. Incluya Accept: application/json, text/event-stream.
GET405. Este servidor no ofrece flujo SSE iniciado por el servidor.
DELETE405. Sin estado, así que no hay sesión que terminar.

Versiones de protocolo

Negociadas en initialize: el servidor repite su revisión cuando la soporta, de lo contrario responde con la más reciente. Soportadas: 2025-11-25 2025-06-18 2025-03-26. Envíe el valor negociado como MCP-Protocol-Version en solicitudes posteriores. Un valor no soportado es un 400.

Métodos

initialize, ping, tools/list, tools/call, resources/list y prompts/list (ambos vacíos). Las notificaciones se reconocen con 202 y sin cuerpo.

Autenticación

initialize, ping y tools/list funcionan sin credenciales, así que un cliente puede mostrar lo que sprkly ofrece antes de que alguien inicie sesión. El primer tools/call es desafiado.

El desafío 401

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer error="invalid_token",
  error_description="Missing bearer credentials",
  resource_metadata="https://sprkly.app/.well-known/oauth-protected-resource/api/mcp",
  scope="profile mcp:read mcp:write"

Siga resource_metadata para aprender qué servidor de autorización usar. Ese documento nombra este origen, cuyos metadatos viven en https://sprkly.app/.well-known/oauth-authorization-server.

OAuth 2.1

  • Registro Dinámico de Cliente (RFC 7591) y Documentos de Metadatos de ID de Cliente son ambos soportados. PKCE con S256 es requerido.
  • Ámbitos: profile mcp:read mcp:write. Agregue offline_access para un token de actualización.
  • mcp:read cubre cada herramienta de solo lectura; mcp:write agrega redacción, programación y eliminación.

Ámbitos de clave API

Una clave puede tener *, sprkly:*, o cualquiera de post:read, post:write, post:draft, account:read, approval:request. Una clave con ámbito a cuentas específicas solo ve y toca esas.

Nunca ponga una clave API o token en la URL del conector como parámetro de consulta. Las URLs se registran en registros, proxies e historial del navegador, y la especificación MCP lo prohíbe. Use el encabezado Authorization o OAuth.

Obsoleto

Estos aún funcionan. Nada nuevo los necesita.

  • https://mcp.sprkly.app/mcp. Hace de proxy al endpoint anterior. Apunte nuevas integraciones a https://sprkly.app/api/mcp en su lugar.
  • POST /auth y POST /api/auth/mcp-token. El intercambio de clave API a JWT. La clave API ahora se acepta directamente como token bearer, así que el intercambio y su bucle de actualización de 24 horas son innecesarios.

¿Necesita ayuda?

El acceso MCP sigue la misma habilitación que la API REST. Si un conector no se conecta, la señal más rápida es si un tools/call no autenticado devuelve un 401 con un encabezado WWW-Authenticate.