Skip to main content
Glama
Benedict

TidalCycles MCP Server

by Benedict

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
GHCI_PATHNoPath to the ghci executable (required for direct GHCi mode)
TIDAL_FILENoAbsolute path to the output .tidal file (used in both modes)
TIDAL_USE_GHCINoSet to 'true' to enable direct GHCi mode (experimental)
TIDAL_BOOT_PATHNoAbsolute path to BootTidal.hs file (required for direct GHCi mode)

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

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
tidal_evalA

Evaluate a TidalCycles pattern on a specific channel (d1-d9). Replaces anything on that channel, including its layers. To build a channel you can edit piece by piece, use tidal_set_layer instead.

tidal_hushA

Stop all currently playing patterns immediately. Use this to clear everything.

tidal_silenceA

Stop a specific channel. More graceful than hush for single channels.

tidal_get_stateA

Get the current state of all channels - what patterns are playing and when they started.

tidal_statusA

Check the server's setup: mode, the ghci and boot file it uses (as resolved), whether Tidal is running and its version, the control port, the last error, and where it logs. In GHCi mode this starts Tidal if it isn't running, so it reports whether Tidal actually starts. Use it when something doesn't work.

tidal_set_tempoB

Set the tempo in beats per minute, assuming four beats per cycle (setcps (bpm/60/4)).

tidal_soloA

Solo a specific channel, muting all others until tidal_unsolo is called.

tidal_unsoloA

Restore all channels after soloing (unsolos every soloed channel).

tidal_get_historyA

Get the history of patterns evaluated in this session.

tidal_set_layerA

Add or replace one named layer of a channel, then re-evaluate that channel. A channel's pattern is built as: $ $ ... # # . Transforms apply in the order they were added, outermost first. Each channel has one source; setting a new one replaces the old. Give variants to let tidal_autopilot switch between them. Call tidal_palette for idioms that work.

tidal_remove_layerA

Remove a named layer from a channel and re-evaluate it. Removing the last layer silences the channel.

tidal_autopilotA

Keep layered channels evolving between turns. While running, each layer changes on its own random timer: it switches to another of its variants, and transform layers sometimes lay out for a while. start: begin or resume, optionally with new settings. pause: stop changing, keep playing. stop: stop changing and hush everything. status: report settings and how many layers are moving.

strudel_set_blockA

Add or replace a named block in the Strudel program, which plays on every open Strudel page (the server's web page at /strudel; needs TIDAL_UI_PORT). Each block is one Strudel pattern in JavaScript syntax, e.g. s("bd*2 [~ sd]").bank("RolandTR909") or note("c e g").s("piano").fast(2). Blocks play together. If Strudel rejects the code, you get its error and nothing changes.

strudel_remove_blockB

Remove a named block from the Strudel program. Removing the last one hushes Strudel.

strudel_set_tempoB

Set Strudel's tempo in beats per minute, assuming four beats per cycle (setcpm(bpm/4)).

strudel_hushA

Stop everything in Strudel and clear its blocks.

strudel_get_stateA

Show the Strudel program, its blocks, how many Strudel pages are open, and the page's address.

tidal_paletteA

Get a reference list of Tidal transforms, sources and controls that combine well, grouped by layer kind.

tidal_set_controlA

Change a named value in Tidal without re-evaluating any pattern, through Tidal's control port. Patterns read it with cF (numbers) or cS (strings), e.g. tidal_eval d1 's "bd*4" # lpf (cF 1000 "cutoff")', then set cutoff here. With seconds, a number glides from its current value, for sweeps and fades.

tidal_list_samplesA

List the sample banks and synths SuperDirt has installed. Use these names with s or sound; any other name is silent. Check here before using a sample you aren't sure exists.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 20 tools

Disambiguation4/5

The tidal_/strudel_ prefixes cleanly separate the two subsystems, and descriptions explicitly differentiate the easy confusions (tidal_hush for all vs tidal_silence for one channel; tidal_eval replaces a whole channel vs tidal_set_layer builds piece by piece). The three read-back tools (tidal_get_state, tidal_status, tidal_get_history) target genuinely different things but their similar 'get/status' framing creates mild ambiguity. Overall mostly distinct with a couple of soft overlaps.

Naming Consistency4/5

All names use snake_case with a consistent domain prefix (tidal_ or strudel_), and most follow verb_noun (set_layer, remove_layer, list_samples, get_state, set_tempo). A handful drop the noun (tidal_solo, tidal_hush, tidal_eval, tidal_palette), which is a minor deviation but keeps the prefix system predictable.

Tool Count4/5

Twenty tools exceeds the typical 3-15 sweet spot, but the surface spans two distinct systems (Tidal and Strudel) plus layered-channel management, autopilot, palette, and samples, so most tools earn their place. It is slightly heavy but not gratuitous.

Completeness4/5

Tidal coverage is close to full (eval, layer add/remove, hush/silence, solo/unsolo, tempo, control port, palette, samples, history, status). Strudel is thinner, lacking solo, palette, samples, and control equivalents, but its core block/tempo/hush lifecycle is present. Minor gaps an agent can work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues