Documentation

← Panda Auth

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

1

Open Dashboard → MCP Control

Go to Dashboard → MCP Control and turn on Enable Panda MCP-Development.
2

Generate your Client API Key

Click Generate API Key. The full key is shown once — copy it now. You can Reset it anytime (which invalidates the old one).
3

Pick your permissions

Toggle what PandaMCP is allowed to do (developer console, Kryptic Vault, services, anti-AFK). See Permissions below.

Treat the key like a password

Anyone with your Client API Key can connect as you. Don't commit it to a repo or paste it in a public place. If it leaks, hit Reset API Key.

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 -> Authenticate

Whichever 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.

1

No browser on that machine? Use a code

Over SSH, inside a container, or in any client that cannot open a browser, the same sign-in works with a code instead of a redirect. Clients that support the device flow print a short 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.
2

…or paste the code back

Clients that ask for a pasted code (they register the redirect 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

Anyone who gets the code in that window can connect as you. Never read one out on stream or paste it into a chat — if one leaks, deny the next prompt and start over.

Access follows your MCP switches

Signing in grants only what MCP Control has enabled at that moment. Turning Panda MCP off, or turning a permission off, applies to the next tool call — there is no separate list of client grants to go clean up.

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 — keep print/warn local 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

The loader uses the executor's WebSocket API (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

Leave everything off and switch on only what a given task needs. You can change permissions any time — they apply to new tool calls immediately.

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 .lua file (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 Logprint and warn from 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

Lines live in Redis, not the database, and expire automatically after 7 days. They're capped per account, so a chatty script can't grow without bound.

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.