MuseScore MCP Server
A Model Context Protocol server that provides programmatic control over MuseScore through a WebSocket-based plugin system, allowing AI assistants to compose music, add lyrics, navigate scores, and control MuseScore directly.
README
MuseScore MCP Server
A Model Context Protocol (MCP) server that provides programmatic control over MuseScore through a WebSocket-based plugin system. This allows AI assistants like Claude to compose music, add lyrics, navigate scores, and control MuseScore directly.

Prerequisites
- MuseScore 3.x or 4.x
- Python 3.8+
- Claude Desktop or compatible MCP client
Setup
1. Install the MuseScore Plugin
First, save the QML plugin code to your MuseScore plugins directory:
macOS: ~/Documents/MuseScore4/Plugins/musescore-mcp-websocket.qml
Windows: %USERPROFILE%\Documents\MuseScore4\Plugins\musescore-mcp-websocket.qml
Linux: ~/Documents/MuseScore4/Plugins/musescore-mcp-websocket.qml
2. Enable the Plugin in MuseScore
- Open MuseScore
- Go to Plugins → Plugin Manager
- Find "MuseScore API Server" and check the box to enable it
- Click OK
3. Setup Python Environment
git clone <your-repo>
cd mcp-agents-demo
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install fastmcp websockets
4. Configure Claude Desktop
Add to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"musescore": {
"command": "/path/to/your/project/.venv/bin/python",
"args": [
"/path/to/your/project/server.py"
]
}
}
}
Note: Update the paths to match your actual project location.
Running the System
Order of Operations (Important!)
- Start MuseScore first with a score open
- Run the MuseScore plugin: Go to Plugins → MuseScore API Server
- You should see console output:
"Starting MuseScore API Server on port 8765"
- You should see console output:
- Then start the Python MCP server or restart Claude Desktop
[insert screenshot of different functionality, harmonisation, melodywriting, as zoomed in GIFs]
Development and Testing
For development, use the MCP development tools:
# Install MCP dev tools
pip install mcp
# Test your server
mcp dev server.py
# Check connection status
mcp dev server.py --inspect
Viewing Console Output
To see MuseScore plugin console output, run MuseScore from terminal:
macOS:
/Applications/MuseScore\ 4.app/Contents/MacOS/mscore
Windows:
cd "C:\Program Files\MuseScore 4\bin"
MuseScore.exe
Linux:
musescore4
Features
This MCP server provides comprehensive MuseScore control:
Navigation & Cursor Control
get_cursor_info()- Get current cursor position and selection infogo_to_measure(measure)- Navigate to specific measurego_to_beginning_of_score()/go_to_final_measure()- Navigate to start/endnext_element()/prev_element()- Move cursor element by elementnext_staff()/prev_staff()- Move between stavesselect_current_measure()- Select entire current measure
Note & Rest Creation
add_note(pitch, duration, advance_cursor_after_action)- Add notes with MIDI pitchadd_rest(duration, advance_cursor_after_action)- Add restsadd_tuplet(duration, ratio, advance_cursor_after_action)- Add tuplets (triplets, etc.)
Measure Management
insert_measure()- Insert measure at current positionappend_measure(count)- Add measures to end of scoredelete_selection(measure)- Delete current selection or specific measure
Lyrics & Text
add_lyrics_to_current_note(text)- Add lyrics to current noteadd_lyrics(lyrics_list)- Batch add lyrics to multiple notesset_title(title)- Set score title
Score Information
get_score()- Get complete score analysis and structureping_musescore()- Test connection to MuseScoreconnect_to_musescore()- Establish WebSocket connection
Utilities
undo()- Undo last actionset_time_signature(numerator, denominator)- Change time signatureprocessSequence(sequence)- Execute multiple commands in batch
Sample Music
Check out the /examples folder for sample MuseScore files demonstrating various musical styles:
- Asian Instrumental - Traditional Asian-inspired instrumental piece
- String Quartet - Classical string quartet arrangement
Each example includes:
.mscz- MuseScore file (editable).pdf- Sheet music.mp3- Audio preview
Usage Examples
Creating a Simple Melody
# Set up the score
await set_title("My First Song")
await go_to_beginning_of_score()
# Add notes (MIDI pitch: 60=C, 62=D, 64=E, etc.)
await add_note(60, {"numerator": 1, "denominator": 4}, True) # Quarter note C
await add_note(64, {"numerator": 1, "denominator": 4}, True) # Quarter note E
await add_note(67, {"numerator": 1, "denominator": 4}, True) # Quarter note G
await add_note(72, {"numerator": 1, "denominator": 2}, True) # Half note C
# Add lyrics
await go_to_beginning_of_score()
await add_lyrics_to_current_note("Do")
await next_element()
await add_lyrics_to_current_note("Mi")
await next_element()
await add_lyrics_to_current_note("Sol")
await next_element()
await add_lyrics_to_current_note("Do")
Batch Operations
# Add multiple lyrics at once
await add_lyrics(["Twin-", "kle", "twin-", "kle", "lit-", "tle", "star"])
# Use sequence processing for complex operations
sequence = [
{"action": "goToBeginningOfScore", "params": {}},
{"action": "addNote", "params": {"pitch": 60, "duration": {"numerator": 1, "denominator": 4}, "advanceCursorAfterAction": True}},
{"action": "addNote", "params": {"pitch": 64, "duration": {"numerator": 1, "denominator": 4}, "advanceCursorAfterAction": True}},
{"action": "addRest", "params": {"duration": {"numerator": 1, "denominator": 4}, "advanceCursorAfterAction": True}}
]
await processSequence(sequence)
Troubleshooting
Connection Issues
- "Not connected to MuseScore":
- Ensure MuseScore is running with a score open
- Run the MuseScore plugin (Plugins → MuseScore API Server)
- Check that port 8765 isn't blocked by firewall
Plugin Issues
- Plugin not appearing: Check the
.qmlfile is in the correct plugins directory - Plugin won't enable: Restart MuseScore after placing the plugin file
- No console output: Run MuseScore from terminal to see debug messages
Python Server Issues
- "No server object found": The server object must be named
mcp,server, orappat module level - WebSocket errors: Make sure MuseScore plugin is running before starting Python server
- Connection timeout: The MuseScore plugin must be actively running, not just enabled
API Limitations
- Lyrics: Only first verse supported in MuseScore 3.x plugin API
- Title setting: Uses multiple fallback methods due to frame access limitations
- Selection persistence: Some operations may affect current selection
File Structure
mcp-agents-demo/
├── .venv/
├── server.py # Python MCP server entry point
├── musescore-mcp-websocket.qml # MuseScore plugin
├── requirements.txt
├── README.md
└── src/ # Source code modules
├── __init__.py
├── client/ # WebSocket client functionality
│ ├── __init__.py
│ └── websocket_client.py
├── tools/ # MCP tool implementations
│ ├── __init__.py
│ ├── connection.py # Connection management tools
│ ├── navigation.py # Score navigation tools
│ ├── notes_measures.py # Note and measure manipulation
│ ├── sequences.py # Batch operation tools
│ ├── staff_instruments.py # Staff and instrument tools
│ └── time_tempo.py # Timing and tempo tools
└── types/ # Type definitions
├── __init__.py
└── action_types.py # WebSocket action type definitions
Requirements
Create a requirements.txt file with:
fastmcp
websockets
MIDI Pitch Reference
Common MIDI pitch values for reference:
- Middle C: 60
- C Major Scale: 60, 62, 64, 65, 67, 69, 71, 72
- Chromatic: C=60, C#=61, D=62, D#=63, E=64, F=65, F#=66, G=67, G#=68, A=69, A#=70, B=71
Duration Reference
Duration format: {"numerator": int, "denominator": int}
- Whole note:
{"numerator": 1, "denominator": 1} - Half note:
{"numerator": 1, "denominator": 2} - Quarter note:
{"numerator": 1, "denominator": 4} - Eighth note:
{"numerator": 1, "denominator": 8} - Dotted quarter:
{"numerator": 3, "denominator": 8}
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。