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. Añade https://sprkly.app/api/mcp como conector personalizado.
- 2. Haz clic en Conectar y aprueba los permisos.
- 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.En Cowork, abre Configuración (tu avatar, abajo a la izquierda) y haz clic en Conectores.
- 2.Haz clic en Añadir conector personalizado.
- 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.Haz clic en Añadir. sprkly aparece en la lista de conectores. Haz clic en Conectar junto a él.
- 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.
| Campo | Requerido para | Notas |
|---|---|---|
| caption | cada publicación | Se verifica contra el límite de longitud de cada plataforma antes de poner nada en cola. |
| title | TikTok, YouTube | Ambas plataformas muestran el título, no el pie de foto. YouTube lo limita a 100 caracteres. |
| platform_meta.tiktok.privacyLevel | TikTok | TikTok 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_ids | Instagram, TikTok | Ninguna 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.
| Argumento | Tipo | Descripción |
|---|---|---|
| urlrequerido | string | Enlace 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.
| Argumento | Tipo | Descripción |
|---|---|---|
| post_idrequerido | string | El 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.
| Argumento | Tipo | Descripción |
|---|---|---|
| content_hintrequerido | string | De qué debería tratar la publicación: un tema, frase o mensaje clave. |
| platforms | string[] | Plataformas previstas, usadas para elegir el límite de longitud del pie de foto. |
| tone | string | Voz para el borrador. casual · profesional · promocional |
| name | string | Etiqueta opcional para el borrador. |
| profile_ids | string[] | 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.
| Argumento | Tipo | Descripción |
|---|---|---|
| days | entero (1 a 365) | Cuántos días atrás analizar. Por defecto 30. |
| profile_ids | string[] | 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.
| Argumento | Tipo | Descripción |
|---|---|---|
| post_idrequerido | string | El 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.
| Argumento | Tipo | Descripción |
|---|---|---|
| post_idrequerido | string | El 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.
| Argumento | Tipo | Descripción |
|---|---|---|
| profile_idrequerido | string | El 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.
| Argumento | Tipo | Descripción |
|---|---|---|
| status | string | Filtrar por estado. draft · pending_approval · scheduled · posted · failed |
| limit | integer (1 a 50) | Número máximo de publicaciones a devolver. |
| cursor | string | Cursor 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.
| Argumento | Tipo | Descripción |
|---|---|---|
| post_idrequerido | string | El id de la publicación en borrador a enviar. |
| note | string | Contexto 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.
| Argumento | Tipo | Descripción |
|---|---|---|
| caption | string | Título de la publicación, máximo 2200 caracteres. |
| platforms | string[] | 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_ids | string[] | 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_accounts | boolean | Publicar 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_time | string | Marca 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_urls | string[] | 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_id | string | Id de un solo archivo de medios ya subido a sprkly. Abreviatura para un media_ids de un elemento. |
| media_ids | string[] | 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. |
| title | string | Título de la publicación. Requerido para YouTube (máximo 100 caracteres) y TikTok (máximo 150 caracteres). |
| category | string | Categoría de contenido opcional, p. ej. "fitness". |
| platform_meta | object | Opciones 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.
| Argumento | Tipo | Descripción |
|---|---|---|
| post_idrequerido | string | El id de la publicación programada. |
| caption | string | Título de reemplazo, máximo 2200 caracteres. |
| scheduled_time | string | Nueva hora de publicación ISO 8601. Debe estar en el futuro. |
| profile_ids | string[] | Cuentas de destino de reemplazo. Las plataformas se derivan de ellas. |
| media_id | string | Id de archivo de medios sprkly de reemplazo. Abreviatura para un media_ids de un elemento. |
| media_ids | string[] | 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.
| Argumento | Tipo | Descripción |
|---|---|---|
| captionrequerido | string | El título a verificar. |
| platformsrequerido | string[] | Plataformas de destino contra las que verificar. |
| mediaUrlsCount | integer (0 a -) | Cuántas imágenes o videos se adjuntarán. Instagram y TikTok requieren al menos uno. |
| hashtags | string[] | Hashtags publicados junto con el título, si no ya están en él. |
| title | string | Título de la publicación. Requerido para YouTube, máximo 100 caracteres. |
| platformMeta | object | Opciones 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étodo | Comportamiento |
|---|---|
| POST | Lleva cada mensaje MCP. Incluya Accept: application/json, text/event-stream. |
| GET | 405. Este servidor no ofrece flujo SSE iniciado por el servidor. |
| DELETE | 405. 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
S256es requerido. - Ámbitos:
profilemcp:readmcp:write. Agregueoffline_accesspara un token de actualización. mcp:readcubre cada herramienta de solo lectura;mcp:writeagrega 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.