loopclub-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@loopclub-mcp make a dark techno loop — four-on-the-floor kick, off-beat hats, low C2 drone"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
loopclub-mcp
Jam with Claude. An MCP server that turns
a described beat into a loopclub link — ready to audition
and rent on-chain. It is a pure encoder over loopgen: it holds
no keys, talks to no chain, and signs nothing. Your Claude does the musical
thinking and calls build_loop; the server bit-packs it and returns a ?jam=
deep link. You open the link, audition the loop free, and rent the cells
yourself in the app.
you (to your Claude): "dark techno — four-on-the-floor kick, off-beat hats, a low C2 synth drone"
│
▼ Claude calls build_loop({ tracks: [...] })
loopclub-mcp → loopgen.encode → toLink → ?jam= link + ASCII grid
│
▼ Claude replies with the link
you click → loopclub opens with the loop pre-loaded → "Rent these cells" → one signatureInstall
Claude Code:
claude mcp add loopclub -- npx -y loopclub-mcpClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"loopclub": { "command": "npx", "args": ["-y", "loopclub-mcp"] }
}
}Set LOOPCLUB_ORIGIN to point links at a specific deployment (defaults to
https://app.loopclub.xyz — the app subdomain that handles ?jam= links; the
apex loopclub.xyz is the landing page and ignores the param):
{ "mcpServers": { "loopclub": {
"command": "npx", "args": ["-y", "loopclub-mcp"],
"env": { "LOOPCLUB_ORIGIN": "https://app.loopclub.xyz" }
}}}Related MCP server: Ableton MCP
Remote (hosted) — add it on claude.ai with no install
The same server runs over MCP's Streamable HTTP transport so claude.ai (Pro/Max) users can add it as a custom connector by URL — no local tooling:
Settings → Connectors → Add custom connector →
https://<host>/mcp
The deployed host is mcp.<your-tunnel-domain> (the branded mcp.loopclub.xyz
needs loopclub.xyz's DNS moved to Cloudflare — see deploy/). Exact deploy
steps for the VPS are in deploy/ (systemd user unit + Cloudflare tunnel rule).
Run it yourself:
npm run build
npm run start:http # listens on 127.0.0.1:8787 (POST /mcp), front with a proxyIt binds to localhost only and is meant to sit behind a TLS-terminating
reverse proxy / Cloudflare tunnel (see deploy/). It is no-auth by design —
the server holds no keys, signs nothing, and is a pure stateless encoder, so
there is nothing to steal. The risks of a public endpoint are abuse / DoS, not
data loss; those are bounded both in-process (body cap, input bounds, host/origin
allowlist, rate limit, stateless JSON mode) and at the edge (Cloudflare WAF).
Full threat model: SECURITY.md.
Config (env, all optional):
var | default | purpose |
|
| listen port |
|
| bind address — keep on localhost behind a proxy |
|
| Host-header allowlist (DNS-rebind defense) |
|
| Origin allowlist (absent Origin = allowed; foreign = 403) |
|
| request body cap |
|
| coarse per-IP rate limit (Cloudflare is primary) |
|
| origin baked into emitted |
What it exposes
Tools
build_loop({ tracks, name? })→{ deepLink, asciiGrid, cellCount, instruments, note }. The core.tracksmirror a loopgenLoopSpec: drum tracks carry litsteps(0–15); thesynthtrack carriesnotes({ step, pitch }, pitch as MIDI or a name like"C3").describe_loop({ link } | { pattern, synthData? })→ a per-track summary + the ASCII grid. Reads a?jam=link a user pasted, or raw wire bigints.
Resources (so Claude generates good loops, not random cells)
loopclub://vocabulary— the grid rules, pitch range, and how to be musical.loopclub://genres— worked example loops (house, techno, boom-bap, dnb) as ASCII + spec, for few-shot grounding.loopclub://how-it-works— the free-audition / paid-press lifecycle.
Prompt
jam({ genre?, bpm? })— a one-click entry point that tells Claude to read the resources, build something idiomatic and in-key, and return the link.
Design boundary (deliberate)
No signing, no keys, no wallet, no chain reads. The server only produces links; the user signs rent in the app. This is why session keys / PR #6 are irrelevant here.
Stateless. Same spec in → same link out. Restartable, trivially scalable if hosted later (a remote Streamable-HTTP build is a fast-follow).
The musical engine is entirely
loopgen; this package is ~3 small files of glue (schemas→handlers→server).
Develop
npm install # pulls loopclub-loopgen from npm
npm test # vitest — handler logic + loopgen round-trip
node scripts/smoke.mjs # end-to-end: spawns the server, drives real JSON-RPC
npm run build # tsc → dist/ (bin: loopclub-mcp)
loopgen— the musical codec this server encodes with — is published separately asloopclub-loopgenand developed in the loopclub monorepo. A change to the on-chain wire format means a newloopgenrelease and a bump here.
Available Tools
2 toolsbuild_loopBuild a loopclub loopA
Turn a described beat into a loopclub link. Returns a ?jam= deep link, an ASCII grid preview, the lit-cell count, and the instruments used. The user opens the link to audition the loop free and rent the cells in-app. Read loopclub://vocabulary and loopclub://genres first for idiomatic loops.
Inputs: tracks (required), name.
describe_loopDescribe a loopclub loopA
Read a loop back: pass a ?jam= link (or raw pattern/synthData bigints) and get a human-readable, per-track summary plus the ASCII grid. Use it to inspect a loop a user pasted, or to verify what you just built.
Inputs: link, pattern, synthData.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 2 tools
build_loop creates a loop from a described beat, while describe_loop reads an existing loop back. The two operations are exact opposites with no overlapping purpose, making misselection very unlikely.
Both names follow a strict snake_case verb_noun pattern and share the same noun stem (loop). This is highly predictable and consistent.
Two tools is thin for a loop-building service, even if create/read are the core operations. It sits at the borderline of feeling under-scoped rather than clearly appropriate.
The server covers the main lifecycle of constructing a loop and inspecting it, which matches the stated purpose of generating and verifying ?jam= links. Minor gaps like updating, deleting, or listing loops are not present, but loops may be treated as immutable links.
Maintenance
Related MCP Connectors
Turn Claude into a creative studio: DNA-locked characters, images, video, voiceover — 55 tools.
Generate AI music via the Lacuna Music API from MCP clients like Claude Desktop & Code.
Make AI Tracks, loops and sound effects, split stems, build drum kits and master songs.
Create, co-edit, analyze, publish, and export collaborative step-sequencer sessions through MCP.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Claude AI to generate professional, production-ready MIDI files (chord progressions, drum patterns, bass lines, melodies, and full arrangements) compatible with any DAW including Logic Pro, Ableton Live, FL Studio, and more.13MIT
- AlicenseNot gradedqualityDmaintenanceEnables natural language control over Ableton Live for generating musical patterns, melodies, and full song arrangements. It also provides tools for sample searching and mixing assistance through an OSC-based connection with Claude Desktop.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables natural language control of Ableton Live through Claude, including session management, track and clip creation, device parameter adjustment, and browser browsing.1-
- AlicenseNot gradedqualityDmaintenanceEnables semantic search of local audio samples by describing sounds, MIDI generation, stem separation, and other music production tools from Claude Desktop.2MIT