MCP quickstart — author with an AI agent
ScryMaster has a full authoring API and a bundled MCP connector with complete Studio parity: an AI assistant can create, edit, validate, simulate, and publish an adventure end-to-end — no browser. This is the ten-step path. The deep reference (every endpoint, every tool, error codes) is the API & MCP reference.
get_vocabulary → get_adventure → edit → save_adventure(baseHash) → validate_adventure → simulate_adventure → dry_publish → publish_adventure. Follow it every time — it’s what keeps AI-authored stories valid, non-clobbering, and safe to publish.The ten steps
- Create an account at scrymaster.com (free).
- Generate a token. In the Studio, open any story → ⚙ Settings → Integrations → API tokens → create one. It starts with
scry_; treat it like a password and revoke it any time. - Connect — three ways. (a) The remote connector (one URL, recommended):
claude mcp add --transport http scrymaster https://scrymaster.com/api/mcp— authenticate via the OAuth sign-in it offers, or ascry_…bearer header. (b) The npm stdio server:claude mcp add scrymaster --env SCRYMASTER_TOKEN=scry_… --env SCRYMASTER_API_URL=https://scrymaster.com -- npx -y @scrymaster/mcp— or the equivalent{ "command": "npx", "args": ["-y", "@scrymaster/mcp"] }in any MCP client. (c) REST directly (no MCP client): every tool below maps 1:1 to a bearer-authed call in the API reference — sendAuthorization: Bearer scry_…tohttps://scrymaster.com/api/v1/…. Always use the apex host — neverwww(it redirects and some agents won’t follow it). - Ground on the vocabulary. Call
get_vocabulary(GET /api/v1/actions) first, always. The engine is default-deny — a verb that isn’t listed is rejected. Never author from memory. - Create the adventure.
create_adventurewith a full document grounded in that vocabulary → you get a draft id. The full body schema is published in /api/v1/openapi.json undercomponents.schemas(AdventureDoc+ every sub-shape: node grammar perkind, the closedActionverbs, theConditionAST) — build the doc from the schema, don’t reverse-engineer it from a sample. Details in the API reference. - Read before you write.
get_adventurereturns the doc and adraftHash. Hold onto it. - Save safely.
save_adventurewith that hash asbaseHash. If the draft changed under you (another tab, another tool), you get a409— re-read, re-apply your edit to the fresh doc, save again. Never retry a save blindly. - Validate.
validate_adventure— schema, reachability, and the closed-verb check. Fix anything it flags. - Simulate.
simulate_adventureauto-plays the story to confirm it can be finished and the difficulty reads right (completion rate, death rate, never-reached beats). - Read the quality signals — steer toward GOOD, not just valid. After each build pass run
validate → simulate → get_health → get_world:get_healthis the 0–100 scorecard (unpaid variables, fake-agency choices, lethality, never-visited beats — each names the beat);get_worldshows whether your cast/quests/factions actually read back. Fix what they name, then move on. See the quality metrics + the playbook — richness is consequence, not choice count. - Dry-publish, then publish.
dry_publishreturns the full verdict with no write (validation, IP denylist, compatibility, would-be version, any content-loss report). When it’s green — and the human is ready —publish_adventure. Publishing never breaks a player’s in-progress save: runs pin the version they started on.
No MCP? Browser ChatGPT works too
You don’t need an agentic setup. Co-writer mode: point any assistant at https://scrymaster.com/docs (or /llms.txt) — the craft guides, the live vocabulary, and the worked example are all public; it coaches you while you build in the Studio. Full authoring from ChatGPT: create a custom GPT and import /api/v1/openapi.json as an Action (auth type: API key → Bearer → your scry_… token) — the spec carries the complete AdventureDoc schemas, so browser ChatGPT can create, save, validate, simulate, and publish directly, no MCP client at all. Use the apex URL — never www.
What you get for free
- No clobbering — the
baseHash/409 contract means two editors (you and a human, or two tools) can never silently overwrite each other. - Real gates — the same validation, denylist, and data-loss checks the Studio enforces run on your publish; you can’t ship something a human couldn’t.
- Labeled authorship — every write you make is recorded and labeled in the story’s provenance ledger at the event level (tagged
mcp-pat, visible to the owner in the publish center’s “Recent activity”). To be precise: recorded today = each MCP/PAT write event; not yet = per-field authorship inside each node/prose field (that granularity is a future layer). The human always knows an AI changed something and when — the finer attribution is coming. - Official content is protected —
delete_adventurerefuses the platform tutorial (403).
Deep reference: API & MCP reference →
