Musicboxmelodies
What this MCP does
Searches, validates, adapts, saves, and exports melodies for 15-, 20-, and 30-note music boxes.
Tools
Input schema
{'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).'}}}
Output schema
{'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}
Input schema
{'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).'}}}
Output schema
{'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}
Input schema
{'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.'}}}
Output schema
{'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}
Input schema
{'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.'}}}
Output schema
{'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}
Input schema
{'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).'}}}
Output schema
{'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}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'order_id': {'type': 'string', 'maxLength': 40, 'description': 'Omit to list recent orders.'}}}
Output schema
{'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}
Input schema
{'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).'}}}
Output schema
{'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}
Input schema
{'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.'}}}
Output schema
{'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}
Input schema
{'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.'}}}
Output schema
{'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}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
Output schema
{'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}
Input schema
{'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.'}}}
Output schema
{'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}
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
Output schema
{'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}
Input schema
{'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.'}}}
Output schema
{'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}
Input schema
{'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).'}}}
Output schema
{'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}
Input schema
{'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).'}}}
Output schema
{'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}
Input schema
{'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'}}}
Output schema
{'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}
Input schema
{'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).'}}}
Output schema
{'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}
Recent tool changes
Similar MCP servers
MiOffice — AI-Powered Workspace Studio
Provides browser-based tools for processing PDFs, images, video, and audio, including generation, enhancement, conversion, transc…
BlitzReels Video Editor
Creates and edits short-form videos, including timelines, captions, transitions, AI-generated visuals, music, voiceovers, sound e…
Morpha
Enables creating, animating, and exporting layered short-form video projects.
switch
Enables management and exploration of an account-scoped library of AI-generated images and videos.
framesail
Creates long-form YouTube videos through script generation, storyboarding, visual assets, voiceover, music, scene composition, an…
Magnific
Provides image enhancement and design tools, AI image and audio generation, text-to-speech, creation management, and reusable cre…
Uwear
Supports AI fashion photoshoot production with garments, outfits, avatars, locations, art direction, image generation, backdrops,…
Creative Claw
Generates and edits branded images, video, audio, speech, and 3D-related creative assets, with media processing and reusable them…