Nuestro servidor Model Context Protocol da a los asistentes de inteligencia artificial acceso directo a la producción musical. El agente reúne los detalles en la conversación, encarga la canción y entrega el resultado, sin que tengas que escribir una línea de código.
Actualizado: 2026-09-16
Las claves se entregan a mano. Basta un correo breve con tu proyecto, el volumen previsto y los idiomas, y la activación suele tardar un día laborable.
El Model Context Protocol es el estándar abierto con el que los asistentes de inteligencia artificial hablan con sistemas externos. Nuestro servidor expone toda la producción musical como herramientas MCP: el agente puede crear una canción, consultar su estado, recuperar letra y audio y lanzar una regeneración.
La ventaja frente a la API REST es la conversación. Un agente sabe qué detalles faltan para que la canción sea personal y los pide por su cuenta. El usuario cuenta cosas de su padre, el agente hace de eso un briefing y encarga la canción.
El servidor corre en https://mcp.cancionalmedida.es y habla HTTP con Server-Sent Events, el transporte que todos los clientes actuales soportan. Usa las mismas claves que la API REST, así que quien ya integra no necesita credenciales nuevas.
También por MCP la facturación es por canción terminada, actualmente 29,99 €. La letra y la vista previa de 45 segundos siguen siendo gratuitas.
Las claves se entregan a mano, igual que para la API REST. Escribe a songs@maxkuch.com indicando qué quieres construir, el volumen previsto y los idiomas. La activación suele tardar un día laborable.
Recibirás una clave de prueba con el prefijo sk_test_ y una en vivo con el prefijo sk_live_. Con la clave de prueba todas las herramientas funcionan igual, pero no arranca ninguna producción real y no cuesta nada.
Quien ya tenga una clave de API no necesita nada más: la misma clave abre el servidor MCP.
La dirección del servidor es https://mcp.cancionalmedida.es/sse. La autenticación se hace con un token bearer en la cabecera Authorization, exactamente igual que en la API REST.
El servidor implementa la versión de protocolo 2026-03-26 y anuncia sus capacidades durante el saludo inicial: herramientas, recursos y prompts. Los clientes que solo conocen versiones antiguas siguen siendo compatibles, simplemente sin los prompts.
curl https://mcp.cancionalmedida.es/health
Casi todos los clientes MCP se configuran con un pequeño archivo JSON. Aquí están las tres variantes más frecuentes, cada una con la clave en su sitio.
claude mcp add --transport http songs \
https://mcp.cancionalmedida.es/mcp \
--header "Authorization: Bearer $SONG_API_KEY"
{
"mcpServers": {
"songs": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.cancionalmedida.es/mcp",
"--header", "Authorization: Bearer ${SONG_API_KEY}"],
"env": { "SONG_API_KEY": "sk_live_..." }
}
}
}
{
"mcpServers": {
"songs": {
"url": "https://mcp.cancionalmedida.es/mcp",
"headers": { "Authorization": "Bearer sk_live_..." }
}
}
}
Tras reiniciar el cliente, las herramientas aparecen en la lista. Si no lo hacen, la causa casi siempre es una clave que falta o un JSON con un error de sintaxis.
El servidor pone siete herramientas a disposición. Son pocas a propósito y tienen nombres claros, para que un agente elija bien.
| Herramienta | Escribe | Para qué sirve |
|---|---|---|
| create_song | Encarga una canción nueva. Ocasión, nombre y detalles son obligatorios. | |
| get_song | Devuelve el estado actual, la letra y los enlaces disponibles. | |
| list_songs | Lista las canciones recientes de la cuenta, filtrable por estado. | |
| get_lyrics | Devuelve la letra completa como texto plano. | |
| regenerate_song | Lanza una regeneración gratuita, con indicación opcional. | |
| get_checkout_link | Genera un enlace de pago para una canción y lo devuelve como URL, para que el agente pueda pasarlo en la conversación. | |
| list_options | Devuelve los valores válidos de ocasión, ambiente, estilo, voz e idioma. |
Solo create_song y regenerate_song cambian algo. Los clientes que piden confirmación antes de operaciones de escritura la pedirán justo en esas dos.
Es la herramienta central. Su esquema es deliberadamente explícito, para que el agente sepa qué información debe reunir primero.
{
"name": "create_song",
"description": "Write and produce a personalised song. Returns immediately with a song id; the recording is ready a few minutes later.",
"inputSchema": {
"type": "object",
"required": ["occasion", "recipient_name", "details"],
"properties": {
"occasion": { "type": "string", "enum": ["birthday", "wedding", "anniversary", "farewell", "funeral", "christening", "graduation", "christmas", "declaration", "other"] },
"recipient_name": { "type": "string", "maxLength": 80 },
"relationship": { "type": "string", "maxLength": 80 },
"language": { "type": "string", "default": "es" },
"mood": { "type": "string", "enum": ["happy", "warm", "funny", "romantic", "gentle", "epic", "surprise_me"] },
"style": { "type": "string" },
"voice": { "type": "string", "enum": ["female", "male", "duet", "choir", "childrens", "surprise_me"] },
"details": { "type": "string", "minLength": 40, "maxLength": 4000 },
"wait": { "type": "boolean", "default": false, "description": "Block until the preview is ready, at most 10 minutes." }
}
}
}
El campo details es el decisivo. La descripción del esquema le dice claramente al agente que hacen falta detalles concretos, no adjetivos. Un buen agente no pregunta "cómo es tu padre" sino "qué dice siempre cuando algo le molesta".
{
"content": [
{ "type": "text", "text": "Song sng_3n8Kd2ZpQv for Anna is written. Lyrics below, the 45 second preview is ready." },
{ "type": "resource", "resource": { "uri": "song://sng_3n8Kd2ZpQv/lyrics", "mimeType": "text/plain" } },
{ "type": "resource", "resource": { "uri": "song://sng_3n8Kd2ZpQv/preview", "mimeType": "audio/mpeg" } }
],
"structuredContent": {
"id": "sng_3n8Kd2ZpQv",
"status": "preview_ready",
"preview_url": "https://cdn.cancionalmedida.es/preview/sng_3n8Kd2ZpQv.mp3",
"paid": false
},
"isError": false
}
La respuesta contiene texto para el agente y datos estructurados para el código. La llamada vuelve enseguida, la producción sigue en segundo plano.
Cada herramienta devuelve dos cosas: un bloque de texto legible que el agente puede transmitir tal cual, y structuredContent con los mismos datos en forma utilizable por la máquina. Un agente puede así responder al usuario sin perder los identificadores.
Los identificadores de canción son los mismos que en la API REST. Una canción creada por MCP se recupera después por REST y al revés, lo que viene bien cuando el agente reúne el briefing y tu backend se ocupa de la entrega.
Además de las herramientas, el servidor ofrece recursos, es decir, contenidos de solo lectura que un cliente puede cargar en su contexto sin llamar a una herramienta.
song://sng_3n8Kd2ZpQv the song object as JSON
song://sng_3n8Kd2ZpQv/lyrics the full lyrics as plain text
song://sng_3n8Kd2ZpQv/preview the first 45 seconds as audio/mpeg
song://sng_3n8Kd2ZpQv/audio the full recording, only after payment
song://options contiene todos los valores válidos, song://guide/details una guía breve sobre qué hace personal a una canción, song://songs/{id} una canción concreta con letra y estado. La guía está pensada sobre todo para agentes: hace bastante más probable que pregunten lo correcto.
El servidor trae prompts listos que un cliente puede ofrecer como comandos. Le ahorran al usuario la explicación de qué tiene que contar.
{
"name": "birthday_song",
"description": "Collects the five things a birthday song needs and then creates it.",
"arguments": [
{ "name": "recipient_name", "required": true },
{ "name": "age", "required": false },
{ "name": "details", "required": false }
]
}
gather_song_details lleva al agente por un diálogo breve que acaba en un briefing utilizable. write_song_brief convierte un texto existente, por ejemplo el correo de un cliente, en un briefing estructurado. suggest_occasion ayuda cuando la ocasión no encaja en las categorías habituales.
Así se ve en la práctica, con un usuario que aún no sabe bien qué quiere.
User: My sister Anna turns 34 on Friday. She climbs, she is always late,
and she calls everyone chef. Make her a song.
Claude: [calls create_song with occasion=birthday, recipient_name=Anna,
relationship=sister, mood=funny, details="climbs every weekend,
always ten minutes late, calls everyone chef"]
Done. Here are the lyrics, and the first 45 seconds are playable
right away. Should the chorus lean more on the climbing or more
on the chef thing?
User: More chef.
Claude: [calls regenerate_song with keep_lyrics=false,
note="put the chef running gag in the chorus"]
New version is running, about five minutes.
Lo importante está en el medio. El agente no se queda con la primera descripción general sino que pregunta dos veces más, y son justo esas dos preguntas las que convierten una canción sobre cualquiera en una canción sobre esta persona.
Un agente no puede iniciar un pago. Solo puede generar un enlace de pago y pasarlo, el cobro ocurre en el navegador. Está construido así a propósito: un modelo no debe tomar una decisión de compra que una persona no ha visto.
get_checkout_link devuelve una URL válida durante 24 horas. Tras el pago la canción pasa al estado complete y en la siguiente llamada a get_song la grabación completa está lista. El agente no tiene que suscribirse a nada, basta con una llamada posterior.
Quien gestiona el pago en su propio sistema y solo nos factura puede pedir que le abramos la vía directa de la API REST. Entonces el enlace de pago desaparece y la canción se libera de inmediato.
Cada clave lleva permisos. Lo estándar es lectura y escritura sin acceso a la facturación, lo que encaja con la mayoría de los agentes.
| Ámbito | Valor | Permite |
|---|---|---|
| songs:read | Consultar canciones, listarlas, leer las letras. Sin este permiso el servidor anuncia una lista de herramientas vacía. | |
| songs:write | Crear canciones y regenerarlas. Genera costes de producción. | |
| billing | Crear enlaces de pago y leer el estado del pago. Solo hace falta si el agente debe pasar enlaces. |
Las herramientas cuyo permiso falta ni siquiera aparecen en la lista de herramientas. Resulta más agradable que un mensaje de error en mitad de la conversación, porque así el modelo no ofrece nada que de todos modos no podría hacer.
Los errores llegan como resultado de herramienta con isError: true y un texto comprensible, no como error de protocolo. Así el agente puede reaccionar y explicarle al usuario qué falta, en vez de interrumpirse.
{
"content": [
{ "type": "text", "text": "The song is not paid for yet, so the full recording cannot be handed over. The checkout link is https://pay.cancionalmedida.es/c/cs_live_8Hd2Kq..." }
],
"isError": true
}
Los códigos de error corresponden a los de la API REST: validation_error, rate_limit, not_found, permission_error, api_error. El texto está redactado para que un agente pueda transmitirlo palabra por palabra.
Rigen los mismos límites que en la API REST: 60 llamadas a herramientas por minuto y clave y diez producciones simultáneas. Las llamadas adicionales quedan en cola en vez de fallar.
Una sesión MCP queda abierta mientras el cliente la mantenga. Tras 30 minutos de inactividad cerramos la conexión; cualquier cliente actual se reconecta solo.
Si el volumen crece, escríbenos y subimos los límites.
Lo que el agente nos transmite lo usamos para producir esa canción y para nada más. Sin entrenar modelos propios con los contenidos de tus usuarios.
Los datos introducidos y las canciones terminadas se quedan 90 días; después se borran. Para borrar antes está DELETE /v1/songs/{id} en la API REST.
Recuerda a los usuarios que están contando cosas privadas sobre personas reales. Un agente debería pedir detalles concretos sin empujar hacia información sensible de salud o finanzas.
El servidor MCP corre sobre la misma infraestructura que la API REST. No hay un componente aparte que instalar o actualizar: añadimos herramientas nuevas de forma aditiva, las existentes se mantienen estables.
Un cliente debería leer la lista de herramientas al arrancar en lugar de escribirla en el código. Es la forma habitual y te trae las novedades sin cambios.
Para los mantenimientos planificados avisamos por correo a las cuentas activas con al menos 48 horas de antelación. Hasta ahora no ha habido ventanas de parada planificadas.
Preguntas sobre instalación, ámbitos, límites más altos o casos especiales: songs@maxkuch.com. Para problemas técnicos indica el nombre de la herramienta y la hora aproximada de la llamada.
Quien prefiera integrar directamente en lugar de pasar por un agente encuentra la API REST en /api/. Ambos caminos usan las mismas claves y los mismos identificadores.
Las claves se entregan a mano. Basta un correo breve con tu proyecto, el volumen previsto y los idiomas, y la activación suele tardar un día laborable.