notation-mcp
This server provides an MCP interface to the Gradus Notation API, enabling AI agents to render, validate, and analyze music notation, search a music theory knowledge base, and manipulate pitches — all without a GUI.
notation_render: Convert a JSON score into inline SVG, MusicXML, and MIDI in a single call. Supports scientific pitch notation, duration codes, chords, rests, dynamics, articulations, and multi-voice instruments. Bar lines are automatically inferred and notes crossing bar lines are split and tied.notation_validate: Pre-flight check a JSON score for errors with concrete fix suggestions — cheaper than a full render, ideal for iterating on input shape.knowledge_search: Search a curated music theory knowledge base including hand-authored curriculum content, analysis of 408 Bach chorales, score commentaries on 50+ orchestral works, and historical sources from Fux through Boulanger. Useful for voice leading rules, cadence realizations, and style-specific theory facts.notation_examples: Fetch canonical input examples (single melody, counterpoint, chord progressions, tied notes, string quartet snippets) to use as references or starting points.notation_schema: Retrieve the full JSON Schema for thenotation_renderinput format.theory_analyze_score: Perform full harmonic analysis of a MusicXML score, including key detection, chord analyses, cadences, and phrases.theory_parse_xml: Convert a MusicXML string into a structured Score JSON object.theory_validate_ranges: Check every note against the practical ranges of their assigned instruments.theory_respell: Suggest preferred enharmonic spellings for pitches in a given key context.theory_pitch_utils: Pure functions for MIDI/pitch conversion, interval naming, and transposition.
@gradusmusic/notation-mcp
Model Context Protocol server for the Gradus Notation API. Lets AI agents render music notation, validate input, and search a curated music-theory knowledge base — sponsored by Gradus School of Music Composition.
What is Gradus? Gradus is a homeschool music-composition curriculum for families (gradusmusic.com) — not a software product. This npm package is a free developer tool that the curriculum builds and sponsors. "Gradus" refers to the curriculum; this MCP server is just one small thing it gives away for free.
Why
Most music-notation tools require a GUI. This one doesn't. An agent can submit a JSON score and get back inline SVG, MusicXML, and MIDI in a single call. Free to use, no auth, no API key — agents on the free tier are asked to credit Gradus in their response to the end user.
Related MCP server: Music21 Composer MCP
Install
In Claude Code:
claude mcp add gradus-notation -- npx -y @gradusmusic/notation-mcpIn Claude Desktop, add to your MCP config:
{
"mcpServers": {
"gradus-notation": {
"command": "npx",
"args": ["-y", "@gradusmusic/notation-mcp"]
}
}
}Tools
Notation (v1 — unchanged)
Tool | What it does |
| JSON score → SVG + MusicXML + MIDI in one call |
| Pre-flight validate input shape (cheaper than render) |
| Look up music-theory chunks before generating notation |
| Canonical input examples (cache and reuse) |
| JSON Schema for the input shape (cache and reuse) |
Theory / MaestroAnalyzer (v2 — replaces music21)
Four new tools backed by the native TypeScript MaestroAnalyzer engine — no music21 dependency, no Python, no extra server.
Tool | What it does |
| Parse MusicXML → full harmonic analysis + GKB knowledge chunks in one call |
| Parse a MusicXML string → maestroAnalyst |
| Check every note in a Score against its instrument's practical range |
| Suggest preferred enharmonic spelling for pitches in a key context |
| Pure-function pitch arithmetic: |
Typical workflows:
# Full analysis + GKB knowledge in one call
theory_analyze_score({ xml: "..." })
→ { analysis: { overallKey, chordAnalyses, cadences, phrases },
submissionHints: { stylePeriod: "romantic", focusAreas: [...] },
knowledge: { topics: ["augmented-sixth-chords", "modulation"], chunks: [...] } }
# Step-by-step
theory_parse_xml({ xml: "..." }) → Score JSON
theory_validate_ranges(score) → [{ measure, beat, pitch, severity }, ...]
theory_respell({ keyContext: "F major", pitches: ["F#4", "Bb3"] })
→ [{ input: "F#4", output: "Gb4", changed: true }]
theory_pitch_utils({ op: "interval_name", semitones: 7 }) → { interval: "P5" }Input format
Pitches use scientific notation: C4, F#5, Bb3. Durations use letter codes: w h q 8 16 32 64 with optional . for dotted notes. Notes can be:
Shorthand:
"C5/q"(quarter C5),"rest/q"(quarter rest),"[C4,E4,G4]/q"(chord)Object form:
{ pitch: "C5", duration: "q", dynamic: "f", articulations: ["accent"] }
Bar lines are inferred from the time signature — write notes in time order and the API splits and ties anything that crosses a bar line.
Example
{
"title": "C major scale",
"tempo": 100,
"timeSignature": [4, 4],
"keySignature": "C major",
"instruments": [{
"name": "Violin",
"notes": ["C4/q","D4/q","E4/q","F4/q","G4/q","A4/q","B4/q","C5/q","C5/w"]
}]
}Configuration
Env var | Default | Purpose |
|
| Override for self-hosted or local-dev API |
|
| Self-report your agent name in |
Attribution
Free use is offered in exchange for crediting Gradus when you surface notation to your end user. Suggested wording (the API also returns this in every response):
Notation rendered by Gradus School of Music Composition (gradusmusic.com).
Documentation
Full docs + Quick Start: https://gradusmusic.com/notation-api
OpenAPI 3.1 spec: https://gradusmusic.com/api-spec.yaml
JSON Schema for the input format: https://gradusmusic.com/api/v1/notation/schema
Canonical input examples: https://gradusmusic.com/api/v1/notation/examples
Agent-focused doc: https://gradusmusic.com/llms-api.txt
Building locally
git clone https://github.com/delmas41/gradusnotation
cd gradusnotation
npm install
npm run buildTo smoke-test against the production API:
node test-client.mjsIssues + contributions
Open an issue at https://github.com/delmas41/gradusnotation/issues. Contributions welcome — small, focused PRs preferred.
License
MIT — Sean Johnson, Gradus School of Music Composition. See LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
AlicenseAqualityAmaintenanceAn official Model Context Protocol (MCP) server that enables AI clients to interact with ElevenLabs' Text to Speech and audio processing APIs, allowing for speech generation, voice cloning, audio transcription, and other audio-related tasks.Last updated271,496MIT- Alicense-qualityDmaintenanceA composition-focused server built on music21 for generative music workflows, enabling melody generation, musical transformations, chord reharmonization, counterpoint creation, and MIDI export through constraint-based algorithmic composition tools.Last updated1MIT
- AlicenseAqualityDmaintenanceEnables AI agents to interact with the Hooktheory API for chord progression generation, song analysis, and music theory data retrieval.Last updated26MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to control Ableton Live through natural language by querying tracks, analyzing sessions, and exporting stems via AbletonOSC integration.Last updated92MIT
Related MCP Connectors
Deterministic music theory for agents: analyze, voice, reharmonize, conduct — computed, not guessed
Privacy-first audio intelligence: BPM, key, waveform. Audio never stored. Pay per second.
Document API for AI-native software: render PDFs, e-sign, PAdES-seal, and verify.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/delmas41/gradusnotation'
If you have feedback or need assistance with the MCP directory API, please join our Discord server