MCP · Live · Closed beta

Talk to your leaderboards.

The Scorezilla MCP server lets Claude, Cursor, and any other MCP-aware AI assistant read your leaderboard data and generate ready-to-paste integration code — including a one-shot bootstrap_leaderboard that provisions a game + board + keys and hands you back working code in a single tool call.

● Status: live · closed beta
·
~8 min read
·
Nine tools shipped

01.What is the Scorezilla MCP server?

MCP — Model Context Protocol — is an open standard that lets AI assistants connect to data sources and tools. The Scorezilla MCP server exposes your leaderboards as something Claude can read and reason about. Ask "what's on my high-scores board?" — Claude actually knows.

It's a small Node binary you install once. From then on, any MCP-compatible client (Claude Desktop, Cursor, Continue.dev, custom integrations) can use it to query your Scorezilla data on your behalf.

i

Nine tools live today, gated behind a closed-beta flag. Five read: list_games, list_boards, get_keys, get_board_top_n, get_sdk_snippet. Four create-only: bootstrap_leaderboard (one-shot new game + board + keys + code), plus create_game, create_board, and mint_key for provisioning against an existing game. Ask for beta access via the early-access form.

02.What it looks like in practice

Three real scenarios. Each one would be tedious — read the docs, paste keys, write a script, run it, debug. With MCP installed, it's a sentence.

Scenario A · Diagnosing a board

C
Claude Desktop · with scorezilla MCP
Read-only
U
YOU
Why does my Neon Runner leaderboard look weird today? Top score is way higher than usual.
★
CLAUDE
Let me pull up your boards.
→ calling list_boards(game: "neon-runner")
⚡
TOOL RESULT
{
  "leaderboards": [
    { "id": "high-scores", "entries": 14238, "flagged_today": 3 },
    { "id": "weekly", "entries": 412, "flagged_today": 0 }
  ]
}
★
CLAUDE
You have 3 flagged scores on high-scores today. Let me check the top entries to see if any look suspicious.
→ calling get_board_top_n(leaderboard: "high-scores", limit: 10, include_flagged: true)
⚡
TOOL RESULT · top 3 of 10 shown
{ "rank": 1, "player": "swiftpaw_xx", "score": 12,847,500, "flagged": true }
{ "rank": 2, "player": "maya_lvl99", "score": 487,210 }
{ "rank": 3, "player": "retro_xenon", "score": 412,800 }
★
CLAUDE
Found it. swiftpaw_xx is sitting at 12.8 million — about 26× higher than your previous #1. The score is already flagged by anomaly detection. Three options:

1. If this player just had an incredible run, you can manually approve in the dashboard.
2. If it's clearly a cheat, hide the entry (flagged scores can be auto-hidden if you flip that setting).
3. If you're seeing this often, consider switching to signed submissions.

Want me to show you the full submission record (timestamp, IP region, user-agent) so you can decide?

Scenario B · Bootstrapping integration

⌘
Cursor · with scorezilla MCP
Read-only
U
YOU
Add Scorezilla to my Phaser game. Use the existing BattleScene's game-over event. Show top 10 on the game-over screen.
★
CLAUDE · in Cursor
I'll need your game's keys and a leaderboard ID. Let me check what you have set up in Scorezilla.
→ calling list_games()
⚡
TOOL RESULT
{ "games": [
  { "id": "battle-of-glyphs", "public_key": "pk_BoG_8d2c...", "boards": ["high-scores"] }
] }
★
CLAUDE · in Cursor
Got it. Using battle-of-glyphs with the existing high-scores board.

I'll write the integration to your codebase now — npm install, add the SDK init in main.ts, hook the game-over event in BattleScene.ts, and add a LeaderboardOverlay component for the game-over screen. Confirm and I'll proceed.
U
YOU
Go ahead.
★
CLAUDE · in Cursor
Cursor writes the actual integration code. The MCP server itself never touched your files — it just gave me the context to write good code with real keys and a real board ID.
i

The MCP server is read-only. It surfaces information — your games, your boards, your scores. Cursor or Claude does the file editing. This separation means you can install the MCP server safely without granting an AI agent write access to your repo.

Scenario C · Quick analytics

C
Cursor · with scorezilla MCP
One-shot scaffold
U
YOU
Add a leaderboard to my new Phaser game. Anonymous players, no backend.
★
CLAUDE
I'll scaffold the leaderboard end-to-end — game, board, keys, and integration code.
→ calling bootstrap_leaderboard(gameSlug: "your-game", gameName: "Your Game", playerIdentityStrategy: "anonymous", hostingPattern: "client_only")
⚡
TOOL RESULT
{
  "ok": true,
  "gameId": "...", "boardId": "...", "publicKey": "pk_your-game_...",
  "snippets": {
    "widget": "<link…><div data-sz-board=…><script…>",
    "sdk": "import { Scorezilla } from 'scorezilla'; …"
  },
  "recommendation": "Two integration options returned — pick widget for fastest install or SDK for custom UI…"
}
★
CLAUDE
Created and live in your Scorezilla dashboard. The widget is the fastest (one HTML line) and the SDK gives you custom UI. One thing worth flagging: this is the public-key path (no backend, as you asked) — rate-limited and anti-cheat-screened, but not tamper-proof. Fine for a jam. The moment this board decides winners, re-run me with hostingPattern: "client_with_server" and I'll wire server-signed submissions so scores can't be forged. Want the widget snippet in your index.html?

03.Install the MCP server

Two minutes. One config file. The server runs locally; your secret key never leaves your machine.

Step 1 · For Claude Desktop

Open ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or the equivalent on your OS, and add:

claude_desktop_config.json
{
  "mcpServers": {
    "scorezilla": {
      "command": "npx",
      "args": ["-y", "@scorezilla/mcp"],
      "env": { "SCOREZILLA_TOKEN": "mcp_live_..." }
    }
  }
}

Step 2 · Restart your client

Quit and re-open Claude Desktop (or your MCP client). You should see scorezilla appear in the available tools list.

Step 3 · Test it

Ask: "What Scorezilla games do I have?"

If you get back a list, you're done. If you get an error, check that the API key has read access (most do by default) and that your network can reach api.scorezilla.dev.

!

Use a scoped read-only key. In the dashboard, generate an MCP-specific key with read-only permissions. Even though the server itself can't write, scoping the key adds a second layer of safety.

Step 4 · The one-prompt recipe

Once the server is connected, paste this into Claude or Cursor. It scaffolds a tamper-proof board end-to-end — game, board, keys, and server-signed integration code — in a single turn:

prompt
Add a tamper-proof leaderboard to my {game / framework} with Scorezilla.
Bootstrap a new game + board, and wire server-signed submissions
(hostingPattern "client_with_server") so scores can't be forged — not the
public-key-only path. Then paste me the integration code.

The MCP returns the secure scorezilla/server snippet (HMAC-signed via createScoreSubmitHandler) plus the keys baked in. For a casual game jam where cheating doesn't matter, drop the "tamper-proof / server-signed" line and you'll get the simpler no-backend (public-key) path instead.

04.Available tools

The MCP server exposes these tools to AI clients. Five read-only, four create-only — all require a valid API key. Destructive ops (edit, archive, delete, key revocation) stay in the dashboard.

list_games
Returns all games associated with this API key, including IDs, public keys, and number of leaderboards.
scope · READ
list_boards
Lists all leaderboards within a specific game. Includes entry counts and flagged-submission counts.
scope · READ
get_board_top_n
Returns the top N scores for a leaderboard. Optionally include flagged or hidden entries.
scope · READ
get_keys
Returns the public key + secret-key prefix for a given game. The full secret-key plaintext stays in the dashboard; agents never see it.
scope · READ
bootstrap_leaderboard
One-shot provision: creates a tenant + game + board + key pair, then emits ready-to-paste integration code for your chosen identity / hosting / language axes. The most powerful tool — typical first call for an AI-driven integration.
scope · WRITE
create_game
Creates a new (empty) game. Use when a game already exists (so bootstrap would conflict) or you want another. Returns the new game id.
scope · WRITE
create_board
Adds a leaderboard to an existing game — the way to add boards after the first. Full options: sort direction, score kind, retention, score bounds.
scope · WRITE
mint_key
Mints a fresh public/secret key pair for an existing game. The secret is returned once. Revocation/rotation is done in the dashboard.
scope · WRITE
get_sdk_snippet
Generates a copy-paste integration snippet with your keys, board id, and chosen framework / identity / hosting pattern baked in. Same generator as bootstrap_leaderboard uses internally.
scope · READ

More tools (player rank lookup, submission audit, validation) are on the roadmap — call them out in early-access feedback if you need a specific shape and we'll prioritize.

05.What it won't do

The MCP server is intentionally narrow. Strong opinions about what an AI-facing tool should and shouldn't do — these are the things this server will never let an AI do, no matter how the request is phrased.

◆ The won't-do list

06.Why we built it this way

Design philosophy

The temptation with MCP servers is to make them do everything. Let Claude submit scores. Let Cursor delete leaderboards. Let an AI rotate your keys.

We think that's a mistake. A good MCP server is a window, not a remote control. It surfaces context — accurately, safely, in real time — and trusts the human and their AI client to decide what to do with it.

Every "won't do" on that list above is a thing some users will eventually ask for. We'll keep saying no. The boring answer ("install the SDK and write three lines yourself") is almost always the right one.

07.Roadmap

What's coming, in order. Subject to change based on what early-access folks actually need.