The tool surface
62 tools. Each one's full contract — every argument, every admitted value, every default, every bound and every refusal — is in its own description, which your client already has in the tool list it received when it connected. Nothing is repeated here, deliberately: a second copy of a contract is a copy that goes false quietly.
This page is the index. What exists, which domain it belongs to, and one line each so you can tell which of them you want before you read any of them.
analysis
analysis.cycles— Find where this game's prerequisites loop: a set of entities each of which gates the next and the last of which gates the first, so no player can open any of them.analysis.orphans— Find the content nothing points at.analysis.unreachable— Find the content no player can reach: entities the game's own gating edges never admit, starting from wherever a player starts.
comments
comments.add— Write one comment in a game's log.comments.list— Read a log, newest first.comments.remove— Take one comment out of the log, by the id comments.add and comments.list answer with.
docs
docs.delete— Remove one document from the game.docs.diff— Compare two versions of one document and get a unified diff.docs.history— List one document's versions, newest first: version number, title, summary, the message its author left, whether it is the tombstone of a deletion, and who wrote it — author_kind is "user" or "token", so a designer's edit and an agent's are told apart, and author_label is that person's display name or that token's label, so you can say who without a second call.docs.kinds— List the document kinds this game actually uses, with how many documents carry each.docs.links.add— Attach one document to one entity, in an optional role ("script", "lore", "design notes" — free text, at most 64 bytes, and Maestro ships no vocabulary of them).docs.links.list— Read the document-to-entity join from either side: give path for everything one document is attached to, or entity_type and entity_key for every document attached to one entity.docs.links.remove— Detach one document from one entity.docs.list— List this game's documents.docs.move— Change one document's path, keeping the document.docs.read— Read one document by path: its raw markdown body, its stored frontmatter, its current version and the entities it is attached to.docs.read_version— Read one past version of a document in full: the body, the frontmatter and the title as they were stored that day, not re-derived from today's rules.docs.revert— Restore a past version of a document as a new version.docs.upload_url— Sign a URL that writes one document from a file on disk, so its bytes never pass through your context.docs.write— Create or rewrite one document: long prose attached to this game's content — a quest's dialogue script, a zone's lore, the game bible.docs.write_many— Write several documents in one call.
entities
entities.get— Read one entity by its address — its type's key plus its own key — with all of its fields.entities.list— List a game's entities.entities.remove— Remove one entity, addressed by (type_key, key) — the address entities.get reads it by and entities.upsert wrote it under.entities.repair— Make the entities of one type fit its schema again, in one call.entities.upsert— Create or update entities.
games
games.counts— How much of everything this game holds: one row per declared entity type and per declared relation type, each with how many rows instance it and how many of those are invalid, plus the three totals.games.get— Look up the caller's own game: its slug, its name and its id.games.list— List the games visible to the caller.
relation_types
relation_types.get— Read one relation type in full: which entity types may be at each end, its semantic role, its field schema, and the id relation_types.remove addresses it by.relation_types.list— List this game's relation types, slim — id, key, label, version — and without their endpoint rules or field schemas; use relation_types.get for one in full.relation_types.remove— Remove a relation type by its key, the address relation_types.get takes.relation_types.rename— Give a relation type a different key, keeping the type and every edge of it.relation_types.upsert— Declare or update a relation type: a kind of directed edge between entities (takes_place_in, requires, unlocks, available_to).
relations
relations.get— Read one edge by the address it was written under — its relation type's key plus both endpoints as (type_key, key) — with all of its fields.relations.list— List a game's edges, optionally narrowed by relation type key, by invalid (edges whose values no longer fit their relation type's schema, the same filter entities.list takes) and by either endpoint, given as a{type_key, key}ref — the same address relations.upsert writes an edge with.relations.remove— Remove one edge by the address it was written under: the relation type's key and both endpoints as (type_key, key) refs — the same address relations.get reads it by and relations.upsert wrote it with.relations.repair— Make the edges of one relation type fit its field schema again, in one call.relations.upsert— Create or update edges between entities.
routes
routes.check— Check whether a route still holds, and store the verdict.routes.get— Read one route by key: its ordered steps, its stored parameters, its version, its three-state status and the verdict its last check left behind.routes.list— List this game's routes: key, name, description, version, how many steps each has and its three-state health.routes.remove— Delete one route by key, with its steps and its stored verdict.routes.upsert— Create or replace one route, addressed by key.
session
search— Search this game's content: its entities and its documents, in one ranked list, each hit labelled by kind.whoami— Report the calling identity: user, admin flag, and the single game this token is bound to.
skill
skill.install— Get the Maestro skill bundle: the pages that teach how to declare a game's own vocabulary, seed content and compose views.
types
types.get— Read one entity type in full, including its field schema and the id types.remove and relation_types.upsert address it by.types.list— List this game's entity types.types.remove— Remove an entity type, addressed by its key — the same handle types.get takes and entities.upsert writes against.types.rename— Give an entity type a different key, keeping the type.types.upsert— Declare or update an entity type: a kind of thing this game contains (Quest, Zone, Class; Driver, Car, Circuit).
views
views.clear_positions— Drop stored positions for one saved view, and answer with how many rows went.views.get— Read one saved view by key: its whole query document, its renderer and that renderer's parameters, its layout mode and seed, its background, and its version.views.list— List this game's saved views: key, name, renderer, version and whether the view is stale.views.list_assets— List the background images this game holds: id, filename, mime, pixel width and height, and the URL the bytes are served from.views.remove— Delete one saved view by key, with its stored positions and its dependency index.views.run— Run a view and get the picture back: passkeyfor a saved view, orqueryfor an inline document.views.set_background— Put an uploaded image behind one saved view, with a scale and an offset, and answer with the view.views.set_positions— Write the coordinates of one or more nodes of one saved view.views.upsert— Create or replace one saved view, addressed by key.views.validate— Judge a query without saving it and without running it.