Your AI can DJ: how we put an MCP server inside a Mac App Store app

Tremor 3.3 hosts a Model Context Protocol endpoint, so Claude Code, Claude Desktop, Cursor or any MCP client on your Mac can plan a set, load tracks, beat-match, scratch and play a drum kit over the mix. Here's how it's built, and how it got through App Review.

MindArray Labs · September 7, 2026 · Tremor 3.3 for macOS and iOS

The idea

A DJ controller is a bundle of intents: load this, play that, nudge the tempo, cut the bass, scratch. MCP is a bundle of intents too, just spoken by a language model instead of a pair of hands. So we treated an AI agent exactly like a controller: one tool layer that both a MIDI deck and an agent drive, sitting on top of the same engine that runs the app. The agent gets 28 tools and 6 built-in prompts. It can search the library with musical filters (BPM windows, Camelot compatibility, energy), read a track's structure (phrases, sections, an energy curve, where the vocals are), load and analyze, declare a beat-locked transition and let the engine execute it, fire scratch patterns on the platter physics, apply beat FX to a single stem, sequence sampler pads, play a bundled instrument kit, and record.

The important design choice is in that sentence: the agent declares, the engine executes. A language model thinks in seconds; a mix lands in milliseconds. Every musically critical action is quantized to the deck's own beat grid by the engine, so the model's latency never reaches the speakers.

Why the app has to be the server

Most MCP servers are small processes an agent spawns over stdio. That doesn't work for a DJ app: a spawned process can't own the live audio engine, the decks, the controller, the display. So Tremor itself listens, and agents connect to it. The endpoint is a hand-rolled HTTP/1.1 loop speaking MCP's streamable HTTP transport, bound explicitly to 127.0.0.1, protected by a bearer token generated on the machine and an Origin check so a web page can't reach it. It is off by default; a toggle in Settings turns it on.

Agents that insist on stdio get a tiny bridge, tremor-mcp, shipped inside the app bundle as a compiled, signed, sandboxed helper. The agent spawns the bridge; the bridge relays to the local endpoint. The app and the bridge share an app group where the app writes a small discovery file when the feature is on and deletes it when it's off. The bridge refuses everything without that file, so the toggle is a real revocation, not a suggestion.

What App Review asked

The macOS build sat in review for five days and came back with one question, under guideline 2.4.5(i): why does the app hold the com.apple.security.network.server entitlement? A sandboxed Mac app can't open a listening socket without it, even on loopback, and there is no loopback-only variant. We answered in the thread with what the endpoint is, how it's protected, how to see it in Settings, and a screenshot of the status line showing the bound address. Approved. The lesson for anyone shipping something similar: put the entitlement and its reason in the first line of your review notes, because the entitlement diff against your live build is what routes you to a human.

What it's like to use

Turn on AI Agent Access, click Copy Setup Command, paste it in Terminal. Your agent now lists Tremor's tools. Then you talk to it like a DJ you're standing next to:

"Dig my crate for 130-BPM breaks in 9A, plan a twenty-minute build, and mix it. Echo-out the first switch, spinback the last."

It digs, loads, waits for analysis, cues each incoming track so its drop lands at the handoff, and mixes. Ask for a scratch on the next drop and the platter does a real flare, beat-locked. Ask for kicks and hat rolls over the breakdown and the instrument rack plays them on the grid. Everything runs locally. No accounts, no telemetry, no audio ever leaves the Mac.

What we got wrong first

Our own launch-night showcase prompt asked the agent to time a choreography, stem slams on phrase lines, a tease, a mid-blend bass swap, from its own clock. With seconds of latency per call, it drifted by whole phrases and a deck ran out to silence. The fix is the same principle applied harder: a cue sheet the agent declares once, addressed in bars and beats, that the engine performs sample-accurately. That's the next update, with rehearsal tests that record the show and fail on any dead air.

Try it

Tremor 3.3 is on the Mac App Store and the App Store, with the agent endpoint on macOS. The setup guide is in the docs. If you build MCP clients or DJ software and want to compare notes, we'd like to hear from you: support@mindarray.io.

Patent pending. Tremor's AI Agent Access and the orbital fader are the subject of pending U.S. patent applications.