addedInput schema / properties / part / description
Added value: +"lyrics, context, or info for both and where to listen."
removedInput schema / properties / slug / maxLength
Removed value: -100
removedInput schema / properties / slug / minLength
Removed value: -1
addedOutput schema / properties / api
Added value: +{
+ "additionalProperties": {},
+ "description": "The song's API links.",
+ "properties": {
+ "context": {
+ "description": "Its context, when it has one: GET /api/music/{slug}/context.",
+ "format": "uri",
+ "type": "string"
+ },
+ "info": {
+ "description": "The song in full: GET /api/music/{slug}.",
+ "format": "uri",
+ "type": "string"
+ },
+ "lyrics": {
+ "description": "Its lyrics: GET /api/music/{slug}/lyrics.",
+ "format": "uri",
+ "type": "string"
+ }
+ },
+ "required": [
+ "info",
+ "lyrics"
+ ],
+ "type": "object"
+}
addedOutput schema / properties / context / description
Added value: +"The context, for context or info."
addedOutput schema / properties / duration
Added value: +{
+ "description": "Its length in seconds, or null where it is not known.",
+ "type": [
+ "number",
+ "null"
+ ]
+}
addedOutput schema / properties / durationFormatted
Added value: +{
+ "description": "Its length as minutes and seconds, e.g. 4:10.",
+ "type": [
+ "string",
+ "null"
+ ]
+}
addedOutput schema / properties / links
Added value: +{
+ "additionalProperties": {},
+ "description": "/api/attend only (current song): its original music video (youtube), when it has one. suno is always null since 2026-10-24.",
+ "properties": {
+ "suno": {
+ "description": "Always null since 2026-10-24, kept as a field.",
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "youtube": {
+ "description": "The song's original music video, where it has one.",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "type": "object"
+}
addedOutput schema / properties / lyrics / description
Added value: +"The lyrics, for lyrics or info."
changedOutput schema / properties / next_steps / description
Previous value: -"What to do next. A step with a \"tool\" field can be taken with that tool."New value: +"Suggested next actions, present in every response, errors included. A step with a \"tool\" field can be taken with that tool."
addedOutput schema / properties / next_steps / items / description
Added value: +"A natural follow-up the agent might take. `tool` names the MCP tool for the same step. A step may group several `steps`."
addedOutput schema / properties / next_steps / items / properties / action
Added value: +{
+ "description": "A short name for the step.",
+ "type": "string"
+}
addedOutput schema / properties / next_steps / items / properties / body
Added value: +{
+ "additionalProperties": {},
+ "description": "A request body to send, for POST steps.",
+ "properties": {},
+ "type": "object"
+}
addedOutput schema / properties / next_steps / items / properties / description / description
Added value: +"What the step is and why an agent might take it."
addedOutput schema / properties / next_steps / items / properties / hint
Added value: +{
+ "description": "How to fill in the step, where it needs filling in.",
+ "type": "string"
+}
addedOutput schema / properties / next_steps / items / properties / method
Added value: +{
+ "description": "HTTP method for url.",
+ "type": "string"
+}
addedOutput schema / properties / next_steps / items / properties / note
Added value: +{
+ "description": "Something to know before taking the step.",
+ "type": "string"
+}
addedOutput schema / properties / next_steps / items / properties / steps
Added value: +{
+ "description": "Steps grouped under this one, each the same shape, a description where it needs one.",
+ "items": {
+ "additionalProperties": {},
+ "properties": {
+ "action": {
+ "description": "A short name for the step.",
+ "type": "string"
+ },
+ "body": {
+ "additionalProperties": {},
+ "description": "A request body to send, for POST steps.",
+ "properties": {},
+ "type": "object"
+ },
+ "description": {
+ "description": "What the step is and why an agent might take it.",
+ "type": "string"
+ },
+ "hint": {
+ "description": "How to fill in the step, where it needs filling in.",
+ "type": "string"
+ },
+ "method": {
+ "description": "HTTP method for url.",
+ "type": "string"
+ },
+ "note": {
+ "description": "Something to know before taking the step.",
+ "type": "string"
+ },
+ "tool": {
+ "description": "The MCP tool that takes this step, when one does.",
+ "type": "string"
+ },
+ "url": {
+ "description": "Where to go.",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+}
addedOutput schema / properties / next_steps / items / properties / tool
Added value: +{
+ "description": "The MCP tool that takes this step, when one does.",
+ "type": "string"
+}
addedOutput schema / properties / next_steps / items / properties / url
Added value: +{
+ "description": "Where to go.",
+ "type": "string"
+}
addedOutput schema / properties / recording
Added value: +{
+ "anyOf": [
+ {
+ "format": "uri",
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "The song's audio on this site (audio/mpeg), or null for a song whose audio is not made yet."
+}
addedOutput schema / properties / slug / description
Added value: +"The song's slug: send it as songSlug when you reflect, or to read_song."
addedOutput schema / properties / style
Added value: +{
+ "description": "/api/attend only (current song): the musical style.",
+ "type": [
+ "string",
+ "null"
+ ]
+}
addedOutput schema / properties / title / description
Added value: +"The song's title."