Skip to main content
Glama
Echo722

reaper-mcp-bridge

by Echo722

reaper_eval

Execute arbitrary Lua inside REAPER to control projects, tracks, and rendering when no typed tool fits; returned values are sent back as JSON.

Instructions

Execute arbitrary Lua inside REAPER. The reaper global is available; values you return are sent back as JSON. Use this for anything not covered by a typed tool. Example: return reaper.GetNumTracks(). If you pass args, it is exposed in the chunk as the variable args.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
argsNo
codeYes
undoNo
labelNoeval

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.2.0

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations the description carries the full burden, and it does disclose real behavior: the `reaper` global is in scope, returned values are serialized to JSON, and `args` is injected as a variable. It omits the behavioral meaning of the `undo` parameter (default true implies mutations are wrapped in an undo block by default) and the `label` parameter, and says nothing about error/failure semantics for arbitrary code.

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?

Four short sentences, front-loaded with the core capability, each carrying distinct payload (scope, return contract, routing rule, a concrete example). Nothing is redundant and the example earns its place by showing the exact call shape.

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 an arbitrary-code-execution escape hatch with no annotations and no output schema, the description covers the call contract but leaves gaps an agent needs: the default undo wrapping, what `label` affects, and whether eval'd mutations are as safe/reversible as the typed tools. Adequate but not complete for this risk profile.

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?

Schema description coverage is 0% across 4 parameters, so the description must compensate. It explains `code` implicitly (the Lua chunk) and `args` explicitly, but never mentions `undo` (default true) or `label` (default 'eval') — two of four parameters are undocumented in both schema and description.

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?

States a precise verb and resource ('Execute arbitrary Lua inside REAPER') and immediately frames itself as the escape hatch that the sibling list of typed tools cannot cover. An agent can distinguish it from list_tracks/add_fx/etc. without opening the schema.

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

Usage Guidelines4/5

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

'Use this for anything not covered by a typed tool' gives a clear selection condition and implicitly names the alternative category (the typed siblings). It does not give explicit when-not guidance (e.g. prefer a typed tool for safety/discoverability even when eval would work), so it falls just short of the top mark.

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