musescore-mcp
Provides tools for converting, editing, and analyzing MuseScore score files (.mscz, MusicXML, MIDI, etc.) through MuseScore's CLI, enabling operations like format conversion, transposition, tempo change, instrument part extraction, harmony analysis, and more.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@musescore-mcp transpose this score for Bb clarinet"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
musescore-mcp
A tool that wraps the MuseScore CLI as a Model Context Protocol (MCP) server, allowing Claude AI to directly convert, edit, and analyze music score files.
Purpose
Enables Claude AI (Claude Desktop, Claude Code, etc.) to handle MuseScore files (.mscz, .musicxml, MIDI, etc.) using natural language commands.
Features:
Category | Capabilities |
Conversion & Export | Convert to PDF, PNG, MusicXML, MIDI, MP3, etc.; extract parts; export multi-page PNGs |
Editing | Transpose by key or interval; instrument-specific transposition; change tempo; change time signature |
Analysis | Score metadata (title, composer, time signature, key, measure count); list key signature changes; instrument and range analysis; harmony analysis (Roman numeral) |
Advanced | Apply MuseScore style files (.mss); run QML plugins; create scores from MusicXML strings; MIDI → score conversion; auto-convert files in a watched folder |
Requirements
Python 3.10 or higher
MuseScore 4 (or MuseScore 3) installed
Windows: musescore.org or Microsoft Store
If the installation path is not standard, specify the executable path in the
MSCORE_PATHenvironment variable
Installation
1. Clone the repository
git clone https://github.com/strongbeen04/musescore-mcp.git
cd musescore-mcp2. Create a virtual environment and install packages
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS / Linux
source .venv/bin/activate
# 기본 설치
pip install -e .
# 화성 분석 기능(music21) 포함 설치
pip install -e ".[harmony]"3. Register the MCP server
Claude Desktop (Windows Store version)
Add to the %LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json file:
{
"mcpServers": {
"musescore": {
"command": "C:\\path\\to\\musescore-mcp\\.venv\\Scripts\\musescore-mcp.exe"
}
}
}Claude Desktop (Standard installation)
Add to the %APPDATA%\Claude\claude_desktop_config.json file:
{
"mcpServers": {
"musescore": {
"command": "C:\\path\\to\\musescore-mcp\\.venv\\Scripts\\musescore-mcp.exe"
}
}
}Claude Code (CLI)
Add to the ~/.claude.json file:
{
"mcpServers": {
"musescore": {
"type": "stdio",
"command": "C:\\path\\to\\musescore-mcp\\.venv\\Scripts\\musescore-mcp.exe"
}
}
}For macOS / Linux, change command to .venv/bin/musescore-mcp.
After saving the settings, restart Claude to connect the musescore server.
Usage
Attach a score file or provide its path while chatting with Claude. Claude will call the MCP tools internally.
Usage Examples:
"이 mscz 파일을 PDF로 변환해줘."
"악보를 Bb 클라리넷 기준으로 이조해줘."
"이 악보의 조성과 마디 수를 알려줘."
"MusicXML을 mscz 파일로 만들어줘."Available MCP Tools
Tool | Description |
| Check MuseScore executable path |
| Convert single file format |
| Batch convert multiple files |
| Extract individual parts |
| Export multi-page PNGs |
| Transpose by key |
| Transpose by interval |
| Transpose for specific instrument |
| Change tempo (BPM) |
| Change time signature |
| Return basic score information |
| List key signature changes |
| Instrument arrangement and range |
| Modify metadata such as title and composer |
| Analyze harmony progression (requires music21) |
| Apply MuseScore style (.mss) |
| Run QML plugin |
| Convert MusicXML string → mscz |
| Convert MIDI → mscz |
| Auto-convert after folder monitoring |
Purpose
musescore-mcp is an MCP (Model Context Protocol) server that wraps the MuseScore CLI, enabling Claude AI (Claude Desktop, Claude Code, etc.) to convert, edit, and analyze music score files through natural language commands.
Features:
Category | Capabilities |
Conversion & Export | Convert to PDF, PNG, MusicXML, MIDI, MP3, and more; extract individual parts; export multi-page PNGs |
Editing | Transpose by key or interval; instrument-specific transposition; change tempo and time signature |
Analysis | Score metadata (title, composer, key, time signature, measure count); key signature changes; instrument ranges; harmony analysis with Roman numerals |
Advanced | Apply MuseScore style files (.mss); run QML plugins; create scores from MusicXML strings; convert MIDI to score; auto-convert files in a watched folder |
Requirements
Python 3.10 or higher
MuseScore 4 (or MuseScore 3) installed
Windows: musescore.org or Microsoft Store
If installed to a non-standard path, set the
MSCORE_PATHenvironment variable to the executable path
Installation
1. Clone the repository
git clone https://github.com/strongbeen04/musescore-mcp.git
cd musescore-mcp2. Create a virtual environment and install
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS / Linux
source .venv/bin/activate
# Base install
pip install -e .
# With harmony analysis support (music21)
pip install -e ".[harmony]"3. Register the MCP server
Claude Desktop (Windows Store)
Edit %LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude\claude_desktop_config.json:
{
"mcpServers": {
"musescore": {
"command": "C:\\path\\to\\musescore-mcp\\.venv\\Scripts\\musescore-mcp.exe"
}
}
}Claude Desktop (Standard install)
Edit %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"musescore": {
"command": "C:\\path\\to\\musescore-mcp\\.venv\\Scripts\\musescore-mcp.exe"
}
}
}Claude Code (CLI)
Edit ~/.claude.json:
{
"mcpServers": {
"musescore": {
"type": "stdio",
"command": "C:\\path\\to\\musescore-mcp\\.venv\\Scripts\\musescore-mcp.exe"
}
}
}On macOS / Linux, change command to .venv/bin/musescore-mcp.
Restart Claude after saving the config to connect the server.
Usage
Attach a score file in your Claude conversation or describe its path, and ask in natural language. Claude will call the appropriate MCP tools automatically.
Examples:
"Convert this mscz file to PDF."
"Transpose this score for Bb clarinet."
"What is the key and measure count of this score?"
"Create an mscz from this MusicXML."Available MCP Tools
Tool | Description |
| Return the detected MuseScore executable path |
| Convert a single score to another format |
| Convert multiple files in one call |
| Export each instrument part as a separate file |
| Export all pages as individual PNG images |
| Transpose to a target key |
| Transpose by a specific interval |
| Rewrite transposition for a given instrument |
| Set a new tempo (BPM) |
| Change the time signature |
| Return title, composer, key, time sig, tempo, parts, measure count |
| List all key signature changes with measure numbers |
| Return instrument names, transpositions, and pitch ranges |
| Edit title, composer, lyricist, and copyright fields |
| Analyze chord progressions (requires music21) |
| Apply a MuseScore style file (.mss) |
| Execute an installed MuseScore QML plugin |
| Create an mscz from a MusicXML string |
| Convert a MIDI file to mscz |
| Monitor a folder and auto-convert new .mscz files |
License
MIT
Available Tools
20 toolsanalyze_harmonyA
Analyze chord progressions and tonal center using music21.
Requires pip install music21.
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz".
Returns: Dict with detected_key, confidence, and a list of chords [{offset, measure, chord, roman_numeral}, ...].
Inputs: score_b64 (required), input_suffix (required).
apply_styleB
Apply a MuseScore style file (.mss) to a score and re-export.
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". style_b64: Base64-encoded .mss style file content.
Returns: Base64-encoded mscz with the style applied.
Inputs: score_b64 (required), input_suffix (required), style_b64 (required). Returns: result
batch_convertA
Convert multiple score files in a single MuseScore process using -j.
Each job dict must have:
in_b64 (str): base64-encoded input file
in_suffix (str): input extension, e.g. "mscz"
out_format (str): output format, e.g. "pdf"
Returns results in the same order as jobs.
Inputs: jobs (required). Returns: result
change_tempoB
Change the tempo by modifying MusicXML and elements.
Replaces all existing tempo markings in the score.
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". bpm: New tempo in beats per minute (1–400). beat_unit: Beat unit for the metronome marking: quarter, half, eighth, whole.
Returns: Modified MusicXML as a UTF-8 string.
Inputs: score_b64 (required), input_suffix (required), bpm (required), beat_unit. Returns: result
change_time_signatureA
Change the time signature by modifying MusicXML elements.
Note: only the time signature element is changed — notes and beaming are not automatically adjusted.
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". beats: Beats per measure (e.g. 3 for 3/4). beat_type: Note value of one beat (1, 2, 4, 8, 16, or 32).
Returns: Modified MusicXML as a UTF-8 string.
Inputs: score_b64 (required), input_suffix (required), beats (required), beat_type (required). Returns: result
convert_scoreA
Convert a score file to another format.
Args: score_b64: Base64-encoded content of the input file. input_suffix: Extension of the input file without dot, e.g. "mscz". output_format: Target format — pdf | musicxml | mid | mp3 | wav | flac | ogg | png | svg.
Returns: PNG (multi-page): {"format": "png", "pages": N, "data": [b64, ...]} Text formats (musicxml, svg): {"format": str, "data": str} Binary formats: {"format": str, "data": b64}
Inputs: score_b64 (required), input_suffix (required), output_format (required).
create_from_musicxmlA
Convert a MusicXML string into a MuseScore .mscz file.
Useful for creating MuseScore files from externally generated MusicXML.
Args: musicxml: MusicXML content as a UTF-8 string.
Returns: Base64-encoded mscz file.
Inputs: musicxml (required). Returns: result
export_partsA
Export each instrument part from a score as a separate file.
First converts to MusicXML to discover part names and count, then uses MuseScore's JSON job format to export each part by index.
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". output_format: Format for each part output (pdf, musicxml, png, etc.).
Returns: List of {"part_index": int, "part_name": str, "format": str, "data": ...}.
Inputs: score_b64 (required), input_suffix (required), output_format. Returns: result
export_png_pagesA
Export each page of a score as a PNG image.
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". dpi: Output resolution in dots per inch (1–2400, default 150). trim: If True, trim whitespace borders (0 px margin).
Returns: List of base64-encoded PNG strings, one per page, in order.
Inputs: score_b64 (required), input_suffix (required), dpi, trim. Returns: result
get_key_signatureA
Return all key signature changes in the score with their measure positions.
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz".
Returns: List of {"measure": int, "key": str, "mode": str, "fifths": int}, ordered by measure number.
Inputs: score_b64 (required), input_suffix (required). Returns: result
get_musescore_pathA
Return the detected MuseScore executable path on this machine.
Inputs: no named parameters. Returns: result
get_score_infoA
Return basic metadata and structural info about a score.
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz".
Returns: Dict with title, composer, initial key, time signature, tempo, part names, and measure count.
Inputs: score_b64 (required), input_suffix (required).
list_instrumentsA
Return instrument/part info including transposition and pitch range.
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz".
Returns: List of dicts with part_index, name, abbreviation, is_transposing, transpose (chromatic/diatonic), range (lowest/highest MIDI note name).
Inputs: score_b64 (required), input_suffix (required). Returns: result
midi_to_scoreA
Convert a MIDI file to a MuseScore .mscz file.
Args: midi_b64: Base64-encoded MIDI (.mid) file content. quantization: Quantization resolution as a note value denominator (4=quarter, 8=eighth, 16=sixteenth, 32=thirty-second). Default is "16". midi_import_options_b64: Optional base64-encoded MIDI import options JSON file (MuseScore's -M flag format).
Returns: Base64-encoded mscz file.
Inputs: midi_b64 (required), quantization, midi_import_options_b64. Returns: result
run_pluginA
Run a MuseScore QML plugin on a score.
The plugin must already be installed in MuseScore's plugin directory. Plugins can perform score manipulations (e.g. note coloring, analysis).
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". plugin_name: Name of the plugin as registered in MuseScore (without .qml).
Returns: Base64-encoded mscz after plugin execution.
Inputs: score_b64 (required), input_suffix (required), plugin_name (required). Returns: result
transpose_by_intervalA
Transpose a score by a fixed number of semitones via the MuseScore CLI.
Requires MuseScore 3.3+ with --score-transpose support.
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". semitones: Number of semitones to transpose (1–24). direction: "up" or "down".
Returns: Base64-encoded mscz of the transposed score.
Inputs: score_b64 (required), input_suffix (required), semitones (required), direction. Returns: result
transpose_by_keyA
Transpose a score to a target key using the MuseScore CLI.
Requires MuseScore 3.3+ with --score-transpose support.
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". target_key: Target major key — C G D A E B F# C# F Bb Eb Ab Db Gb Cb. direction: "up", "down", or "closest" (default).
Returns: Base64-encoded mscz of the transposed score.
Inputs: score_b64 (required), input_suffix (required), target_key (required), direction. Returns: result
transpose_for_instrumentA
Adjust the transposition offset for a transposing instrument part.
Modifies the MusicXML element — useful for converting between transposing instruments (e.g. Bb clarinet ↔ concert pitch, alto sax → tenor sax).
Pass either instrument (shorthand) or explicit chromatic + diatonic.
Known instruments: concert, bb_clarinet, bb_trumpet, bb_soprano_sax,
bb_tenor_sax, eb_alto_sax, eb_baritone_sax, f_horn, a_clarinet.
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". instrument: Instrument shorthand name (optional). chromatic: Semitone offset written→sounding (optional). diatonic: Diatonic step offset written→sounding (optional). part_index: Which part to affect (0-based). None = all parts.
Returns: Modified MusicXML as a UTF-8 string.
Inputs: score_b64 (required), input_suffix (required), instrument, chromatic, +2 more. Returns: result
update_metadataA
Update score metadata fields and return the modified MusicXML.
Only fields explicitly provided (non-None) are changed.
Args: score_b64: Base64-encoded score file. input_suffix: Input extension, e.g. "mscz". title: Work title. subtitle: Movement title / subtitle. composer: Composer name. lyricist: Lyricist name. copyright: Copyright / rights string.
Returns: Modified MusicXML as a UTF-8 string.
Inputs: score_b64 (required), input_suffix (required), title, subtitle, +3 more. Returns: result
watch_folderA
Watch a folder for new .mscz files and auto-convert them.
Monitors the folder for up to duration_seconds, converting any
new .mscz files that appear into the requested output formats.
Args: folder_path: Absolute path to the folder to watch. output_formats: List of output formats, e.g. ["pdf", "musicxml"]. output_folder: Where to write converted files. Defaults to folder_path. duration_seconds: How long to watch (max 300s).
Returns: {"converted": [{"source": str, "outputs": [str, ...]}, ...], "errors": [{"source": str, "error": str}, ...]}
Inputs: folder_path (required), output_formats (required), output_folder, duration_seconds.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 20 tools
Each tool targets a distinct operation (e.g., convert, export, transpose, analyze). Transposition tools are separated by interval, key, and instrument, and other potential overlaps like batch vs single convert are clearly differentiated. No two tools could be easily confused.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., convert_score, export_parts, get_score_info). Even compound names like batch_convert and transpose_by_interval maintain the pattern. No mixing of styles.
With 20 tools, the server covers a broad range of functionality (conversion, analysis, transposition, metadata, etc.) without being bloated. Each tool serves a clear purpose, and the count is well-scoped for a music notation MCP server.
The tool set covers most core operations like conversion, metadata editing, transposition, and harmony analysis. Minor gaps exist (e.g., direct note editing, measure manipulation), but these are reasonable given the CLI-based approach and the server's intended scope.
Maintenance
Related MCP Connectors
ScanSing reads printed sheet music. Give Claude a PDF or a photo of a score and it gets back MusicXML, the format MuseScore, Sibelius, Finale and Dorico open. It is the recogniser inside the ScanSing app for choir singers, offered as a connector. Once a score is recognised, Claude can answer questions about it without recognising it again: - what the key, time signature, tempo and length are, and each part's range, clefs and lyrics; - one voice on its own, for example just the alto line of a choir piece; - the score or a part moved to another key, with notes respelled for the new key signature; - a MIDI file, one track per part, to listen to or rehearse with; - a short-lived download link to open the result in a browser or notation app. It handles PDFs up to 40 pages and PNG, JPEG, HEIC, TIFF and WebP images, can recognise selected pages of a long PDF, and can split a songbook into one MusicXML per piece. A file can be given as a web link or a small image; in Claude Code, a file on your computer is sent through a one-time upload link. Recognition spends pages from your ScanSing plan, so it is the only tool that is not read-only. Everything else works on the stored result and is free. The first connection with a new email comes with 20 free pages; paid plans start at $9 a month for 300 pages. Scores and results are deleted about an hour after recognition and are never used for training.
ScoreStarling is an all-in-one AI sheet music assistant. Ask for anything to do with sheet music: transcribe a song from audio, video or a link, read a PDF or photo, add chords, change the key, make it easier, turn it into guitar TAB or jianpu, or arrange it for another instrument. Every change lands on a real score you can hear, fix and download (PDF, MIDI, MusicXML, guitar TAB, jianpu, audio). Hosted remote server with OAuth sign-in. Free accounts get monthly credits and free previews; prices are at scorestarling.com/pricing. Setup: https://scorestarling.com/mcp
Generate AI music via the Lacuna Music API from MCP clients like Claude Desktop & Code.
Convert MusicXML, MIDI, ABC, MEI and Humdrum, print sheet music, and verify every note survived.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Claude AI to generate professional, production-ready MIDI files (chord progressions, drum patterns, bass lines, melodies, and full arrangements) compatible with any DAW including Logic Pro, Ableton Live, FL Studio, and more.13MIT
- AlicenseNot gradedqualityDmaintenanceEnables musical analysis of MIDI and musicXML files using music21, providing tools for key detection, harmony, melody, rhythm, form analysis, counterpoint checking, and motif extraction.MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to compose real music from chord-symbol descriptions into MIDI files and audio previews, with musicology cross-checks on every chord.1AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceEnables Claude Desktop to drive FL Studio 2025 and 2026 through natural language, diagnosing and repairing mixes, configuring plugins, writing notes and chords in any scale, exporting arrangements to MIDI, and analyzing audio for tempo, key, and melody.MIT