tapscript-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| analyze_featuresC | Describe a piece as sixteen numbers per bar -- density, register, tension, syncopation, dynamics and the rest -- so a model can perceive what is written. |
| apply_directivesA | Apply a bandleader's directive JSON to a piece or an ensemble session and return the result as data: the directives as they were read, what the arrangement was before and after, and the sixteen features per bar of each. Use conduct_score instead when you want the timing report in prose. |
| compile_scoreA | Compile notation to MIDI and audio, returning the arrangement summary and any diagnostics. Pass either a path or inline content. |
| conduct_scoreA | Apply a bandleader's directive JSON to a piece and report what it did to the ensemble's timing: how the arrivals moved together and how far each player's hands moved to keep them there. |
| directive_referenceA | Read the conductor's directive vocabulary -- the JSON a bandleader sends, which actions the timing layer acts on, and what the windows and targets mean. Call this before writing directives for the first time in a session. |
| ensemble_joinA | Claim one voice of a session. A voice has one owner at a time, so claiming is how agents avoid choosing the same part. Returns everything needed to start writing. |
| ensemble_leaveB | Release a voice you hold so another agent can take it. |
| ensemble_logA | Read the session's change log, oldest first. This is how a joining agent finds out what has already happened. |
| ensemble_openA | Open a shared session several agents can write to, or reopen one that exists. Sets the key, tempo, metre and form every part is written against. |
| ensemble_readA | Read a session in one call: key, tempo, metre, form, which voices exist and who holds them, what every voice plays in the bars you are about to write, your own part, the version to write against, and what has changed recently. |
| ensemble_renderC | Merge the parts and compile the session to MIDI, and optionally audio. |
| ensemble_reportA | Report what a listener on the stage actually hears: each voice's distance, speech time, propagation delay and the moment its player has to act, plus the spread at the chosen listener and at every other one. |
| ensemble_statusA | The short view of a session: version, voices, who holds what, bar count and whether the merged score still compiles. Omit the name to list sessions. |
| ensemble_write_partA | Write your voice's part. The notation is parsed and checked against the session header before anything reaches disk. Pass the base_version you read; if the voice has moved on the write is refused and you are given the current part to rebase onto. |
| list_filesB | List files in the working directory. |
| notation_referenceA | Read the TapScript notation reference. Call this before writing notation for the first time in a session. |
| probe_hostA | Report what this machine can do: platform, optional libraries, soundfonts, MIDI ports, audio playback, network. Use it before choosing how to render or connect. |
| read_fileB | Read a text file from the working directory or the project. |
| read_libraryB | Read one file from the bundled notation library, by name or title. |
| record_decisionB | Append a line to the build journal, recording a decision and why it was made. |
| search_libraryA | Search the bundled notation library for reference material by title, key or style. |
| speech_profilesA | List the instrument speech profiles a [Stage] block can name, with how long each takes to sound and how far into the attack the ear places it. |
| stage_referenceA | Read how to write a [Stage] block: positions, listeners, speech profiles and feel. Call this before writing arrival-centric timing for the first time in a session. |
| transpose_scoreA | Transpose a notation file to another key, writing the result next to it. |
| verify_specsA | Run the project's specs and report what passes and what fails. Use this after making a change to check whether it worked. |
| write_fileA | Write a text file into the working directory, creating parent directories. |
| write_scoreA | Write TapScript notation to a .tap file. The notation is parsed first and the result reports any problems, so use this rather than write_file for music. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| composer | Write and revise notation. Reads the reference, writes, compiles, reports. |
| builder | Adapt this installation to the machine it is on and verify the result. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| notation reference | How to write TapScript notation. Read this before writing any. |
| host capabilities | What this machine can do: optional libraries, soundfonts, MIDI ports, audio playback. |
| spec: mcp.server | Any MCP client can drive the system, and several can drive one score at once |
TDQS
Scored across 27 tools
Most tools have clearly distinct purposes. A few pairs like apply_directives/conduct_score and compile_score/ensemble_render share similar actions but are differentiated by output format or input scope in their descriptions. ensemble_read and ensemble_status also overlap in state reporting but serve different detail levels. Overall, the descriptions help an agent distinguish them, though a couple of near-overlaps exist.
The naming mixes several conventions: verb_noun tools (analyze_features, read_file, write_score), noun_reference tools (directive_reference, notation_reference, stage_reference), and an ensemble_ prefix group that itself mixes verbs and nouns (ensemble_join vs ensemble_status). While snake_case is consistent, the verb/noun ordering and prefix usage are not uniform, making the naming less predictable than a single pattern.
With 27 tools, the server is on the heavy side. It covers a broad scope including notation, directives, ensemble collaboration, library access, file utilities, and build tasks. Many tools are general-purpose (list_files, read_file, write_file, probe_host, record_decision, verify_specs) and not core to music notation, but each has a clear role. The count feels borderline excessive rather than well-scoped.
The core workflow is well covered: writing, reading, compiling, transposing, and analyzing notation; applying directives; and full ensemble session lifecycle (open, join, write, render, report). References and library tools support learning, and file/build utilities round out the environment. Minor gaps like no explicit score deletion or directive update exist, but they can be worked around with existing tools.