Setup & Authentication
1. Turn the Control API on
- Open Settings → Control API
- Turn on Control API
- The Status row should read Listening
The server runs on the iPad itself and listens on port 6006. It is off by default and stays off until you turn it on.
The first time you enable it, iPadOS asks for Local Network permission. Allow it — without that, nothing outside the iPad can reach the server.
2. Find the iPad’s address
Everything else in these docs is http://<ipad-address>:6006/…, so this is the step to get right.
pMix tells you. The Control API settings page shows the iPad’s LAN address and the MCP endpoint, ready to copy:
Settings → Control API
If you’d rather read it from iPadOS:
Settings → Wi-Fi → tap the ⓘ next to your network → IP Address
You’ll get something like 192.168.1.42. That’s your base URL:
http://192.168.1.42:6006
Bonjour name. The Control API also advertises itself on the network as _pmix-ctrl._tcp, and the iPad answers to a .local hostname derived from its device name (Settings → General → About → Name), with spaces and punctuation replaced by hyphens. An iPad named “Studio iPad” is reachable at studio-ipad.local:
http://studio-ipad.local:6006
This is nicer than an IP because it survives a DHCP lease change — but it depends on the client machine speaking mDNS. macOS, iOS, and most Linux desktops do. Windows is the awkward one: see Connecting from Windows.
Make the address stick. DHCP can hand your iPad a different IP after a reboot or a few days off the network. If you’re wiring the API into a control-room system or an MCP client config, set a DHCP reservation for the iPad in your router so it always gets the same address.
3. Verify
From any machine on the same network:
curl http://192.168.1.42:6006/health
Then confirm you’re talking to the right iPad:
curl http://192.168.1.42:6006/info
/info reports the device name, model, port, and the complete list of endpoints your installed version supports. On Windows, use curl.exe (shipped with Windows 10 and later) or a browser — both /health and /info are plain unauthenticated GETs.
If /health times out, work through the checklist in Connecting from Windows — most of it isn’t Windows-specific.
4. The API token
Reading state is open to your local network; changing anything requires a token. pMix.studio creates the token automatically on first launch and stores it in the iPad’s Keychain.
- Settings → Control API → API Token — Reveal, Copy, or Regenerate
- Send it as a Bearer header on writes:
Authorization: Bearer <token> - Regenerate invalidates the old token immediately if it ever leaks — the new one is in effect straight away, with no restart
curl -X POST http://192.168.1.42:6006/switcher/cut \
-H "Authorization: Bearer <token>"
One read is also protected: /screenshot captures the full app window, which can include on-screen credentials (the token reveal row, a stream key field), so it requires the token like a write. Plain /snapshot frame grabs stay open.
5. Connect an MCP client
Wire pMix.studio into Claude Code as an MCP server:
claude mcp add --transport http pmix http://192.168.1.42:6006/mcp
Read-only tools work immediately. The first time the assistant tries a write — switching a source, changing a volume — it gets an authentication error and will ask you for the token. You can also supply it up front:
claude mcp add --transport http pmix http://192.168.1.42:6006/mcp \
--header "Authorization: Bearer <token>"
Any MCP client that speaks Streamable HTTP can connect the same way; the endpoint is POST /mcp. For clients that only speak stdio, and for the Windows specifics, see Connecting from Windows and Pointing an AI assistant at pMix.
Security model
The API binds to your local network only — it is not reachable from the internet, and there is no cloud service in the path. Guests on your Wi-Fi can read state (switcher layout, mixer levels, source list) but cannot change anything or capture the screen without the token.
Treat the token like a stream key. If you’ve shared it with a collaborator and the show is over, regenerate it.
One extra switch sits alongside the main toggle and stays off unless you need it: Allow UI navigation lets a client drive the app’s own panel tabs. It’s meant for smoke tests and screenshot automation — leave it off during a live show.