For Developers · Panda MCP
Panda MCP-Development
Panda MCP lets an AI assistant (Claude Code, Codex, Antigravity, Cursor, Gemini) talk to a Roblox game you're running through your executor. You enable it once, connect the AI client by signing in with your Panda account or with a Client API Key, and paste a one-line loader into your executor to connect the game.
How it works
There are two sides to a Panda MCP session:
- Your AI client (Claude Code / Codex / Antigravity / Cursor / Gemini) connects over HTTP to
mcp.pandauth.com/mcp, authenticated either by signing in with your Panda account or by a Client API Key. - Your Roblox executor connects over a secure WebSocket to the same server and reports back its Roblox username, executor, place and device. This side always uses the Client API Key.
Connected executors show up live on your dashboard under Client Connected (MCP), where you can Kick or Blacklist them.
1 · Enable MCP & get your API key
Open Dashboard → MCP Control
Generate your Client API Key
Pick your permissions
Treat the key like a password
2 · Sign in from your AI client (no key in your config)
Panda MCP is an OAuth 2.1 resource server, so a client can authenticate as you without a key ever touching its config file. Point it at https://mcp.pandauth.com/mcp with no credential and it discovers the sign-in flow on its own.
claude mcp add --transport http panda-mcp https://mcp.pandauth.com/mcp
# then, inside Claude Code:
/mcp # pick panda-mcp -> AuthenticateWhichever client you use, the browser lands on the Panda consent screen: it names the client, lists exactly which permissions it is about to get, and shows Signed in as your-email so you can see which account you are binding before you press Allow. Ask the AI to run whoami afterwards and it reports the same account back.
No browser on that machine? Use a code
XXXX-XXXX code: open pandauth.com/mcp/device on any device you are signed in on, type it, approve, and the client picks up the connection within a few seconds. The code lasts 15 minutes.…or paste the code back
urn:ietf:wg:oauth:2.0:oob) get the approval page showing a long one-time code instead of redirecting. Copy it, paste it into the waiting prompt, and the client confirms which account it signed in as. That code is valid for 10 minutes and works once.A code is a live credential until it is used
Access follows your MCP switches
3 · …or connect with your Client API Key
Add Panda MCP as a remote (Streamable HTTP) server. Replace YOUR_API_KEY with the key from step 1. The header method is preferred — it keeps the key out of shell history and logs.
# Add the server (key in an auth header — recommended)
claude mcp add --transport http panda-mcp https://mcp.pandauth.com/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
# …or embed the key in the URL instead of a header
claude mcp add --transport http panda-mcp "https://mcp.pandauth.com/mcp?api_key=YOUR_API_KEY"After adding it, restart the client (or run /mcp in Claude Code) to confirm panda-mcp is connected.
4 · Connect Roblox (executor)
Paste this into your executor while in the game you want to control. Set _G.Api_Key to your Client API Key, then run the loader:
_G.Api_Key = "YOUR_API_KEY"
loadstring(game:HttpGet("https://mcp.pandauth.com/connect"))()A small Panda MCP status pill appears bottom-right. Once it reads Connected, the client shows up on your dashboard's Client Connected (MCP) panel. It auto-reconnects if the connection drops.
Optional globals (set before the loadstring):
_G.Anti_AFK = false— disable anti-AFK (on by default)._G.Keep_Reconnecting = false— stop after one disconnect._G.Panda_MCP_Url = "wss://…"— override the server URL (self-host / dev)._G.Fling_Protection = false— refuse the server's fling guard (on by default)._G.Auto_Execute = false— refuse auto-execute pushes (on by default)._G.Console_Log = false— keepprint/warnlocal instead of mirroring them to the dashboard (on by default).
These globals can only ever refuse a feature — they never switch one on that the MCP Control page has turned off.
Executor needs WebSocket + HttpGet
WebSocket.connect / syn.websocket). Most modern executors support it; a few mobile ones may not.Permissions
Each toggle on the MCP Control page controls what the AI may do:
- Roblox Developer Console — read console output / logs from the game.
- Kryptic Vault — access and manage your Kryptic Vault scripts.
- Manage your Services — act on your PandaAuth services.
- Anti-AFK — enable/disable the anti-AFK keep-alive on connected clients.
Least privilege
Runtime features
These are set on the MCP Control page and pushed to every connected client immediately — no rejoin, no re-running the loader.
- Fling Protection — clamps absurd character velocities every Heartbeat, so exploiters can't fling you off the map. Legit fast movement is preserved (the direction is kept, only the magnitude is capped).
- Auto-Execute Script — paste or upload a
.luafile (512 KB max). Every client that connects with your key runs it automatically, right after it authenticates. Saving re-fires it on clients that are already connected. - Console Log —
printandwarnfrom connected clients are mirrored to the MCP Control console as[ (Player - Executor) ] - message. Output still reaches the executor's own console as well.
Console logs are kept for 7 days
Managing connected clients
On the dashboard home, the Client Connected (MCP) panel lists every executor connected with your key:
- Kick — drop the session. The client can reconnect.
- Blacklist — permanently ban that Roblox UserId and device (HWID). It can't reconnect with your key.