Skip to main content
Glama

project_read

Read-onlyIdempotent

Read an FL Studio .flp file into JSON without launching FL to inspect project contents, extract parts, or verify what project_write saved.

Instructions

Read one FL Studio .flp file into JSON; FL need not run and the file is not changed. Use it to see what a project holds, to take parts from it, or to check what project_write wrote. For the style across many projects use profile; for the project open in FL right now, fl_exec. Views: 'summary' (start here: instruments, per-pattern stats, a per-track arrangement timeline, the parts sounding in each bar, mixer effects); 'compact' (default: every note and clip as rows, the same shape project_write accepts; notes [bar, beat, tick, len_ticks, key, vel, instrument#], clips [track, bar, beat, tick, len_ticks, src, trim?] where src is a pattern id, s a sample, a an automation clip); 'full' (exact, round-trips byte for byte; large, so narrow it with patterns or arrangements); 'score' (a bar range of the first arrangement as text, one row per step and one column per part, so how the parts line up can be read; bars [first, last]). Fails with the parser's error on a file that is not an .flp.

Input Schema

NameRequiredDescriptionDefault
barsNoscore only: [first, last] bar, at most 16; default the first 4
pathYesthe .flp file, absolute or relative to the repo
viewNo'compact', 'summary', 'score' or 'full'compact
unusedNoalso list patterns not placed in the playlist and parked clips
patternsNoonly these pattern ids (compact, full and score)
arrangementsNoonly these arrangements, by name

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv0.4.5
    • addedInput schema / properties / bars
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "integer"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "score only: [first, last] bar, at most 16; default the first 4",
      +  "title": "Bars"
      +}
    • changedInput schema / properties / patterns / description
      Previous value: -"only these pattern ids (compact and full)"New value: +"only these pattern ids (compact, full and score)"
    • changedInput schema / properties / view / description
      Previous value: -"'compact', 'summary' or 'full'"New value: +"'compact', 'summary', 'score' or 'full'"
  2. Changed5 schema fields changedv0.2.1
    • addedInput schema / properties / arrangements / description
      Added value: +"only these arrangements, by name"
    • addedInput schema / properties / path / description
      Added value: +"the .flp file, absolute or relative to the repo"
    • addedInput schema / properties / patterns / description
      Added value: +"only these pattern ids (compact and full)"
    • addedInput schema / properties / unused / description
      Added value: +"also list patterns not placed in the playlist and parked clips"
    • addedInput schema / properties / view / description
      Added value: +"'compact', 'summary' or 'full'"
  3. First observedv0.2.0

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description goes well past them: it states the file is unchanged, warns that 'full' is large and should be narrowed with patterns or arrangements, and discloses the failure mode ('the parser's error on a file that is not an .flp').

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?

Front-loaded with the core action and the not-running/not-modified guarantees before any detail. It is long, and the view catalogue is dense, but nearly every clause carries decision-relevant information; only the inline tuple formats are slightly heavy for a description.

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

Completeness5/5

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

With six parameters, no output schema, and four view modes, the description supplies exactly what is missing: the return shape per view, the default, the sizing caveat for 'full', and the error behavior. An agent can pick a view and call it correctly without opening anything else.

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?

Schema coverage is 100% and already documents bars, patterns and arrangements, so the schema carries the basics. The description still adds real value by explaining what each view returns and in what shape (note and clip row formats, per-bar sounding parts, score layout) and by naming 'compact' as default and 'summary' as the starting point.

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 specific verb and resource ('Read one FL Studio .flp file into JSON') plus two crucial scope facts: FL need not be running and the file is not modified. It explicitly distinguishes itself from siblings profile and fl_exec by naming what those cover instead.

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?

Gives three concrete use cases ('see what a project holds', 'take parts from it', 'check what project_write wrote') and names the alternatives with the condition that selects them: profile for style across many projects, fl_exec for the project open in FL right now. Nothing is left to inference.

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