Claude Code
Un comando en tu terminal, y luego /mcp para comprobar que Velora está conectado.
claude mcp add --transport http velora https://<domaine>/api/mcp \
--header "Authorization: Bearer vlr_live_…"Pide a Claude la facturación de la semana por modelo, o envía un recordatorio de sesión desde Make. Tú eliges lo que puede hacer cada clave.
«¿Quién vendió más en MYM este mes?» Claude lee los totales y responde en una frase.
La IA escribe publicaciones para el feed. Llegan como borrador, tu equipo revisa y publica.
Un recordatorio de sesión, un cambio de hora: el mensaje sale en la app. Nada de envíos masivos, 50 notificaciones al día como máximo.
Make, Zapier, n8n o tu propio script leen las ventas y las sesiones por la API REST.
Una clave empieza por vlr_live_ seguido de 43 caracteres. Después, la consola solo muestra el principio, para reconocerla.
MCP es el estándar que deja a una IA usar herramientas. La dirección del servidor es la misma para todos los clientes. En los ejemplos, cambia <domaine> por la dirección de tu consola, y la clave por la tuya.
https://<domaine>/api/mcpUn comando en tu terminal, y luego /mcp para comprobar que Velora está conectado.
claude mcp add --transport http velora https://<domaine>/api/mcp \
--header "Authorization: Bearer vlr_live_…"Abre Ajustes, Desarrollador, Editar configuración. Pega este bloque en claude_desktop_config.json y reinicia Claude. El relé mcp-remote añade tu clave a cada llamada.
{
"mcpServers": {
"velora": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://<domaine>/api/mcp",
"--header", "Authorization:${VELORA_AUTH}"
],
"env": { "VELORA_AUTH": "Bearer vlr_live_…" }
}
}
}En ~/.cursor/mcp.json (o .cursor/mcp.json en un proyecto). Las herramientas aparecen en Ajustes, MCP.
{
"mcpServers": {
"velora": {
"url": "https://<domaine>/api/mcp",
"headers": { "Authorization": "Bearer vlr_live_…" }
}
}
}Los conectores MCP de ChatGPT aún no pueden enviar una clave. Usa un GPT personalizado. En Acciones, importa el esquema desde la dirección de abajo. Luego elige Autenticación, Clave API, tipo Bearer, y pega tu clave.
https://<domaine>/api/v1/openapi.jsonUna clave solo ve las herramientas de sus permisos. Las de lectura van marcadas como solo lectura: tu IA puede usarlas sin preguntarte.
| Herramienta MCP | Permiso |
|---|---|
list_creatorsLas creadoras de la agencia, las más recientes primero. Sin e-mail ni teléfono. | read:creators |
get_creatorUna creadora, con sus plataformas de venta conectadas. | read:creators |
list_salesLas ventas de OnlyFans (vía Infloww), MYM y Reveal, las más recientes primero. Nunca el nombre de los fans. | read:sales |
sales_summaryLos totales de un periodo, por modelo y por plataforma, correcciones manuales incluidas. | read:stats |
send_notificationUna notificación en la app, para una modelo o para todas. Cuentan las horas tranquilas y el límite por modelo. 50 al día como máximo para la agencia. | write:notifications |
list_shootsLas sesiones previstas en un periodo, de la más cercana a la más lejana. Nunca las notas internas. | read:shoots |
list_feedLas publicaciones del feed de la agencia, fijadas primero. | read:feed |
create_feed_draftCrea un borrador en el feed. Las modelos no ven nada hasta que tu equipo lo publique. | write:feed |
Para tus scripts y automatizaciones. Respuestas en JSON, importes en céntimos.
Cada llamada lleva la cabecera Authorization: Bearer vlr_live_…. Las llamadas desde un navegador se rechazan: llama desde un servidor.
curl https://<domaine>/api/v1/stats/summary?from=2026-10-01&to=2026-10-31 \
-H "Authorization: Bearer vlr_live_…"Una lista devuelve 50 elementos como máximo y un nextCursor. Pásalo en cursor para la página siguiente. Vale null al final.
En caso de error, la respuesta da un código y un mensaje. Los códigos: unauthorized (401), insufficient_scope y browser_not_allowed (403), not_found (404), invalid_request (400), rate_limited y notification_cap_reached (429).
{ "error": { "code": "insufficient_scope", "message": "This key lacks the read:sales scope." } }El esquema OpenAPI 3.1 completo
/api/v1/creatorsLas creadoras de la agencia, las más recientes primero. Sin e-mail ni teléfono.
| Parámetro | Tipo | Dónde |
|---|---|---|
statusSolo las creadoras en este estado. | INVITED | ACTIVE | PAUSED | URL, opcional |
tagSolo las creadoras con esta etiqueta. | string | URL, opcional |
cursorEl nextCursor de la página anterior. | string | URL, opcional |
limitTamaño de la página, de 1 a 50 (25 por defecto). | integer | URL, opcional |
/api/v1/creators/{id}Una creadora, con sus plataformas de venta conectadas.
| Parámetro | Tipo | Dónde |
|---|---|---|
idIdentificador de la creadora. | string | ruta, obligatorio |
/api/v1/salesLas ventas de OnlyFans (vía Infloww), MYM y Reveal, las más recientes primero. Nunca el nombre de los fans.
| Parámetro | Tipo | Dónde |
|---|---|---|
creatorIdSolo las ventas de esta creadora. | string | URL, opcional |
platformSolo esta plataforma. | ONLYFANS | MYM | REVEAL | URL, opcional |
fromVentas a partir de este instante (ISO 8601). | date-time | URL, opcional |
toVentas antes de este instante (ISO 8601). | date-time | URL, opcional |
cursorEl nextCursor de la página anterior. | string | URL, opcional |
limitTamaño de la página, de 1 a 50 (25 por defecto). | integer | URL, opcional |
/api/v1/stats/summaryLos totales de un periodo, por modelo y por plataforma, correcciones manuales incluidas.
| Parámetro | Tipo | Dónde |
|---|---|---|
fromPrimer día, AAAA-MM-DD, en la zona horaria de la agencia (por defecto hace 29 días). | string | URL, opcional |
toÚltimo día incluido (por defecto hoy). 366 días como máximo. | string | URL, opcional |
/api/v1/notificationsUna notificación en la app, para una modelo o para todas. Cuentan las horas tranquilas y el límite por modelo. 50 al día como máximo para la agencia.
| Parámetro | Tipo | Dónde |
|---|---|---|
titleTítulo, 60 caracteres como máximo. | string | cuerpo JSON, obligatorio |
bodyTexto, 240 caracteres como máximo. | string | cuerpo JSON, obligatorio |
creatorIdEnviar solo a esta creadora. | string | cuerpo JSON, opcional |
alltrue para enviar a todas las creadoras activas. Indica creatorId o all, no los dos. | boolean | cuerpo JSON, opcional |
linkPathPantalla de la app que se abre, por ejemplo /feed. | string | cuerpo JSON, opcional |
/api/v1/shootsLas sesiones previstas en un periodo, de la más cercana a la más lejana. Nunca las notas internas.
| Parámetro | Tipo | Dónde |
|---|---|---|
fromSesiones que empiezan a partir de este instante (por defecto ahora). | date-time | URL, opcional |
toSesiones que empiezan antes de este instante (por defecto 31 días después, 62 como máximo). | date-time | URL, opcional |
creatorIdSolo las sesiones de esta creadora. | string | URL, opcional |
statusSolo las sesiones en este estado. | SCHEDULED | DONE | CANCELED | URL, opcional |
cursorEl nextCursor de la página anterior. | string | URL, opcional |
limitTamaño de la página, de 1 a 50 (25 por defecto). | integer | URL, opcional |
/api/v1/feedLas publicaciones del feed de la agencia, fijadas primero.
| Parámetro | Tipo | Dónde |
|---|---|---|
statusSolo las publicaciones en este estado (por defecto todo menos ARCHIVED). | DRAFT | SCHEDULED | PUBLISHED | ARCHIVED | URL, opcional |
cursorEl nextCursor de la página anterior. | string | URL, opcional |
limitTamaño de la página, de 1 a 50 (25 por defecto). | integer | URL, opcional |
/api/v1/feedCrea un borrador en el feed. Las modelos no ven nada hasta que tu equipo lo publique.
| Parámetro | Tipo | Dónde |
|---|---|---|
typeANNOUNCEMENT por defecto. | ANNOUNCEMENT | POLL | WIN | TIP | EVENT | cuerpo JSON, opcional |
titleTítulo, 120 caracteres como máximo. | string | cuerpo JSON, obligatorio |
bodyTexto, 4.000 caracteres como máximo. | string | cuerpo JSON, opcional |
emojiUn emoji que se muestra con la publicación. | string | cuerpo JSON, opcional |
audienceCreatorIdsLas creadoras que la verán. Vacío = todas. | string[] | cuerpo JSON, opcional |
pollOptionsObligatorio para un POLL: de 2 a 6 respuestas. | string[] | cuerpo JSON, opcional |
Tu primera clave en dos minutos, desde la consola.