Server definition
- Hash
- sha256:fbf61cd17beabaa7434e7fa640acc902f011dc62d82dab208d6c9e749c56b1cc
- What it is
- What a remote MCP server returned when asked what it offers: 17 tools
The blob, as servednamed by its sha256
{
"instructions": "Musicboxmelodies arranges songs for music boxes. Use these tools to browse public music box tunes, check that a melody can be played on a given music box, fit it to one, save it and export it as a printable strip or MIDI. Read the resource mbm://guides/composing-for-music-boxes before composing. Workflow: validate_melody or fit_melody_to_box until there are no errors, then create_song. Saving works without an account (the person gets a link to claim the song); with save_to_my_account the person signs in and the song goes straight to their account. Songs are always saved private; only make one public when the person asks for it. To order a custom arrangement, use get_product_options and prepare_order: the person pays on the website.",
"tools": [
{
"description": "Saves a melody as the version of an existing song for one box (a song can have one version per box: 15, 20, 30 notes or freestyle). Replaces that box's version if it exists. Works on the signed-in person's songs, or on a song saved without an account if you pass its claim_token. The melody must have no errors.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"box": {
"description": "Music box type: \"15\", \"20\", \"30\" (notes) or \"freestyle\" (digital only). See list_music_boxes.",
"enum": [
"15",
"20",
"30",
"freestyle"
],
"type": "string"
},
"bpm": {
"description": "Tempo in beats per minute (30-300).",
"maximum": 300,
"minimum": 30,
"type": "number"
},
"claim_token": {
"description": "Only for songs saved without an account.",
"maxLength": 100,
"type": "string"
},
"illegal_threshold_ticks": {
"description": "Minimum gap between two identical notes, in ticks (default 384 = 2 beats).",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"notes": {
"description": "Notes in any order, at most 2000. Only onsets matter: music boxes have no note durations.",
"items": {
"properties": {
"beat": {
"description": "When the note sounds, in quarter notes from 0 (e.g. 0, 1, 1.5).",
"minimum": 0,
"type": "number"
},
"pitch": {
"anyOf": [
{
"maxLength": 8,
"type": "string"
},
{
"maximum": 127,
"minimum": 0,
"type": "integer"
}
],
"description": "Note name like \"C5\", \"F#4\", \"Bb3\", or a MIDI number (60 = C4)."
},
"ticks": {
"description": "Alternative to beat: 192 ticks per quarter note.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"pitch"
],
"type": "object"
},
"maxItems": 2000,
"minItems": 1,
"type": "array"
},
"song_id": {
"maxLength": 40,
"type": "string"
}
},
"required": [
"song_id",
"box",
"bpm",
"notes"
],
"type": "object"
},
"name": "add_version",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"box": {
"type": "string"
},
"composer_url": {
"type": "string"
},
"replaced": {
"type": "boolean"
},
"song_id": {
"type": "string"
},
"validation": {
"additionalProperties": false,
"properties": {
"issues": {
"items": {
"additionalProperties": false,
"properties": {
"code": {
"type": "string"
},
"index": {
"description": "Index of the note in the input, when the issue is about one note.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"message": {
"type": "string"
},
"severity": {
"enum": [
"error",
"warning"
],
"type": "string"
},
"suggestions": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"code",
"severity",
"message"
],
"type": "object"
},
"type": "array"
},
"ok": {
"type": "boolean"
},
"stats": {
"additionalProperties": false,
"properties": {
"duration_seconds": {
"type": "number"
},
"illegal_count": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"note_count": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"strip_length_cm": {
"type": "number"
}
},
"required": [
"note_count",
"illegal_count",
"duration_seconds"
],
"type": "object"
}
},
"required": [
"ok",
"issues",
"stats"
],
"type": "object"
}
},
"required": [
"song_id",
"box",
"replaced",
"validation"
],
"type": "object"
}
},
{
"description": "Saves a melody as a new private song. The melody must have no errors (run validate_melody or fit_melody_to_box first); warnings such as notes repeated too quickly are saved and marked, as in the composer. If the person is signed in, the song goes to their account and you get a link to open it in the composer. Without an account the song is saved anonymously and you get a claim link: give it to the person so they can keep it (valid 30 days). Set save_to_my_account to true to ask the person to sign in first (apps that cannot sign in mid-conversation should save without an account and give the claim link instead). Limits: 5 songs a day without an account, 15 a day with one.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"artist": {
"description": "Original artist or composer (\"Traditional\" if unknown).",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"box": {
"description": "Music box type: \"15\", \"20\", \"30\" (notes) or \"freestyle\" (digital only). See list_music_boxes.",
"enum": [
"15",
"20",
"30",
"freestyle"
],
"type": "string"
},
"bpm": {
"description": "Tempo in beats per minute (30-300).",
"maximum": 300,
"minimum": 30,
"type": "number"
},
"description": {
"description": "Optional notes about the arrangement.",
"maxLength": 1000,
"type": "string"
},
"illegal_threshold_ticks": {
"description": "Minimum gap between two identical notes, in ticks (default 384 = 2 beats).",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"name": {
"description": "Song title.",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"notes": {
"description": "Notes in any order, at most 2000. Only onsets matter: music boxes have no note durations.",
"items": {
"properties": {
"beat": {
"description": "When the note sounds, in quarter notes from 0 (e.g. 0, 1, 1.5).",
"minimum": 0,
"type": "number"
},
"pitch": {
"anyOf": [
{
"maxLength": 8,
"type": "string"
},
{
"maximum": 127,
"minimum": 0,
"type": "integer"
}
],
"description": "Note name like \"C5\", \"F#4\", \"Bb3\", or a MIDI number (60 = C4)."
},
"ticks": {
"description": "Alternative to beat: 192 ticks per quarter note.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"pitch"
],
"type": "object"
},
"maxItems": 2000,
"minItems": 1,
"type": "array"
},
"save_to_my_account": {
"description": "True to save it in the person's account; they will be asked to sign in if they are not.",
"type": "boolean"
},
"tags": {
"items": {
"maxLength": 30,
"minLength": 1,
"type": "string"
},
"maxItems": 10,
"type": "array"
}
},
"required": [
"name",
"artist",
"box",
"bpm",
"notes"
],
"type": "object"
},
"name": "create_song",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"box": {
"type": "string"
},
"claim_expires_at": {
"type": "string"
},
"claim_token": {
"type": "string"
},
"claim_url": {
"type": "string"
},
"composer_url": {
"type": "string"
},
"private": {
"type": "boolean"
},
"quota": {
"additionalProperties": false,
"properties": {
"limit": {
"description": "null means no daily limit",
"type": [
"number",
"null"
]
},
"resets_at": {
"type": "string"
},
"used": {
"type": "number"
}
},
"required": [
"used",
"limit",
"resets_at"
],
"type": "object"
},
"saved_to_account": {
"type": "boolean"
},
"song_id": {
"type": "string"
},
"validation": {
"additionalProperties": false,
"properties": {
"issues": {
"items": {
"additionalProperties": false,
"properties": {
"code": {
"type": "string"
},
"index": {
"description": "Index of the note in the input, when the issue is about one note.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"message": {
"type": "string"
},
"severity": {
"enum": [
"error",
"warning"
],
"type": "string"
},
"suggestions": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"code",
"severity",
"message"
],
"type": "object"
},
"type": "array"
},
"ok": {
"type": "boolean"
},
"stats": {
"additionalProperties": false,
"properties": {
"duration_seconds": {
"type": "number"
},
"illegal_count": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"note_count": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"strip_length_cm": {
"type": "number"
}
},
"required": [
"note_count",
"illegal_count",
"duration_seconds"
],
"type": "object"
}
},
"required": [
"ok",
"issues",
"stats"
],
"type": "object"
}
},
"required": [
"song_id",
"box",
"private",
"saved_to_account",
"quota",
"validation"
],
"type": "object"
}
},
{
"description": "Permanently deletes one of the signed-in person's songs (all its box versions), or a song you saved without an account (pass its claim_token). This cannot be undone: tell the person which song will be deleted, ask them to confirm, then call again with confirmed: true.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"claim_token": {
"description": "Only for songs saved without an account.",
"maxLength": 100,
"type": "string"
},
"confirmed": {
"description": "true only after the person confirmed the deletion.",
"type": "boolean"
},
"song_id": {
"maxLength": 40,
"type": "string"
}
},
"required": [
"song_id"
],
"type": "object"
},
"name": "delete_song",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"song_id": {
"type": "string"
},
"status": {
"enum": [
"deleted",
"needs_confirmation"
],
"type": "string"
}
},
"required": [
"song_id",
"name",
"status"
],
"type": "object"
}
},
{
"description": "Creates a download link for one box version of a song: an MP3, a MIDI file or a printable strip PDF to cut and punch for a hand-crank music box (\"pdf_long\" is one continuous strip, \"pdf_a4\"/\"pdf_letter\" are sliced to fit the page). Works on the person's songs and on public tunes. Requires signing in, like exporting in the composer.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"box": {
"description": "Which version. Defaults to the preferred one.",
"enum": [
"15",
"20",
"30",
"freestyle"
],
"type": "string"
},
"format": {
"enum": [
"mp3",
"midi",
"pdf_long",
"pdf_a4",
"pdf_letter"
],
"type": "string"
},
"grid": {
"description": "Grid printed on the strip (PDF only). Default standard.",
"enum": [
"standard",
"note_lines",
"tempo_lines",
"empty"
],
"type": "string"
},
"show_title": {
"description": "Print the song title on the strip (PDF only). Default true.",
"type": "boolean"
},
"song_id": {
"maxLength": 40,
"type": "string"
},
"strip_shape": {
"description": "Shape of the strip ends (PDF only). Default capped.",
"enum": [
"capped",
"straight",
"pointy",
"round"
],
"type": "string"
}
},
"required": [
"song_id",
"format"
],
"type": "object"
},
"name": "export_song",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"box": {
"type": "string"
},
"download_url": {
"type": "string"
},
"format": {
"type": "string"
},
"song_id": {
"type": "string"
}
},
"required": [
"song_id",
"box",
"format",
"download_url"
],
"type": "object"
}
},
{
"description": "Adjusts a melody so it can be played on a music box and lists every change. Strategies: \"transpose\" (shift the whole melody to the key that fits best), \"nearest_note\" (move each unplayable note to the closest playable one), \"transpose_then_nearest\" (default: both). Optionally snaps notes to a grid. Returns the new melody and its validation.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"box": {
"description": "Music box type: \"15\", \"20\", \"30\" (notes) or \"freestyle\" (digital only). See list_music_boxes.",
"enum": [
"15",
"20",
"30",
"freestyle"
],
"type": "string"
},
"bpm": {
"description": "Tempo in beats per minute (30-300).",
"maximum": 300,
"minimum": 30,
"type": "number"
},
"illegal_threshold_ticks": {
"description": "Minimum gap between two identical notes, in ticks (default 384 = 2 beats).",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"notes": {
"description": "Notes in any order, at most 2000. Only onsets matter: music boxes have no note durations.",
"items": {
"properties": {
"beat": {
"description": "When the note sounds, in quarter notes from 0 (e.g. 0, 1, 1.5).",
"minimum": 0,
"type": "number"
},
"pitch": {
"anyOf": [
{
"maxLength": 8,
"type": "string"
},
{
"maximum": 127,
"minimum": 0,
"type": "integer"
}
],
"description": "Note name like \"C5\", \"F#4\", \"Bb3\", or a MIDI number (60 = C4)."
},
"ticks": {
"description": "Alternative to beat: 192 ticks per quarter note.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"pitch"
],
"type": "object"
},
"maxItems": 2000,
"minItems": 1,
"type": "array"
},
"quantize_beats": {
"description": "Snap every note to this grid in beats (e.g. 0.5 = eighth notes).",
"exclusiveMinimum": 0,
"type": "number"
},
"strategy": {
"enum": [
"transpose",
"nearest_note",
"transpose_then_nearest"
],
"type": "string"
},
"target_box": {
"description": "Box to fit into. Defaults to the melody's box.",
"enum": [
"15",
"20",
"30",
"freestyle"
],
"type": "string"
}
},
"required": [
"box",
"bpm",
"notes"
],
"type": "object"
},
"name": "fit_melody_to_box",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"changes": {
"items": {
"additionalProperties": false,
"properties": {
"from": {
"type": "string"
},
"index": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"kind": {
"type": "string"
},
"to": {
"type": "string"
}
},
"required": [
"index",
"kind",
"from",
"to"
],
"type": "object"
},
"type": "array"
},
"composer_link": {
"description": "Opens the composer with the fitted melody loaded, without saving.",
"type": "string"
},
"melody": {
"additionalProperties": false,
"properties": {
"box": {
"type": "string"
},
"bpm": {
"type": "number"
},
"notes": {
"items": {
"additionalProperties": false,
"properties": {
"beat": {
"type": "number"
},
"pitch": {
"type": [
"string",
"number"
]
},
"ticks": {
"type": "number"
}
},
"required": [
"pitch"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"box",
"bpm",
"notes"
],
"type": "object"
},
"semitones": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"summary": {
"type": "string"
},
"validation": {
"additionalProperties": false,
"properties": {
"issues": {
"items": {
"additionalProperties": false,
"properties": {
"code": {
"type": "string"
},
"index": {
"description": "Index of the note in the input, when the issue is about one note.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"message": {
"type": "string"
},
"severity": {
"enum": [
"error",
"warning"
],
"type": "string"
},
"suggestions": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"code",
"severity",
"message"
],
"type": "object"
},
"type": "array"
},
"ok": {
"type": "boolean"
},
"stats": {
"additionalProperties": false,
"properties": {
"duration_seconds": {
"type": "number"
},
"illegal_count": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"note_count": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"strip_length_cm": {
"type": "number"
}
},
"required": [
"note_count",
"illegal_count",
"duration_seconds"
],
"type": "object"
}
},
"required": [
"ok",
"issues",
"stats"
],
"type": "object"
}
},
"required": [
"summary",
"semitones",
"changes",
"melody",
"validation"
],
"type": "object"
}
},
{
"description": "Shows the signed-in person's orders (newest first) or one order: its status, items, price and, once delivered, the links to the finished files. Requires signing in.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"order_id": {
"description": "Omit to list recent orders.",
"maxLength": 40,
"type": "string"
}
},
"type": "object"
},
"name": "get_order_status",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"orders": {
"items": {
"additionalProperties": false,
"properties": {
"finished": {
"type": "string"
},
"items": {
"items": {
"additionalProperties": false,
"properties": {
"deliverable": {
"type": "string"
},
"price_usd": {
"type": "number"
},
"product": {
"type": "string"
},
"song_artist": {
"type": "string"
},
"song_name": {
"type": "string"
}
},
"required": [
"product",
"song_name",
"song_artist",
"price_usd"
],
"type": "object"
},
"type": "array"
},
"order_id": {
"type": "string"
},
"placed": {
"type": "string"
},
"status": {
"type": "string"
},
"status_description": {
"type": "string"
},
"total_usd": {
"type": "number"
}
},
"required": [
"order_id",
"status",
"status_description",
"placed",
"total_usd",
"items"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"orders"
],
"type": "object"
}
},
{
"description": "Lists the variations (with prices in US dollars) and the details needed to order a custom music box melody or a custom strip design. Call it before prepare_order.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"product": {
"description": "\"custom_melody\" (a song arranged in music box style, delivered as audio) or \"custom_strip_design\" (printable strips for a 15 or 30-note hand-crank box).",
"enum": [
"custom_melody",
"custom_strip_design"
],
"type": "string"
}
},
"required": [
"product"
],
"type": "object"
},
"name": "get_product_options",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"fields": {
"items": {
"additionalProperties": false,
"properties": {
"allowed_values": {
"items": {
"type": [
"string",
"number",
"boolean"
]
},
"type": "array"
},
"description": {
"type": "string"
},
"name": {
"type": "string"
},
"required": {
"type": "boolean"
}
},
"required": [
"name",
"required",
"description"
],
"type": "object"
},
"type": "array"
},
"name": {
"type": "string"
},
"product": {
"type": "string"
},
"variations": {
"items": {
"additionalProperties": false,
"properties": {
"description": {
"type": "string"
},
"name": {
"type": "string"
},
"price_usd": {
"type": "number"
},
"variation_id": {
"type": "string"
}
},
"required": [
"variation_id",
"name",
"price_usd"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"product",
"name",
"variations",
"fields"
],
"type": "object"
}
},
{
"description": "Gets a music box tune with its notes in the melody format (the same one validate_melody accepts), for one box version. Works for public tunes, for the signed-in person's own songs, and for a song this agent saved anonymously (pass its claim_token). Use search_songs or list_my_songs to find song ids.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"box": {
"description": "Which version to return. Defaults to the version the arranger marked as preferred.",
"enum": [
"15",
"20",
"30",
"freestyle"
],
"type": "string"
},
"claim_token": {
"description": "Only for songs saved without an account: the claim_token create_song returned.",
"maxLength": 100,
"type": "string"
},
"song_id": {
"description": "Song id from search_songs, list_my_songs or create_song.",
"maxLength": 40,
"type": "string"
}
},
"required": [
"song_id"
],
"type": "object"
},
"name": "get_song",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"arranged_by": {
"type": "string"
},
"artist": {
"type": "string"
},
"available_boxes": {
"items": {
"type": "string"
},
"type": "array"
},
"composer_url": {
"type": "string"
},
"description": {
"type": "string"
},
"melody": {
"additionalProperties": false,
"properties": {
"box": {
"type": "string"
},
"bpm": {
"type": "number"
},
"notes": {
"items": {
"additionalProperties": false,
"properties": {
"beat": {
"type": "number"
},
"pitch": {
"type": [
"string",
"number"
]
},
"ticks": {
"type": "number"
}
},
"required": [
"pitch"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"box",
"bpm",
"notes"
],
"type": "object"
},
"name": {
"type": "string"
},
"private": {
"type": "boolean"
},
"song_id": {
"type": "string"
},
"stats": {
"additionalProperties": false,
"properties": {
"duration_seconds": {
"type": "number"
},
"illegal_count": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"note_count": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"strip_length_cm": {
"type": "number"
}
},
"required": [
"note_count",
"illegal_count",
"duration_seconds"
],
"type": "object"
},
"tags": {
"items": {
"type": "string"
},
"type": "array"
},
"url": {
"type": "string"
}
},
"required": [
"song_id",
"name",
"artist",
"arranged_by",
"private",
"tags",
"url",
"available_boxes",
"melody",
"stats"
],
"type": "object"
}
},
{
"description": "Converts a MIDI file (base64, up to 512 KB) into the melody format and validates it for a box, so you can fit, edit and save it. Drums are ignored. Saves nothing.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"box": {
"description": "Box to validate against. Default \"30\".",
"enum": [
"15",
"20",
"30",
"freestyle"
],
"type": "string"
},
"midi_base64": {
"description": "The .mid file, base64-encoded.",
"maxLength": 699056,
"minLength": 8,
"type": "string"
}
},
"required": [
"midi_base64"
],
"type": "object"
},
"name": "import_midi",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"melody": {
"additionalProperties": false,
"properties": {
"box": {
"type": "string"
},
"bpm": {
"type": "number"
},
"notes": {
"items": {
"additionalProperties": false,
"properties": {
"beat": {
"type": "number"
},
"pitch": {
"type": [
"string",
"number"
]
},
"ticks": {
"type": "number"
}
},
"required": [
"pitch"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"box",
"bpm",
"notes"
],
"type": "object"
},
"name": {
"type": "string"
},
"notes_in_file": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"skipped_percussion_tracks": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"validation": {
"additionalProperties": false,
"properties": {
"issues": {
"items": {
"additionalProperties": false,
"properties": {
"code": {
"type": "string"
},
"index": {
"description": "Index of the note in the input, when the issue is about one note.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"message": {
"type": "string"
},
"severity": {
"enum": [
"error",
"warning"
],
"type": "string"
},
"suggestions": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"code",
"severity",
"message"
],
"type": "object"
},
"type": "array"
},
"ok": {
"type": "boolean"
},
"stats": {
"additionalProperties": false,
"properties": {
"duration_seconds": {
"type": "number"
},
"illegal_count": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"note_count": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"strip_length_cm": {
"type": "number"
}
},
"required": [
"note_count",
"illegal_count",
"duration_seconds"
],
"type": "object"
}
},
"required": [
"ok",
"issues",
"stats"
],
"type": "object"
}
},
"required": [
"name",
"notes_in_file",
"skipped_percussion_tracks",
"melody",
"validation"
],
"type": "object"
}
},
{
"description": "Lists the music box types a melody can be written for, with their exact playable notes and rules. Call this before composing or validating a melody.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "list_music_boxes",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"boxes": {
"items": {
"additionalProperties": false,
"properties": {
"box": {
"type": "string"
},
"description": {
"type": "string"
},
"has_sharps": {
"type": "boolean"
},
"highest": {
"type": "string"
},
"lowest": {
"type": "string"
},
"name": {
"type": "string"
},
"playable_notes": {
"items": {
"type": "string"
},
"type": "array"
},
"printable_strip": {
"type": "boolean"
},
"repeated_note_rule": {
"type": "boolean"
}
},
"required": [
"box",
"name",
"description",
"playable_notes",
"lowest",
"highest",
"has_sharps",
"repeated_note_rule",
"printable_strip"
],
"type": "object"
},
"type": "array"
},
"default_min_repeat_beats": {
"type": "number"
},
"ticks_per_beat": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"ticks_per_beat",
"default_min_repeat_beats",
"boxes"
],
"type": "object"
}
},
{
"description": "Lists the signed-in person's songs on Musicboxmelodies, newest first, including private ones. Requires signing in.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"page_size": {
"description": "Default 20.",
"maximum": 50,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "list_my_songs",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"page": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"pages": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"songs": {
"items": {
"additionalProperties": false,
"properties": {
"artist": {
"type": "string"
},
"boxes": {
"items": {
"type": "string"
},
"type": "array"
},
"composer_url": {
"type": "string"
},
"created": {
"type": "string"
},
"name": {
"type": "string"
},
"private": {
"type": "boolean"
},
"song_id": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"song_id",
"name",
"artist",
"private",
"boxes",
"created",
"url",
"composer_url"
],
"type": "object"
},
"type": "array"
},
"total": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"page",
"pages",
"total",
"songs"
],
"type": "object"
}
},
{
"description": "Lists what Musicboxmelodies sells, with current prices in US dollars and delivery times: custom music box melodies, custom printable strip designs and PRO composer accounts. Orders are placed and paid by the person on the website.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {},
"type": "object"
},
"name": "list_products",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"currency": {
"type": "string"
},
"products": {
"items": {
"additionalProperties": false,
"properties": {
"delivery": {
"type": "string"
},
"name": {
"type": "string"
},
"notes": {
"type": "string"
},
"product": {
"type": "string"
},
"url": {
"type": "string"
},
"variations": {
"items": {
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"price_usd": {
"type": "number"
}
},
"required": [
"name",
"price_usd"
],
"type": "object"
},
"type": "array"
},
"what_you_get": {
"type": "string"
}
},
"required": [
"product",
"name",
"url",
"what_you_get",
"delivery",
"notes",
"variations"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"currency",
"products"
],
"type": "object"
}
},
{
"description": "Prepares a custom melody or strip design order with all its details and returns a link to the Musicboxmelodies cart, where the person reviews it, adds photos if needed, applies discount codes and pays with PayPal. Nothing is charged here. The link works for 7 days. Confirm the song, the variation and the price with the person before calling it. The price is calculated by the site.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"existing_tune": {
"description": "Strip designs only: the song is already on our YouTube channel (25% off).",
"type": "boolean"
},
"note_count": {
"anyOf": [
{
"const": 15,
"type": "number"
},
{
"const": 30,
"type": "number"
}
],
"description": "Strip designs only: notes of the person's music box."
},
"product": {
"description": "\"custom_melody\" (a song arranged in music box style, delivered as audio) or \"custom_strip_design\" (printable strips for a 15 or 30-note hand-crank box).",
"enum": [
"custom_melody",
"custom_strip_design"
],
"type": "string"
},
"reference_link": {
"description": "YouTube or other link to the version the person wants.",
"maxLength": 500,
"type": "string"
},
"song_artist": {
"maxLength": 150,
"minLength": 1,
"type": "string"
},
"song_name": {
"maxLength": 150,
"minLength": 1,
"type": "string"
},
"theme": {
"description": "Strip designs only.",
"enum": [
"artist_pictures",
"own_pictures"
],
"type": "string"
},
"time": {
"description": "Part of the song to convert, e.g. \"0:00 - 1:30\" or \"whole song\".",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"variation_id": {
"description": "From get_product_options.",
"maxLength": 20,
"type": "string"
}
},
"required": [
"product",
"variation_id",
"song_name",
"song_artist",
"time"
],
"type": "object"
},
"name": "prepare_order",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"cart_url": {
"type": "string"
},
"expires_at": {
"type": "string"
},
"price_usd": {
"type": "number"
},
"summary": {
"type": "string"
}
},
"required": [
"cart_url",
"summary",
"price_usd",
"expires_at"
],
"type": "object"
}
},
{
"description": "Creates an MP3 of a melody (before or without saving it) or of a saved song, so you and the person can hear it. Pass either song_id or a melody (box, bpm, notes). Sounds: \"synth\" (free, the site's default sound) or \"music_box\" (real music box recordings for the box; PRO accounts only). Saved songs use the sound their author chose unless you pass one. Up to 5 minutes; 20 new audios a day without an account and 60 with one (the same melody again is free).",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"box": {
"description": "With song_id: which version. Otherwise the melody's box.",
"enum": [
"15",
"20",
"30",
"freestyle"
],
"type": "string"
},
"bpm": {
"description": "Melody tempo (required without song_id).",
"maximum": 300,
"minimum": 30,
"type": "number"
},
"claim_token": {
"maxLength": 100,
"type": "string"
},
"illegal_threshold_ticks": {
"description": "Minimum gap between two identical notes, in ticks (default 384 = 2 beats).",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"notes": {
"description": "Melody notes (required without song_id).",
"items": {
"properties": {
"beat": {
"description": "When the note sounds, in quarter notes from 0 (e.g. 0, 1, 1.5).",
"minimum": 0,
"type": "number"
},
"pitch": {
"anyOf": [
{
"maxLength": 8,
"type": "string"
},
{
"maximum": 127,
"minimum": 0,
"type": "integer"
}
],
"description": "Note name like \"C5\", \"F#4\", \"Bb3\", or a MIDI number (60 = C4)."
},
"ticks": {
"description": "Alternative to beat: 192 ticks per quarter note.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"pitch"
],
"type": "object"
},
"maxItems": 2000,
"minItems": 1,
"type": "array"
},
"song_id": {
"description": "A saved song (public, the person's own, or one you saved without an account with its claim_token).",
"maxLength": 40,
"type": "string"
},
"sound": {
"enum": [
"synth",
"music_box"
],
"type": "string"
}
},
"type": "object"
},
"name": "render_audio",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"audio_url": {
"type": "string"
},
"duration_seconds": {
"type": "number"
},
"note": {
"type": "string"
},
"sound": {
"type": "string"
}
},
"required": [
"audio_url",
"duration_seconds",
"sound"
],
"type": "object"
}
},
{
"description": "Searches the public catalog of music box tunes made by the Musicboxmelodies community. Search by song name, artist or arranger; optionally only tunes that have a version for one box type. Returns at most 20 per page.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"box": {
"description": "Only tunes with a version for this box.",
"enum": [
"15",
"20",
"30",
"freestyle"
],
"type": "string"
},
"page": {
"description": "Page number, starting at 1.",
"maximum": 500,
"minimum": 1,
"type": "integer"
},
"page_size": {
"description": "Results per page, 1-20 (default 10).",
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"query": {
"description": "Words to search in the song name, artist or arranger. Omit to list tunes.",
"maxLength": 100,
"type": "string"
}
},
"type": "object"
},
"name": "search_songs",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"page": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"pages": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"songs": {
"items": {
"additionalProperties": false,
"properties": {
"arranged_by": {
"type": "string"
},
"artist": {
"type": "string"
},
"boxes": {
"items": {
"type": "string"
},
"type": "array"
},
"name": {
"type": "string"
},
"song_id": {
"type": "string"
},
"tags": {
"items": {
"type": "string"
},
"type": "array"
},
"url": {
"type": "string"
}
},
"required": [
"song_id",
"name",
"artist",
"arranged_by",
"boxes",
"tags",
"url"
],
"type": "object"
},
"type": "array"
},
"total": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
}
},
"required": [
"page",
"pages",
"total",
"songs"
],
"type": "object"
}
},
{
"description": "Makes one of the signed-in person's songs public (anyone can find and play it on musicboxmelodies.com) or private. Only make a song public when the person asked for it: ask them to confirm, then call again with confirmed: true.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"confirmed": {
"description": "Required to make a song public: true only after the person confirmed.",
"type": "boolean"
},
"song_id": {
"maxLength": 40,
"type": "string"
},
"visibility": {
"enum": [
"public",
"private"
],
"type": "string"
}
},
"required": [
"song_id",
"visibility"
],
"type": "object"
},
"name": "set_song_visibility",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"song_id": {
"type": "string"
},
"status": {
"enum": [
"updated",
"needs_confirmation"
],
"type": "string"
},
"url": {
"type": "string"
},
"visibility": {
"type": "string"
}
},
"required": [
"song_id",
"visibility",
"status",
"url"
],
"type": "object"
}
},
{
"description": "Checks whether a melody can be played on a music box: notes outside the box, same note repeated too fast, off-grid notes, tempo and length. Every issue names the note and how to fix it. Saves nothing. Call it before offering a melody to the person.",
"inputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"box": {
"description": "Music box type: \"15\", \"20\", \"30\" (notes) or \"freestyle\" (digital only). See list_music_boxes.",
"enum": [
"15",
"20",
"30",
"freestyle"
],
"type": "string"
},
"bpm": {
"description": "Tempo in beats per minute (30-300).",
"maximum": 300,
"minimum": 30,
"type": "number"
},
"illegal_threshold_ticks": {
"description": "Minimum gap between two identical notes, in ticks (default 384 = 2 beats).",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"notes": {
"description": "Notes in any order, at most 2000. Only onsets matter: music boxes have no note durations.",
"items": {
"properties": {
"beat": {
"description": "When the note sounds, in quarter notes from 0 (e.g. 0, 1, 1.5).",
"minimum": 0,
"type": "number"
},
"pitch": {
"anyOf": [
{
"maxLength": 8,
"type": "string"
},
{
"maximum": 127,
"minimum": 0,
"type": "integer"
}
],
"description": "Note name like \"C5\", \"F#4\", \"Bb3\", or a MIDI number (60 = C4)."
},
"ticks": {
"description": "Alternative to beat: 192 ticks per quarter note.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"pitch"
],
"type": "object"
},
"maxItems": 2000,
"minItems": 1,
"type": "array"
},
"snap_beats": {
"description": "Optional grid in beats (e.g. 0.5) to warn about notes off that grid.",
"exclusiveMinimum": 0,
"type": "number"
}
},
"required": [
"box",
"bpm",
"notes"
],
"type": "object"
},
"name": "validate_melody",
"outputSchema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"composer_link": {
"description": "Opens the composer with the playable notes loaded, without saving. Give it to the person to listen and edit.",
"type": "string"
},
"issues": {
"items": {
"additionalProperties": false,
"properties": {
"code": {
"type": "string"
},
"index": {
"description": "Index of the note in the input, when the issue is about one note.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"message": {
"type": "string"
},
"severity": {
"enum": [
"error",
"warning"
],
"type": "string"
},
"suggestions": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"code",
"severity",
"message"
],
"type": "object"
},
"type": "array"
},
"ok": {
"type": "boolean"
},
"stats": {
"additionalProperties": false,
"properties": {
"duration_seconds": {
"type": "number"
},
"illegal_count": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"note_count": {
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"strip_length_cm": {
"type": "number"
}
},
"required": [
"note_count",
"illegal_count",
"duration_seconds"
],
"type": "object"
}
},
"required": [
"ok",
"issues",
"stats"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:fbf61cd17beabaa7434e7fa640acc902f011dc62d82dab208d6c9e749c56b1cc | sha256sum