mcp-score
Music notation for AI assistants. Describe a piece in plain language and get a MusicXML score; with MuseScore open, read and edit the live score by conversation.
Works with any MCP client (Claude Code, Claude Desktop, LM Studio, and others). Status: beta.
Quick demo
"Create a big band chart: 32-bar AABA form, key of Bb, slow blues at 66 BPM, with rhythm changes and rehearsal marks at each section."
The assistant writes a complete music21 script, runs it, and hands you a MusicXML file ready to open in MuseScore, Dorico, or any notation app.
With the MuseScore plugin running, you can go further:
"Read the melody in bars 9-16 and arrange it as a trombone soli following the chord progression."
The assistant reads the live score, applies musical judgement, and writes the arrangement back, all through conversation.
What it does
- Generate scores. The assistant writes a music21 script that exports MusicXML, which opens in MuseScore, Dorico, or any notation app. In Claude Code this is driven by the bundled
score-generateskill. In other MCP clients, thegenerate_scoretool runs the script andscore_generation_guidesupplies the same instructions. - Edit live scores. MCP tools connect to a running MuseScore and read passages, add notes, dynamics and chord symbols, set barlines, keys, time signatures and tempo, append measures, transpose, and undo.
- Render. The
render_scoretool exports PDF, PNG, MIDI or audio from a score file through the MuseScore command line; MuseScore must be installed but not running.
Supported applications
| Application | Versions | Status |
|---|---|---|
| MuseScore Studio | 4.4.2 and later | Supported; tested in CI on 4.4, 4.6 and 4.7. Earlier versions lack the plugin WebSocket API. |
| Dorico | 4 and later | Experimental. Undocumented Remote Control API, command-only, not verified against a running instance. |
| Any notation app | MusicXML import | Generated scores open anywhere MusicXML does. |
Install
Requires Python 3.14 or later.
pip install mcp-score-server
# or
uv tool install mcp-score-server
Then:
mcp-score install-plugin # MuseScore plugin, for live editing
mcp-score install-skill # score-generate skill, for Claude Code
Connect your MCP client
Claude Code:
claude mcp add mcp-score -- mcp-score serve
Claude Desktop and other clients: run the command mcp-score with the argument serve, for example in claude_desktop_config.json:
{
"mcpServers": {
"mcp-score": { "command": "mcp-score", "args": ["serve"] }
}
}
Use it with MuseScore
- Open a score in MuseScore Studio 4.4.2 or later.
- Plugins > Manage plugins > enable MCP Score Bridge, then Plugins > MCP Score Bridge. Keep its window open.
- Ask your assistant to connect to MuseScore.
Details and troubleshooting: MuseScore plugin.
Documentation
| Document | Description |
|---|---|
| Getting started | Set up mcp-score and generate your first score |
| Tool reference | All MCP tools and CLI commands |
| MuseScore plugin | Plugin installation and WebSocket protocol |
| Architecture | System design and key decisions |
Contributing
See CONTRIBUTING.md. Built in spare time, largely with Claude Code, and reviewed by a human before merge.
Author
Thomas Skovlund Hansen — skovlund.dev · thomas@skovlund.dev
License
Release files for mcp-score-server 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcp_score_server-0.1.0.tar.gz | 200.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcp_score_server-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 251.8 kB
Release files / mcp_score_server-0.1.0.tar.gz
| Download URL | mcp_score_server-0.1.0.tar.gz |
|---|---|
| Size | 200.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e2820d6dd7c9555b52e6635d873b342d03d0638cacafb8fe9ec3362e966c3f74
|
|
BLAKE2b-256 checksum How to use checksums |
d3f3da4f32d3da855a3243387b609c978d3fb2c57cdd0edc167415f3205b208a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency logRelease files / mcp_score_server-0.1.0-py3-none-any.whl
| Download URL | mcp_score_server-0.1.0-py3-none-any.whl |
|---|---|
| Size | 51.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
05cca71a9718facda54a169745da426382b76915777e1cf973f60fc6eb23b659
|
|
BLAKE2b-256 checksum How to use checksums |
a7203430271ba3ecabe97659397810ed1391491ed5048a7f777b7513f3877d8b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.
Transparency log