Skip to main content
Glama
synopsys0

PostFader V12 — FL Studio MCP Server

piano_roll_read_notes

Read pitch, timing, and expression for one channel in an FL Studio pattern without changing notes, so you can inspect MIDI before composing or transforming it.

Instructions

Read the notes of one channel in one pattern: pitch, timing, and expression.

Opens that score in FL's Piano Roll (which changes focus) but never changes
notes or enables writes. Needs the piano_roll_setup step done once. Read
before composing around existing material or transforming it. Follow
next_offset to page; a selected_only page can be empty and still have a
next_offset.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoRaw note indices per page.
offsetNoRaw note index to start this page at.
channel_indexYesGlobal Channel Rack index from channel_list.
selected_onlyNoReturn only notes selected in FL within this page.
pattern_numberYesPattern whose score to open; selected before the script runs.
session_fingerprintNoOptional session_fingerprint from a recent read. The call refuses after a bridge reload or a reported project load. This is a concurrency guard, not authentication or a durable project identity.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
ppqNo
limitYes
notesNo
offsetYes
sourceNofl_piano_roll_script_runtime
statusYes
targetYes
triggerYes
warningsNo
request_idYes
next_offsetNo
observed_atYes
channel_indexYes
project_savedNo
selected_onlyYes
notes_modifiedNo
pattern_numberYes
schema_versionNo1.0
total_note_countNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed61 schema fields changedv11.0.2
    • changedInput schema / properties / channel_index / description
      Previous value: -"Global Channel Rack target index."New value: +"Global Channel Rack index from channel_list."
    • changedInput schema / properties / offset / description
      Previous value: -"Raw score note offset."New value: +"Raw note index to start this page at."
    • changedInput schema / properties / pattern_number / description
      Previous value: -"Pattern to inspect."New value: +"Pattern whose score to open; selected before the script runs."
    • changedInput schema / properties / selected_only / description
      Previous value: -"Filter selected notes within this raw page."New value: +"Return only notes selected in FL within this page."
    • changedInput schema / properties / session_fingerprint / description
      Previous value: -"Optional expected bridge session."New value: +"Optional session_fingerprint from a recent read. The call refuses after a bridge reload or a reported project load. This is a concurrency guard, not authentication or a durable project identity."
    • removedOutput schema / $defs / HotkeyDispatch / properties / error / title
      Removed value: -"Error"
    • removedOutput schema / $defs / HotkeyDispatch / properties / fl_window_focused / title
      Removed value: -"Fl Window Focused"
    • removedOutput schema / $defs / HotkeyDispatch / properties / fl_window_found / title
      Removed value: -"Fl Window Found"
    • removedOutput schema / $defs / HotkeyDispatch / properties / hotkey_dispatched / title
      Removed value: -"Hotkey Dispatched"
    • removedOutput schema / $defs / HotkeyDispatch / properties / platform / title
      Removed value: -"Platform"
    • removedOutput schema / $defs / HotkeyDispatch / properties / shortcut / title
      Removed value: -"Shortcut"
    • removedOutput schema / $defs / HotkeyDispatch / title
      Removed value: -"HotkeyDispatch"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / color / title
      Removed value: -"Color"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / length_ticks / title
      Removed value: -"Length Ticks"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / muted / title
      Removed value: -"Muted"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / note_index / title
      Removed value: -"Note Index"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / pan / title
      Removed value: -"Pan"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / pitch / title
      Removed value: -"Pitch"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / pitch_offset_tenths / title
      Removed value: -"Pitch Offset Tenths"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / portamento / title
      Removed value: -"Portamento"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / ppq / title
      Removed value: -"Ppq"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / release / title
      Removed value: -"Release"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / selected / title
      Removed value: -"Selected"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / slide / title
      Removed value: -"Slide"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / start_ticks / title
      Removed value: -"Start Ticks"
    • removedOutput schema / $defs / PianoRollObservedNote / properties / velocity / title
      Removed value: -"Velocity"
    • removedOutput schema / $defs / PianoRollObservedNote / title
      Removed value: -"PianoRollObservedNote"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / after_channel_indices / title
      Removed value: -"After Channel Indices"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / after_pattern_number / title
      Removed value: -"After Pattern Number"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / before_channel_indices / title
      Removed value: -"Before Channel Indices"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / before_pattern_number / title
      Removed value: -"Before Pattern Number"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / channel_index / title
      Removed value: -"Channel Index"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / command / title
      Removed value: -"Command"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / pattern_number / title
      Removed value: -"Pattern Number"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / piano_roll_visibility_verified / title
      Removed value: -"Piano Roll Visibility Verified"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / piano_roll_visible_after / title
      Removed value: -"Piano Roll Visible After"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / piano_roll_visible_before / title
      Removed value: -"Piano Roll Visible Before"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / project_saved / title
      Removed value: -"Project Saved"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / selected_target_verified / title
      Removed value: -"Selected Target Verified"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / session_fingerprint / title
      Removed value: -"Session Fingerprint"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / session_precondition_applied / title
      Removed value: -"Session Precondition Applied"
    • removedOutput schema / $defs / PianoRollTargetReceipt / properties / target_fingerprint / title
      Removed value: -"Target Fingerprint"
    • removedOutput schema / $defs / PianoRollTargetReceipt / title
      Removed value: -"PianoRollTargetReceipt"
    • removedOutput schema / properties / channel_index / title
      Removed value: -"Channel Index"
    • removedOutput schema / properties / limit / title
      Removed value: -"Limit"
    • removedOutput schema / properties / next_offset / title
      Removed value: -"Next Offset"
    • removedOutput schema / properties / notes / title
      Removed value: -"Notes"
    • removedOutput schema / properties / notes_modified / title
      Removed value: -"Notes Modified"
    • removedOutput schema / properties / observed_at / title
      Removed value: -"Observed At"
    • removedOutput schema / properties / offset / title
      Removed value: -"Offset"
    • removedOutput schema / properties / pattern_number / title
      Removed value: -"Pattern Number"
    • removedOutput schema / properties / ppq / title
      Removed value: -"Ppq"
    • removedOutput schema / properties / project_saved / title
      Removed value: -"Project Saved"
    • removedOutput schema / properties / request_id / title
      Removed value: -"Request Id"
    • removedOutput schema / properties / schema_version / title
      Removed value: -"Schema Version"
    • removedOutput schema / properties / selected_only / title
      Removed value: -"Selected Only"
    • removedOutput schema / properties / source / title
      Removed value: -"Source"
    • removedOutput schema / properties / status / title
      Removed value: -"Status"
    • removedOutput schema / properties / total_note_count / title
      Removed value: -"Total Note Count"
    • removedOutput schema / properties / warnings / title
      Removed value: -"Warnings"
    • removedOutput schema / title
      Removed value: -"PianoRollNoteSnapshot"
  2. Changed7 schema fields changedv11.0.1
    • removedInput schema / properties / channel_index / title
      Removed value: -"Channel Index"
    • removedInput schema / properties / limit / title
      Removed value: -"Limit"
    • removedInput schema / properties / offset / title
      Removed value: -"Offset"
    • removedInput schema / properties / pattern_number / title
      Removed value: -"Pattern Number"
    • removedInput schema / properties / selected_only / title
      Removed value: -"Selected Only"
    • removedInput schema / properties / session_fingerprint / title
      Removed value: -"Session Fingerprint"
    • removedInput schema / title
      Removed value: -"piano_roll_read_notesArguments"
  3. First observedv10.0.0

TDQS

A4.7/5.0
Behavior5/5

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

Discloses behavior beyond the annotations: opening the score changes FL's focus, it never mutates notes or enables writes, and it requires a prior setup step. It also warns that a selected_only page can be empty yet still carry a next_offset, which is non-obvious and valuable. This reconciles the readOnlyHint=false annotation (the focus change is the side effect).

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?

Front-loads the core purpose, then layers side effects, prerequisites, and paging guidance in short sentences. No filler; every sentence carries actionable information.

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 an output schema present, return values need not be explained. The description covers the side effects, prerequisite, and pagination behavior an agent needs to invoke this correctly, leaving no meaningful 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?

Schema coverage is 100%, so the baseline is 3. The description adds genuine meaning beyond the schema by explaining how offset/next_offset paging works and the corner case where selected_only returns an empty page with a valid next_offset.

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 (Read) plus the precise resource and scope: notes of one channel in one pattern, and enumerates the fields returned (pitch, timing, expression). This clearly distinguishes it from siblings piano_roll_write_notes and piano_roll_transform_notes.

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?

Gives a concrete usage context (read before composing around or transforming existing material) and states the prerequisite (piano_roll_setup must be done once). It does not explicitly name the alternative sibling tools or state when not to use it, so it falls short of a 5.

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

Deploy Server

Other Tools