Skip to main content
Glama
pnilan

midi-mcp

by pnilan

midi-mcp

MCP server that lets Claude control electronic music instruments via MIDI. Exposes tools for sending MIDI messages (notes, CC, program changes, pitch bend, sysex) to hardware synths and drum machines connected via USB or DIN MIDI.

Setup

Requires uv.

cd midi-mcp
uv sync

Related MCP server: FL Studio MCP

Usage

Add to Claude Code

claude mcp add midi-mcp -- uv --directory /path/to/midi-mcp run midi-mcp

Or add manually to your MCP config:

{
  "mcpServers": {
    "midi-mcp": {
      "command": "uv",
      "args": ["--directory", "/path/to/midi-mcp", "run", "midi-mcp"]
    }
  }
}

Run standalone

uv run midi-mcp

Tools

Tool

Description

list_midi_ports

List available MIDI output ports

open_midi_port

Open a specific MIDI output port by name

close_midi_port

Close the currently open port

get_midi_status

Return current port name and connection state

send_note_on

Send Note On (channel, note, velocity)

send_note_off

Send Note Off (channel, note, velocity)

send_cc

Send Control Change (channel, control, value)

send_program_change

Send Program Change (channel, program)

send_pitchwheel

Send Pitch Bend (channel, value)

send_sysex

Send SysEx message (list of data bytes)

Dependencies

Available Tools

10 tools
close_midi_portB

Close the currently open MIDI port.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Close') but lacks details on effects (e.g., whether closing is reversible, if it frees resources, or potential errors if no port is open). This is a significant gap for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, direct sentence with zero waste. It's front-loaded with the core action and resource, making it highly efficient and easy to parse. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a mutation operation with no annotations and no output schema), the description is incomplete. It doesn't explain what happens after closing (e.g., state changes, return values, or error conditions), leaving gaps for an agent to understand the full behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description doesn't add param info, but that's appropriate here. Baseline for 0 params is 4, as it avoids unnecessary details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Close') and the target resource ('the currently open MIDI port'), making the purpose immediately understandable. It doesn't explicitly differentiate from siblings like 'open_midi_port' or 'get_midi_status', but the verb 'Close' inherently contrasts with 'open' and 'get' operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., that a port must be open first), exclusions, or related tools like 'open_midi_port' for reopening. Usage is implied by the phrase 'currently open,' but no explicit context is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_midi_statusB

Return current MIDI connection status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool returns status but doesn't elaborate on what that status entails (e.g., connected/disconnected, port details, error states), whether it's a read-only operation, or if it has side effects like refreshing connections. This leaves significant gaps in understanding the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with zero waste—it directly states the tool's function without unnecessary words. It's front-loaded and efficiently conveys the core purpose, making it easy to parse and understand immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally adequate but lacks depth. It doesn't explain what 'MIDI connection status' includes or the return format, which could be crucial for an agent to interpret results. However, the low complexity means it's not entirely incomplete, just basic.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate here, but it could have mentioned any implicit inputs (e.g., context or state), though none are indicated. Baseline is high due to the lack of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Return') and resource ('current MIDI connection status'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'list_midi_ports' (which might list available ports rather than connection status), leaving room for slight ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't specify if this should be used before opening a port, after sending commands, or in error scenarios, nor does it mention any prerequisites or exclusions relative to siblings like 'list_midi_ports' or 'open_midi_port'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_midi_portsB

List available MIDI output ports.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits such as whether this is a read-only operation, if it requires specific permissions, what the return format looks like, or any rate limits. This leaves significant gaps for a tool that likely interacts with system resources.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without any wasted words. It's appropriately sized for a simple tool with no parameters, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema) and lack of annotations, the description is adequate but has clear gaps. It states what the tool does but doesn't provide enough context about behavior, output, or usage relative to siblings, making it minimally viable but incomplete for informed tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description doesn't need to add parameter semantics, and it doesn't introduce any confusion, warranting a baseline score above minimum viable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('List') and resource ('available MIDI output ports'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'get_midi_status' which might also provide port information, so it doesn't reach the highest score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_midi_status' or 'open_midi_port'. It lacks context about prerequisites, timing, or exclusions, leaving the agent with minimal usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_midi_portA

Open a MIDI output port by name. Use list_midi_ports to see available ports.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the action ('Open') and a prerequisite (using 'list_midi_ports'), but lacks details on behavioral traits such as error handling, permissions needed, or what happens if the port is already open. It adds some context but is incomplete for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main purpose in the first sentence and uses a second sentence for essential guidance, with zero wasted words. It is appropriately sized and structured for clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (mutation with no annotations or output schema) and low schema coverage, the description is somewhat complete but lacks details on return values, error cases, or side effects. It provides basic usage but could be more comprehensive for safe operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and 1 parameter, the description adds meaning by specifying that the parameter 'name' refers to a MIDI output port name, which is not evident from the schema alone. However, it doesn't detail format constraints or examples, keeping it slightly above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Open') and resource ('a MIDI output port by name'), distinguishing it from siblings like 'close_midi_port' (closing) and 'list_midi_ports' (listing). It directly addresses what the tool does without being vague or tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly provides when to use this tool ('Open a MIDI output port by name') and directs to an alternative ('Use list_midi_ports to see available ports'), offering clear context and distinguishing it from other siblings like 'send_note_on' or 'get_midi_status' without misleading guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_ccC

Send a MIDI Control Change message.

Args:
    channel: MIDI channel (0-15)
    control: CC number (0-127)
    value: CC value (0-127)
ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
controlYes
valueYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Send') but doesn't cover critical aspects like whether this requires an open MIDI port, potential side effects (e.g., audio output), error handling, or rate limits. For a tool that likely interacts with hardware/software, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose in the first sentence, followed by a structured list of parameters. It's efficient with minimal waste, though the parameter explanations could be slightly more integrated into the flow rather than listed separately, preventing a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of MIDI operations and the lack of annotations or output schema, the description is incomplete. It doesn't address prerequisites (e.g., needing an open port), potential errors, or what happens after sending the message. For a tool with no structured safety or output info, this leaves too many unknowns for reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaningful semantics for all three parameters by explaining their roles (MIDI channel, CC number, CC value) and valid ranges (0-15 for channel, 0-127 for control and value). Since schema description coverage is 0%, this compensates well, but it doesn't go beyond basic definitions to explain implications or examples, keeping it at an adequate level.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Send a MIDI Control Change message.' It specifies the verb ('Send') and resource ('MIDI Control Change message'), making it immediately understandable. However, it doesn't explicitly differentiate from siblings like send_note_on or send_program_change, which are also MIDI message-sending tools, so it falls short of a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose send_cc over other MIDI message tools like send_note_on or send_pitchwheel, nor does it specify any prerequisites or exclusions. This lack of context makes it harder for an agent to decide appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_note_offA

Send a MIDI Note Off message.

Args:
    channel: MIDI channel (0-15)
    note: Note number (0-127)
    velocity: Release velocity (0-127, usually 0)
ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
noteYes
velocityNo

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool does but doesn't mention whether it requires an open MIDI port, what happens if parameters are out of range, whether it's synchronous/asynchronous, or any error conditions. For a tool that sends hardware messages, this is a significant gap in behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized with a clear purpose statement followed by parameter explanations. The structure is front-loaded with the main action, and each parameter description earns its place by adding value. It could be slightly more concise by combining the parameter explanations into a single paragraph.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (3 parameters, no output schema, no annotations), the description is partially complete. It excels at parameter semantics but lacks behavioral context and usage guidelines. For a MIDI tool that interacts with hardware, more information about prerequisites and error handling would be helpful for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides excellent parameter semantics beyond the schema, which has 0% description coverage. It explains that 'channel' is MIDI channel (0-15), 'note' is note number (0-127), and 'velocity' is release velocity (0-127, usually 0). This adds crucial meaning about valid ranges and typical values that the schema alone doesn't provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Send a MIDI Note Off message'), identifies the resource (MIDI Note Off), and distinguishes it from siblings like 'send_note_on' by specifying the message type. It provides a precise verb+resource combination that leaves no ambiguity about the tool's function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'send_note_on' or other MIDI message tools. While the purpose is clear, there's no mention of typical use cases, prerequisites (e.g., needing an open MIDI port), or how it relates to sibling tools in the MIDI workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_note_onA

Send a MIDI Note On message.

Args:
    channel: MIDI channel (0-15)
    note: Note number (0-127). 60 = middle C.
    velocity: Velocity (0-127)
ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
noteYes
velocityYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits like whether this is a write operation, if it requires specific permissions, what happens if the MIDI port isn't open, or any rate limits. The description is minimal and lacks necessary context for safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the main purpose. The parameter explanations are clear and efficient, though the structure could be slightly improved by explicitly labeling the parameter section. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (MIDI operation with 3 parameters), no annotations, and no output schema, the description is partially complete. It explains parameters well but lacks behavioral context, usage guidelines, and output information. It's adequate for basic understanding but has clear gaps for safe and effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the input schema, which has 0% coverage. It explains each parameter's purpose, valid ranges (0-15 for channel, 0-127 for note and velocity), and provides a concrete example (note 60 = middle C). This fully compensates for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Send a MIDI Note On message') and distinguishes it from sibling tools like send_note_off, send_cc, etc. It explicitly identifies the resource (MIDI Note On message) and verb (Send).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like send_note_off or send_cc. The description lacks context about prerequisites (e.g., needing an open MIDI port) or typical use cases (e.g., triggering musical notes).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_pitchwheelA

Send a MIDI Pitch Bend message.

Args:
    channel: MIDI channel (0-15)
    value: Pitch bend value (-8192 to 8191, 0 = center)
ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
valueYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the action ('Send') but doesn't disclose behavioral traits like whether this requires an open MIDI port, potential latency, error conditions, or what happens if the channel/port isn't available. The description is minimal and lacks operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the core purpose in the first sentence, followed by parameter details. Every sentence earns its place by providing essential information without redundancy. It could be slightly more structured but is highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is partially complete. It fully documents parameters but lacks behavioral context (e.g., dependencies, errors, typical usage). For a MIDI tool with siblings, more guidance on integration would be helpful, but the parameter coverage is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the input schema, which has 0% description coverage. It explicitly defines the parameter ranges and semantics: 'channel: MIDI channel (0-15)' and 'value: Pitch bend value (-8192 to 8191, 0 = center)'. This compensates fully for the schema's lack of documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Send a MIDI Pitch Bend message') and identifies the resource (MIDI pitch bend). It distinguishes from siblings like send_cc, send_note_on, etc., by specifying the exact type of MIDI message being sent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. While the description implies it's for sending pitch bend messages, it doesn't mention prerequisites (e.g., requires an open MIDI port), typical use cases, or when other tools like send_cc might be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_program_changeA

Send a MIDI Program Change message.

Args:
    channel: MIDI channel (0-15)
    program: Program number (0-127)
ParametersJSON Schema
NameRequiredDescriptionDefault
channelYes
programYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the action ('Send') but doesn't describe what happens if the MIDI port isn't open, whether this is a blocking/non-blocking operation, error conditions, or any side effects. The description provides minimal behavioral context beyond the basic action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly concise with zero wasted words. It starts with the core purpose, then provides parameter details in a clean, structured format. Every sentence earns its place by adding essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter tool with no annotations and no output schema, the description adequately covers the basic purpose and parameter semantics. However, it lacks important context about prerequisites (needs open port), error handling, and behavioral details that would be helpful for an agent invoking this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds crucial semantic information beyond the schema's 0% coverage. It explains that 'channel' represents MIDI channel with range 0-15 and 'program' represents program number with range 0-127, which the schema only indicates as integers without context. This fully compensates for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Send a MIDI Program Change message'), identifies the resource (MIDI message), and distinguishes it from siblings like send_note_on or send_cc by specifying the exact type of MIDI message. It goes beyond the tool name to explain what the tool actually does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like send_cc or send_note_on, nor does it mention prerequisites such as requiring an open MIDI port. It simply states what the tool does without contextual usage information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_sysexB

Send a MIDI System Exclusive message.

Args:
    data: List of SysEx data bytes (0-127 each, without F0/F7 framing)
ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Send') but does not cover critical aspects like whether this requires an open MIDI port, potential side effects (e.g., hardware changes), error handling, or response format. The mention of data formatting (bytes 0-127 without F0/F7) is helpful but insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, with the core purpose in the first sentence and parameter details following. It avoids unnecessary words, though the structure could be slightly improved by integrating the parameter explanation more seamlessly rather than as a separate 'Args:' section.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (mutation with no annotations or output schema) and low schema coverage, the description is incomplete. It lacks information on prerequisites (e.g., open port), behavioral outcomes, error conditions, and what happens after sending the message. For a tool that interacts with external hardware, this is a significant gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains that 'data' is a list of SysEx data bytes, specifies the valid range (0-127), and clarifies formatting (without F0/F7 framing). This compensates well for the schema's lack of documentation, though it doesn't detail the array's length or other constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Send a MIDI System Exclusive message') and resource ('SysEx data bytes'), distinguishing it from sibling tools like send_cc or send_note_on that handle different MIDI message types. It precisely defines what the tool does without being vague or tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as send_cc or send_program_change, nor does it mention prerequisites like needing an open MIDI port. It lacks explicit context for usage decisions, leaving the agent to infer based on the purpose alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a distinct purpose with no overlap: port management (list/open/close/status), and specific MIDI message types (note on/off, CC, pitch bend, program change, sysex). The descriptions clearly differentiate them, eliminating any ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case (e.g., list_midi_ports, send_note_on). The verbs are appropriate and predictable across the set, making the naming highly consistent.

Tool Count5/5

With 10 tools, this server is well-scoped for MIDI operations. It covers essential port management and a comprehensive set of MIDI message types, with each tool serving a clear and necessary function in the domain.

Completeness5/5

The tool set provides complete coverage for basic MIDI output: port lifecycle (list, open, close, status) and all standard message types (note on/off, CC, pitch bend, program change, sysex). There are no obvious gaps for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/pnilan/midi-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server