Skip to main content
Glama

spawn-mcp

Local Model Context Protocol server for the Spawn Games agent API, plus a Playwright Chromium play client so the LLM can open the live game, screenshot it, drive input, and debug without asking you to look.

New here? Read GETTING-STARTED.md instead: a plain-language walkthrough from install to your first game, no MCP experience assumed. The rest of this file is the technical reference.

Install

git clone https://github.com/wfbcargo/wfbcargo_spawn_mcp.git
cd wfbcargo_spawn_mcp
npm install
npm run build
npm run setup        # one-time: downloads Chromium (~150MB) for the play client

npm run setup is separate on purpose, so npm install never downloads a browser behind your back. The API tools work fine without it; only the spawn_play_* tools need Chromium. Equivalent: npx playwright install chromium.

Related MCP server: mcp-devtools

Cursor config

{
  "mcpServers": {
    "spawn": {
      "command": "node",
      "args": ["/absolute/path/to/wfbcargo_spawn_mcp/dist/index.js"],
      "env": {
        "SPAWN_PROJECT_DIR": "/absolute/path/to/your-spawn-game"
      }
    }
  }
}

See mcp.example.json. On Windows use forward slashes (C:/Users/you/...).

Env var

Default

Purpose

SPAWN_PROJECT_DIR

process cwd

Game project holding game.json / .env

SPAWN_PLAY_HEADED

1

0 forces headless (see the warning below); games will not render

SPAWN_TEAM

unset

1 enables team mode: adds spawn_team_* and the session latch

SPAWN_TEAM_DIR

shared .git/spawn-team

Ledger location, for agents that are not worktrees of one repo

SPAWN_ASSET_BANK

~/.spawn-mcp/assets

Cross-project asset catalog directory

SPAWN_HTTP_TIMEOUT_MS

60000

Abort API calls that hang

SPAWN_API_URL

pinned in src/config.ts

Dev override only; must be https (or localhost)

PLAYWRIGHT_BROWSERS_PATH

Playwright default

Override where Chromium is installed

Loop

edit → spawn_validate → spawn_push
     → spawn_play_open (once)
     → spawn_play_screenshot / spawn_play_input
     → spawn_logs / spawn_play_console / spawn_exec if broken
     → fix → push → screenshot again

Spawn is WebGPU/canvas, so accessibility snapshots won't see the world. Screenshots are the ground truth.

Play browser rules

Three things that cost real debugging time if you learn them the hard way:

  • Headed only. Headless Chromium gets no WebGPU adapter (requestAdapter() returns null, SwiftShader flags included), so Spawn refuses to start and every screenshot is its "One graphics fix away" gate rather than your game. spawn_play_open probes this and reports webgpu: "ok" | "unavailable" with an explanation. Leave SPAWN_PLAY_HEADED unset, and only use headed: false to reach a non-Spawn page.

  • spawn_play_eval cannot touch your game UI. ui.js renders into a cross-origin sandboxed iframe, so document.querySelector in the top frame finds none of your buttons and reaching into the frame throws. Click UI with spawn_play_input coordinates: screenshot, read the button's position off the image, click it. (spawn_play_eval also takes an expression, not a function body: wrap statements in an IIFE.)

  • spawn_exec needs a live room and cannot read your database. Rooms exist only while a player is connected, so call spawn_play_open first or you get a 5xx (the error says so). The endpoint is read-only server-side and refuses api.sql outright, even SELECT, so there is no way to query the game's SQLite from this server. Verify persistence through replicated state instead.

First connection

  1. Spawn gear → Build with a coding agent → fresh sbk_… key (~5 min, once).

  2. spawn_bootstrap → token lands in project .env (masked in tool output). Use a distinct name per agent.

  3. spawn_me, then spawn_create_game (or list + spawn_set_variant).

  4. spawn_init, read .spawn/guide.md + .spawn/tome-api.md.

  5. spawn_play_open: agent joins as its own browser client (creator can still keep their tab open).

Multi-agent

Same creator account needs no crew setup. Each agent gets its own key (settings → build with your own agent) and can push the same game concurrently, the same model Savi's background builders use.

  1. Publish in the Spawn UI before unleashing agents. Published (mode=live) stays stable for players while agents mutate dev head. There is no agent publish API; agents only read live via spawn_latest / spawn_status.

  2. One project dir (or worktree) per agent. A shared SPAWN_PROJECT_DIR will thrash game.json, scripts, and .spawn/base-version. Same SPAWN_VARIANT_ID for everyone. Credentials resolve from the project's own .env first, so a git worktree each (.env and .spawn/ are untracked) is what makes them separate connections. A key in the MCP config env is only a fallback for projects that carry none.

  3. Start with 2 to 3 agents, partition script/area ownership, treat 409 version_conflict as normal: spawn_latest → merge .theirs → push.

  4. Label bootstraps (terrain-agent, …) and call spawn_savi after meaningful pushes — with task to hand Savi a slice outright, since it fans work out across its own sub-agents (up to 8) with no key, worktree, or GPU cost on your side. Cheapest capacity available, and spawn_savi_status tells you how much of it is idle; see Delegating to Savi.

spawn_status                 # head vs published, local base, .theirs, credential source
spawn_latest                 # pull head (conflict recovery)
spawn_latest mode=live       # inspect published (no local write)
spawn_latest mode=live applyLocal=true   # reset local to published snapshot

Delegating to Savi

spawn_savi writes into the creator's studio chat, and Savi acts on what it reads there. Pass task and it can pick the work up and fan it out across its own sub-agents — up to 8, none of which cost you a bootstrap key, a worktree, a checkout, or a headed Chromium holding a GPU context. Compared to standing up another sbk_ agent it is free capacity, and it is the widest parallelism reachable from this server.

spawn_savi
  message:   "Pushed v12: parkour course in the north canyon."
  task:      "Give the canyon a night pass — lighting, ambient audio, and whatever set dressing sells it."
  subAgents: 4                                  # optional; omit to let Savi split it as far as it splits
  keepOff:   ["scripts/player/**", "world.terrain"]

Two rules make it work:

  • Delegate broad, not prescriptive. "Give the canyon a night pass" splits across sub-agents; a numbered list of edits does not. The decomposition is the part Savi's fan-out is good at, so a narrow task spends 8 agents on a job for one.

  • Never wait on it. The channel is one-way — no reply, no acknowledgement, no completion event. Declare your boundary with keepOff instead of asking for one, keep building your own area, and notice the work arriving as a head-version bump you did not cause (spawn_status), then spawn_latest to take it.

Seeing the fleet

spawn_savi_status answers the question that makes the rest of this actionable: how many of the 8 lanes are burning right now.

spawn_savi_status
  → Savi's fleet: 4/8 wisps burning — 4 lanes free
    workingOn: ["Sent wisp to rebuild the nine set pieces out of real geometry", …]
    advice: "4 of 8 lanes are idle. That is 4 sub-agents you are not using…"

The wisps are the little flames along the top of the play page — one per sub-agent, eight slots. No endpoint reports them, so this reads the play client you already have open (spawn_play_open): the studio broadcasts its state to that page, and the server keeps the latest broadcast plus a direct count of the flames on screen. Two readings of the same thing, so the count survives either one changing shape.

Use it in both directions. Before a handoff it sizes the slice — eight idle lanes is a bigger ask than one. After one, a new wisp lighting up is uptake, which is as close to an acknowledgement as this channel gets. It still reports no author: a burning wisp means Savi is busy and on what, never that it is busy on your task.

Idle lanes are the finding worth acting on. They are parallelism nobody had to key, check out, or supervise, and an agent building serially past four of them is choosing the slow route to the same place.

Team mode

Opt-in bookkeeping for the above. Set SPAWN_TEAM=1 in the first session's MCP config and run spawn_team_init in each agent's worktree. That writes a roster into the repo's shared .git/spawn-team/, which every worktree finds with no configuration and nobody can commit by accident, so later sessions pick the mode up on their own and need no extra config.

Tool

Purpose

spawn_team_init

Create the ledger if absent, register this worktree under a label

spawn_team_status

Every agent, how far behind head each rail is, who has unresolved receipts, open claims, recent pushes

spawn_team_claim / spawn_team_release

Take or give up ownership of game.json key paths and scripts/ globs

spawn_team_add

Stand up a new agent's worktree: variant, own token, scaffold, roster entry

spawn_team_brief

Ready-to-paste opening prompt for one builder, or the whole team

Four behaviours change while it is on:

  • One session drives one agent. spawn_push, spawn_latest applyLocal, spawn_revoke, and spawn_play_open latch to the first project directory they see and refuse a second one. Identity, the version rail, and the single Chromium session all belong to one directory, so driving two from one session pushes one agent's work onto the other's rail and points its screenshots at the wrong client. Read-only tools stay free to inspect any worktree, and spawn_bootstrap / spawn_init stay free so a new worktree can be provisioned from anywhere.

  • A globally configured SPAWN_PROJECT_DIR is refused, with an explanation, rather than used. It would resolve every session to one .env, so every agent would push as the same connection while appearing to work in its own worktree. An explicit projectDir argument is never refused.

  • Pushes serialise and rebase. spawn_push takes a ledger-wide lock, and from inside it "behind head" can only mean a teammate landed a push since your last sync, so it pulls first. A clean rebase costs you nothing and the 409 never happens. A rebase that collides stops the push with your work intact and the conflicts named, because that needs a decision no server should make. force: true skips the rebase, since it is a deliberate whole-replace.

  • Claims warn on push. Changes are diffed against the base rails, so what gets checked is exactly your own edits, and touching another agent's claim is reported alongside the successful push. Advisory by design: a stale claim must never become a hostage situation.

Claim game.json key paths (entities.player, world.terrain) and script globs (scripts/hud/**). Everything except scripts/** is claimed by key path, because spawn_init puts the whole spec in game.json; a world/foo.json-style pattern is rejected rather than silently never matching.

Solo, none of this exists: the tool list stays at 35, nothing latches, and pushes take no lock.

Adding an agent is two calls plus one command you run yourself:

spawn_team_add label="terrain" worktreePath="../game-terrain" branch="terrain"
  → returns: git worktree add -b terrain ../game-terrain     # run it; this server never executes git
spawn_team_add label="terrain" worktreePath="../game-terrain" bootstrapKey="sbk_…"
  → writes its variant, trades the key for its OWN token, scaffolds, registers it
spawn_team_brief label="terrain"
  → the opening prompt to paste into a session started in that worktree

Mint the sbk_ key just before the second call: they are single-use and expire in about five minutes. spawn_team_brief with no label briefs the whole team at once.

The fuller design, including what is deliberately not built and why, is in TEAM-MODE.md.

What a pull merges

spawn_latest three-way merges against the last-seen upstream, tracked in .spawn/base-scripts.json and .spawn/base-game.json. Disjoint edits compose; only genuine overlap conflicts.

Content

Merged

Conflict lands as

scripts/**

per file, by content

<file>.theirs beside it

game.json

per key path

game.json.theirs (upstream's whole spec)

world/*.json

no

nothing, see below

A conflict always keeps your value and names what collided (a path, or a dotted key like entities.player.hp). spawn_push refuses to run until every receipt is resolved and deleted.

world/*.json overlays are the gap. They are deep-merged onto game.json at compile time and never reconciled, so a stale overlay re-applies over freshly pulled content and pushes back up. Disjoint overlays are fine; two agents writing the same key are not, and nothing will warn you.

Projects created before this rail existed have no .spawn/base-game.json. Their first pull keeps the old whole-replace behaviour, copies the previous game.json to .spawn/replaced-game.json if that drops anything, and establishes the rail. spawn_status reports hasSpecRail.

Tools

API

Tool

Purpose

spawn_bootstrap

Trade sbk_… → durable token in .env

spawn_me

Whoami

spawn_list_games / spawn_create_game / spawn_set_variant

Pick a game

spawn_getting_started

Whole workflow + what this project already has (no credentials needed)

spawn_init

Scaffold project + docs

spawn_docs

Guide, tome API, skills index

spawn_skills / spawn_skill

Browse the skill menu / load a set of skills by id

spawn_latest

Pull head / published / version / updateSlug (+ script sync)

spawn_validate / spawn_push

Compile + schema check / live push

spawn_exec / spawn_logs / spawn_rooms

Live world inspect (needs a live room; no SQL)

spawn_savi

Context for Savi, or hand it a task to fan out across its sub-agents

spawn_savi_status

How many of Savi's 8 sub-agents are running, and on what (needs a play session)

spawn_revoke / spawn_status

Disconnect / local + head/published health

Asset bank

Tool

Purpose

spawn_asset_sync

Pull every game on your account and harvest its live spec (slow; the authoritative fill)

spawn_asset_scan

Harvest cdn/ paths from local projects into the cross-project bank

spawn_asset_search

Find an asset you already used, before inventing a new name (facets, category, minGames)

spawn_asset_note

Name, categorize, describe, mark good/bad, point a bad name at its replacement

spawn_asset_preview

Check existence on the CDN; render images inline so the model can see them

Local audit

Tool

Purpose

spawn_audit_scan

List exported functions and say which are auditable without a live room

spawn_audit_math

Sweep pure functions across declared input domains and check invariants

Play browser

Tool

Purpose

spawn_play_open

Launch Chromium on the play URL (headed; screenshot by default)

spawn_play_screenshot

See the world after a push (jpeg by default; format:"png" for flat art)

spawn_play_input

Keys/mouse (WASD, click, drag, type); the only way to click game UI

spawn_play_reload

Hard reload if the client didn't reshape

spawn_play_console

Page console / pageerror

spawn_play_eval

Top-frame page JS only; cannot see or click game UI

spawn_play_status / spawn_play_close

Session health (incl. a one-line fleet read) / teardown

Also: spawn_session prompt with the full loop (including multi-agent). spawn_getting_started returns the same text as a tool call, because most clients never surface prompts to the model.

Art and UI

The most common quality gap in an agent build is visual, and it has two causes worth knowing.

The engine's craft lives in skills, not in the API reference. There are ~60 of them, and the visual cluster (drawn-art, game-ui, looks, custom-materials, fx, 3d-sprites, world-composition, match-a-reference) is where textures, HUDs, colour grade, and shader surfaces are actually explained. An agent that skips them writes untextured primitives and default DOM.

Rather than rely on a prompt telling the model to go and read them, the endpoints are shaped to pull skills in: spawn_skill takes ids: [...] so the natural call carries the whole set (mechanic and look), spawn_push and spawn_play_screenshot say in their own descriptions that a plain-looking result is a missing skill rather than a missing feature, and a wrong id answers with the full menu, so guessing is cheaper than looking up.

Naming is creating. A cdn/ asset is generated on first fetch of its path and cached there forever, so the path is the asset: reference /cdn/moodboard-<slug>/<category>-<name>.<ext> and that model, texture, or clip comes into being. Agents create art by naming it, and the name is the prompt. Two consequences the tools are built around: a path cannot be re-rolled (a bad result means picking a different name, permanently), and a bare /cdn/<name>.<ext> with no moodboard folder shares one global namespace with every other game. See the asset bank below and ASSET-BANK.md.

spawn_skill ids=["game-ui","drawn-art","looks"]   # load a set; a bad id returns the menu
spawn_skills                                      # all 60, id + name + description
spawn_skills search="ui"                          # filter over id, name, description
spawn_skills detail="brief"                       # id + name only (the full index is ~9k tokens)

The index is read from .spawn/skills.json when spawn_init / spawn_docs has already saved it, so browsing costs no network call; refresh: true re-fetches.

Asset bank

Because a path is an asset, the same path in two games is the same asset — cross-project sharing costs nothing and needs no tooling. What Spawn has no API for is a catalog: the guide says so outright ("there is no catalog"). So a name that produced something great is unrecoverable knowledge the moment you forget how you spelled it, and a name that produced something bad is permanently bad, because you cannot re-roll a path.

The bank is the local record of that judgment, kept in ~/.spawn-mcp/assets/ — user-level, not per-repo, since its whole value is crossing games.

spawn_asset_sync                                           # every game on your account (start here)
spawn_asset_scan dirs=["../game-one","../game-two"]        # local-only: harvest what the checkouts cite
spawn_asset_note path="cdn/…/texture-packed-earth.png" name="dirt" category="terrain" verdict="good"
spawn_asset_search query="dirt"                            # before inventing a name
spawn_asset_search category="terrain"                      # or by your own grouping
spawn_asset_search facets=true                             # what categories/kinds/families exist
spawn_asset_search minGames=2                              # proven: reused across games
spawn_asset_preview path="dirt"                            # a name works anywhere a path does

Start with spawn_asset_sync. There is no asset API on Spawn (/api/agent/v1/assets and friends are 404), so the only account-wide record is what your games have pushed. The sync lists every game you own, fetches each one's current spec, and harvests it — which sees things a local scan cannot: games with no checkout on this machine, and assets a teammate or Savi pushed that never reached your disk. On the account this was built against a local scan of three projects found 169 assets and the sync found 408. It is slow by design (one spec fetch per game, four at a time; six games ≈ 3s), so it is a tool you run deliberately.

Every asset tool reports a syncAdvice line when the bank is empty, never synced, or over a week stale — not just search. A stale bank answers "no match", the model coins a fresh path, and an asset that already exists under a good name gets regenerated under a second one. Since a path cannot be re-rolled, those two names can never be merged.

Name your assets. A name is a short unique handle, and every tool that takes a path takes a name instead — spawn_asset_preview path="knight" rather than 60 characters of style family and hyphenation. Alongside it, category is your own grouping ("enemies", "ui-icons"), kept separate from the filename's prefix (model-, texture-) so a rescan can never overwrite a judgement.

Results report how many games use an asset, not how many directories. In team mode one game is several worktrees, so counting directories would report a three-agent team as three games. Each use records the variant id from that project's own .env, and the count collapses on it. Reuse across games is the best evidence an asset actually worked, so it feeds ranking and minGames filters on it.

One file per style family, plus _meta.json, with the root namespace split by prefix (root-effect.json, root-sfx.json) since it is usually the biggest group. At a measured 821 bytes/asset a 10k-asset bank is ~7.8 MB and parses in ~19 ms, so this is not about search speed — it keeps a one-field note from rewriting the whole catalog, and keeps each file openable.

spawn_asset_preview checks the storage host directly rather than the /cdn/ cook route. Storage answers a plain 200/404 and never generates, so a 404 honestly means "not created yet" instead of "not allowed to ask" — and for images it hands the bytes back inline, so the model judges the art instead of guessing from the filename. Models and audio report existence only; put those in the world and use spawn_play_screenshot.

Paths are classified as moodboard (the documented namespaced form), root (a bare global name, shared with every other Spawn game), custom, or ingested (opaque public.<base64> uploads, which carry no naming guidance and rank last).

A namespace warning is loud only while the name can still change. A path that is already generated — or already referenced by a game — cannot be re-rolled, so telling you to rename it is not advice; those collapse to one counted line per kind. A path storage has never seen gets the full recommendation, because that is the only moment it can be acted on.

The design, including what is deliberately not built, is in ASSET-BANK.md.

Local audit

Reviewing a build is slow because every question gets asked through the same instrument: a headed browser, a screenshot, and a judgement call. Plenty of those questions are arithmetic, and arithmetic does not need a browser.

Game scripts are plain JS, and the engine injects objectApi as a parameter rather than an import — so a function that does not take api cannot reach the engine and runs fine in Node. That is the whole basis for these two tools. Neither needs credentials, a push, a live room or Chromium.

spawn_audit_scan                     # what can be checked locally, and what needs a room
spawn_audit_math                     # run audit/math.json
spawn_audit_math checks=[…]          # try one rule without saving it first

spawn_audit_scan classifies by signature: no api parameter and no engine-only require means the function is pure. On a real 77-script game that is 185 of 271 exported functions.

spawn_audit_math reads audit/math.json in the game project, because per-game invariants are not knowledge a generic server can hold. This server owns the runner; the game owns the assertions — a test runner, and tests.

{
  "checks": [
    {
      "id": "wave-bodies-all-fit",
      "module": "scripts/battle-system.js",
      "export": "planWave",
      "args": [
        { "name": "tier", "range": [1, 12] },
        { "name": "waveInTier", "range": [1, 5] },
        { "name": "popMult", "values": [1, 1.5, 2, 3] }
      ],
      "select": "dropped",
      "assert": { "finite": true, "max": 0 }
    }
  ]
}

Domains are range (with optional step), values, or const. Assertions cover finite (NaN and Infinity), integer, min/max, the four monotonicity forms (increasingIn, nondecreasingIn, decreasingIn, nonincreasingIn, naming an argument), and expr for anything else. select pulls a field out of an object result. Failures report the exact arguments that produced them, so a finding is a line you can paste into a REPL.

On the game this was built against, six checks over 1,020 calls run in 72 ms and pin a formation that does not fit its zone to one wave: T3.3.

Two deliberate refusals. A sweep that exceeds its call budget reports CAPPED from N rather than truncating quietly, because a bounded sweep reported as a full one reads as "covered everything". And the engine-only builtins (fx, geom, three, tsl, vibe, room-routing, primitives) are refused rather than stubbed — a stub lets a check pass against behaviour that never ran, which is worse than a check that declines to run.

module.exports = { … } helpers are loaded and scanned alongside export function ones. Both systems are in use, and in practice the pure math lives in the CommonJS half.

Development

npm run typecheck   # tsc over src/ + test/
npm test            # node:test suite (no browser needed)
npm run check       # both
npm run build       # emit dist/

Tests cover the parts that silently corrupt a project when they regress: the spec compiler, the script path guards, and the three-way pull/merge in syncPulledScripts. CI runs them on Node 20/22 across Linux and Windows.

Release notes live in CHANGELOG.md. Versions are tagged v<major>.<minor>.<patch>.

The test script lists test files explicitly rather than globbing, because node --test only expands globs itself on Node 21+, and Windows shells don't expand them either. Add new test/*.test.ts files to that script or they won't run.

Security

  • SPAWN_AGENT_KEY lives in the game project's .env only.

  • Tools never echo the full token; spawn_bootstrap and spawn_status return a masked prefix.

  • .env and .spawn/ are gitignored by init/bootstrap.

  • The play browser is a normal player client. It runs in a fresh, credential-free context and does not inject the agent key into the page.

Trust model

This server hands an LLM real capabilities on your machine. Worth knowing before you run it:

  • Filesystem writes. Every tool takes a projectDir and writes .env, .gitignore, game.json, scripts/**, and .spawn/** under it. There is no sandbox beyond the path you pass.

  • Code execution. spawn_exec runs JS in your live room; spawn_play_eval runs JS in the play page; spawn_play_open will navigate to any URL it's given.

  • Untrusted text flows back to the model. spawn_logs, spawn_exec, and spawn_play_console return server- and player-influenced content. Treat it as data, not instructions.

  • The API origin is pinned to https://www.spawn.co in src/config.ts. It is deliberately not read from the project .env and not a tool argument, so neither a cloned game repo nor the model can redirect your bearer token. Only the SPAWN_API_URL process env, set by whoever wrote the MCP config, can override it, and only to an https origin (or localhost).

License

MIT. See LICENSE. Unofficial community project; not affiliated with or endorsed by Spawn.

Available Tools

32 tools
spawn_asset_noteA

Name, categorize, describe or judge an asset in the bank — including a path that has not been scanned or even used yet. A name is a short handle you can use in place of the path in every other asset tool. This is the memory the platform does not keep: a Spawn asset is generated once from its path and cached there forever, so you cannot re-roll a name, and 'this name produced the wrong thing, use that one instead' is information nothing else records. Write the description while you can still see the asset.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoShort unique handle, e.g. "knight" — usable instead of the path everywhere. Must be unique in the bank.
pathYesThe asset: either its bank name ("knight") or its path ("cdn/moodboard-lowpoly-cozy/model-humanoid-knight.glb"). A leading slash and a ?animations= query are normalized away.
tagsNoReplaces the existing tags.
verdictNo"good" ranks it higher in search; "bad" ranks it below everything and warns on retrieval.
categoryNoYour own grouping, e.g. "enemies", "ui-icons", "ambient-music". Free-form; searchable and listable.
replacedByNoFor a bad name: the name or path to use instead. This is the whole point of recording a bad one.
descriptionNoWhat the asset actually looks or sounds like. Write it as if for someone who cannot see it.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It reveals a non-obvious constraint: names are permanent ('cannot re-roll a name') and only this tool records which name is a bad replacement. It also hints at a temporal caveat (write description while visible). However, it does not disclose side-effects like whether fields are updated or replaced (schema says tags replace, but not in description), or if the tool triggers asset generation. This is partial transparency, not full.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with the core purpose, and every sentence earns its place: function, name-handle explanation, permanence rationale, and timing advice. It is concise, readable, and avoids redundant repetition of schema parameter descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters, no annotations, and no output schema, the description gives sufficient context for selection and invocation: what it does, when to use it, and a critical behavioral constraint. The schema already documents parameter semantics, so the description doesn't need to enumerate them. Remaining gaps include how updates/merging work for existing notes and what the return value is, but these are not essential for an agent to correctly call the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds context for the 'name' parameter (usable in place of path everywhere) and for 'replacedBy' (explains the 'wrong thing' information gap), but these mostly rephrase schema descriptions. No new syntax or format details are added beyond what the schema already provides, so the description adds marginal value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb list ('Name, categorize, describe or judge') on the resource 'asset in the bank', and explicitly distinguishes this tool from siblings by noting it can annotate paths not yet scanned. It also frames the unique value proposition (a persistent handle usable across all asset tools), making it immediately clear what the tool does and how it differs from scan/sync/search/preview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you can still see the asset ('Write the description while you can still see the asset') and for paths that have not been scanned yet. It gives context that names become reusable handles and that recording 'wrong thing' is only possible here. It does not explicitly name alternative tools or provide when-not-to-use exclusions, but the sibling list and the stated purpose make the usage context sufficiently clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_asset_previewA

Check whether an asset actually exists on Spawn's CDN, and LOOK AT IT if it is an image (returned inline, so you can judge it rather than guess from the filename). Use it on an unfamiliar path before building around it, and after generating a new one to see what the name produced. Safe to call: it queries the storage host directly, which never triggers generation — a 404 means the asset has not been created yet, not that you are forbidden to ask.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoRecord the result (exists, size) in the bank, adding the path if it is new.
pathYesThe asset: either its bank name ("knight") or its path ("cdn/moodboard-lowpoly-cozy/model-humanoid-knight.glb"). A leading slash and a ?animations= query are normalized away.
renderNoReturn the image inline for image assets. false checks existence only (a HEAD request).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully explains safety: it queries the storage host directly without triggering generation and clarifies that a 404 means not created rather than forbidden. This prevents common misconceptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences: purpose, usage scenarios, and safety. No fluff, front-loaded with the primary action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, usage, and safety for a simple 3-parameter tool. With no output schema, it could clarify return format for non-image assets, but the schema and description together are sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds minimal parameter meaning beyond the schema, mainly reinforcing inline rendering which is already documented in the render parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks asset existence and returns images inline for visual inspection. The verb 'check' and 'look at' specify the resource and distinguish it from sibling tools like search, sync, and scan.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit usage contexts are given: use on unfamiliar paths before building, and after generating a new asset. However, it does not explicitly mention exclusions or alternatives beyond implied context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_asset_scanA

Harvest every cdn/ asset path used in a project (or any directory) into the local cross-project asset bank, recording which files and which game use it. Spawn generates an asset on first fetch of its path and keeps it there forever, so the same path in another game is the same asset — but there is no catalog API, and this bank is the only record of which names you have already used and how they turned out. Run it on each of your game projects once, then use spawn_asset_search before inventing a new asset name.

ParametersJSON Schema
NameRequiredDescriptionDefault
dirsNoScan several directories in one call, e.g. every game project you have. Overrides projectDir.
projectDirNoDirectory to scan. Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It discloses key behavioral traits: 'Spawn generates an asset on first fetch of its path and keeps it there forever', 'there is no catalog API', and 'this bank is the only record of which names you have already used and how they turned out.' This reveals persistence, irreversibility, and sole-source-of-truth nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each earning its place: first states the core action, second explains the behavioral consequence and rationale, third gives the required operational order. No fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description must cover purpose, side effects, and relationship to siblings. It does all that: it explains what is harvested, why the bank is the only record (no catalog API), and how to use the tool in conjunction with spawn_asset_search. The full workflow is conveyed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both dirs and projectDir already well-described. The description adds workflow context ('any directory', 'each of your game projects') but no new syntactic or semantic detail about the parameters beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it 'Harvest every cdn/ asset path used in a project (or any directory) into the local cross-project asset bank' with a specific verb ('harvest') and resource ('cdn/ asset paths'). It distinguishes from sibling tools by explicitly directing users to spawn_asset_search for searching.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage workflow: 'Run it on each of your game projects once, then use spawn_asset_search before inventing a new asset name.' This names an alternative tool and gives a clear sequence of when to use this scan tool versus searching.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_asset_syncA

Sync the asset bank with your Spawn ACCOUNT: list every game you own, fetch each one's current server-side spec, and harvest the cdn/ assets it actually uses. This is the authoritative fill — it covers games you have no local checkout of, and assets a teammate or Savi added that never landed on your disk, neither of which a local spawn_asset_scan can see. SLOW BY DESIGN: one spec fetch per game, each carrying every script source, so expect seconds to low minutes on a large account. Run it once to populate an empty bank, and again when the other asset tools say the bank is stale. There is no asset API on Spawn — the specs are the only account-wide record of which assets exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNodev = current head, what agents push to (default). live = the published snapshot players see.dev
projectDirNoProject whose .env supplies the agent key. Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.
variantIdsNoSync only these games. Defaults to every game on the account.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and excels. It discloses the operation is 'SLOW BY DESIGN' with expected duration, explains what it overcomes, and notes the absence of an asset API. It also implies account-wide scope and the authoritative nature of the sync, giving the agent a clear behavioral model.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded. It opens with the core action, then explains value, performance, usage triggers, and underlying rationale. Every sentence adds meaningful context without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (account-wide sync, slow, no output schema), the description is remarkably complete. It covers purpose, what it can see beyond local scans, performance expectations, when to run, and why it's necessary. No crucial context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does not add parameter-specific details beyond the schema, but it provides context for the overall behavior that involves these parameters (e.g., account-wide sync). The schema descriptions suffice.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Sync') plus resource ('asset bank') and method ('list every game you own, fetch each one's current server-side spec, and harvest the cdn/ assets'). It explicitly differentiates from sibling spawn_asset_scan by noting coverage of games without local checkout and assets added by teammates or Savi.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when to use: 'Run it once to populate an empty bank, and again when the other asset tools say the bank is stale.' It also contrasts with spawn_asset_scan, explaining what this tool covers that the scan cannot, giving an explicit alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_bootstrapA

Trade a one-time setup bootstrap key (sbk_…) for a durable agent token. Writes SPAWN_AGENT_KEY to the project .env. The full token is NEVER returned — only a masked prefix. Bootstrap keys expire in ~5 minutes and work once.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoHuman-readable label for this agent connection (use a distinct name per concurrent agent, e.g. terrain-agent)Cursor Spawn MCP
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.
bootstrapKeyYesOne-time setup key from Spawn settings (sbk_…)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, and it excels. It explicitly states the side effect (writes SPAWN_AGENT_KEY to project .env), the response behavior (full token NEVER returned, only masked prefix), and the key lifecycle (expires in ~5 minutes, works once). This gives the agent a complete picture of what to expect without needing annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact set of four sentences, each serving a distinct purpose: stating the core exchange, the side effect, the security-masked response, and the key's time/usage limits. No redundant phrasing or filler exists. It is front-loaded with the primary action and immediately provides critical operational details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema and no annotations, the description provides a complete operational picture for a 3-parameter tool of moderate complexity. It explains the return value (masked prefix), the persistent side effect (.env write), and the constraints on the input key (expiry and single-use). This is sufficient for an agent to invoke the tool correctly and interpret the result, making it contextually complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage with descriptions for all three parameters, so the baseline is 3. The description adds minimal parameter-specific meaning beyond the schema: it reinforces the bootstrap key format (sbk_…) and its one-time nature, but it does not add value to the 'name' or 'projectDir' parameters beyond their schema descriptions. The schema does the heavy lifting here, so no additional credit is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb "trade" to explain the exchange of a bootstrap key for a durable agent token, clearly identifying the resource and action. It also mentions the side effect of writing to .env, which distinguishes it from sibling tools like spawn_revoke or spawn_me. The purpose is unmistakable and unique among the listed siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool (when you possess a one-time setup bootstrap key) and provides critical timing constraints (keys expire in ~5 minutes and work once). However, it does not explicitly name alternatives or situations where this tool should not be used, such as when a durable token already exists. Overall, the context is clear but lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_create_gameA

Create a new game in the creator's account. Optionally writes SPAWN_VARIANT_ID to .env. Creator should open the play URL and keep it open.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.
setVariantNoWrite SPAWN_VARIANT_ID into the project .env

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden. It discloses the side effect of optionally writing SPAWN_VARIANT_ID to .env and instructs keeping the play URL open, but does not mention permissions, reversibility, or the return format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two sentences with no filler: the first states the core purpose, the second adds a side effect and a usage instruction. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema and no annotations. The description provides the core purpose and a side effect, but it does not explicitly state what the tool returns (the play URL is only indirectly referenced) nor any error behavior or prerequisites, leaving gaps for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters already well-documented. The description's mention of writing SPAWN_VARIANT_ID to .env mirrors the schema's setVariant description, adding no new semantic information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly uses the verb 'Create' with the resource 'a new game' and specifies the scope 'in the creator's account'. This distinguishes it from sibling tools like spawn_init or spawn_bootstrap that also relate to game projects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when the goal is to create a new game, and the post-creation instruction ('keep the play URL open') hints at the workflow. However, it does not explicitly state when not to use it or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_docsA

Fetch engine guide, tome API reference, and skills index. Optionally save under .spawn/. For just the skill menu with descriptions, spawn_skills is cheaper.

ParametersJSON Schema
NameRequiredDescriptionDefault
saveNoWrite guide.md, tome-api.md, skills.json under .spawn/
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the optional save side effect ('Optionally save under .spawn/') but is vague about the default behavior (schema default save=true), what 'cheaper' means, and what the tool returns when save=false. This is acceptable but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, and every phrase earns its place. The alternative tool mention is concise and packed with useful guidance without any fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read/fetch tool with 2 optional params, 100% schema coverage, no output schema, the description is mostly complete. It states what is fetched, the save option, and the cheaper alternative. The only notable gap is the absence of return-value description, but 'Fetch' strongly implies the content is returned, so it does not feel under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are already well-documented. The description reinforces that the content includes guide/API/skills but adds no new details beyond schema. Baseline 3 is appropriate because the structured schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Fetch') and names three concrete resources: engine guide, tome API reference, and skills index. It clearly distinguishes this tool from the sibling spawn_skills by explicitly naming the alternative for skill-only needs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The final sentence provides explicit guidance on when to use a different tool: 'For just the skill menu with descriptions, spawn_skills is cheaper.' This gives the agent a clear selection criterion and names the alternative, exceeding a mere context implication.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_execA

Run a read-only JavaScript snippet against the live room (e.g. query objects, read an object's state). Pushing is the only write path. Needs a LIVE ROOM — rooms exist only while a player is connected, so open spawn_play_open first or you get a 5xx. api.sql is NOT available here at all (the endpoint is read-only server-side and refuses SQL outright, even SELECT) — there is no way to read the game database through this server.

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptYesJS to eval in the live room, e.g. return api.query({}).slice(0,50).map(o => ({id:o.id, pos:o.feetPosition, tags:o.tags}))
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It discloses the read-only nature, the requirement for an active room, the 5xx error condition, and the server-side refusal of SQL. This goes beyond the schema and annotations, giving the agent a complete picture of expected behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action ('Run a read-only JavaScript snippet') and then provides essential caveats in a tight three-sentence structure. Every sentence adds unique and necessary information, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description thoroughly covers prerequisites, restrictions, and error conditions, making it highly actionable. The only minor gap is that it doesn't explicitly describe the return value format, but since the tool is an evaluator, the return is implicitly the script's result. This is a small omission given the otherwise comprehensive context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides thorough descriptions for both parameters, including an example for the script. The description adds the critical constraint that api.sql is not available, which directly influences what the script parameter can contain. This adds value beyond the schema's 100% coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Run a read-only JavaScript snippet against the live room' with concrete examples like 'query objects, read an object's state'. It distinguishes itself from write tools by noting 'Pushing is the only write path', and from database access by explicitly excluding api.sql.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is explicitly tied to a live room: 'open spawn_play_open first or you get a 5xx' directly references the prerequisite and alternative. It also states when not to use it: for any database access, since api.sql is unavailable. This provides clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_getting_startedA

START HERE before any other spawn tool. The whole workflow in one call: setup order, the art/UI skills to load BEFORE building anything visual, the push → screenshot → fix loop, and the multi-agent rules. Also reports what this project already has (token, variant, game.json, docs) so you know which step you're on. Needs no credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full behavioral burden. It discloses that it 'reports what this project already has' and 'needs no credentials,' but does not explicitly state whether it modifies anything or describe the return format. The read-only implication is present but not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The three-sentence description front-loads the critical 'START HERE' directive and efficiently enumerates workflow contents, project state reports, and credential requirements without redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description partially compensates by listing the reported project artifacts (token, variant, game.json, docs) and the workflow steps covered. It lacks explicit return formatting, but for an orientation tool the provided context is largely sufficient for an agent to decide when and how to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage; projectDir is fully described in the input schema. The description does not add parameter-specific meaning beyond mentioning 'project' context, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description explicitly states 'START HERE before any other spawn tool' and describes its function as 'The whole workflow in one call' plus reporting project state, distinguishing it from siblings like spawn_init and spawn_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to use before any other spawn tool ('START HERE before any other spawn tool'), provides timing guidance ('before building anything visual'), and notes credential-free operation. The directive is clear even though alternatives are not named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_initA

Scaffold a Spawn game project: gitignore secrets, world/ + scripts/, pull current spec → game.json, materialize scripts, fetch docs into .spawn/ (guide.md, tome-api.md, skills.json).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It reveals key behaviors: creating .gitignore to protect secrets, creating directories, pulling a spec into game.json, materializing scripts, and fetching docs. However, it does not disclose side effects like overwriting existing files, requiring an existing project, or network dependencies. This is a moderate level of transparency for a scaffold tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that front-loads the purpose and uses concise step enumeration. It contains no filler, but the long list of actions could be more readable if split into bullet points. Still, every word contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is relatively simple with one optional parameter and no output schema. The description covers the main scaffold actions but omits prerequisites, return behavior, and error conditions. It is adequate but lacks full contextual depth for an agent to anticipate all outcomes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for the single parameter 'projectDir', including its default behavior. The tool description adds no parameter-specific information beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool scaffolds a Spawn game project, with specific resources: gitignore, world/ + scripts/, game.json, and .spawn/ docs. It uses the specific verb 'Scaffold' and lists concrete actions, distinguishing it from sibling tools like spawn_create_game or spawn_docs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when setting up a new Spawn project scaffold. It provides clear context but does not explicitly mention alternatives or exclusions. It could improve by contrasting with similar siblings like spawn_bootstrap, but the purpose is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_latestA

Pull a saved spec: head (mode=dev, default), published live (mode=live), an exact version, or a published updateSlug. Head pulls sync scripts (untouched fast-forward; both-changed → .theirs) and update the base-version rail — use after version_conflict. Non-head pulls are read-only unless applyLocal:true (resets local rail to that snapshot). version and updateSlug are mutually exclusive.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo'dev' = saved head (default); 'live' = published live versiondev
versionNoExact saved spec version (mutually exclusive with updateSlug)
applyLocalNoWrite pulled scripts/base-version (and game.json when saveGameJson). Defaults true for plain head pulls, false for mode=live / version / updateSlug
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.
updateSlugNoPublished update slug → pinned spec version (mutually exclusive with version)
saveGameJsonNoWhen applying: write pulled spec to game.json

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It candidly explains that head pulls write sync scripts and update the base-version rail, while non-head pulls are read-only unless applyLocal:true resets the local rail. It also discloses conflict handling (both-changed → <file>.theirs) and parameter mutual exclusivity, which are critical behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally dense yet concise, packing modes, defaults, conflict behavior, read-only conditions, and parameter constraints into three sentences. It front-loads the core purpose, and every clause adds useful information with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, no output schema, no annotations), the description covers purpose, usage, side effects, and parameter interactions thoroughly. However, it does not describe what the tool returns or outputs, which would be helpful in the absence of an output schema. Minor error behavior is also not addressed, so the score is one below excellent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Though the schema covers all parameters at 100%, the description adds meaningful interaction semantics: it explains the default applyLocal behavior per mode, mutual exclusivity of version and updateSlug, and the rail/reset implication of applyLocal. This goes well beyond what the schema's individual descriptions provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Pull a saved spec' which is a specific verb+resource, and then enumerates the distinct modes (head, live, version, updateSlug) that the tool supports. It also notes 'use after version_conflict', which frames its role among sibling tools and distinguishes it from related commands like spawn_push or spawn_init.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when to use head pulls ('use after version_conflict') and contrasts head vs non-head behavior, but it does not explicitly name alternative tools or state when not to use the tool. The guidance is contextually clear without naming siblings, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_list_gamesA

List games this token can push to: { games: [{ appId, variantId, name, playUrl }] }. Ask the creator which one by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the transparency burden. It discloses the output format and token-based restriction, but it does not explicitly state the operation is read-only, nor does it cover error conditions or authentication details. Some behavior is clarified, but gaps remain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that efficiently communicates the tool's purpose, output shape, and a follow-up instruction. No wasted words, and the structure is clear and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool with one optional parameter and no output schema, the description covers the core context: what is listed, the return shape, and the next step. It could add a brief note on read-only behavior or how projectDir affects results, but overall it is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has full coverage for the single optional parameter projectDir, so the baseline is 3. The description does not add any meaning beyond the schema for this parameter; it focuses on the output and usage, not the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists games the current token can push to, with a specific verb ('List') and resource ('games'), and it distinguishes itself from sibling tools like spawn_push or spawn_create_game. It also provides the exact output shape, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for selecting a game to push to and instructs asking the creator which one by name, but it does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions or prerequisites. The guidance is present but implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_logsB

Variant logs + live room script logs. Use when behavior doesn't match what you pushed.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool shows but not how it behaves (e.g., real-time streaming, return format, side effects, access requirements). The word 'live' hints at streaming but is ambiguous. This lack of detail leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. The first front-loads the tool's purpose, and the second gives a practical usage condition. No fluff or redundancy; every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description must explain what the tool returns or provides. It does not describe the format, granularity, or how logs are presented. It also lacks context on prerequisites (e.g., project setup). Given these gaps, the description is not complete enough for an agent to fully anticipate the tool's output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single parameter 'projectDir', which is already documented with defaults. The description does not add any extra meaning about the parameter, but it also does not need to because the schema covers it. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides 'Variant logs + live room script logs', identifying its resources and distinguishing it from sibling tools that handle status or console output. The verb is implicit ('get' or 'show'), but the specific resource combination and use-case hint make the purpose reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides a 'Use when' condition: 'behavior doesn't match what you pushed.' This gives clear context for when the tool is appropriate. It does not mention alternatives or when not to use, but the guidance is sufficient for a straightforward logging tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_meA

Whoami — returns { userId, username } for the connected Spawn agent token.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the key behavioral detail that the tool uses the 'connected Spawn agent token' and specifies exactly what is returned. While it does not explicitly state that the operation is read-only or free of side effects, that is reasonably inferable from the 'whoami' nature, and the description adds meaningful context beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It immediately communicates the tool's essence and return format, making it highly scannable and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple identity-lookup tool, the description is highly complete: it says what the tool does, what token it uses, and what it returns. The only optional parameter is fully documented in the schema. The description could add a note about behavior when no token is available, but the low complexity does not demand it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers the only parameter (`projectDir`) with a clear description of its default behavior, giving 100% schema coverage. The main description does not mention `projectDir`, but since the schema already fully documents it, the description does not need to compensate. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('returns') and resource ('connected Spawn agent token'), and explicitly specifies the return shape `{ userId, username }`. This distinguishes it from sibling tools like spawn_list_games or spawn_status, which focus on other aspects of the Spawn environment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended usage is implied: use this tool when you need the current user's identity. However, there is no explicit when-to-use guidance or mention of alternatives. No sibling tool appears to offer the same functionality, so the lack of exclusions is not problematic, but the description stops at stating what it does.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_play_closeA

Close the Playwright Chromium session.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It clearly states the primary action (closing the session) but does not disclose edge cases such as idempotency, behavior when no session exists, or resource cleanup details. This is adequate for a simple close operation but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that states the action and target directly. There is no redundant or unnecessary text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, no output schema, basic lifecycle action), the description is largely complete. It could mention calling behavior when no session is open, but the core context is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so per guidelines the baseline is 4. The empty schema fully covers the input contract; no additional semantic explanation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Close') and resource ('Playwright Chromium session'), clearly distinguishing it from sibling tools like spawn_play_open or spawn_play_screenshot. It leaves no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, nor any mention of prerequisites or consequences. The intended use is implied only by the name and domain, not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_play_consoleA

Return recent browser console / pageerror messages from the play session. Pair with spawn_logs for server-side script errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
typesNoFilter e.g. ["error","warning","pageerror"]

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility for disclosing behavioral traits. While 'Return' implies a read-only operation, it does not specify whether messages are cleared, the meaning of 'recent' (time window), or any side effects. This lack of detail could mislead the agent about the tool's effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. The first sentence front-loads the action and subject, and the second provides a cross-reference. Structure is optimal for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description captures the essential purpose and context (browser console vs server logs), and the schema covers the filter types. However, without an output schema, it doesn't describe the return format or ordering, and the semantics of 'limit' remain unclear. For a simple read tool, this is adequate but leaves noticeable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: only the 'types' parameter has a description with example values, while 'limit' has no description. The tool description adds no parameter-specific meaning, leaving 'limit' ambiguous (e.g., count limit, default value, application scope). The description should have compensated for this missing schema detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Return') and resource ('recent browser console / pageerror messages from the play session'), clearly distinguishing it from server-side logging. It also explicitly names the sibling tool spawn_logs, making the differentiation unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance by stating 'Pair with spawn_logs for server-side script errors.' This tells the agent when to use this tool (client-side messages) and implicitly when not (server-side errors), offering a clear alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_play_evalA

Evaluate JavaScript in the play page's TOP frame (browser context — not the Spawn room api). Use it for page-level diagnostics: WebGPU support, network state, document title. It CANNOT see or click the game's UI: Spawn renders the UI in a cross-origin sandboxed iframe, so document.querySelector finds none of your ui.js buttons and reaching into the frame throws. Click game UI with spawn_play_input coordinates instead, and read live world state with spawn_exec.

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptYesA JS EXPRESSION evaluated in the page's top frame (not a function body — a bare `return` is a syntax error). Wrap statements in an IIFE: (() => { ...; return x; })()

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the transparency burden. It discloses the cross-origin sandbox limitation, that reaching into the frame throws, and that the tool cannot access game UI. It also explains that the script must be an expression, not a function body, which is critical behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then expands into usage scenarios, limitations, and alternatives in a compact, well-organized way. Every sentence contributes meaningful information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with no output schema, the description comprehensively covers purpose, usage, limitations, and alternatives. The only minor gap is not explicitly stating that the expression's return value is returned to the caller, but this is reasonably inferred from 'Evaluate JavaScript'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage with a detailed description of the 'script' parameter (expression vs. function body, IIFE syntax). The tool description adds contextual value by clarifying what the script can access (top frame) and the sandboxing limitations, which enriches parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool evaluates JavaScript in the play page's top frame, distinguishing it from the Spawn room API and sibling tools like spawn_exec and spawn_play_input. It explicitly lists diagnostic use cases (WebGPU support, network state, document title), making the purpose specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance (page-level diagnostics) and when-not-to-use (cannot see/click game UI). It names alternatives: spawn_play_input for clicking UI and spawn_exec for reading world state, making the usage boundaries very clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_play_inputA

Send keyboard/mouse actions to the play session (WASD, jump, click UI, etc.). Clicks the canvas center ONCE per session to give it keyboard focus — later batches send only the actions you list, so no stray clicks fire your weapon or dismiss UI. This is also the ONLY way to click your game's UI (ui.js renders into a cross-origin iframe that spawn_play_eval cannot reach): screenshot first, read the button's position off the image, then click those coordinates. After acting, call spawn_play_screenshot to see the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNojpeg (default) is 7-14x smaller on lit/textured 3D scenes (~1.3MB png vs ~90KB jpeg) and reads the same. Prefer png for flat-shaded or pixel-art worlds, where large uniform areas compress better losslessly, or when you need exact pixels.jpeg
actionsYesOrdered list of input actions
qualityNoJPEG quality 1-100 (ignored for png)
refocusNoForce a canvas-center click before the actions (use if the game lost keyboard focus). Fires a real left click.
screenshotNoScreenshot after the sequence

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden and does well: it discloses the one-time canvas-center click for keyboard focus, the batching behavior without stray clicks, and the cross-origin iframe limitation. Minor inconsistency: the description says to call spawn_play_screenshot after, but the schema has screenshot=true by default; this is not a direct contradiction but could cause slight confusion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each with a clear purpose: definition, focus behavior, and UI workflow. It is front-loaded with the primary action and contains no fluff; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, 7 action types), the description covers the critical behavioral context: the one-time click, the UI-click method, and the follow-up screenshot step. It does not explicitly describe return values, but since the primary output is a visual screenshot and schema handles details, this is adequate. Could mention the screenshot parameter indirectly but not necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover 100% of parameters, so baseline is 3. The description adds value beyond the schema by explaining the canvas-center click behavior (relevant for click coordinates and refocus), and the pixel-from-screenshot workflow for x/y, improving practical understanding of the actions parameter and coordinate fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Send keyboard/mouse actions to the play session' with a specific verb and resource. It also distinguishes itself by noting it is the ONLY way to click the game's UI, separating it from sibling tools like spawn_play_eval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance by explaining that spawn_play_eval cannot reach the cross-origin UI iframe, so this tool is required. It also gives a concrete workflow: screenshot first, read button coordinates, then click those positions, and suggests a follow-up with spawn_play_screenshot.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_play_openA

Open the live Spawn play URL in a local Chromium (Playwright). Headed by default so you can watch. Use this as the agent's eyes/hands on the game — Spawn is WebGPU/canvas, so screenshot + input beat accessibility trees. Resolves play URL from the variant if omitted. Keep it HEADED: headless Chromium has no WebGPU adapter, so Spawn refuses to start and every screenshot shows its 'One graphics fix away' gate instead of the game. The result reports webgpu:'ok'|'unavailable'.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthNo
formatNojpeg (default) is 7-14x smaller on lit/textured 3D scenes (~1.3MB png vs ~90KB jpeg) and reads the same. Prefer png for flat-shaded or pixel-art worlds, where large uniform areas compress better losslessly, or when you need exact pixels.jpeg
headedNoShow a real browser window (default true). false = headless, which CANNOT render Spawn (no WebGPU adapter) — only useful for reaching a non-Spawn page.
heightNo
waitMsNoSettle time after navigation before returning (default 4000)
playUrlNoAbsolute play URL; otherwise resolved from the API
qualityNoJPEG quality 1-100 (ignored for png)
projectDirNoAbsolute path to the Spawn game project. Defaults to SPAWN_PROJECT_DIR or cwd.
screenshotNoReturn an image of the viewport after open

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it reveals the default headed mode, the critical failure of headless (no WebGPU adapter, 'One graphics fix away' gate), and that the result reports webgpu status. It also explains why screenshot and input are preferred. It doesn't explicitly state that a screenshot is returned by default, but that is covered in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is six sentences and slightly verbose, but every sentence earns its place—covering purpose, usage context, and the headless pitfall. It is well-structured and front-loaded with the primary action, avoiding unnecessary filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is fairly complete: it explains what the tool does, when to use it, the critical headless limitation, and what the result reports. It does not explicitly mention the default screenshot return (though the schema does), and width/height are not described, but overall it provides substantial context for an opening tool in a Playwright-based workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 78%, just below the 80% threshold, so the description should compensate. It does add one useful semantic: playUrl resolves from the variant if omitted, and it reinforces the headed parameter. However, width and height remain undocumented in both description and schema, and the description doesn't enhance the other parameter meanings beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it opens the live Spawn play URL in a local Chromium via Playwright, using a specific verb 'Open' and resource. It distinguishes itself from siblings like spawn_play_screenshot and spawn_play_input by framing itself as the agent's 'eyes/hands' on the game.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides strong usage context: it should be used as the agent's primary interface, and it explicitly warns against headless mode because it cannot render WebGPU. It does not mention alternatives by name, but implies this is the entry point before using screenshot/input tools, and gives a conditional note about playUrl resolution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_play_reloadA

Reload the play tab (e.g. if a push didn't hot-apply to this client). Prefer waiting ~1s after spawn_push first — rooms usually reshape in place.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNojpeg (default) is 7-14x smaller on lit/textured 3D scenes (~1.3MB png vs ~90KB jpeg) and reads the same. Prefer png for flat-shaded or pixel-art worlds, where large uniform areas compress better losslessly, or when you need exact pixels.jpeg
waitMsNo
qualityNoJPEG quality 1-100 (ignored for png)
screenshotNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the burden falls on the description. It states the action (reload) and hints at system behavior (rooms reshape in place), but doesn't disclose potential side effects (e.g., whether state is lost, if it's safe, or if it's synchronous). This is adequate for a simple reload but lacks the depth expected without annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two terse sentences: the first clearly states the tool's action, the second provides a practical tip. No redundant phrasing or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's core purpose and a key usage scenario, but with no output schema and partial parameter documentation, it's incomplete. It doesn't mention return values or behavior of the undocumented parameters, leaving gaps for a tool with four optional parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only documents format and quality; waitMs and screenshot lack descriptions. The description doesn't clarify these parameters—its 'waiting ~1s' advice refers to waiting before invoking the tool, not to the waitMs parameter. Since schema coverage is only 50%, the description should compensate but doesn't, leaving agent uncertain about half the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the specific action 'Reload the play tab' and contextualizes it with an example ('if a push didn't hot-apply to this client'). This clearly differentiates it from sibling tools like spawn_play_screenshot or spawn_play_input, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance ('if a push didn't hot-apply') and a strong recommendation to wait before reloading ('Prefer waiting ~1s after spawn_push first'), which effectively tells the agent when NOT to use this tool. It references the alternative (spawn_push) and explains the expected behavior (rooms usually reshape in place).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_play_screenshotA

Screenshot the open play session. Primary visual check after spawn_push — look at the image before calling the change done. Judge it as a player would: if it reads as grey boxes, flat untextured shapes, or default browser UI, that is a missing skill rather than a missing feature — load the relevant craft (spawn_skill ids: drawn-art, custom-materials, looks, game-ui, world-composition) and rewrite that code, since none of it is discoverable from the API reference. Optionally save under the project.

ParametersJSON Schema
NameRequiredDescriptionDefault
saveNoAlso write the image to <project>/.spawn/screenshots/<timestamp>.<ext>
formatNojpeg (default) is 7-14x smaller on lit/textured 3D scenes (~1.3MB png vs ~90KB jpeg) and reads the same. Prefer png for flat-shaded or pixel-art worlds, where large uniform areas compress better losslessly, or when you need exact pixels.jpeg
qualityNoJPEG quality 1-100 (ignored for png)
fullPageNo
projectDirNoAbsolute path to the Spawn game project. Defaults to SPAWN_PROJECT_DIR or cwd.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It explains the tool's purpose and implies read-only behavior (screenshot), but does not disclose return value semantics (e.g., what is returned when save=false), potential side effects, or authentication requirements. It does add valuable context about interpreting the screenshot, which exceeds a bare description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a few sentences long but each one earns its place: action, primary usage, troubleshooting guidance, and optional behavior. It front-loads the core purpose and stays focused, though it could be slightly condensed without losing value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description gives enough context for an agent to know what to do with the result ('look at the image'). It covers workflow timing, failure interpretation, and optional saving. The only notable gap is an explicit statement of the return format when save=false, but the overall guidance is robust for a screenshot tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so baseline is 3. The description adds no real parameter-level detail beyond the schema; it merely mentions 'Optionally save under the project,' which duplicates the save parameter description. The parameter semantics are adequately handled by the schema, and the description does not add further meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Screenshot the open play session.' It clearly differentiates this tool from siblings by identifying it as the primary visual check after spawn_push. No other sibling tool performs screenshots, so purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit context: use it after spawn_push and before declaring the change done. It also gives a decision path (interpret the image, identify missing skills, load relevant craft) and notes an optional save. It doesn't list alternatives or when-not-to-use, but the workflow guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_play_statusB

Whether a play browser session is open, its URL, headed mode, recent error count.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It lists the output fields (open status, URL, headed mode, recent error count) but does not explicitly state that the tool is read-only, has no side effects, or whether it requires an existing session. This leaves key behavioral expectations unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise fragment that front-loads the key output dimensions. Every word adds information, and there is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description adequately lists several return values (open status, URL, headed mode, recent error count). It does not mention error cases or define what a 'play browser session' is, but given the sibling tool names, the context is likely clear. It is sufficiently complete for a simple status query.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description does not need to explain parameter semantics, and the empty schema fully covers the input. No deduction needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly indicates this tool reports the status of a play browser session (open/closed, URL, headed mode, recent error count). It distinguishes itself from the general spawn_status and the other play_* action tools by specifying 'play browser session' as the resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives like spawn_status or spawn_play_open. The description implies it is for checking session state, but it does not state prerequisites, exclusions, or how it differs from other status/play tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_pushA

Compile + push the project live (~1s in the creator's browser). Every push rebuilds the live room. On 409 version_conflict, call spawn_latest then merge .theirs receipts and push again. In team mode pushes are serialised and rebased onto head first, so a 409 is rare and a clean teammate push costs you nothing; a rebase that collides stops the push with your work intact. A successful push proves the spec parsed, nothing more — look at spawn_play_screenshot before calling the work done, and if what you pushed is visual and untextured or plainly styled, the missing piece is a skill you did not load (spawn_skill ids: drawn-art, custom-materials, looks, game-ui).

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoWhole-replace without base-version rail / discard .theirs (destructive)
dryRunNo
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full disclosure burden. It covers key behaviors: every push rebuilds the live room, conflict handling, team-mode rebase semantics, and the fact that a successful push only proves spec parsing, not visual correctness. It also reveals that untextured/plain results imply a missing skill. This is rich and honest about consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat long but every sentence carries operational value, from the core action to conflict handling and success caveats. It is well-structured, front-loading the main purpose before diving into edge cases and troubleshooting, making it appropriate for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (conflict resolution, team mode) and the absence of both annotations and output schema, the description is remarkably complete. It explains success criteria, failure modes, and follow-up actions, leaving little ambiguity for an agent to misuse the tool. The inclusion of concrete skill IDs for visual issues is a strong bonus.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% (force and projectDir have descriptions; dryRun does not). The description adds no parameter-specific meaning, leaving dryRun entirely unexplained. It does not clarify when to use force or how projectDir is resolved. While the schema covers two params, the missing dryRun and lack of any parameter hints make this below the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function as 'Compile + push the project live', specifying both the action (compile and push) and the resource (project/live room). It also distinguishes itself from related tools by referencing spawn_latest, spawn_play_screenshot, and spawn_skill for specific follow-up actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: handles 409 conflicts by calling spawn_latest, then merging .theirs and pushing again. It also explains team-mode behavior (serialized, rebased) and advises checking spawn_play_screenshot before considering work done, plus points to spawn_skill for visual issues. This clearly differentiates from alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_revokeA

Revoke the durable agent token (disconnect). Removes SPAWN_AGENT_KEY from project .env after success.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It clearly discloses the side effect of removing SPAWN_AGENT_KEY from project .env and adds 'after success', implying transactional behavior. It does not cover all edge cases (e.g., missing .env), but it provides meaningful behavioral context beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences that front-load the primary action and then provide a specific detail about the effect on .env. No redundant or irrelevant information is included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description adequately explains what the tool does and its side effect. It could mention success/failure reporting, but the core functionality and context are sufficiently covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, projectDir, is fully described in the input schema with a clear description, so schema coverage is 100%. The tool description does not add any additional parameter semantics, but the baseline of 3 applies because the schema already explains the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Revoke'), a clear resource ('the durable agent token'), and adds a parenthetical '(disconnect)' plus an explicit effect ('Removes SPAWN_AGENT_KEY from project .env after success'). This clearly distinguishes it from sibling tools like spawn_init or spawn_exec.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by stating the tool is for revoking a durable agent token and includes the purpose '(disconnect)'. It does not explicitly name alternatives or exclusion criteria, but the use case is evident and sufficient for a focused revocation operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_roomsC

Active rooms + player counts for the current variant.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read-only operation (reporting active rooms and player counts) but does not explicitly state this, nor does it mention the return format, side effects, or permission requirements. The name 'spawn_rooms' could also suggest a creation action, creating ambiguity about whether this tool mutates state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely brief (one sentence) but under-specified. It front-loads the core subject but omits essential details like the action, output, and usage context. This is more under-specification than effective conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and only one parameter, the description must explain what the tool returns and how it behaves. It mentions 'active rooms + player counts' but does not describe the output structure or any edge cases. The lack of usage guidance and behavioral details makes it incomplete for an AI agent to reliably invoke.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema fully documents the sole parameter 'projectDir'. The tool description adds no additional meaning to the parameter, but baseline is 3 since the schema already covers it. The description's reference to 'current variant' is not linked to the parameter, providing no extra semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Active rooms + player counts for the current variant' identifies the resource (rooms, player counts) and scope (current variant) but lacks a verb, making the tool's action ambiguous. It could be interpreted as a listing/status query, but it does not explicitly state 'list' or 'get', which limits clarity. It is not a tautology but is vague about the operation being performed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, prerequisites, or exclusions. The sibling tools list includes many potentially related commands, but no differentiation is made.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_saviA

Leave background context for Savi (the creator's in-game AI companion) after meaningful pushes so you don't fight over the world.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYese.g. "Pushed v12: parkour course in the north canyon. Atmosphere untouched if you want it."
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the intent (leaving context) but omits mechanics such as whether prior context is overwritten, how Savi accesses it, or any side effects. The metaphor 'leave background context' lacks operational detail needed for an agent to understand the mutation's consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the verb and target, making it efficiently sized. However, the poetic phrasing ('fight over the world') is less precise than a straightforward operational statement, slightly reducing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having only two parameters and no output schema, the description leaves out important context such as prerequisites (e.g., an active game project), success/failure behavior, and how this tool fits into the broader gameplay workflow. An agent would not know exactly when or how to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both parameters fully described in the schema (including an example for 'message' and a default for 'projectDir'). The description adds no parameter-level detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('leave background context') directed at a distinct entity (Savi), and frames it with a clear use case ('after meaningful pushes'). This distinguishes it from sibling tools like spawn_push, which push changes, making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear timing guidance ('after meaningful pushes') and explains the intended outcome ('so you don't fight over the world'). It does not explicitly name alternatives or exclusions, but the context of when to use it is evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_set_variantA

Set SPAWN_VARIANT_ID in the project .env (join an existing game from spawn_list_games).

ParametersJSON Schema
NameRequiredDescriptionDefault
variantIdYesvariantId from list/create games
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the transparency burden. It states the primary mutation (setting an env var in .env) and its purpose, but does not disclose potential side effects such as overwriting existing values, validation behavior, or impact on any running game.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the action ('Set SPAWN_VARIANT_ID in the project .env') and appends a clarifying parenthetical. There is no redundant language; every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with no output schema, the description captures the essential purpose and behavior. It lacks explicit return/error information but is largely sufficient given the schema coverage and simplicity, making it almost complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both parameters fully described in the input schema. The description adds no new parameter details beyond reinforcing that variantId comes from spawn_list_games, so it meets the baseline for well-documented schema parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Set') and resource ('SPAWN_VARIANT_ID in the project .env'), then clarifies the purpose ('join an existing game from spawn_list_games'). This clearly distinguishes it from sibling tools like spawn_create_game, which create new games.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical explicitly frames usage as joining an existing game from spawn_list_games, providing clear context and a workflow hint. It does not enumerate alternatives or explicit 'when not to use' scenarios, but the context strongly implies the correct scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_skillA

Load the craft for what you are about to build — pass EVERY skill the work touches, not one. This is where the engine's real technique lives (how a HUD is actually built, how a material is written, how terrain is sculpted); the API reference only lists fields, so code written without the skills works but looks and behaves like a default. Anything visual should carry the look skills alongside the mechanic: a HUD is game-ui + drawn-art, a glowing surface is custom-materials + looks, a scene is world-composition + looks. Guessing an id is fine and cheap — a miss answers with the real menu.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoSingle skill id — prefer ids: [...] and load the whole set at once
idsNoSkill ids to load together, e.g. ["game-ui","drawn-art","looks"]. Pass every domain the next chunk of work touches — mechanic AND look. These are long documents (~7k tokens each), so 2-4 ids for the work actually in front of you, not the whole menu. Visual: drawn-art, game-ui, looks, custom-materials, fx, slash-vfx, 3d-sprites, world-composition, match-a-reference. Motion/camera: platformer-movement, vehicles, camera-first-person, camera-third-person, camera-isometric, camera-top-down. Systems: scripted-systems, data-and-saves, npc, enemy-ai, combat, projectiles, leaderboard, interactive-objects. Terrain/build: heightmap-terrain, voxel-terrain, structures, custom-geometry. spawn_skills is the authoritative live list.
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. It discloses that skill documents are ~7k tokens each, that loading is cheap, that a miss returns the real menu, and that skipping skills yields default-looking output. This is rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

While dense, the description front-loads the core action and each sentence provides actionable guidance (what, why, combinations, error behavior). It is moderately long but earns its length for a tool with this conceptual complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema, the description covers the essential context: when to call, what parameters to choose, size constraints, and failure behavior. It also points to spawn_skills for the authoritative list (in schema), making it sufficiently complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes all three parameters in detail (100% coverage), so the bar is at 3. The description adds value by giving concrete combination examples (HUD = game-ui + drawn-art) and the token-budget rule, which are not explicit in the schema's parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool loads the 'craft' (skills) needed for upcoming work, with an explicit directive to pass all relevant skills. It differentiates from the API reference, but does not explicitly name sibling tools like spawn_skills for list retrieval within the description, slightly limiting sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: load skills before building, pass every domain touched, limit to 2-4 ids, and combine visual skills for visual work. It also notes that guessing ids is safe and cheap, with a miss returning the real menu.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_skillsA

The menu of skill ids to pass to spawn_skill, each with what it covers. Browse it when planning a build so the spawn_skill call can carry every domain the work touches — mechanic and look together. Reads .spawn/skills.json when present (no network, no credentials) and falls back to the API. If you already know roughly what you need, skip this and pass ids straight to spawn_skill; a wrong id answers with this list anyway.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNo'full' includes each skill's description (the whole index is ~9k tokens); 'brief' is id + name onlyfull
searchNoCase-insensitive filter over id, name, and description (e.g. "ui", "camera", "terrain")
refreshNoRe-fetch the index from the API and rewrite .spawn/skills.json (needs credentials)
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description properly carries the transparency burden. It discloses that it reads .spawn/skills.json when present, falls back to the API without network/credentials in that case, and that refresh requires credentials. It also mentions the approximate token size for 'full' detail, giving a sense of cost. A minor gap is that it doesn't explicitly describe the response structure or error handling for API failures, but the provided context is already strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a few well-organized sentences with no filler. The core purpose and high-level usage appear first, followed by behavior and fallback guidance. Each sentence contributes new information, and the warning about skipping the tool when you already know what you need is a valuable inclusion without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a lookup/index tool with no output schema, so the description must explain what to expect, and it does. It explains where the data comes from (local file or API), when credentials are needed, and that a wrong ID yields the list anyway. It also gives enough context about the content (skill domains, mechanic and look) to help an agent decide when to call it. The combination of purpose, usage, fallback behavior, and token-size note makes it complete for this tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers 100% of parameters with descriptions, so baseline is 3. The description adds meaningful value beyond the schema: it explains the detail parameter's token size implication, notes that search is case-insensitive over id/name/description, and clarifies that refresh rewrites the local index and needs credentials. projectDir also gets context about default resolution, though the schema already covers that. This lifts it above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a menu of skill IDs for use with spawn_skill, each with what it covers. It distinguishes itself from the sibling tool spawn_skill by framing itself as the lookup/index companion to that tool. The phrase 'Browse it when planning a build' gives a concrete verb and resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: use it when planning a build to gather all relevant skill domains, and skip it if you already know what you need, passing IDs directly to spawn_skill. It also notes that a wrong ID will answer with this list anyway, giving a fallback behavior. This clearly differentiates when to use this tool versus the sibling spawn_skill.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_statusB

Local project status plus optional remote head/published versions: env (masked), base version, conflict receipts, docs present, headVersion vs publishedVersion when credentials allow.

ParametersJSON Schema
NameRequiredDescriptionDefault
remoteNoWhen credentials exist, also fetch head + published (mode=live) versions
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that env is masked, that remote fetch depends on credentials, and reports conflict receipts and docs presence. However, it does not explicitly state whether the tool performs any writes or the exact response structure, leaving slight ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that packs meaningful detail without fluff. It efficiently lists the key output categories and the credential condition, making it easy to parse in one line.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a status tool with no output schema, the description sufficiently enumerates the returned data points: env (masked), base version, conflict receipts, docs present, and head/published version comparison. It covers the essential information an agent needs to know what this tool returns, though it omits potential error scenarios or file paths.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters (remote, projectDir), and the description does not add meaning beyond what the schema already provides. Baseline of 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reports local project status plus optional remote head/published versions, and enumerates specific data items (env, base version, conflict receipts, docs present). It distinguishes from siblings like spawn_play_status by specifying 'local project' and remote version details, though it lacks an explicit verb and does not name alternative tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The only hint is 'when credentials allow' for remote versions, which is a credential condition, not a usage guideline. It does not say when to prefer spawn_play_status or other sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_validateA

Compile the project (game.json + world/*.json + scripts/**) and run authoritative server-side schema validation. Schema-valid is not the same as good: it says nothing about how the result looks or feels, which comes from the skills you loaded (spawn_skill) before writing the code.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectDirNoAbsolute path to the Spawn game project (game.json / .env). Defaults to SPAWN_PROJECT_DIR or the MCP process cwd.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of exposing behavior. It discloses a key nuance (schema-valid ≠ good), but does not mention potential side effects of compilation, whether it is read-only, or what the return value/response format is. The limitation statement adds transparency, but details are incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, followed by an important caveat. No filler or redundant text. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a simple parameter and clear purpose, but no output schema exists and the description does not explain what the tool returns (e.g., success/failure, validation report). The caveat about quality is useful, but the absence of return-value information leaves a gap for a validation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides a full description of projectDir, but the description adds meaningful context about the expected project structure: 'game.json + world/*.json + scripts/**'. This goes beyond the schema's mention of 'game.json / .env' and helps the agent understand what files are relevant.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Compile the project ... and run authoritative server-side schema validation.' This specifies the verb (compile/validate), the resource (project files), and the scope, distinguishing it from sibling tools like spawn_init or spawn_play_* which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides useful context on when to rely on this tool: it validates schema but not quality. It explicitly warns that 'Schema-valid is not the same as good' and points to the spawn_skill as the source of quality guidance. While it doesn't explicitly name alternative validation tools, it gives clear usage context and a limitation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 5 tool updatesv1.5.0
    • Addedspawn_asset_note
    • Addedspawn_asset_preview
    • Addedspawn_asset_scan
    • Addedspawn_asset_search
    • Addedspawn_asset_sync
  2. 5 tool updatesv1.4.0
    • Addedspawn_getting_started
    • Changedspawn_play_eval1 field changed
      • changedInput schema / properties / script / description
        Previous value: -"JS expression/function body evaluated in the page"New value: +"A JS EXPRESSION evaluated in the page's top frame (not a function body — a bare `return` is a syntax error). Wrap statements in an IIFE: (() => { ...; return x; })()"
    • Changedspawn_play_open1 field changed
      • changedInput schema / properties / headed / description
        Previous value: -"Show a real browser window (default true). Set false for headless."New value: +"Show a real browser window (default true). false = headless, which CANNOT render Spawn (no WebGPU adapter) — only useful for reaching a non-Spawn page."
    • Changedspawn_skill3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"Skill id from .spawn/skills.json"New value: +"Single skill id — prefer ids: [...] and load the whole set at once"
      • addedInput schema / properties / ids
        Added value: +{
        +  "description": "Skill ids to load together, e.g. [\"game-ui\",\"drawn-art\",\"looks\"]. Pass every domain the next chunk of work touches — mechanic AND look. These are long documents (~7k tokens each), so 2-4 ids for the work actually in front of you, not the whole menu. Visual: drawn-art, game-ui, looks, custom-materials, fx, slash-vfx, 3d-sprites, world-composition, match-a-reference. Motion/camera: platformer-movement, vehicles, camera-first-person, camera-third-person, camera-isometric, camera-top-down. Systems: scripted-systems, data-and-saves, npc, enemy-ai, combat, projectiles, leaderboard, interactive-objects. Terrain/build: heightmap-terrain, voxel-terrain, structures, custom-geometry. spawn_skills is the authoritative live list.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "id"
        -]
    • Addedspawn_skills
  3. 25 tool updatesv1.2.0
    • First observedspawn_bootstrap
    • First observedspawn_create_game
    • First observedspawn_docs
    • First observedspawn_exec
    • First observedspawn_init
    • First observedspawn_latest
    • First observedspawn_list_games
    • First observedspawn_logs
    • First observedspawn_me
    • First observedspawn_play_close
    • First observedspawn_play_console
    • First observedspawn_play_eval
    • First observedspawn_play_input
    • First observedspawn_play_open
    • First observedspawn_play_reload
    • First observedspawn_play_screenshot
    • First observedspawn_play_status
    • First observedspawn_push
    • First observedspawn_revoke
    • First observedspawn_rooms
    • First observedspawn_savi
    • First observedspawn_set_variant
    • First observedspawn_skill
    • First observedspawn_status
    • First observedspawn_validate

TDQS

B3.3/5.0
Disambiguation4/5

Tools are mostly distinct with clear purposes, especially within subgroups like play and asset. A few pairs (spawn_asset_sync vs spawn_asset_scan, spawn_play_console vs spawn_play_status) could cause initial confusion, but detailed descriptions mitigate ambiguity.

Naming Consistency3/5

All tools share the 'spawn_' prefix, and domain subgroups like spawn_play_* and spawn_asset_* follow consistent patterns. However, overall naming mixes verbs (spawn_validate), nouns (spawn_logs), verb_noun (spawn_create_game), and unusual entries (spawn_latest, spawn_savi), so the pattern is not fully predictable.

Tool Count2/5

With 32 tools, this exceeds the 25+ threshold that indicates a heavy surface. While each tool has a distinct role, the count is large enough to potentially overwhelm agents, even though the breadth of the Spawn platform partially justifies it.

Completeness4/5

The tool set covers the core game development workflow well: auth, project scaffolding, skills, push/pull, play-testing with browser interaction, logs, and asset management. Minor gaps exist (e.g., no game deletion or user management), but agents can accomplish primary tasks without dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/wfbcargo/wfbcargo_spawn_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server