Pointing an AI assistant at pMix

There are two ways to hand pMix.studio to an AI assistant, and which one you use depends entirely on whether your client supports MCP.

  MCP REST + a primer
Client speaks MCP Claude Code, Claude Desktop, Cursor, Windsurf, Zed
Client doesn’t ChatGPT, a browser chat, your own agent code
Setup One command Paste one block of text
Tool discovery Automatic The assistant fetches /manifest

Both hit the same dispatcher inside the app, so behaviour is identical either way.


The one thing to know: /manifest

Don’t try to teach an assistant the whole API by hand — it’ll go stale and you’ll get hallucinated endpoints. Instead, point it at:

GET http://<ipad-address>:6006/manifest

/manifest is an unauthenticated, machine-readable description of every operation your installed version supports: the id, the domain it belongs to, whether it’s a read or a write, a risk rating, a human description, and the full JSON input schema. It’s the same registry the MCP server serves its tool list from, so it can never disagree with what the app actually does.

An assistant that fetches /manifest once at the start of a session knows the real, current API — including anything added since these docs were written.

GET /info is the lighter version: device identity plus a flat list of REST endpoints.


Option A — MCP (best, if your client supports it)

Claude Code

claude mcp add --transport http pmix http://192.168.1.42:6006/mcp

Read-only tools work straight away. Add the token so writes work too:

claude mcp add --transport http pmix http://192.168.1.42:6006/mcp \
  --header "Authorization: Bearer <token>"

Get the token from SettingsControl APIAPI Token on the iPad.

Clients that only speak stdio

Bridge with mcp-remote. The --allow-http flag is required — the Control API is plain HTTP on your LAN, not HTTPS.

{
  "mcpServers": {
    "pmix": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://192.168.1.42:6006/mcp", "--allow-http"]
    }
  }
}

Anything else

The endpoint is POST /mcp, JSON-RPC 2.0 over Streamable HTTP, protocol version 2025-03-26. Standard initialize / tools/list / tools/call. Check the catalog by hand:

curl -sS -X POST -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' \
  http://192.168.1.42:6006/mcp

Read-only tools need no token. Write tools return the inner 401 as an error result, so the assistant can see what went wrong and ask you for the token rather than silently failing.


Option B — REST plus a primer

For an assistant with no MCP support but the ability to make HTTP requests (ChatGPT with a tool, a browser agent, your own code), paste the block below into the system prompt or the first message. Replace the address with your iPad’s.

You can control a pMix Studio live video mixer over the local network.

BASE URL: http://192.168.1.42:6006

Before doing anything else, fetch GET /manifest. It returns every operation
this mixer supports, with a JSON input schema for each. Treat it as the
authoritative API reference and prefer it over anything you remember. GET /info
returns the flat endpoint list if you want something smaller.

AUTH
  Reads (GET) need no token.
  Writes (POST/PUT/DELETE) need: Authorization: Bearer <TOKEN>
  GET /screenshot also needs the token — it can capture on-screen credentials.
  My token is: <PASTE TOKEN HERE>

CORE READS
  GET /state           full production state: switcher, inputs, mixer, output,
                       scenes, recording
  GET /inputs          input slots and their source_ids
  GET /switcher        what is on program and preview right now
  GET /mixer           audio rows, volumes, mutes, groups
  GET /output          streaming/recording state and destinations
  GET /snapshot        JPEG of the current program frame

CORE WRITES
  POST /switcher/preview   {"source_id": "..."}
  POST /switcher/program   {"source_id": "..."}   cuts straight to air
  POST /switcher/cut       {}                     preview -> program
  POST /switcher/take      {}                     animated transition
  PUT  /mixer/sources/{id} {"volume": 0.8, "mute": false}
  PUT  /mixer/master       {"volume": 0.9}
  POST /output/start       {}                     GOES LIVE
  POST /output/stop        {}

CONVENTIONS
  Volumes are 0.0 (silent) to 1.0 (unity), never dB.
  Bitrate fields end in _bps, durations end in _s, and JSON keys are snake_case.
  All ids are strings; get source_ids from GET /inputs, never invent one.
  Errors are {"error": {"code": "...", "message": "..."}}. When you send an
  invalid enum value the message lists the valid ones — read it and retry.

HOW TO WORK
  Read GET /state before acting so you know what is actually on air.
  Standard switching is preview-then-cut: set preview, confirm it is right,
  then cut. POST /switcher/program puts a source on air immediately with no
  preview step.
  Never call /output/start, /output/stop, /recording/stop, or /switcher/ftb
  without asking me first. Those are visible to the audience.

The primer is also available as a plain-text file you can hand to an assistant by URL, which is handy for clients that can fetch a page but can’t reach your LAN to read /manifest themselves:

https://pmix.studio/control-api.txt

Working safely on a live show

An assistant driving a mixer is driving something an audience is watching. A few things worth putting in your prompt:

  • Name the destructive operations. /output/start, /output/stop, /recording/stop, and /switcher/ftb (fade to black) are all instantly visible. Tell the assistant to confirm before any of them. Every entry in /manifest carries a risk rating — read, safe_write, show_affecting, destructive, or ui_automation — so an assistant can filter on it, but saying it in plain language too tends to work better.
  • Prefer preview-then-cut. POST /switcher/program skips preview and goes straight to air. For anything the assistant isn’t certain about, have it set preview and describe what it sees first.
  • Let it look. GET /snapshot returns a JPEG of the current program frame, and GET /snapshot/{source_id} any individual source. A vision-capable assistant can check its own work before cutting. The screenshot MCP tool returns the whole app window as an image block for the same reason.
  • Give it read-only access if you want. Simply don’t hand over the token. Every GET keeps working, so the assistant can monitor, report, and answer questions about the show without being able to change anything.
  • Watch the stream instead of polling. GET /events?topics=* is a server-sent-events feed — a snapshot on connect, then deltas as things change, plus audio levels every tick. Much better than an agent hammering /state in a loop.

Back to top

© 2026 pMix Studio. Built by Smash It Studios.

© 2026 pMix Studio · pmix.studio ·