famistudio-mcp
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FAMISTUDIO_EXE | No | Full path to the FamiStudio binary. Otherwise common install locations and `PATH` are probed, so normally you do **not** need this — set it for a portable build, a custom location, or to pin one of several versions. | |
| FAMISTUDIO_MCP_OUTDIR | No | Output directory, used when you decline the prompt (and whenever the client cannot prompt at all). Defaults to `<tmp>/famistudio-mcp`. | <tmp>/famistudio-mcp |
| FAMISTUDIO_MCP_READDIRS | No | Extra directories the server may read project files from. | |
| FAMISTUDIO_MCP_WORKSPACE | No | Single-directory shorthand for both FAMISTUDIO_MCP_OUTDIR and FAMISTUDIO_MCP_READDIRS. |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| famistudio_infoA | Report whether the FamiStudio executable was found, which version it is, and the paths that were probed. Also lists the CLI export commands this server can run, and the directories it is allowed to read and write. |
| compute_ticksA | FamiStudio tempo arithmetic: with a uniform groove one tick equals one frame, so duration is ticks / frameRate (60.0988 NTSC, 50.007 PAL). Use it to turn a target duration into the tick count a spec needs, or to check how long a pattern budget lasts. |
| analyze_audioA | Report duration, peak/RMS level and silence for a WAV file, and optionally detect the pitch sequence. Pitch detection expects a monophonic render, e.g. a single channel exported with export_audio + separateChannels. |
| run_famistudioA | Escape hatch for FamiStudio commands this server does not wrap (NSF export, ROM export, assembly export with exotic options). Runs |
| compile_song_specA | Compile a compact JSON song specification (channels + notes) into a complete FamiStudio project object, optionally writing it to a .fms file. Object ids, the mandatory instrument envelope masks and the fixed 256-slot pattern tables are filled in automatically. The returned "project" can be passed straight to export_audio / verify_roundtrip / validate_fms. Notes can be written two ways: absolute: {"channel":"Square1","notes":[{"time":0,"note":"C4","duration":8},{"time":8,"note":"E4"}]} grid: {"channel":"Square1","notes":["C4",null,null,null,"E4"]} // one entry per tick In grid form a note without "duration" sustains until the next filled cell. FamiStudio note names are one octave above standard pitch: its "C4" sounds ~523 Hz, so write melodies one octave below the pitch you hear in a tracker. |
| create_fmsA | Convenience wrapper around compile_song_spec that always writes a .fms file and returns its path plus a structural summary. Use this when the goal is a file on disk. |
| validate_fmsA | Check every invariant FamiStudio relies on when loading a project: the mandatory four-envelope instrument masks, the DPCM mapping count, unique object ids, nextUniqueId, reference integrity, note ranges and effect ranges, and the fixed 256-entry pattern tables. Returns the list of problems. |
| read_fmsA | Decode a FamiStudio project file into structured JSON: songs, channels, patterns and notes, plus instrument envelope contents. Set includeNotes=false for a structural overview of large projects. Only version 19 files (FamiStudio 4.5.x) can be read; older files must be re-saved by FamiStudio. |
| summarize_fmsA | Return a readable listing of a project: every song with its pattern order and per-pattern note dumps, plus tick totals and rendered duration. Use this to review what a .fms actually contains. |
| diff_fmsA | Structurally compare two FamiStudio projects (files or inline objects) and list differences in metadata, instruments and per-note content. Use it to confirm that a rewrite did not change the musical content. |
| export_audioA | Render a FamiStudio project to an audio file with the FamiStudio command line. Requires FamiStudio 4.5.x to be installed; call famistudio_info first if unsure. Returns the artifact path plus duration, peak level and an audibility check for WAV output. |
| export_textB | Convert a project with |
| verify_roundtripB | The end-to-end validity check: re-export the project to FamiStudio text and render a WAV, then report whether FamiStudio loaded the file cleanly (no field desync) and produced audio of the expected length. Run this after generating a .fms file. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 13 tools
Several tools sit close together: compile_song_spec vs create_fms, validate_fms vs verify_roundtrip, read_fms vs summarize_fms, and export_audio vs analyze_audio. The descriptions do clearly separate in-memory creation from file writing, invariant checks from end-to-end verification, and structured decoding from human-readable review, but an agent must read them carefully to avoid misselection.
Most tools follow a clean verb_noun snake_case pattern such as compile_song_spec, validate_fms, and export_audio, with the repeated _fms suffix forming a recognizable family. The main deviations are famistudio_info, which is noun-style, and run_famistudio, which uses the application name as the object.
Thirteen tools is a well-scoped size for a specialized FamiStudio server, and each tool maps to a distinct part of the create-validate-export-review workflow. None feel redundant or extraneous.
The server covers the full core loop: environment info, tempo arithmetic, spec compilation, file writing, validation, round-trip verification, reading, summarizing, diffing, audio analysis, and audio/text export. A minor gap is the lack of a direct update/modify path for an existing project from structured JSON, though run_famistudio acts as an escape hatch for uncovered CLI operations.