MCPサーバー

Musicboxmelodies

com.musicboxmelodies/music-box

このMCPでできること

Searches, validates, adapts, saves, and exports melodies for 15-, 20-, and 30-note music boxes.

add_version
Add or replace a box version of a song
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.
破壊的操作あり 冪等
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['song_id', 'box', 'bpm', 'notes'], 'properties': {'box': {'enum': ['15', '20', '30', 'freestyle'], 'type': 'string', 'description': 'Music box type: "15", "20", "30" (notes) or "freestyle" (digital only). See list_music_boxes.'}, 'bpm': {'type': 'number', 'maximum': 300, 'minimum': 30, 'description': 'Tempo in beats per minute (30-300).'}, 'notes': {'type': 'array', 'items': {'type': 'object', 'required': ['pitch'], 'properties': {'beat': {'type': 'number', 'minimum': 0, 'description': 'When the note sounds, in quarter notes from 0 (e.g. 0, 1, 1.5).'}, 'pitch': {'anyOf': [{'type': 'string', 'maxLength': 8}, {'type': 'integer', 'maximum': 127, 'minimum': 0}], 'description': 'Note name like "C5", "F#4", "Bb3", or a MIDI number (60 = C4).'}, 'ticks': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Alternative to beat: 192 ticks per quarter note.'}}}, 'maxItems': 2000, 'minItems': 1, 'description': 'Notes in any order, at most 2000. Only onsets matter: music boxes have no note durations.'}, 'song_id': {'type': 'string', 'maxLength': 40}, 'claim_token': {'type': 'string', 'maxLength': 100, 'description': 'Only for songs saved without an account.'}, 'illegal_threshold_ticks': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Minimum gap between two identical notes, in ticks (default 384 = 2 beats).'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['song_id', 'box', 'replaced', 'validation'], 'properties': {'box': {'type': 'string'}, 'song_id': {'type': 'string'}, 'replaced': {'type': 'boolean'}, 'validation': {'type': 'object', 'required': ['ok', 'issues', 'stats'], 'properties': {'ok': {'type': 'boolean'}, 'stats': {'type': 'object', 'required': ['note_count', 'illegal_count', 'duration_seconds'], 'properties': {'note_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'illegal_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'strip_length_cm': {'type': 'number'}, 'duration_seconds': {'type': 'number'}}, 'additionalProperties': False}, 'issues': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'severity', 'message'], 'properties': {'code': {'type': 'string'}, 'index': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Index of the note in the input, when the issue is about one note.'}, 'message': {'type': 'string'}, 'severity': {'enum': ['error', 'warning'], 'type': 'string'}, 'suggestions': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}}, 'additionalProperties': False}, 'composer_url': {'type': 'string'}}, 'additionalProperties': False}
create_song
Save a new music box song
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.
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name', 'artist', 'box', 'bpm', 'notes'], 'properties': {'box': {'enum': ['15', '20', '30', 'freestyle'], 'type': 'string', 'description': 'Music box type: "15", "20", "30" (notes) or "freestyle" (digital only). See list_music_boxes.'}, 'bpm': {'type': 'number', 'maximum': 300, 'minimum': 30, 'description': 'Tempo in beats per minute (30-300).'}, 'name': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Song title.'}, 'tags': {'type': 'array', 'items': {'type': 'string', 'maxLength': 30, 'minLength': 1}, 'maxItems': 10}, 'notes': {'type': 'array', 'items': {'type': 'object', 'required': ['pitch'], 'properties': {'beat': {'type': 'number', 'minimum': 0, 'description': 'When the note sounds, in quarter notes from 0 (e.g. 0, 1, 1.5).'}, 'pitch': {'anyOf': [{'type': 'string', 'maxLength': 8}, {'type': 'integer', 'maximum': 127, 'minimum': 0}], 'description': 'Note name like "C5", "F#4", "Bb3", or a MIDI number (60 = C4).'}, 'ticks': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Alternative to beat: 192 ticks per quarter note.'}}}, 'maxItems': 2000, 'minItems': 1, 'description': 'Notes in any order, at most 2000. Only onsets matter: music boxes have no note durations.'}, 'artist': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Original artist or composer ("Traditional" if unknown).'}, 'description': {'type': 'string', 'maxLength': 1000, 'description': 'Optional notes about the arrangement.'}, 'save_to_my_account': {'type': 'boolean', 'description': "True to save it in the person's account; they will be asked to sign in if they are not."}, 'illegal_threshold_ticks': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Minimum gap between two identical notes, in ticks (default 384 = 2 beats).'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['song_id', 'box', 'private', 'saved_to_account', 'quota', 'validation'], 'properties': {'box': {'type': 'string'}, 'quota': {'type': 'object', 'required': ['used', 'limit', 'resets_at'], 'properties': {'used': {'type': 'number'}, 'limit': {'type': ['number', 'null'], 'description': 'null means no daily limit'}, 'resets_at': {'type': 'string'}}, 'additionalProperties': False}, 'private': {'type': 'boolean'}, 'song_id': {'type': 'string'}, 'claim_url': {'type': 'string'}, 'validation': {'type': 'object', 'required': ['ok', 'issues', 'stats'], 'properties': {'ok': {'type': 'boolean'}, 'stats': {'type': 'object', 'required': ['note_count', 'illegal_count', 'duration_seconds'], 'properties': {'note_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'illegal_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'strip_length_cm': {'type': 'number'}, 'duration_seconds': {'type': 'number'}}, 'additionalProperties': False}, 'issues': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'severity', 'message'], 'properties': {'code': {'type': 'string'}, 'index': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Index of the note in the input, when the issue is about one note.'}, 'message': {'type': 'string'}, 'severity': {'enum': ['error', 'warning'], 'type': 'string'}, 'suggestions': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}}, 'additionalProperties': False}, 'claim_token': {'type': 'string'}, 'composer_url': {'type': 'string'}, 'claim_expires_at': {'type': 'string'}, 'saved_to_account': {'type': 'boolean'}}, 'additionalProperties': False}
delete_song
Delete a song
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.
破壊的操作あり 冪等
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['song_id'], 'properties': {'song_id': {'type': 'string', 'maxLength': 40}, 'confirmed': {'type': 'boolean', 'description': 'true only after the person confirmed the deletion.'}, 'claim_token': {'type': 'string', 'maxLength': 100, 'description': 'Only for songs saved without an account.'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['song_id', 'name', 'status'], 'properties': {'name': {'type': 'string'}, 'status': {'enum': ['deleted', 'needs_confirmation'], 'type': 'string'}, 'song_id': {'type': 'string'}}, 'additionalProperties': False}
export_song
Export a song as MIDI or a printable strip
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.
読み取り専用
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['song_id', 'format'], 'properties': {'box': {'enum': ['15', '20', '30', 'freestyle'], 'type': 'string', 'description': 'Which version. Defaults to the preferred one.'}, 'grid': {'enum': ['standard', 'note_lines', 'tempo_lines', 'empty'], 'type': 'string', 'description': 'Grid printed on the strip (PDF only). Default standard.'}, 'format': {'enum': ['mp3', 'midi', 'pdf_long', 'pdf_a4', 'pdf_letter'], 'type': 'string'}, 'song_id': {'type': 'string', 'maxLength': 40}, 'show_title': {'type': 'boolean', 'description': 'Print the song title on the strip (PDF only). Default true.'}, 'strip_shape': {'enum': ['capped', 'straight', 'pointy', 'round'], 'type': 'string', 'description': 'Shape of the strip ends (PDF only). Default capped.'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['song_id', 'box', 'format', 'download_url'], 'properties': {'box': {'type': 'string'}, 'format': {'type': 'string'}, 'song_id': {'type': 'string'}, 'download_url': {'type': 'string'}}, 'additionalProperties': False}
fit_melody_to_box
Fit a melody to a music box
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.
読み取り専用
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['box', 'bpm', 'notes'], 'properties': {'box': {'enum': ['15', '20', '30', 'freestyle'], 'type': 'string', 'description': 'Music box type: "15", "20", "30" (notes) or "freestyle" (digital only). See list_music_boxes.'}, 'bpm': {'type': 'number', 'maximum': 300, 'minimum': 30, 'description': 'Tempo in beats per minute (30-300).'}, 'notes': {'type': 'array', 'items': {'type': 'object', 'required': ['pitch'], 'properties': {'beat': {'type': 'number', 'minimum': 0, 'description': 'When the note sounds, in quarter notes from 0 (e.g. 0, 1, 1.5).'}, 'pitch': {'anyOf': [{'type': 'string', 'maxLength': 8}, {'type': 'integer', 'maximum': 127, 'minimum': 0}], 'description': 'Note name like "C5", "F#4", "Bb3", or a MIDI number (60 = C4).'}, 'ticks': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Alternative to beat: 192 ticks per quarter note.'}}}, 'maxItems': 2000, 'minItems': 1, 'description': 'Notes in any order, at most 2000. Only onsets matter: music boxes have no note durations.'}, 'strategy': {'enum': ['transpose', 'nearest_note', 'transpose_then_nearest'], 'type': 'string'}, 'target_box': {'enum': ['15', '20', '30', 'freestyle'], 'type': 'string', 'description': "Box to fit into. Defaults to the melody's box."}, 'quantize_beats': {'type': 'number', 'description': 'Snap every note to this grid in beats (e.g. 0.5 = eighth notes).', 'exclusiveMinimum': 0}, 'illegal_threshold_ticks': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Minimum gap between two identical notes, in ticks (default 384 = 2 beats).'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['summary', 'semitones', 'changes', 'melody', 'validation'], 'properties': {'melody': {'type': 'object', 'required': ['box', 'bpm', 'notes'], 'properties': {'box': {'type': 'string'}, 'bpm': {'type': 'number'}, 'notes': {'type': 'array', 'items': {'type': 'object', 'required': ['pitch'], 'properties': {'beat': {'type': 'number'}, 'pitch': {'type': ['string', 'number']}, 'ticks': {'type': 'number'}}, 'additionalProperties': False}}}, 'additionalProperties': False}, 'changes': {'type': 'array', 'items': {'type': 'object', 'required': ['index', 'kind', 'from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'kind': {'type': 'string'}, 'index': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}}, 'summary': {'type': 'string'}, 'semitones': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'validation': {'type': 'object', 'required': ['ok', 'issues', 'stats'], 'properties': {'ok': {'type': 'boolean'}, 'stats': {'type': 'object', 'required': ['note_count', 'illegal_count', 'duration_seconds'], 'properties': {'note_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'illegal_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'strip_length_cm': {'type': 'number'}, 'duration_seconds': {'type': 'number'}}, 'additionalProperties': False}, 'issues': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'severity', 'message'], 'properties': {'code': {'type': 'string'}, 'index': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Index of the note in the input, when the issue is about one note.'}, 'message': {'type': 'string'}, 'severity': {'enum': ['error', 'warning'], 'type': 'string'}, 'suggestions': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}}, 'additionalProperties': False}, 'composer_link': {'type': 'string', 'description': 'Opens the composer with the fitted melody loaded, without saving.'}}, 'additionalProperties': False}
get_order_status
Check my orders
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.
読み取り専用
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'order_id': {'type': 'string', 'maxLength': 40, 'description': 'Omit to list recent orders.'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['orders'], 'properties': {'orders': {'type': 'array', 'items': {'type': 'object', 'required': ['order_id', 'status', 'status_description', 'placed', 'total_usd', 'items'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['product', 'song_name', 'song_artist', 'price_usd'], 'properties': {'product': {'type': 'string'}, 'price_usd': {'type': 'number'}, 'song_name': {'type': 'string'}, 'deliverable': {'type': 'string'}, 'song_artist': {'type': 'string'}}, 'additionalProperties': False}}, 'placed': {'type': 'string'}, 'status': {'type': 'string'}, 'finished': {'type': 'string'}, 'order_id': {'type': 'string'}, 'total_usd': {'type': 'number'}, 'status_description': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
get_product_options
Get the options of a product
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.
読み取り専用
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['product'], 'properties': {'product': {'enum': ['custom_melody', 'custom_strip_design'], 'type': 'string', '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).'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['product', 'name', 'variations', 'fields'], 'properties': {'name': {'type': 'string'}, 'fields': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'required', 'description'], 'properties': {'name': {'type': 'string'}, 'required': {'type': 'boolean'}, 'description': {'type': 'string'}, 'allowed_values': {'type': 'array', 'items': {'type': ['string', 'number', 'boolean']}}}, 'additionalProperties': False}}, 'product': {'type': 'string'}, 'variations': {'type': 'array', 'items': {'type': 'object', 'required': ['variation_id', 'name', 'price_usd'], 'properties': {'name': {'type': 'string'}, 'price_usd': {'type': 'number'}, 'description': {'type': 'string'}, 'variation_id': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
get_song
Get a music box tune
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.
読み取り専用
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['song_id'], 'properties': {'box': {'enum': ['15', '20', '30', 'freestyle'], 'type': 'string', 'description': 'Which version to return. Defaults to the version the arranger marked as preferred.'}, 'song_id': {'type': 'string', 'maxLength': 40, 'description': 'Song id from search_songs, list_my_songs or create_song.'}, 'claim_token': {'type': 'string', 'maxLength': 100, 'description': 'Only for songs saved without an account: the claim_token create_song returned.'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['song_id', 'name', 'artist', 'arranged_by', 'private', 'tags', 'url', 'available_boxes', 'melody', 'stats'], 'properties': {'url': {'type': 'string'}, 'name': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'stats': {'type': 'object', 'required': ['note_count', 'illegal_count', 'duration_seconds'], 'properties': {'note_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'illegal_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'strip_length_cm': {'type': 'number'}, 'duration_seconds': {'type': 'number'}}, 'additionalProperties': False}, 'artist': {'type': 'string'}, 'melody': {'type': 'object', 'required': ['box', 'bpm', 'notes'], 'properties': {'box': {'type': 'string'}, 'bpm': {'type': 'number'}, 'notes': {'type': 'array', 'items': {'type': 'object', 'required': ['pitch'], 'properties': {'beat': {'type': 'number'}, 'pitch': {'type': ['string', 'number']}, 'ticks': {'type': 'number'}}, 'additionalProperties': False}}}, 'additionalProperties': False}, 'private': {'type': 'boolean'}, 'song_id': {'type': 'string'}, 'arranged_by': {'type': 'string'}, 'description': {'type': 'string'}, 'composer_url': {'type': 'string'}, 'available_boxes': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
import_midi
Read a MIDI file as a melody
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.
読み取り専用
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['midi_base64'], 'properties': {'box': {'enum': ['15', '20', '30', 'freestyle'], 'type': 'string', 'description': 'Box to validate against. Default "30".'}, 'midi_base64': {'type': 'string', 'maxLength': 699056, 'minLength': 8, 'description': 'The .mid file, base64-encoded.'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name', 'notes_in_file', 'skipped_percussion_tracks', 'melody', 'validation'], 'properties': {'name': {'type': 'string'}, 'melody': {'type': 'object', 'required': ['box', 'bpm', 'notes'], 'properties': {'box': {'type': 'string'}, 'bpm': {'type': 'number'}, 'notes': {'type': 'array', 'items': {'type': 'object', 'required': ['pitch'], 'properties': {'beat': {'type': 'number'}, 'pitch': {'type': ['string', 'number']}, 'ticks': {'type': 'number'}}, 'additionalProperties': False}}}, 'additionalProperties': False}, 'validation': {'type': 'object', 'required': ['ok', 'issues', 'stats'], 'properties': {'ok': {'type': 'boolean'}, 'stats': {'type': 'object', 'required': ['note_count', 'illegal_count', 'duration_seconds'], 'properties': {'note_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'illegal_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'strip_length_cm': {'type': 'number'}, 'duration_seconds': {'type': 'number'}}, 'additionalProperties': False}, 'issues': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'severity', 'message'], 'properties': {'code': {'type': 'string'}, 'index': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Index of the note in the input, when the issue is about one note.'}, 'message': {'type': 'string'}, 'severity': {'enum': ['error', 'warning'], 'type': 'string'}, 'suggestions': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}}, 'additionalProperties': False}, 'notes_in_file': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'skipped_percussion_tracks': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
list_music_boxes
List music boxes
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.
読み取り専用
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['ticks_per_beat', 'default_min_repeat_beats', 'boxes'], 'properties': {'boxes': {'type': 'array', 'items': {'type': 'object', 'required': ['box', 'name', 'description', 'playable_notes', 'lowest', 'highest', 'has_sharps', 'repeated_note_rule', 'printable_strip'], 'properties': {'box': {'type': 'string'}, 'name': {'type': 'string'}, 'lowest': {'type': 'string'}, 'highest': {'type': 'string'}, 'has_sharps': {'type': 'boolean'}, 'description': {'type': 'string'}, 'playable_notes': {'type': 'array', 'items': {'type': 'string'}}, 'printable_strip': {'type': 'boolean'}, 'repeated_note_rule': {'type': 'boolean'}}, 'additionalProperties': False}}, 'ticks_per_beat': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'default_min_repeat_beats': {'type': 'number'}}, 'additionalProperties': False}
list_my_songs
List my songs
Lists the signed-in person's songs on Musicboxmelodies, newest first, including private ones. Requires signing in.
読み取り専用
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page': {'type': 'integer', 'maximum': 500, 'minimum': 1}, 'page_size': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Default 20.'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['page', 'pages', 'total', 'songs'], 'properties': {'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'pages': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'songs': {'type': 'array', 'items': {'type': 'object', 'required': ['song_id', 'name', 'artist', 'private', 'boxes', 'created', 'url', 'composer_url'], 'properties': {'url': {'type': 'string'}, 'name': {'type': 'string'}, 'boxes': {'type': 'array', 'items': {'type': 'string'}}, 'artist': {'type': 'string'}, 'created': {'type': 'string'}, 'private': {'type': 'boolean'}, 'song_id': {'type': 'string'}, 'composer_url': {'type': 'string'}}, 'additionalProperties': False}}, 'total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
list_products
List products
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.
読み取り専用
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['currency', 'products'], 'properties': {'currency': {'type': 'string'}, 'products': {'type': 'array', 'items': {'type': 'object', 'required': ['product', 'name', 'url', 'what_you_get', 'delivery', 'notes', 'variations'], 'properties': {'url': {'type': 'string'}, 'name': {'type': 'string'}, 'notes': {'type': 'string'}, 'product': {'type': 'string'}, 'delivery': {'type': 'string'}, 'variations': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'price_usd'], 'properties': {'name': {'type': 'string'}, 'price_usd': {'type': 'number'}}, 'additionalProperties': False}}, 'what_you_get': {'type': 'string'}}, 'additionalProperties': False}}}, 'additionalProperties': False}
prepare_order
Prepare an order for the person to pay
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.
外部アクセスあり
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['product', 'variation_id', 'song_name', 'song_artist', 'time'], 'properties': {'time': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Part of the song to convert, e.g. "0:00 - 1:30" or "whole song".'}, 'theme': {'enum': ['artist_pictures', 'own_pictures'], 'type': 'string', 'description': 'Strip designs only.'}, 'product': {'enum': ['custom_melody', 'custom_strip_design'], 'type': 'string', '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).'}, 'song_name': {'type': 'string', 'maxLength': 150, 'minLength': 1}, 'note_count': {'anyOf': [{'type': 'number', 'const': 15}, {'type': 'number', 'const': 30}], 'description': "Strip designs only: notes of the person's music box."}, 'song_artist': {'type': 'string', 'maxLength': 150, 'minLength': 1}, 'variation_id': {'type': 'string', 'maxLength': 20, 'description': 'From get_product_options.'}, 'existing_tune': {'type': 'boolean', 'description': 'Strip designs only: the song is already on our YouTube channel (25% off).'}, 'reference_link': {'type': 'string', 'maxLength': 500, 'description': 'YouTube or other link to the version the person wants.'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['cart_url', 'summary', 'price_usd', 'expires_at'], 'properties': {'summary': {'type': 'string'}, 'cart_url': {'type': 'string'}, 'price_usd': {'type': 'number'}, 'expires_at': {'type': 'string'}}, 'additionalProperties': False}
render_audio
Listen to a melody or song
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).
読み取り専用
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'box': {'enum': ['15', '20', '30', 'freestyle'], 'type': 'string', 'description': "With song_id: which version. Otherwise the melody's box."}, 'bpm': {'type': 'number', 'maximum': 300, 'minimum': 30, 'description': 'Melody tempo (required without song_id).'}, 'notes': {'type': 'array', 'items': {'type': 'object', 'required': ['pitch'], 'properties': {'beat': {'type': 'number', 'minimum': 0, 'description': 'When the note sounds, in quarter notes from 0 (e.g. 0, 1, 1.5).'}, 'pitch': {'anyOf': [{'type': 'string', 'maxLength': 8}, {'type': 'integer', 'maximum': 127, 'minimum': 0}], 'description': 'Note name like "C5", "F#4", "Bb3", or a MIDI number (60 = C4).'}, 'ticks': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Alternative to beat: 192 ticks per quarter note.'}}}, 'maxItems': 2000, 'minItems': 1, 'description': 'Melody notes (required without song_id).'}, 'sound': {'enum': ['synth', 'music_box'], 'type': 'string'}, 'song_id': {'type': 'string', 'maxLength': 40, 'description': "A saved song (public, the person's own, or one you saved without an account with its claim_token)."}, 'claim_token': {'type': 'string', 'maxLength': 100}, 'illegal_threshold_ticks': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Minimum gap between two identical notes, in ticks (default 384 = 2 beats).'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['audio_url', 'duration_seconds', 'sound'], 'properties': {'note': {'type': 'string'}, 'sound': {'type': 'string'}, 'audio_url': {'type': 'string'}, 'duration_seconds': {'type': 'number'}}, 'additionalProperties': False}
search_songs
Search music box tunes
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.
読み取り専用
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'box': {'enum': ['15', '20', '30', 'freestyle'], 'type': 'string', 'description': 'Only tunes with a version for this box.'}, 'page': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Page number, starting at 1.'}, 'query': {'type': 'string', 'maxLength': 100, 'description': 'Words to search in the song name, artist or arranger. Omit to list tunes.'}, 'page_size': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Results per page, 1-20 (default 10).'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['page', 'pages', 'total', 'songs'], 'properties': {'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'pages': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'songs': {'type': 'array', 'items': {'type': 'object', 'required': ['song_id', 'name', 'artist', 'arranged_by', 'boxes', 'tags', 'url'], 'properties': {'url': {'type': 'string'}, 'name': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'string'}}, 'boxes': {'type': 'array', 'items': {'type': 'string'}}, 'artist': {'type': 'string'}, 'song_id': {'type': 'string'}, 'arranged_by': {'type': 'string'}}, 'additionalProperties': False}}, 'total': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}
set_song_visibility
Make a song public or private
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.
外部アクセスあり 冪等
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['song_id', 'visibility'], 'properties': {'song_id': {'type': 'string', 'maxLength': 40}, 'confirmed': {'type': 'boolean', 'description': 'Required to make a song public: true only after the person confirmed.'}, 'visibility': {'enum': ['public', 'private'], 'type': 'string'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['song_id', 'visibility', 'status', 'url'], 'properties': {'url': {'type': 'string'}, 'status': {'enum': ['updated', 'needs_confirmation'], 'type': 'string'}, 'song_id': {'type': 'string'}, 'visibility': {'type': 'string'}}, 'additionalProperties': False}
validate_melody
Validate a melody for a music box
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.
読み取り専用
入力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['box', 'bpm', 'notes'], 'properties': {'box': {'enum': ['15', '20', '30', 'freestyle'], 'type': 'string', 'description': 'Music box type: "15", "20", "30" (notes) or "freestyle" (digital only). See list_music_boxes.'}, 'bpm': {'type': 'number', 'maximum': 300, 'minimum': 30, 'description': 'Tempo in beats per minute (30-300).'}, 'notes': {'type': 'array', 'items': {'type': 'object', 'required': ['pitch'], 'properties': {'beat': {'type': 'number', 'minimum': 0, 'description': 'When the note sounds, in quarter notes from 0 (e.g. 0, 1, 1.5).'}, 'pitch': {'anyOf': [{'type': 'string', 'maxLength': 8}, {'type': 'integer', 'maximum': 127, 'minimum': 0}], 'description': 'Note name like "C5", "F#4", "Bb3", or a MIDI number (60 = C4).'}, 'ticks': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Alternative to beat: 192 ticks per quarter note.'}}}, 'maxItems': 2000, 'minItems': 1, 'description': 'Notes in any order, at most 2000. Only onsets matter: music boxes have no note durations.'}, 'snap_beats': {'type': 'number', 'description': 'Optional grid in beats (e.g. 0.5) to warn about notes off that grid.', 'exclusiveMinimum': 0}, 'illegal_threshold_ticks': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Minimum gap between two identical notes, in ticks (default 384 = 2 beats).'}}}
出力スキーマ
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['ok', 'issues', 'stats'], 'properties': {'ok': {'type': 'boolean'}, 'stats': {'type': 'object', 'required': ['note_count', 'illegal_count', 'duration_seconds'], 'properties': {'note_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'illegal_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'strip_length_cm': {'type': 'number'}, 'duration_seconds': {'type': 'number'}}, 'additionalProperties': False}, 'issues': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'severity', 'message'], 'properties': {'code': {'type': 'string'}, 'index': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Index of the note in the input, when the issue is about one note.'}, 'message': {'type': 'string'}, 'severity': {'enum': ['error', 'warning'], 'type': 'string'}, 'suggestions': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}}, 'composer_link': {'type': 'string', 'description': 'Opens the composer with the playable notes loaded, without saving. Give it to the person to listen and edit.'}}, 'additionalProperties': False}
追加
get_order_status
2026年10月2日2:40
追加
prepare_order
2026年10月2日2:40
追加
get_product_options
2026年10月2日2:40
追加
render_audio
2026年10月2日2:40
変更
export_song
2026年10月2日2:40
追加
delete_song
2026年10月2日2:40
変更
create_song
2026年10月2日2:40
変更
fit_melody_to_box
2026年10月2日2:40
変更
validate_melody
2026年10月2日2:40
追加
import_midi
2026年9月30日2:40
追加
export_song
2026年9月30日2:40
追加
set_song_visibility
2026年9月30日2:40
追加
list_my_songs
2026年9月30日2:40
追加
add_version
2026年9月30日2:40
追加
create_song
2026年9月30日2:40
追加
list_products
2026年9月30日2:40
追加
fit_melody_to_box
2026年9月30日2:40
追加
validate_melody
2026年9月30日2:40
追加
get_song
2026年9月30日2:40
追加
search_songs
2026年9月30日2:40
追加
list_music_boxes
2026年9月30日2:40