leadsheet
Enables Claude to compose real music from chord-symbol descriptions into MIDI files and audio previews, with musicology cross-checks on every chord.
README
leadsheet
Compose simple, playable music with ChatGPT, Claude, Codex, or Gemini — without a
DAW, a subscription to a music-generation service, or specialist music software.
leadsheet installs a local MCP server and client Skill that turn a natural language
prompt into a compact, editable .leadsheet file, then validate and render
it as the best available playable audio.
Version 0.2.0 introduces the .leadsheet format. It is a plain-text, line-oriented
music DSL designed for both AI generation and human editing: it is diffable,
version-controllable, and substantially cheaper to send through an LLM than verbose
JSON or code-based music notation.
Quick Install through an LLM
The easiest installation path is to paste this prompt into your coding assistant or terminal-enabled LLM:
Install and set up the Python package `leadsheet` for me.
1. Prefer `uv tool install leadsheet`; if uv is unavailable, use
`pip install leadsheet`.
2. Run `leadsheet setup`.
3. Install the recommended external audio dependencies, FluidSynth and
FFmpeg, using the package manager appropriate for this operating system.
4. Run `leadsheet status` and inspect every line, including the Warnings
section.
5. If status reports a missing dependency or integration, fix it when safe,
rerun setup if needed, and run status again.
6. Report exactly what was installed, which client integrations were detected,
the selected audio backend, and any remaining warnings or commands I need
to run manually.
Do not modify project files or global client configuration beyond what
`leadsheet setup` is designed to configure. Ask before using a package manager
or making changes outside the normal Leadsheet installation and setup flow.
Usage Examples
After installation, try asking your LLM to compose something simple:
Create a short, happy piano song for me. Make it about 30 seconds long,
upbeat and cheerful. Use piano and maybe some strings.
Or for something relaxing:
Write me a calm, peaceful piece with a slow tempo. Use soft instruments
like strings and piano. Make it about a minute long.
Or try something with a beat:
I'd like an upbeat song with drums and bass. Something you'd hear in a
cafe or lounge. Keep it simple and melodic.
After your LLM creates the .leadsheet file, just ask it to make the song
playable and you'll hear the audio.
Manual Installation
uv tool install leadsheet # recommended
leadsheet setup
or, without uv:
pip install leadsheet
leadsheet setup
leadsheet setup is a required, one-time follow-up step -- pip/wheel
installs have no reliable post-install hook, so this is what actually:
- registers the MCP server with every detected client: Claude Code globally
(
claude mcp add leadsheet -s user), Codex (~/.codex/config.toml), or Gemini (~/.gemini/settings.json) - installs the Skill for each detected client:
~/.claude/skills/leadsheet/for Claude Code and~/.agents/skills/leadsheet/for Codex - checks the available audio backend and prints install hints for optional FluidSynth/FFmpeg upgrades
- downloads and caches a General MIDI soundfont for rendering
uv tool install is preferred because it keeps leadsheet in a stable,
persistent, isolated environment outside any project venv -- claude mcp add stores an absolute path to the Python interpreter that must keep
working long after this install command finishes, so it shouldn't live in
a venv you might later delete.
Re-run leadsheet setup any time after upgrading (pip install -U leadsheet / uv tool upgrade leadsheet) to refresh the registered server
and the installed skill.
After setup, restart your configured client and ask it to compose something.
AI client support
The server uses the standard MCP protocol over local stdio, so the same
.leadsheet workflow works with MCP-enabled clients:
| Client | Setup |
|---|---|
| ChatGPT | Add a local MCP server using command python -m leadsheet.server and the Python interpreter from the leadsheet installation. |
| Claude Code | Run leadsheet setup; it registers the server and installs the Skill. |
| Codex | Ensure ~/.codex/config.toml exists, then run leadsheet setup. |
| Gemini CLI | Ensure ~/.gemini/settings.json exists, then run leadsheet setup. |
For ChatGPT, configure the server in the MCP/developer settings of the ChatGPT
client you use; the command must point at the same environment where
leadsheet was installed. After connecting, ask ChatGPT or Gemini to create a
.leadsheet file, call validate, and then call compose.
The .leadsheet format
A file starts with a required tempo line, followed by chord, bass, melody, drum, or custom tracks. The format keeps musical intent visible while factoring out repeated values:
bpm=85 title="Night Drive" key="A minor"
chords "Electric Piano 1" block subdiv=1: Am7 Fmaj7 C G
bass "Electric Bass (finger)" root_fifth oct=2: Am7 Fmaj7 C G
melody "Flute" notes dur=1/4: A4 C5 E5 x2 r E5 C5 A4
drums "Standard" repeat=8: K,H,S,H
Melody is native to the DSL, with a compact notation designed for both AI and human authors. Useful note forms include:
dur=,int=, andvel=set segment defaults.E5@1/2overrides one note's duration;ris a rest.C5+E5+G5plays a simultaneous-note stack.E5 x8repeats the preceding note, rest, or stack.
Reuse and song structure
Define reusable content once and apply it to multiple tracks. transpose= and
vel= are call-site overrides:
define hook notes dur=1/4: E5 G5 A5 x2 G5 E5
melody "Flute" use: hook
melody "Violin" use: hook transpose=-3 vel=70
For a chorus or other multi-track passage, define a section and place it at any bar offset:
section chorus:
chords "Electric Piano 1" block: Fmaj7 C G Am
bass "Acoustic Bass" root_fifth oct=2: Fmaj7 C G Am
drums "Standard" repeat=4: K,H,S,H
melody "Flute" notes dur=1/4: F5 A5 C5 x2 A5 F5
use section chorus start=8
use section chorus start=24
The full grammar and constraints are in the installed Skill at
src/leadsheet/skill/SKILL.md. The examples/ directory contains complete,
validated .leadsheet files.
Compose from a .leadsheet file
AI clients normally create and edit the file through the MCP tools. From the command line, the same local server can be started with:
python -m leadsheet.server
The MCP tools are:
list_capabilities— available chord types, GM instruments, drum kits, styles, and guardrails.validate— parses and theory-checks a.leadsheetfile without rendering.compose— validates, compiles, renders, and saves the best available audio.
After a change, edit the same .leadsheet file and compose it again. The text
file is the source of truth.
Audio output
compose selects the best available output automatically:
- FluidSynth + FFmpeg: tagged MP3
- FluidSynth alone: playable WAV
- optional TinySoundFont fallback: playable WAV with no system audio binaries
- no renderer: MIDI output plus an install warning
FluidSynth and FFmpeg are optional but recommended for the highest-fidelity tagged MP3 output:
brew install fluidsynth # macOS
apt-get install fluidsynth # Debian/Ubuntu
If either binary is missing, audio does not fail: the server falls back to WAV and includes a warning telling the calling LLM exactly what can be installed to upgrade the result.
To enable the in-process fallback explicitly, install the optional audio extra:
pip install 'leadsheet[audio]'
Other commands
leadsheet status # what's currently configured
leadsheet uninstall # remove the MCP registration and skill
leadsheet uninstall --purge-cache # also delete the cached soundfont
How it works
- Skill (
~/.claude/skills/leadsheet/SKILL.mdor~/.agents/skills/leadsheet/SKILL.md): teaches the client a small, explicit schema built around chord symbols ("Am7","G7sus4") and the.leadsheettext format. - MCP server (
leadsheet.server, stdio transport, registered locally): exposes four tools --list_capabilities-- valid chord types, GM instruments, drum kits/tokens, event styles, and guardrail limits.validate-- structural and music-theory validation, without compiling.compose-- validates, compiles, renders, and returns a playable preview.
Everything is local and stateless: no database, no server-side file storage, no network calls except the one-time soundfont download.
Development
uv sync
uv run pytest
Audio-pipeline tests that need FluidSynth and FFmpeg are skipped automatically if they aren't installed in the dev environment.
License
AGPL-3.0-or-later -- see LICENSE.
推荐服务器
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 模型以安全和受控的方式获取实时的网络信息。