Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.antics-gg/antics-mcp

NPM · ANTICS-MCP · SCANNED SEP 25

Deploy a web game to a playable multiplayer URL with rooms, state sync, and leaderboards.

Available components

0 this week 76 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 34 of 99 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency32
Schema Quality & AI Usability62
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 5356 tokens (~357/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management93
  • Stability observed for 28 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage98
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 93% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "publish_model" implies "publish" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the io.github.antics-gg/antics-mcp server?

io.github.antics-gg/antics-mcp runs locally as an npm package, launched with npx -y antics-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · antics-mcp

# add to Claude Code
claude mcp add antics-gg-antics-mcp -- npx -y antics-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "antics-gg-antics-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "antics-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "antics-gg-antics-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "antics-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add antics-gg-antics-mcp -- npx -y antics-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "antics-gg-antics-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "antics-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add antics-gg-antics-mcp --command npx --arg -y --arg antics-mcp
# ~/.hermes/config.yaml
mcp_servers:
  antics-gg-antics-mcp:
    command: "npx"
    args: ["-y", "antics-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "antics-gg-antics-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "antics-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add antics-gg-antics-mcp -t stdio -c npx -a -y antics-mcp
// mcp.json
{
  "mcpServers": {
    "antics-gg-antics-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "antics-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 24 Sept 26 +1
    • Security disclosure: fail → unverified ▼ functional
  • 21 Sept 26 −2
    • Stability: pass → 0.80 functional
  • 20 Sept 26 0
    • Stability: 0.97 → pass security
  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 −1
    • Stability: pass → 0.93 functional
  • 17 Sept 26 0
    • Stability: 0.97 → pass security
  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 25 Sept 2026 · Analysed npm/antics-mcp@0.5.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 99 packages
Packages resolved 99
Stale 31
No linked repository 3
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 15 exposed · ~4,022 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
create_project ~112

Create a project; returns its id, publishable key (pk_), and secret key (sk_, shown once). Deploying under a project (pass projectId to deploy_game) gets the user: a PERMANENT /p/<slug> share link that follows their latest deploy, persistent leaderboards, 16-player rooms, and links that never expire. Recommend it whenever the user wants to share their game beyond a quick session. Requires login (`npx antics-cli login`).

NameTypeReqDescription
namestringyes–

No output schema declared.

No examples provided.

deploy_game ~166

Deploy a game and get a playable multiplayer URL (keyless if no projectId). Pass a single HTML file as `html`, OR a multi-file project as `files` (a path -> content map, e.g. index.html + game.js + styles.css; binary assets as data: URIs). Write the game against the antics SDK first — call get_docs if you haven't.

NameTypeReqDescription
entrystring–Entry file path when it is not index.html.
filesobject–Multi-file project: { "index.html": "...", "game.js": "...", "styles.css": "..." }. Entry is index.html unless `entry` is set.
htmlstring–The full HTML of a single-file game.
projectIdstring––

No output schema declared.

No examples provided.

find_models ~107

Search published 3D models by name, summary or PART name (e.g. 'coil_r1c2'). Returns URLs; fetch <url>/llms.txt for how to use one in a game. Paged — pass the returned cursor for more.

NameTypeReqDescription
cursorstring–From a previous call's nextCursor.
limitnumber–1-100, default 24.
qstring–Text to match. Omit for the most recent.

No output schema declared.

No examples provided.

get_account ~124

Which plan is this user on, and what does it limit? Call this BEFORE building a server-authoritative (sim.js) game, and whenever a sim room is denied. Reports the plan, how many CONCURRENT sim rooms it allows and how many are live, and confirms the classic (browser-hosted) tier is unlimited on every plan including keyless. Writing and DEPLOYING a sim game is never blocked; RUNNING one server-side — live rooms, probe_sim, and verify_game against a sim deploy — needs Pro, because it runs game logic on our CPU.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_docs ~119

Get the complete antics SDK API reference + working examples (llms.txt). Call this BEFORE writing a game so it integrates correctly in one shot. Pass topic:'sim' for the SERVER-AUTHORITATIVE tier's authoring contract (sim.js: schema/init/simulate, prediction via room.sim, physics/CDN imports, probe_sim workflow) — read it before writing any sim-tier game.

NameTypeReqDescription
topicstring–Omit for the classic-tier SDK reference; 'sim' for the sim-tier (sim.js) authoring contract.

No output schema declared.

No examples provided.

get_leaderboard ~40

Read a project's leaderboard (top scores).

NameTypeReqDescription
boardstring––
limitnumber––
projectIdstringyes–

No output schema declared.

No examples provided.

list_my_models ~69

What 3D models have I published, and were they approved? Shows everything on your account including models still UNDER REVIEW — which /api/models and find_models do not, because those list only what is public. Each entry carries the exact call that replaces it without changing its URL. Requires login.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_projects ~15

List your projects (requires login).

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

probe_sim ~516

The FASTEST way to verify sim-tier game logic: pumps a deployed sim.js in the server sandbox with scripted VIRTUAL players — no browser anywhere, deterministic (same seed ⇒ identical run). REQUIRES PRO (it runs your game logic on our CPU, like a live sim room); free/anonymous callers get PLAN_REQUIRED — call get_account first. Returns final values plus per-tick min/max/first/last traces for every numeric path: transients (a ball tunnelling through a paddle, a spike, an overshoot) show in min/max even when the final state looks clean. Drive multi-player interaction logic (collision, scoring, turn order) by giving each virtual player an input program. Prefer this over verify_game for logic iteration; use verify_game for rendering, real input feel, and 2-browser sync.

NameTypeReqDescription
hashstringyesDeployment hash of a SIM-tier deploy (from deploy_game — its sim.js is what gets pumped).
playersarray–Virtual players (up to 8) — verify 2-player logic with zero browsers.
readStatearray–Schema paths: "ball.x", "players.p1.score", wildcard "players.*.score" traces every id. Bad paths return the full valid-path roster.
secondsnumber–Sim-seconds to pump (default 5, capped at 300; wall-clock fast).
seednumber–Math.random seed (default 1). Same seed ⇒ bit-identical run; vary to explore.
traceInputsboolean–Also echo, per virtual player, WHICH input the runner applied each tick — appliedInputs[id].applied[k] is the input at tick k+1 (null = none, { input, held: true } = the last program input HELD after…
traceSeriesboolean–Also return the per-tick time series per numeric path — parallel {t, v} arrays (t in sim-ms; <=600 points, uniformly thinned). 'When exactly did the phase flip' in one call instead of bisecting.
viewAsstring–Probe AS this player id: readState resolves through the sim's view(state, playerId) export — verify a hidden-information game hides what it should. Requires a view() export.

No output schema declared.

No examples provided.

publish_model ~541

Publish a 3D MODEL built with antics-modelkit (not a game — a model joins no rooms). Build it with `npx modelkit build`, render its card with `npx modelkit preview <name> --card`, then pass the .glb and the recipe that generates it. Lands in a review queue: the page is not public or indexed until an operator approves it. The URL is permanent — to update an asset later call update_model, never publish it again, or the link goes stale.

NameTypeReqDescription
demoDirstring–Directory to read the demo from, walked by the server — needs an index.html at its top level. Use this instead of demoFiles when the demo ships a .glb or textures.
demoFilesobject–Optional interactive demo: a path -> content map like deploy_game's `files`. Runs sandboxed on the model page; the facts, licences and downloads stay on the page either way.
glbstring–The built .glb, base64. Triangle count and part names are read from the FILE, not from you. Prefer glbPath — a textured asset does not fit comfortably in a tool call.
glbPathstring–Path to the built .glb on disk, read by the server — use this instead of `glb` for anything with real texture data. e.g. ./dist/claw.glb
imagestring–Share card, base64 PNG, exactly 1200x630 — `npx modelkit preview <name> --card` produces it.
imagePathstring–Path to the share card PNG on disk, read by the server. Alternative to `image`.
kitVersionstringyesThe antics-modelkit version it was built with, so the recipe can be run again.
licencestringyesLicence for the ASSET. Irreversible once published; CC0 in particular cannot be walked back. CC-BY-4.0 unless the user says otherwise.
namestringyesWhat the model is, e.g. 'Vending machine'.
recipestringyesThe models module that generates it — published alongside under MIT so anyone can rebuild it with different arguments.
sourcesarrayyesWhat the asset was DERIVED from (a base mesh, a scan, a reference pack). Pass [] only if it is genuinely original — an empty list is a claim, not a default, and a human cannot see derivation in a mes…
summarystring–One line for the card and the unfurl.

No output schema declared.

No examples provided.

report_finding ~183

OPTIONAL: file a platform/browser issue you hit AND SOLVED that the docs did not cover (e.g. an iOS input quirk), so the docs improve for future agents. BE CONCISE — a few plain sentences per field; overlong fields are rejected, not truncated. A human reviews every finding; nothing is published automatically. File only once per issue.

NameTypeReqDescription
areastringyesSurface the issue lives in.
fixstringyesWhat actually worked. ≤ 420 chars.
hashstring–Optional deploy hash the issue occurred in.
severitystringyesHow badly it bit.
snippetstring–Optional minimal code, ≤ 500 chars.
symptomstringyesWhat went wrong, observably. ≤ 280 chars.
titlestringyesOne line, ≤ 80 chars.

No output schema declared.

No examples provided.

set_room_target ~214

Pool the visitors to a project's /p/<slug> link so STRANGERS WHO CLICK IT MEET EACH OTHER, instead of each landing in their own empty room. roomTarget is players per shared room: arrivals fill one to that number, then the next opens. Set it to the game's real roster (2 for a duel, 8 for a party game) — leave it unset and rooms take the platform cap of 16, which seats spectators past your roster. Pass null to turn pooling off. Use this for any game whose link gets POSTED PUBLICLY; a link sent to three named friends wants the default instead. REQUIRES the game to ask for the door (postMessage { antics: "mint", entry: "multi" }) — call get_docs for that contract. Owner-scoped: needs login.

NameTypeReqDescription
projectIdstringyesThe project to pool.
roomTarget–yesPlayers per shared room (1-16), or null to go back to a fresh room per visitor.

No output schema declared.

No examples provided.

set_share_preview ~334

Brand how a project's room links unfurl in chats/social (Discord, Slack, iMessage, X) and fill its public world page. Owner-scoped — needs login. Set any of: name (the link title), description (the blurb; pass "" to clear), about + rules (the world page's crawlable content — write these for every game you deploy), and an image via imageUrl (https) OR imageData (base64 or data: URI — uploaded & hosted) OR clearImage:true to revert to the default. Only one image action per call.

NameTypeReqDescription
aboutstring–What the game is and what makes it fun — shown on its /world page + in-room info panel, ≤ 1200 chars. Pass "" to clear.
clearImageboolean–Revert the image to the site's default share card.
descriptionstring–Unfurl description, ≤ 200 chars. Pass "" to clear it.
imageDatastring–Image as base64 or a data: URI (PNG/JPEG/WebP, ≤ 2 MB) — uploaded and hosted.
imageUrlstring–External https:// image URL (stored as-is; recommended 1200×630).
namestring–Unfurl title / game rename. Non-empty, ≤ 80 chars.
projectIdstringyesThe project whose share preview to set.
rulesstring–How to play — controls, goal, rules. Shown under "How to play", ≤ 2000 chars. Pass "" to clear.

No output schema declared.

No examples provided.

update_model ~352

Replace a published MODEL's asset in place, KEEPING its /m/<slug> URL — use this instead of publishing again, which mints a new page and strands the link you already shared. Pass the rebuilt .glb and the recipe that generates it. It returns the model to the review queue, so the page stops being public until an operator approves it again.

NameTypeReqDescription
demoDirstring–Directory to read the replacement demo from, walked by the server. Omit to leave the existing demo alone.
demoFilesobject–Replacement demo, a path -> content map. Omit to leave the existing demo alone — but if the geometry moved, the old demo may no longer match it.
glbstring–The rebuilt .glb, base64. Prefer glbPath.
glbPathstring–Path to the rebuilt .glb on disk, read by the server.
imagestring–Share card, base64 PNG, exactly 1200x630 — `npx modelkit preview <name> --card`. Re-render it: a stale card shows the geometry you just replaced.
imagePathstring–Path to the re-rendered share card PNG on disk. Alternative to `image`.
kitVersionstring–The antics-modelkit version it was rebuilt with.
modelstringyesThe slug or id of a model you published — list_my_models has both.
recipestringyesThe models module that generates it. Required: a .glb without its recipe breaks the pairing the page is built on.
summarystring–One line for the card and the unfurl.

No output schema declared.

No examples provided.

verify_game ~1,130

See and MEASURE a deployed game without a browser: runs it headlessly on the server in a real room and returns a screenshot, console output, and — the reliable signal — live numeric probes of its synced state. Use after every deploy_game and to diagnose any reported bug. `readState` paths ('state.score', 'player.self.x', 'player.<id>.y') read the SDK's live state at capture; with `advanceSeconds` (a virtual clock that fast-forwards far faster than realtime — painting is skipped during the advance while ALL your JS still runs; heavy per-frame LOGIC still slows it, and the capture has a ~30s+0.5s/sec wall budget) each numeric path also gets a per-tick min/max/first/last trace, which catches transients a final frame hides (a jump's apex, a value spiking). Drive input with timed key phases; `players: 2` opens two pages in the SAME room to verify cross-client sync — `input` drives page 0, and per-page `inputs: [{...}, {...}]` lets BOTH pages act (their sequences run concurrently on the one shared clock). Prefer probes over eyeballing pixels. Free and unlimited for CLASSIC games; against a SIM (sim.js) deploy it runs your logic on our CPU and needs Pro, same as probe_sim.

NameTypeReqDescription
advanceSecondsnumber–Fast-forward this many game-seconds on a virtual clock (fast in wall time; capped at 300), tracing readState per tick.
hashstring–Deployment hash from deploy_game — verifies a fresh room (sim deployments run in deterministic lockstep).
inputobject–Scripted input for page 0 (the single-page shorthand).
inputsarray–Per-page input for players: 2 — inputs[0] drives page 0, inputs[1] page 1 (page 0 falls back to `input`). Sequences run CONCURRENTLY on the one shared virtual clock, so two-player interactions (chase…
playersnumber–1 (default) or 2 — two pages in one room for sync verification.
readStatearray–Paths: "state.<key…>" or "player.<id|self>.<key…>"; in SIM rooms also "sim.<schema path>" (predicted state) and "render.<schema path>" (the smoothed view a correct game draws — use for motion/oversho…
roomstring–Live room code to inspect instead of minting a fresh room.
sandboxboolean–Score-safe verification: the capture room ranks submitScore calls on its own throwaway local board and never writes the project leaderboard — use when iterating on a game whose share link is already…
screenshotboolean–Default true. Set false to skip the image (faster, probes only).
screenshotAtMsarray–Mid-capture screenshots at these VIRTUAL ms stamps (<=8; same clock as the response's virtualMs — settle counts). Action shots mid-flight without timing the whole capture to end there; each lands wit…
settleMsnumber–Virtual boot budget before probing (default 3000).
simulateLatencyMsnumber–One-way latency per client↔server leg, in ms (fresh-minted via hash; max 2000). WORKS ON BOTH TIERS: sim rooms get it in exact ticks, classic rooms get every WebSocket frame held on the virtual clock…
simulateLatencyTicksnumber–Same as simulateLatencyMs but exact, in sim ticks. SIM rooms only (ticks need a stepped runner); on classic use simulateLatencyMs.
traceSeriesboolean–Also return the actual sampled time series per numeric readState path — parallel {t, v} arrays (virtual ms, value; <=600 points, uniformly thinned). The trace aggregates answer 'did it ever'; the ser…
urlParams––Extra query params for the page under test, e.g. { "seed": "42" } — make runs DETERMINISTIC if your game reads them (Math.random varies per run otherwise). A single object applies to every page; an A…

No output schema declared.

No examples provided.

Common questions

What is the io.github.antics-gg/antics-mcp server?

io.github.antics-gg/antics-mcp is listed in the public MCP registry as io.github.antics-gg/antics-mcp. Deploy a web game to a playable multiplayer URL with rooms, state sync, and leaderboards. This page covers its npm package (antics-mcp).

Is the io.github.antics-gg/antics-mcp server safe to use?

io.github.antics-gg/antics-mcp scores 76 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 25 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.antics-gg/antics-mcp server expose?

io.github.antics-gg/antics-mcp exposes 15 tools: get_docs, publish_model, update_model, find_models, deploy_game, and 10 more. Their descriptions and schemas cost roughly 4,022 tokens of context every time the server is loaded.

Is the io.github.antics-gg/antics-mcp server still maintained?

io.github.antics-gg/antics-mcp is still listed as active in the MCP registry. We last reached this channel on 25 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.