---
title: "Action Catalog"
description: "Sources: `packages/action-catalog/src/index.ts`."
engineVersion: v1.0.234
date: 2026-09-28
license: "(c) Gessa, proprietary. Cite with attribution to https://gessa.ai/docs/. Terms: https://gessa.ai/terms/."
canonical: https://gessa.ai/docs/spec/generated/action-catalog/
---
<!-- GENERATED FILE: do not edit by hand. -->
<!-- Regenerate with `npm run gen-docs`. -->

Sources: `packages/action-catalog/src/index.ts`.

# Action Catalog

This generated snapshot is derived from `packages/action-catalog`. It is the canonical verb registry for mutating platform surfaces and planned ontology/control-plane actions.

Catalog version: `action-catalog.v1.0.234`.
Catalog hash: `sha256:f39b6630cd20fb47cc8f6638fcd798405a19303ddfc1f6f3bac0cb824628e3db`.
Action count: `119`.
Surface mapping count: `188`.

## Actions

| Action | Title | Description | Domain | Kind | Lifecycle | Owner | Exposure | Audit Events |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `agentenv.create_run` | Create Run Agent Environment | Execute the canonical AgentEnv CreateRun protocol exchange without bypassing lifecycle, identity, version, or idempotency authority. | agentenv | command | active | agentenv | `mcp`<br>`sdk` | `AgentEnvCreateRun` |
| `agentenv.create_episode` | Create Episode Agent Environment | Execute the canonical AgentEnv CreateEpisode protocol exchange without bypassing lifecycle, identity, version, or idempotency authority. | agentenv | command | active | agentenv | `mcp`<br>`sdk` | `AgentEnvCreateEpisode` |
| `agentenv.reset_episode` | Reset Episode Agent Environment | Execute the canonical AgentEnv ResetEpisode protocol exchange without bypassing lifecycle, identity, version, or idempotency authority. | agentenv | command | active | agentenv | `mcp`<br>`sdk` | `AgentEnvResetEpisode` |
| `agentenv.observe` | Observe Agent Environment | Execute the canonical AgentEnv Observe protocol exchange without bypassing lifecycle, identity, version, or idempotency authority. | agentenv | query | active | agentenv | `mcp`<br>`sdk` | `AgentEnvObserve` |
| `agentenv.submit_intent` | Submit Intent Agent Environment | Execute the canonical AgentEnv SubmitIntent protocol exchange without bypassing lifecycle, identity, version, or idempotency authority. | agentenv | command | active | agentenv | `mcp`<br>`sdk` | `AgentEnvSubmitIntent` |
| `agentenv.step` | Step Agent Environment | Execute the canonical AgentEnv Step protocol exchange without bypassing lifecycle, identity, version, or idempotency authority. | agentenv | command | active | agentenv | `mcp`<br>`sdk` | `AgentEnvStep` |
| `agentenv.score` | Score Agent Environment | Execute the canonical AgentEnv Score protocol exchange without bypassing lifecycle, identity, version, or idempotency authority. | agentenv | query | active | agentenv | `mcp`<br>`sdk` | `AgentEnvScore` |
| `agentenv.terminate` | Terminate Agent Environment | Execute the canonical AgentEnv Terminate protocol exchange without bypassing lifecycle, identity, version, or idempotency authority. | agentenv | command | active | agentenv | `mcp`<br>`sdk` | `AgentEnvTerminate` |
| `agentenv.fetch_replay` | Fetch Replay Agent Environment | Execute the canonical AgentEnv FetchReplay protocol exchange without bypassing lifecycle, identity, version, or idempotency authority. | agentenv | query | active | agentenv | `mcp`<br>`sdk` | `AgentEnvFetchReplay` |
| `agentenv.export_trajectory` | Export Trajectory Agent Environment | Execute the canonical AgentEnv ExportTrajectory protocol exchange without bypassing lifecycle, identity, version, or idempotency authority. | agentenv | command | active | agentenv | `mcp`<br>`sdk` | `AgentEnvExportTrajectory` |
| `workspace.create` | Create Workspace | Create a workspace through the control-plane service. | control-plane | command | active | control-plane | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `CreateWorkspace` |
| `game.create` | Create Project | Create a game/project row and apply the caller's declared canonical template intent. | control-plane | command | active | control-plane | `ui`<br>`mcp`<br>`ai` | `CreateGame` |
| `game.multiplayer_blueprint.set` | Set Multiplayer Blueprint | Set the game's default multiplayer blueprint (rooms, queues, teams, seats, placement, lifecycle, and netcode runtime budgets). Configures matchmaking and netcode parameters a script cannot set. | control-plane | command | active | control-plane | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `SetGameMultiplayerDefault` |
| `commerce.offer.set` | Set Commerce Offer | Create or update one purchasable offer on a game: its title, price, kind (durable or consumable), status (draft, active, archived) and the entitlement or item grants it delivers. Offers are what a script's Commerce.promptPurchase names, so the offer must exist before a purchase prompt can open. | control-plane | command | active | commerce | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `UpsertCommerceOffer` |
| `commerce.offer.list` | List Commerce Offers | List every offer defined on a game, drafts and archived included, with keys, prices, kinds and statuses. Read this before naming an offer key in a script so the purchase prompt points at an offer that exists and is active. | control-plane | query | active | commerce | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `ListCommerceOffers` |
| `game.update` | Update Project | Update project control-plane fields such as title and thumbnail. | control-plane | command | active | control-plane | `ui`<br>`sdk`<br>`mcp`<br>`ai` | `UpdateGame`<br>`SetGameThumbnail` |
| `environment.create` | Create Environment | Create a game environment through the control-plane service. | control-plane | command | active | control-plane | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `CreateEnvironment` |
| `project.graph.snapshot.read` | Read Project Graph Snapshot | Read the current typed Project Graph snapshot through its owner service. | project-graph | query | active | project-graph | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `ProjectGraphSnapshotRead` |
| `project.transaction.apply` | Apply Project Graph Transaction | Atomically apply several low-level Project Graph ops as ONE checked, idempotent, undoable transaction. Each op is a { kind, ...fields } object (record.create/update/delete, component.put/patch/delete/add/remove) over a resourceKind (asset, world, component, prefab, entity, script, workflow, ui-panel, data-store); the ops field description carries the exact shapes. The precision batched writer: no engine-owned component defaults, strong per-op validation on receipt. | project-graph | command | active | project-graph | `workflow` | `ProjectGraphTransactionApplied` |
| `project.asset.create` | Create Project Asset | Create a ProjectAsset through the UUID-only Project Graph client contract; internal keys, storage, pipeline, provenance, and frozen graph fields are never caller-owned. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `CreateProjectAsset` |
| `project.asset.update` | Update Project Asset | Update a ProjectAsset through the UUID-only Project Graph client contract; internal keys, storage, pipeline, provenance, and frozen graph fields are never caller-owned. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `UpdateProjectAsset` |
| `project.asset.delete` | Delete Project Asset | Delete a ProjectAsset through the UUID-only Project Graph client contract; internal keys, storage, pipeline, provenance, and frozen graph fields are never caller-owned. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `DeleteProjectAsset` |
| `project.world.create` | Create Project World | Create a Project Graph world record through the canonical owner service; the receipt is the exact client resource. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `CreateProjectWorld` |
| `project.world.update` | Update Project World | Update a Project Graph world record through the canonical owner service; the receipt is the exact client resource. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `UpdateProjectWorld` |
| `project.world.delete` | Delete Project World | Delete a Project Graph world record through the canonical owner service; the receipt is the exact client resource. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `DeleteProjectWorld` |
| `project.world.read` | Read Project World | Read one Project Graph world record by uuid or graph key through the canonical owner service; the receipt is the exact client resource with its current version. | project-graph | query | active | project-graph | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `ReadProjectWorld` |
| `project.component.create` | Create Project Component | Create a Project Graph component definition record through backend service paths. Project-defined components are production-grade backend-validated project-local data contracts for advanced/import-only data; they are not canonical engine atomics. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`sdk` | `CreateProjectComponent` |
| `project.component.update` | Update Project Component | Update a Project Graph component definition record through backend service paths. Project-defined components are production-grade backend-validated project-local data contracts for advanced/import-only data; they are not canonical engine atomics. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`sdk` | `UpdateProjectComponent` |
| `project.component.delete` | Delete Project Component | Delete a Project Graph component definition record through backend service paths. Project-defined components are production-grade backend-validated project-local data contracts for advanced/import-only data; they are not canonical engine atomics. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`sdk` | `DeleteProjectComponent` |
| `project.prefab.create` | Create Project Prefab | Create a Project Graph prefab record through the canonical owner service; the receipt is the exact client resource. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `CreateProjectPrefab` |
| `project.prefab.update` | Update Project Prefab | Update a Project Graph prefab record through the canonical owner service; the receipt is the exact client resource. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `UpdateProjectPrefab` |
| `project.prefab.delete` | Delete Project Prefab | Delete a Project Graph prefab record through the canonical owner service; the receipt is the exact client resource. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `DeleteProjectPrefab` |
| `project.prefab.read` | Read Project Prefab | Read one Project Graph prefab record by uuid or graph key through the canonical owner service; the receipt is the exact client resource with its current version. | project-graph | query | active | project-graph | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `ReadProjectPrefab` |
| `project.entity.create` | Create Project Entity | Create a Project Graph entity in a world through the canonical entity owner. worldId/parentEntityId/prefabId accept a uuid or a graph key; on_conflict controls duplicate-key handling. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `CreateProjectEntity` |
| `project.entity.update` | Update Project Entity | Update a Project Graph entity's identity, hierarchy, tags, or metadata through the canonical entity owner. With expected_revision the write goes through an optimistic-concurrency transaction and returns a transaction result; otherwise it returns the updated entity. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `UpdateProjectEntity` |
| `project.entity.delete` | Delete Project Entity | Delete a Project Graph entity through the canonical entity owner. With expected_revision the delete goes through an optimistic-concurrency transaction and returns a transaction result; otherwise it returns the deleted entity. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `DeleteProjectEntity` |
| `project.entity.read` | Read Project Entity | Read one Project Graph entity by uuid or graph key through the canonical entity owner; the receipt is the exact client entity with its current version and components. | project-graph | query | active | project-graph | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `ReadProjectEntity` |
| `project.entity.search` | Search Project Entities | Search Project Graph entities by query, world, tag(s), component type(s), or key prefix through the canonical entity owner, returning a bounded cursor-paginated page of entity records (the discovery reader for edit targets). | project-graph | query | active | project-graph | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `SearchProjectEntities` |
| `project.script.create` | Create Project Script | Create a Project Graph script from a structural GessaScript shell through the canonical script owner. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `CreateProjectScript` |
| `project.script.update` | Update Project Script | Update a Project Graph script's metadata through the canonical script owner. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `UpdateProjectScript` |
| `project.script.delete` | Delete Project Script | Delete a Project Graph script through the canonical script owner. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `DeleteProjectScript` |
| `project.script.read` | Read Project Script | Read one Project Graph script by uuid or graph key through the canonical script owner; the receipt is the exact client script carrying its current version and IR fingerprint together, so a semantic patch never needs to probe for concurrency coordinates. | project-graph | query | active | project-graph | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `ReadProjectScript` |
| `project.ui_panel.create` | Create Project Ui Panel | Create a Project Graph ui panel record through the canonical owner service; the receipt is the exact client resource. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `CreateProjectUiPanel` |
| `project.ui_panel.update` | Update Project Ui Panel | Update a Project Graph ui panel record through the canonical owner service; the receipt is the exact client resource. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `UpdateProjectUiPanel` |
| `project.ui_panel.delete` | Delete Project Ui Panel | Delete a Project Graph ui panel record through the canonical owner service; the receipt is the exact client resource. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `DeleteProjectUiPanel` |
| `project.ui_panel.read` | Read Project Ui Panel | Read one Project Graph ui panel record by uuid or graph key through the canonical owner service; the receipt is the exact client resource with its current version. | project-graph | query | active | project-graph | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `ReadProjectUiPanel` |
| `project.data_store.create` | Create Project Data Store | Create a Project Graph data store record through the canonical owner service; the receipt is the exact client resource. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `CreateProjectDataStore` |
| `project.data_store.update` | Update Project Data Store | Update a Project Graph data store record through the canonical owner service; the receipt is the exact client resource. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `UpdateProjectDataStore` |
| `project.data_store.delete` | Delete Project Data Store | Delete a Project Graph data store record through the canonical owner service; the receipt is the exact client resource. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `DeleteProjectDataStore` |
| `project.data_store.read` | Read Project Data Store | Read one Project Graph data store record by uuid or graph key through the canonical owner service; the receipt is the exact client resource with its current version. | project-graph | query | active | project-graph | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `ReadProjectDataStore` |
| `project.asset.duplicate` | Duplicate Project Asset | Duplicate a ProjectAsset by canonical UUID through the Project Graph owner so storage-owned fields are copied internally and never reconstructed by a caller. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai` | `CreateProjectAsset` |
| `project.asset.model_document.save` | Save Project Model Document | Validate and persist the authored ModelAuthoringDocument through the dedicated Project Graph merge boundary without opening the generic client asset update to server-owned rendering fields. | model-authoring | command | active | project-graph | `ui`<br>`mcp`<br>`ai` | `UpdateProjectAsset` |
| `asset_pipeline.model_material_slots.inspect` | Inspect Model Material Slots | Inspect the canonical conditioned material-slot projection for one model ProjectAsset UUID. | asset-pipeline | query | active | asset-pipeline | `ui`<br>`mcp`<br>`ai` | `AssetPipelineModelMaterialSlotsInspected` |
| `asset_pipeline.model_material_slot.promote` | Promote Model Material Slot | Promote one conditioned model material slot into a durable ProjectAsset through the Asset Pipeline owner. | asset-pipeline | command | active | asset-pipeline | `ui`<br>`mcp`<br>`ai` | `AssetPipelineModelMaterialSlotPromoted` |
| `asset_pipeline.model_material_slots.promote` | Promote Model Material Slots | Promote all, every, or a selected bulk batch of conditioned model material slots into durable material assets through the Asset Pipeline owner. | asset-pipeline | command | active | asset-pipeline | `ui`<br>`mcp`<br>`ai` | `AssetPipelineModelMaterialSlotsPromoted` |
| `asset_pipeline.model_material_slot.override` | Override Model Material Slot | Set or clear one renderable model material-slot override through the Asset Pipeline owner. | asset-pipeline | command | active | asset-pipeline | `ui`<br>`mcp`<br>`ai` | `AssetPipelineModelMaterialSlotOverridden` |
| `project.entity.component.set` | Set Entity Component | Add or replace a complete component on a Project Graph entity through the canonical component mutation kernel. With expected_revision the write goes through an optimistic-concurrency transaction and returns a transaction result; otherwise it returns the updated entity. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `SetProjectEntityComponentOverride`<br>`PutProjectEntityComponent`<br>`PatchProjectEntityComponent` |
| `project.entity.component.delete` | Delete Entity Component | Remove one component from a Project Graph entity through the canonical component mutation kernel. With expected_revision the delete goes through an optimistic-concurrency transaction and returns a transaction result; otherwise it returns the updated entity. | project-graph | command | active | project-graph | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `DeleteProjectEntityComponent` |
| `project.script.patch.apply` | Apply Script Semantic Patch | Apply checked semantic patch operations to a Project Script and persist canonical Script IR. | script-authoring | command | active | script-semantic-patch | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk` | `UpdateProjectScript` |
| `project.material.patch.apply` | Apply Material Semantic Patch | Apply checked semantic patch operations to a material asset and persist canonical material graph artifacts. | material-authoring | command | active | material-semantic-patch | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk` | `ProjectGraphAssetUpdated` |
| `generation.capability.list` | List Generation Capabilities | List generation offerings visible to the requester through the canonical generation owner. | generation | query | active | generation | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk` | `GenerationCapabilitiesListed` |
| `generation.job.quote` | Quote Generation Job | Quote a generation request against capability, policy, and budget controls. | generation | command | active | generation | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk` | `GenerationJobQuoted` |
| `blender.model.create` | Create Blender Model | Author a detailed Blender model with the dedicated Astra model, render and import it through the durable generation service. | generation | job_start | active | generation | `ai` | `BlenderModelRequested` |
| `generation.job.create` | Create Generation Job | Create a durable generation job for an approved capability. | generation | job_start | active | generation | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk` | `GenerationJobCreated`<br>`GenerationJobQueued` |
| `generation.job.read` | Read Generation Job | Read one durable generation job through the canonical generation owner. | generation | query | active | generation | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk` | `GenerationJobRead` |
| `generation.job.list` | List Generation Jobs | List durable generation jobs visible to the requester through the canonical generation owner. | generation | query | active | generation | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk` | `GenerationJobsListed` |
| `generation.job.cancel` | Cancel Generation Job | Cancel an unclaimed generation job through its owner, or explicitly cancel saved placement with scope placement while rendering and incurred charges continue. Inspect the returned placement status for completion races. | generation | command | active | generation | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk` | `GenerationJobCancel` |
| `generation.job.claim` | Claim Generation Job | Claim the next queued generation job for a worker lease. | generation | job_start | active | generation | `cli`<br>`admin` | `GenerationJobClaim` |
| `generation.job.heartbeat` | Heartbeat Generation Job | Extend a generation job worker lease. | generation | command | active | generation | `cli`<br>`admin` | `GenerationJobHeartbeat` |
| `generation.job.progress` | Progress Generation Job | Record worker-owned generation job progress. | generation | command | active | generation | `cli`<br>`admin` | `GenerationJobProgress` |
| `generation.job.complete` | Complete Generation Job | Complete and finalize a generation job. | generation | command | active | generation | `cli`<br>`admin` | `GenerationJobComplete` |
| `generation.job.fail` | Fail Generation Job | Fail or retry a generation job through worker-owned state transitions. | generation | command | active | generation | `cli`<br>`admin` | `GenerationJobFail` |
| `publish.dev` | Publish Dev Build | Create a dev content version and deployment candidate through publish gates. | publish | command | active | publish | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk` | `PublishDev` |
| `workflow.definition.create` | Create Workflow Definition | Hidden privileged/deferred Workflow IR definition mutation. Normal UI, MCP, AI, and SDK workflow authoring stays unavailable until a complete creator-facing projection ships. | workflow | admin | internal | workflows | `admin` | `CreateProjectWorkflow` |
| `workflow.run.start` | Start Workflow Run | Start a durable workflow run through the workflow runner. | workflow | workflow_step | active | workflows | `ui`<br>`sdk`<br>`mcp`<br>`ai` | `WorkflowRunStarted` |
| `blueprint.package.apply` | Apply Smart Asset Package | Apply a canonical Smart Asset Package manifest through backend package service paths and Project Graph transactions. | blueprint | command | active | blueprints | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk` | `SmartAssetPackageApplied`<br>`ProjectGraphTransactionApplied` |
| `blueprint.template.apply` | Apply Creation Template | Compatibility alias for applying a creation template; canonical package application is blueprint.package.apply. | blueprint | command | planned | blueprints | `ui`<br>`sdk` | `CreationTemplateApplied` |
| `workspace.asset.link` | Link Workspace Asset | Link an authorized existing workspace asset into a project and return its owner-issued project identity without supplying raw storage coordinates. | workspace-assets | command | active | workspace-assets | `ui`<br>`mcp`<br>`ai` | `WorkspaceAssetLinkedToGame`<br>`ProjectAssetCreated` |
| `spatial.asset.import` | Import Spatial Asset | Queue and run backend-authoritative spatial asset import processing through Jobs and Capability Registry. | spatial-ingestion | job_start | active | spatial-ingestion | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk`<br>`cli` | `SpatialAssetImportQueued`<br>`SpatialAssetImportProcessed` |
| `spatial.capture.proxy.generate` | Generate Spatial Capture Proxy | Generate or record collision/nav/query proxy receipts for a spatial capture asset. | spatial-ingestion | job_start | active | spatial-ingestion | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk`<br>`cli` | `SpatialCaptureProxyGenerationQueued`<br>`SpatialCaptureProxyGenerationRecorded` |
| `spatial.capture.annotate` | Annotate Spatial Capture | Record semantic anchors for spatial captures through backend-validated Project Graph facets. | spatial-ingestion | command | active | spatial-ingestion | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk`<br>`cli` | `SpatialCaptureAnnotationRecorded` |
| `terrain.resource.create` | Create Terrain Resource | Create a versioned hybrid terrain resource (heightfield + mesh under one resource) as a Project Graph asset terrain facet. Backed by the terrain resource contract (terrain-resource-contract.v1) + the terrain patch chokepoint; the dedicated REST/MCP/AI handlers are pending (planned). | terrain | command | planned | terrain | `ui`<br>`sdk` | `TerrainResourceCreated` |
| `terrain.patch.apply` | Apply Terrain Semantic Patch | Apply checked semantic terrain operations (sculpt/paint/road/biome/generate/cutHole/erosion/scatter) to the versioned terrain resource through the single terrain patch chokepoint (compileTerrainPatch + applyTerrainPatch), invalidating collision/nav/render artifacts for gated rebuild so collision and nav never drift from the source. Lowers into ProjectGraphService.applyTerrainPatch over the asset terrain facet via the existing updateAsset path (no parallel write path). | terrain | command | active | terrain | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk` | `TerrainPatchApplied` |
| `terrain.artifacts.build` | Build Terrain Artifacts | Build the explicit terrain artifacts (render height tile, collision proxy, nav source mesh) from the terrain resource source, writing regenerate-gated receipts onto the facet and lifting acceptance to navigable_terrain. Backed by ProjectGraphService.buildTerrainArtifacts over the deterministic buildTerrainArtifacts builder (same source -> same artifactHash, one no-drift build for collision/nav/render). v1 runs the build inline; the durable job-queue worker is a later optimization. Build is a job; path query is runtime. | terrain | job_start | active | terrain | `ui`<br>`mcp`<br>`ai`<br>`sdk`<br>`cli` | `TerrainArtifactsBuildQueued`<br>`TerrainArtifactsBuilt` |
| `instance_set.patch.apply` | Apply Instance Set Semantic Patch | Apply checked bulk InstanceSet aggregate operations (configure/populate/fill/clearRegion/setCells/clearCells/scatterInstances/paintKind/removeInstances) to a versioned instanceSet resource facet through the single instance-set patch chokepoint (compileInstanceSetPatch + applyInstanceSetPatch), advancing the facet source version so render/collider projections regenerate. Lowers into ProjectGraphService.applyInstanceSetPatch over the asset instanceSet facet via the existing updateAsset path (no parallel write path); author only through the typed ops, never raw packed cell/instance arrays. | instance-set | command | active | instance-set | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk` | `InstanceSetPatchApplied` |
| `world.build.from_prompt` | Build World From Prompt | Client ingress that routes a prompt-to-world request to the neutral authoring kernel. Not an engine mutation action; carries no owner binding. | world-factory | workflow_step | active | world-factory | `ui`<br>`sdk` | `AiWorldBuildStarted`<br>`AiWorldBuildAccepted` |
| `world.build.from_spatial_asset` | Build World From Spatial Asset | Create an executable Project Graph world from an imported spatial asset while enforcing proxy, anchor, and playability receipts. | world-factory | workflow_step | active | world-factory | `ui`<br>`mcp`<br>`ai`<br>`workflow`<br>`sdk` | `SpatialAssetWorldBuildStarted`<br>`SpatialAssetWorldBuildAccepted` |
| `knowledge.search` | Search Knowledge Library | Search the pull-only knowledge library (generated engine reference plus optional curated playbooks) and return pointers with distilled summaries, never bulk content. | knowledge | query | active | knowledge | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `KnowledgeSearched` |
| `knowledge.load` | Load Knowledge Entry | Load one knowledge entry by id with full provenance (source path, sha256, corpus, trust). Optional playbook/distillation corpora refuse to load under the no-skill switch. | knowledge | query | active | knowledge | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `KnowledgeLoaded` |
| `engine.component.types.list` | List Engine Component Types | List built-in ECS component types with their canonical drafts, add modes, reference admission contracts, and field contracts. Use before authoring entity components to learn which component types exist and their exact shapes. | engine | query | active | engine | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `EngineComponentTypesListed` |
| `engine.component.schema.read` | Read Engine Component Schema | Get the exact schema, field contracts, canonical draft, and reference requirements for one built-in ECS component type (for example TransformComponent). Call this before authoring a component value so the value carries the correct type discriminator and required fields. | engine | query | active | engine | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `EngineComponentSchemaRead` |
| `engine.sdk.functions.list` | List Engine Script SDK Functions | List the script SDK host functions available to authored scripts. Use before writing TypeScript scripts to learn which host APIs exist. | engine | query | active | engine | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `EngineSdkFunctionsListed` |
| `engine.sdk.function.signature.read` | Read Engine SDK Function Signature | Get the metadata and signature for one script SDK host function by namespace.name. Use to resolve one script host function before calling it in an authored script. | engine | query | active | engine | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `EngineSdkFunctionSignatureRead` |
| `engine.capability.graph.read` | Read Engine Capability Graph | Read the canonical engine capability graph for agent self-discovery before complex builds. | engine | query | active | engine | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `EngineCapabilityGraphRead` |
| `engine.asset_package.list` | List Engine Smart Asset Packages | List canonical Smart Asset Package manifests before applying a launch package or package variant. | engine | query | active | engine | `mcp`<br>`ai`<br>`workflow`<br>`sdk` | `EngineSmartAssetPackagesListed` |
| `runtime.proof.run` | Run Runtime Proof | Execute one author-declared input against an immutable Project Graph snapshot in an isolated real runtime actor and return typed causal transition evidence with provider and checkpoint lineage. | runtime-qa | command | active | runtime | `mcp`<br>`ai`<br>`sdk` | `RuntimeProofRun` |
| `versioning.proof.state_diff` | Prove Canonical State Diff | Compare immutable pre-author and final Versioning checkpoints, reconstruct the complete canonical Project Graph transition, and evaluate exact reviewer-authored assertions. | versioning | command | active | versioning | `mcp`<br>`ai`<br>`sdk` | `VersioningStateDiffProofRun` |
| `factory.proof.run` | Run Factory Proof | Disabled native-AI action: a build-time factory-proof provenance harness, not a runtime owner. Returns a typed unsupported gap if requested by the agent. | factory-qa | command | active | factory-proof | `sdk` | `FactoryProofRun` |
| `renderer.visual_profile.apply` | Apply Renderer Visual Profile | Apply a canonical renderer visual profile by mutating the Project Graph world environment through backend authority. | renderer | command | active | renderer | `ui`<br>`mcp`<br>`ai`<br>`sdk` | `RendererVisualProfileApplied` |
| `renderer.visual_qa.run` | Run Renderer Visual QA | Retired native-AI composite. The canonical renderer pixel-capture primitive is qa.renderer.viewport.capture; this SDK-surface convenience adds profile/fallback receipt checks over it. | renderer-qa | command | active | qa | `sdk` | `RendererVisualQaRun` |
| `qa.run.start` | Run Simulation QA | Execute bounded deterministic simulation QA from an immutable verified Versioning checkpoint to verify the physics simulation converges to its expected numerical value, returning an executable numerical-oracle receipt with an independent repeat and seed-sensitivity control. | qa | command | active | simulation | `mcp`<br>`ai`<br>`workflow` | `SimulationQaRun` |
| `qa.renderer.viewport.capture` | Prove Runtime Renderer Frame | Render one immutable verified Versioning checkpoint through the real runtime and renderer, independently content-address the PNG bytes, and return exact runtime/browser/media lineage. | qa | command | active | qa | `mcp`<br>`ai` | `RendererViewportCaptured` |
| `world.observe.scene` | Observe Scene Digest | Read a bounded revision-stamped digest of the authored project graph (entity and per-component-type counts, world summary, spatial bounds, named-entity summary, and an optional bounded diff against a prior revision handle). | observation | query | active | ai-platform-observation | `mcp`<br>`ai` | `WorldObserveScene` |
| `world.observe.frame` | Observe Viewport Frame | Capture one editor or runtime viewport frame through the existing qa renderer capture lane where a browser runtime is available, returning a bounded frame descriptor (camera, viewport, renderer, media hash, pixel diagnostics, browser health) or an honest typed unavailable envelope when no browser runtime is present. | observation | query | active | ai-platform-observation | `mcp`<br>`ai` | `WorldObserveFrame` |
| `world.observe.logs` | Observe Runtime Logs | Read a bounded newest-first tail of runtime and script diagnostics for one runtime room. | observation | query | active | ai-platform-observation | `mcp`<br>`ai` | `WorldObserveLogs` |
| `world.observe.rooms` | Observe Active Rooms | Read a bounded roster of active runtime rooms for a game with per-room player and observer counts, status, and lifecycle timestamps. | observation | query | active | ai-platform-observation | `mcp`<br>`ai` | `WorldObserveRooms` |
| `world.sample.terrain` | Sample Terrain Surface | Sample the authored terrain surface height, normal, and slope at up to 64 (x,z) points, reusing the SAME no-drift height math the runtime draws and clamps to. Call BEFORE placing props on sculpted terrain so they rest on the surface instead of a hand-guessed y. | observation | query | active | ai-platform-observation | `mcp`<br>`ai` | `WorldSampleTerrain` |
| `world.observe.entity_view` | Observe Entity View (The Eye) | Look at what you built: frame up to 8 authored entities in a 3/4 fit-bounds (F-key) view and render the CURRENT head so you SEE placeholders, floating props, and muddy paint a graph digest hides. The frame rides back as an image where the render lane is wired, else a typed capture_unavailable names the missing seam. Use after scenery/prop authoring. | observation | query | active | ai-platform-observation | `mcp`<br>`ai` | `WorldObserveEntityView` |
| `generator.plan.compute` | Compute Generator Plan | Run an authored program in the bounded deterministic sandbox and return a validated world-build semantic-operation batch (the plan is the diff) plus a deterministic double-run planHash. Pure and read-only: the VM has no io/clock/Math.random, only a seeded rand(); the plan holds no write handle. | generators | query | active | ai-platform-generators | `mcp`<br>`ai` | `GeneratorPlanComputed` |
| `generator.plan.apply` | Apply Generator Plan | Recompute a plan by hash, lower it through the world-build semantic compiler (the single validator), and land the generated entities as ONE canonical transaction (one history/undo unit). Idempotent by (programHash, paramsHash, seed): a replay is a no-op. Standard approval applies. | generators | command | active | ai-platform-generators | `mcp`<br>`ai` | `GeneratorPlanApplied`<br>`ProjectGraphTransactionApplied` |
| `world.author.program` | Author World From One Program | Typecheck and compile ONE bounded build.ts against the generated builder SDK, compute its world-build plan, land it through the widened generator apply seam as ONE canonical transaction (one history/undo unit), observe one frame, optionally run a default playtest scenario (possess the start entity, move, interact), and return ONE receipt: plan steps, apply stages with per-owner mutation counts and wiring truth, an inline frame, a graded playtest verdict, source-mapped diagnostics back to build.ts lines, and a terminal outcome. Idempotent by (programHash, paramsHash, seed): a replay is a no-op. dry_run computes without applying. Standard approval applies. | generators | command | active | ai-platform-generators | `mcp`<br>`ai` | `GeneratorPlanApplied`<br>`ProjectGraphTransactionApplied` |
| `world.builder.sdk` | Fetch Builder SDK Types | Return the builder SDK .d.ts generated from this project's REAL catalog (built-in + project components) and its workspace asset ids: the exact type surface world_author_program typechecks build.ts against. Read-only - one authorized snapshot read plus a pure codegen, writing nothing. Lets an author working outside the editor autocomplete against the vocabulary the server will actually judge, instead of a default-catalog baseline whose asset ids match no real game. | generators | query | active | ai-platform-generators | `mcp`<br>`cli`<br>`ai` | `WorldBuilderSdkRead` |
| `world_build.semantic_operations.apply` | Apply World Build Semantic Operations | Apply a batch of high-level world-build semantic operations as ONE canonical transaction: compile the operations through the single world-build semantic compiler (the same validator world_build_compile_semantic_operations uses), lower them to Native Agent Runtime operations, and land them via one atomic idempotent applyTransaction (one history/undo unit). Budget-capped and plan-hash deterministic; a replay by idempotency key is a no-op. The WRITE twin of world_build_compile_semantic_operations and the primary document write path. Standard approval applies; conflict and budget overflow surface as typed rejections. | generators | command | active | ai-platform-generators | `mcp`<br>`ai` | `WorldBuildSemanticOperationsApplied`<br>`ProjectGraphTransactionApplied` |
| `world_build.semantic_operations.compile` | Compile World Build Semantic Operations | Compile high-level world-build semantic operations through the single world-build semantic compiler and return lowered operations, receipts, and diagnostics without writing anything. The dry-run READ twin of world_build.semantic_operations.apply. | generators | query | active | ai-platform-generators | `mcp`<br>`ai` | `WorldBuildSemanticOperationsCompiled` |
| `world_build.operation_catalog.read` | Read World Build Operation Catalog | Return the world-build semantic operation catalog (intent operation ids, titles, lowered targets, required coordinates) that documents what a world-build document can express. | generators | query | active | ai-platform-generators | `mcp`<br>`ai` | `WorldBuildOperationCatalogRead` |
| `authoring_package.export` | Export Authoring Package | Export the live project graph as the canonical authoring-package file tree (gessa.json manifest, worlds/entities documents, GessaScript sources) stamped with the conflict baseline: the graph revision plus per-script IR fingerprints. The read half of the file door - the same export the HTTP route and the gessa-package CLI pull drive. | generators | query | active | authoring-package | `mcp`<br>`ai` | `ProjectGraphSnapshotRead` |
| `authoring_package.apply` | Apply Authoring Package | Local-only authoring-package apply: compile against the live graph, then apply owner-validated steps with per-resource idempotency. Aggregate preflight is not qualified; earlier steps may persist before a later rejection. Unavailable outside the local environment. Use supported per-resource authoring operations there. HTTP, MCP, native AI, and CLI share this boundary. | generators | command | active | authoring-package | `mcp`<br>`ai` | `WorldBuildSemanticOperationsApplied`<br>`ProjectGraphTransactionApplied` |
| `project.entity.bulk_create` | Bulk Create Entities | Create up to 1,000 entities in one decisive batched call with built-in key-suffix conflict healing (each item resolves independently, one commit boundary per item). The batched multi-entity writer the AI core surface prefers over per-entity creates. | project-graph | command | active | project-graph | `mcp`<br>`ai` | `ProjectGraphTransactionApplied` |
| `world.playtest.scenario` | Playtest Scenario | Boot an isolated proof room for a world, possess an entity, execute a typed action sequence (move/look/jump/interact/press) with per-step tick budgets, and return a revision-stamped outcome (before/after scene digests, per-step applied/failed, diagnostics). Executed proof over a discardable proof room; no durable project mutation. | playtest | query | active | ai-platform-playtest | `mcp`<br>`ai` | `WorldPlaytestScenario` |

## Surface Mappings

| Surface | Method | Path | Tool | Action |
| --- | --- | --- | --- | --- |
| mcp |  |  | `agentenv_create_run` | `agentenv.create_run` |
| mcp |  |  | `agentenv_create_episode` | `agentenv.create_episode` |
| mcp |  |  | `agentenv_reset_episode` | `agentenv.reset_episode` |
| mcp |  |  | `agentenv_observe` | `agentenv.observe` |
| mcp |  |  | `agentenv_submit_intent` | `agentenv.submit_intent` |
| mcp |  |  | `agentenv_step` | `agentenv.step` |
| mcp |  |  | `agentenv_score` | `agentenv.score` |
| mcp |  |  | `agentenv_terminate` | `agentenv.terminate` |
| mcp |  |  | `agentenv_fetch_replay` | `agentenv.fetch_replay` |
| mcp |  |  | `agentenv_export_trajectory` | `agentenv.export_trajectory` |
| mcp |  |  | `project_get_graph_snapshot` | `project.graph.snapshot.read` |
| mcp |  |  | `project_get_world` | `project.world.read` |
| mcp |  |  | `project_get_prefab` | `project.prefab.read` |
| mcp |  |  | `project_get_ui_panel` | `project.ui_panel.read` |
| mcp |  |  | `project_get_data_store` | `project.data_store.read` |
| mcp |  |  | `project_get_entity` | `project.entity.read` |
| mcp |  |  | `project_search_entities` | `project.entity.search` |
| mcp |  |  | `project_get_script` | `project.script.read` |
| http | `POST` | `/api/workspaces` |  | `workspace.create` |
| http | `POST` | `/api/workspaces/:workspaceId/games` |  | `game.create` |
| http | `PATCH` | `/api/games/:gameId` |  | `game.update` |
| http | `PUT` | `/api/games/:gameId/thumbnail` |  | `game.update` |
| mcp |  |  | `project_update_game` | `game.update` |
| http | `POST` | `/api/games/:gameId/environments` |  | `environment.create` |
| http | `POST` | `/api/games/:gameId/project/transactions` |  | `project.transaction.apply` |
| http | `POST` | `/api/games/:gameId/project/assets` |  | `project.asset.create` |
| http | `PATCH` | `/api/games/:gameId/project/assets/:assetId` |  | `project.asset.update` |
| http | `DELETE` | `/api/games/:gameId/project/assets/:assetId` |  | `project.asset.delete` |
| http | `POST` | `/api/games/:gameId/project/assets/:assetId/duplicate` |  | `project.asset.duplicate` |
| mcp |  |  | `asset_duplicate` | `project.asset.duplicate` |
| http | `POST` | `/api/games/:gameId/project/assets/:assetId/model-document` |  | `project.asset.model_document.save` |
| mcp |  |  | `model_save` | `project.asset.model_document.save` |
| http | `GET` | `/api/games/:gameId/asset-pipeline/:assetId/model-material-slots` |  | `asset_pipeline.model_material_slots.inspect` |
| mcp |  |  | `project_inspect_model_material_slots` | `asset_pipeline.model_material_slots.inspect` |
| http | `POST` | `/api/games/:gameId/asset-pipeline/:assetId/promote-material-slot` |  | `asset_pipeline.model_material_slot.promote` |
| mcp |  |  | `project_promote_model_material_slot` | `asset_pipeline.model_material_slot.promote` |
| http | `POST` | `/api/games/:gameId/asset-pipeline/:assetId/promote-material-slots` |  | `asset_pipeline.model_material_slots.promote` |
| mcp |  |  | `project_promote_model_material_slots` | `asset_pipeline.model_material_slots.promote` |
| http | `POST` | `/api/games/:gameId/asset-pipeline/model-material-slot-overrides` |  | `asset_pipeline.model_material_slot.override` |
| mcp |  |  | `project_override_model_material_slot` | `asset_pipeline.model_material_slot.override` |
| http | `POST` | `/api/games/:gameId/project/worlds` |  | `project.world.create` |
| http | `PATCH` | `/api/games/:gameId/project/worlds/:idOrKey` |  | `project.world.update` |
| http | `DELETE` | `/api/games/:gameId/project/worlds/:idOrKey` |  | `project.world.delete` |
| http | `POST` | `/api/games/:gameId/project/components` |  | `project.component.create` |
| http | `PATCH` | `/api/games/:gameId/project/components/:idOrKey` |  | `project.component.update` |
| http | `DELETE` | `/api/games/:gameId/project/components/:idOrKey` |  | `project.component.delete` |
| http | `POST` | `/api/games/:gameId/project/prefabs` |  | `project.prefab.create` |
| http | `PATCH` | `/api/games/:gameId/project/prefabs/:idOrKey` |  | `project.prefab.update` |
| http | `DELETE` | `/api/games/:gameId/project/prefabs/:idOrKey` |  | `project.prefab.delete` |
| http | `POST` | `/api/games/:gameId/project/entities` |  | `project.entity.create` |
| http | `PATCH` | `/api/games/:gameId/project/entities/:idOrKey` |  | `project.entity.update` |
| http | `DELETE` | `/api/games/:gameId/project/entities/:idOrKey` |  | `project.entity.delete` |
| http | `POST` | `/api/games/:gameId/project/scripts` |  | `project.script.create` |
| http | `PATCH` | `/api/games/:gameId/project/scripts/:idOrKey` |  | `project.script.update` |
| http | `DELETE` | `/api/games/:gameId/project/scripts/:idOrKey` |  | `project.script.delete` |
| http | `POST` | `/api/games/:gameId/project/ui-panels` |  | `project.ui_panel.create` |
| http | `PATCH` | `/api/games/:gameId/project/ui-panels/:idOrKey` |  | `project.ui_panel.update` |
| http | `DELETE` | `/api/games/:gameId/project/ui-panels/:idOrKey` |  | `project.ui_panel.delete` |
| http | `PUT` | `/api/games/:gameId/project/entities/:idOrKey/components/:componentKey` |  | `project.entity.component.set` |
| http | `PATCH` | `/api/games/:gameId/project/entities/:idOrKey/components/:componentKey` |  | `project.entity.component.set` |
| http | `DELETE` | `/api/games/:gameId/project/entities/:idOrKey/components/:componentKey` |  | `project.entity.component.delete` |
| http | `POST` | `/api/generation/quote` |  | `generation.job.quote` |
| http | `POST` | `/api/generation/jobs` |  | `generation.job.create` |
| http | `POST` | `/api/generation/jobs/:jobId/cancel` |  | `generation.job.cancel` |
| http | `POST` | `/api/generation/worker/claim` |  | `generation.job.claim` |
| http | `POST` | `/api/generation/worker/jobs/:jobId/heartbeat` |  | `generation.job.heartbeat` |
| http | `POST` | `/api/generation/worker/jobs/:jobId/progress` |  | `generation.job.progress` |
| http | `POST` | `/api/generation/worker/jobs/:jobId/complete` |  | `generation.job.complete` |
| http | `POST` | `/api/generation/worker/jobs/:jobId/fail` |  | `generation.job.fail` |
| http | `POST` | `/api/games/:gameId/project/scripts/:idOrKey/patches/apply` |  | `project.script.patch.apply` |
| http | `POST` | `/api/games/:gameId/project/assets/:assetId/material/patches/apply` |  | `project.material.patch.apply` |
| http | `POST` | `/api/games/:gameId/project/assets/:assetId/terrain/patches/apply` |  | `terrain.patch.apply` |
| mcp |  |  | `project_apply_terrain_semantic_patch` | `terrain.patch.apply` |
| http | `POST` | `/api/games/:gameId/project/assets/:assetId/instance-set/patches/apply` |  | `instance_set.patch.apply` |
| mcp |  |  | `project_apply_instance_set_patch` | `instance_set.patch.apply` |
| sdk |  | `project.instanceSet.applySemanticPatch` |  | `instance_set.patch.apply` |
| mcp |  |  | `project_apply_transaction` | `project.transaction.apply` |
| sdk |  | `project.terrain.applySemanticPatch` |  | `terrain.patch.apply` |
| http | `POST` | `/api/games/:gameId/project/assets/:assetId/terrain/artifacts/build` |  | `terrain.artifacts.build` |
| sdk |  | `project.terrain.buildArtifacts` |  | `terrain.artifacts.build` |
| http | `POST` | `/api/games/:gameId/publish/dev` |  | `publish.dev` |
| http | `POST` | `/api/games/:gameId/spatial-assets/imports` |  | `spatial.asset.import` |
| http | `POST` | `/api/games/:gameId/spatial-assets/import-jobs/:jobId/run` |  | `spatial.asset.import` |
| http | `POST` | `/api/games/:gameId/spatial-assets/:assetId/proxy-jobs` |  | `spatial.capture.proxy.generate` |
| http | `POST` | `/api/games/:gameId/spatial-assets/proxy-jobs/:jobId/run` |  | `spatial.capture.proxy.generate` |
| http | `POST` | `/api/games/:gameId/spatial-assets/:assetId/annotations` |  | `spatial.capture.annotate` |
| http | `POST` | `/api/games/:gameId/spatial-assets/:assetId/build-world` |  | `world.build.from_spatial_asset` |
| http | `POST` | `/api/games/:gameId/project/worlds/:idOrKey/visual-profile/apply` |  | `renderer.visual_profile.apply` |
| sdk |  | `renderer.visualProfiles.apply` |  | `renderer.visual_profile.apply` |
| mcp |  |  | `project_create_game` | `game.create` |
| http | `PUT` | `/api/games/:gameId/commerce/offers/:offerKey` |  | `commerce.offer.set` |
| mcp |  |  | `commerce_set_offer` | `commerce.offer.set` |
| ai |  |  | `set_commerce_offer` | `commerce.offer.set` |
| sdk |  | `Commerce.setOffer` |  | `commerce.offer.set` |
| http | `GET` | `/api/games/:gameId/commerce/catalog` |  | `commerce.offer.list` |
| mcp |  |  | `commerce_list_offers` | `commerce.offer.list` |
| ai |  |  | `list_commerce_offers` | `commerce.offer.list` |
| sdk |  | `Commerce.listOffers` |  | `commerce.offer.list` |
| http | `PATCH` | `/api/games/:gameId/multiplayer-default` |  | `game.multiplayer_blueprint.set` |
| mcp |  |  | `project_set_multiplayer_blueprint` | `game.multiplayer_blueprint.set` |
| ai |  |  | `set_game_multiplayer_blueprint` | `game.multiplayer_blueprint.set` |
| sdk |  | `Project.setMultiplayerBlueprint` |  | `game.multiplayer_blueprint.set` |
| mcp |  |  | `workspace_asset_link` | `workspace.asset.link` |
| http | `POST` | `/api/workspaces/:workspaceId/assets/:assetIdOrKey/link-game` |  | `workspace.asset.link` |
| mcp |  |  | `project_create_asset` | `project.asset.create` |
| mcp |  |  | `project_create_world` | `project.world.create` |
| mcp |  |  | `project_create_entity` | `project.entity.create` |
| mcp |  |  | `project_create_script` | `project.script.create` |
| mcp |  |  | `project_update_script` | `project.script.update` |
| mcp |  |  | `project_apply_script_semantic_patch` | `project.script.patch.apply` |
| ai |  |  | `apply_script_semantic_patch` | `project.script.patch.apply` |
| sdk |  | `project.scripts.applySemanticPatch` |  | `project.script.patch.apply` |
| mcp |  |  | `project_apply_material_semantic_patch` | `project.material.patch.apply` |
| ai |  |  | `apply_material_semantic_patch` | `project.material.patch.apply` |
| sdk |  | `project.materials.applySemanticPatch` |  | `project.material.patch.apply` |
| mcp |  |  | `project_apply_smart_asset_package` | `blueprint.package.apply` |
| ai |  |  | `apply_smart_asset_package` | `blueprint.package.apply` |
| sdk |  | `Project.applySmartAssetPackage` |  | `blueprint.package.apply` |
| http | `POST` | `/api/games/:gameId/workflows/:idOrKey/runs` |  | `workflow.run.start` |
| mcp |  |  | `project_start_workflow_run` | `workflow.run.start` |
| mcp |  |  | `project_create_ui_panel` | `project.ui_panel.create` |
| mcp |  |  | `project_create_data_store` | `project.data_store.create` |
| mcp |  |  | `spatial_asset_queue_import` | `spatial.asset.import` |
| mcp |  |  | `spatial_capture_queue_proxy_job` | `spatial.capture.proxy.generate` |
| mcp |  |  | `spatial_capture_record_annotations` | `spatial.capture.annotate` |
| mcp |  |  | `world_build_from_spatial_asset` | `world.build.from_spatial_asset` |
| ai |  |  | `build_world_from_spatial_asset` | `world.build.from_spatial_asset` |
| sdk |  | `world.build.fromSpatialAsset` |  | `world.build.from_spatial_asset` |
| sdk |  | `renderer.visualQa.run` |  | `renderer.visual_qa.run` |
| mcp |  |  | `qa_capture_renderer_viewport` | `qa.renderer.viewport.capture` |
| mcp |  |  | `blender_model_create` | `blender.model.create` |
| mcp |  |  | `generation_create_job` | `generation.job.create` |
| mcp |  |  | `generation_list_capabilities` | `generation.capability.list` |
| mcp |  |  | `generation_get_job` | `generation.job.read` |
| mcp |  |  | `generation_list_jobs` | `generation.job.list` |
| mcp |  |  | `knowledge_search` | `knowledge.search` |
| mcp |  |  | `knowledge_load` | `knowledge.load` |
| mcp |  |  | `engine_list_component_types` | `engine.component.types.list` |
| mcp |  |  | `engine_get_component_schema` | `engine.component.schema.read` |
| mcp |  |  | `engine_list_sdk_functions` | `engine.sdk.functions.list` |
| mcp |  |  | `engine_get_sdk_function_signature` | `engine.sdk.function.signature.read` |
| mcp |  |  | `engine_get_capability_graph` | `engine.capability.graph.read` |
| mcp |  |  | `engine_list_smart_asset_packages` | `engine.asset_package.list` |
| mcp |  |  | `project_update_world` | `project.world.update` |
| mcp |  |  | `project_delete_world` | `project.world.delete` |
| mcp |  |  | `project_update_entity` | `project.entity.update` |
| mcp |  |  | `project_delete_entity` | `project.entity.delete` |
| mcp |  |  | `project_add_component` | `project.entity.component.set` |
| mcp |  |  | `project_remove_component` | `project.entity.component.delete` |
| mcp |  |  | `project_update_asset` | `project.asset.update` |
| mcp |  |  | `project_delete_asset` | `project.asset.delete` |
| mcp |  |  | `project_create_prefab` | `project.prefab.create` |
| mcp |  |  | `project_update_prefab` | `project.prefab.update` |
| mcp |  |  | `project_delete_prefab` | `project.prefab.delete` |
| mcp |  |  | `project_delete_script` | `project.script.delete` |
| mcp |  |  | `project_update_ui_panel` | `project.ui_panel.update` |
| mcp |  |  | `project_delete_ui_panel` | `project.ui_panel.delete` |
| mcp |  |  | `project_update_data_store` | `project.data_store.update` |
| mcp |  |  | `project_delete_data_store` | `project.data_store.delete` |
| mcp |  |  | `workspace_create` | `workspace.create` |
| mcp |  |  | `project_create_environment` | `environment.create` |
| mcp |  |  | `runtime_proof_run` | `runtime.proof.run` |
| mcp |  |  | `versioning_state_diff_proof_run` | `versioning.proof.state_diff` |
| mcp |  |  | `simulation_run` | `qa.run.start` |
| mcp |  |  | `world_apply_visual_profile` | `renderer.visual_profile.apply` |
| mcp |  |  | `generation_quote_job` | `generation.job.quote` |
| mcp |  |  | `generation_cancel_job` | `generation.job.cancel` |
| mcp |  |  | `terrain_build_artifacts` | `terrain.artifacts.build` |
| mcp |  |  | `runtime_create_deployment` | `publish.dev` |
| mcp |  |  | `world_observe_scene` | `world.observe.scene` |
| mcp |  |  | `world_observe_frame` | `world.observe.frame` |
| mcp |  |  | `world_observe_logs` | `world.observe.logs` |
| mcp |  |  | `world_observe_rooms` | `world.observe.rooms` |
| mcp |  |  | `world_sample_terrain` | `world.sample.terrain` |
| mcp |  |  | `world_observe_entity_view` | `world.observe.entity_view` |
| mcp |  |  | `generator_plan_compute` | `generator.plan.compute` |
| mcp |  |  | `generator_plan_apply` | `generator.plan.apply` |
| mcp |  |  | `world_playtest_scenario` | `world.playtest.scenario` |
| mcp |  |  | `world_author_program` | `world.author.program` |
| mcp |  |  | `world_builder_sdk` | `world.builder.sdk` |
| mcp |  |  | `world_build_apply_semantic_operations` | `world_build.semantic_operations.apply` |
| mcp |  |  | `world_build_compile_semantic_operations` | `world_build.semantic_operations.compile` |
| mcp |  |  | `world_build_get_operation_catalog` | `world_build.operation_catalog.read` |
| http | `GET` | `/api/games/:gameId/authoring-package/export` |  | `authoring_package.export` |
| http | `POST` | `/api/games/:gameId/authoring-package/apply` |  | `authoring_package.apply` |
| mcp |  |  | `world_build_export_authoring_package` | `authoring_package.export` |
| mcp |  |  | `world_build_apply_authoring_package` | `authoring_package.apply` |
| mcp |  |  | `project_bulk_create_entities` | `project.entity.bulk_create` |

## Action Details

One section per action, keyed by action id, so a reference to an action id resolves to its own anchor.

### agentenv.create_episode

Execute the canonical AgentEnv CreateEpisode protocol exchange without bypassing lifecycle, identity, version, or idempotency authority.

| Field | Value |
| --- | --- |
| Title | Create Episode Agent Environment |
| Domain | `agentenv` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `agentenv` |
| Exposure | `mcp`, `sdk` |
| Audit events | `AgentEnvCreateEpisode` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `agentenv_create_episode` |

### agentenv.create_run

Execute the canonical AgentEnv CreateRun protocol exchange without bypassing lifecycle, identity, version, or idempotency authority.

| Field | Value |
| --- | --- |
| Title | Create Run Agent Environment |
| Domain | `agentenv` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `agentenv` |
| Exposure | `mcp`, `sdk` |
| Audit events | `AgentEnvCreateRun` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `agentenv_create_run` |

### agentenv.export_trajectory

Execute the canonical AgentEnv ExportTrajectory protocol exchange without bypassing lifecycle, identity, version, or idempotency authority.

| Field | Value |
| --- | --- |
| Title | Export Trajectory Agent Environment |
| Domain | `agentenv` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `agentenv` |
| Exposure | `mcp`, `sdk` |
| Audit events | `AgentEnvExportTrajectory` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `agentenv_export_trajectory` |

### agentenv.fetch_replay

Execute the canonical AgentEnv FetchReplay protocol exchange without bypassing lifecycle, identity, version, or idempotency authority.

| Field | Value |
| --- | --- |
| Title | Fetch Replay Agent Environment |
| Domain | `agentenv` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `agentenv` |
| Exposure | `mcp`, `sdk` |
| Audit events | `AgentEnvFetchReplay` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `agentenv_fetch_replay` |

### agentenv.observe

Execute the canonical AgentEnv Observe protocol exchange without bypassing lifecycle, identity, version, or idempotency authority.

| Field | Value |
| --- | --- |
| Title | Observe Agent Environment |
| Domain | `agentenv` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `agentenv` |
| Exposure | `mcp`, `sdk` |
| Audit events | `AgentEnvObserve` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `agentenv_observe` |

### agentenv.reset_episode

Execute the canonical AgentEnv ResetEpisode protocol exchange without bypassing lifecycle, identity, version, or idempotency authority.

| Field | Value |
| --- | --- |
| Title | Reset Episode Agent Environment |
| Domain | `agentenv` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `agentenv` |
| Exposure | `mcp`, `sdk` |
| Audit events | `AgentEnvResetEpisode` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `agentenv_reset_episode` |

### agentenv.score

Execute the canonical AgentEnv Score protocol exchange without bypassing lifecycle, identity, version, or idempotency authority.

| Field | Value |
| --- | --- |
| Title | Score Agent Environment |
| Domain | `agentenv` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `agentenv` |
| Exposure | `mcp`, `sdk` |
| Audit events | `AgentEnvScore` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `agentenv_score` |

### agentenv.step

Execute the canonical AgentEnv Step protocol exchange without bypassing lifecycle, identity, version, or idempotency authority.

| Field | Value |
| --- | --- |
| Title | Step Agent Environment |
| Domain | `agentenv` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `agentenv` |
| Exposure | `mcp`, `sdk` |
| Audit events | `AgentEnvStep` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `agentenv_step` |

### agentenv.submit_intent

Execute the canonical AgentEnv SubmitIntent protocol exchange without bypassing lifecycle, identity, version, or idempotency authority.

| Field | Value |
| --- | --- |
| Title | Submit Intent Agent Environment |
| Domain | `agentenv` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `agentenv` |
| Exposure | `mcp`, `sdk` |
| Audit events | `AgentEnvSubmitIntent` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `agentenv_submit_intent` |

### agentenv.terminate

Execute the canonical AgentEnv Terminate protocol exchange without bypassing lifecycle, identity, version, or idempotency authority.

| Field | Value |
| --- | --- |
| Title | Terminate Agent Environment |
| Domain | `agentenv` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `agentenv` |
| Exposure | `mcp`, `sdk` |
| Audit events | `AgentEnvTerminate` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `agentenv_terminate` |

### asset_pipeline.model_material_slot.override

Set or clear one renderable model material-slot override through the Asset Pipeline owner.

| Field | Value |
| --- | --- |
| Title | Override Model Material Slot |
| Domain | `asset-pipeline` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `asset-pipeline` |
| Exposure | `ui`, `mcp`, `ai` |
| Audit events | `AssetPipelineModelMaterialSlotOverridden` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/asset-pipeline/model-material-slot-overrides` |  |
| mcp |  |  | `project_override_model_material_slot` |

### asset_pipeline.model_material_slot.promote

Promote one conditioned model material slot into a durable ProjectAsset through the Asset Pipeline owner.

| Field | Value |
| --- | --- |
| Title | Promote Model Material Slot |
| Domain | `asset-pipeline` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `asset-pipeline` |
| Exposure | `ui`, `mcp`, `ai` |
| Audit events | `AssetPipelineModelMaterialSlotPromoted` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/asset-pipeline/:assetId/promote-material-slot` |  |
| mcp |  |  | `project_promote_model_material_slot` |

### asset_pipeline.model_material_slots.inspect

Inspect the canonical conditioned material-slot projection for one model ProjectAsset UUID.

| Field | Value |
| --- | --- |
| Title | Inspect Model Material Slots |
| Domain | `asset-pipeline` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `asset-pipeline` |
| Exposure | `ui`, `mcp`, `ai` |
| Audit events | `AssetPipelineModelMaterialSlotsInspected` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `GET` | `/api/games/:gameId/asset-pipeline/:assetId/model-material-slots` |  |
| mcp |  |  | `project_inspect_model_material_slots` |

### asset_pipeline.model_material_slots.promote

Promote all, every, or a selected bulk batch of conditioned model material slots into durable material assets through the Asset Pipeline owner.

| Field | Value |
| --- | --- |
| Title | Promote Model Material Slots |
| Domain | `asset-pipeline` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `asset-pipeline` |
| Exposure | `ui`, `mcp`, `ai` |
| Audit events | `AssetPipelineModelMaterialSlotsPromoted` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/asset-pipeline/:assetId/promote-material-slots` |  |
| mcp |  |  | `project_promote_model_material_slots` |

### authoring_package.apply

Local-only authoring-package apply: compile against the live graph, then apply owner-validated steps with per-resource idempotency. Aggregate preflight is not qualified; earlier steps may persist before a later rejection. Unavailable outside the local environment. Use supported per-resource authoring operations there. HTTP, MCP, native AI, and CLI share this boundary.

| Field | Value |
| --- | --- |
| Title | Apply Authoring Package |
| Domain | `generators` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `authoring-package` |
| Exposure | `mcp`, `ai` |
| Audit events | `WorldBuildSemanticOperationsApplied`, `ProjectGraphTransactionApplied` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/authoring-package/apply` |  |
| mcp |  |  | `world_build_apply_authoring_package` |

### authoring_package.export

Export the live project graph as the canonical authoring-package file tree (gessa.json manifest, worlds/entities documents, GessaScript sources) stamped with the conflict baseline: the graph revision plus per-script IR fingerprints. The read half of the file door - the same export the HTTP route and the gessa-package CLI pull drive.

| Field | Value |
| --- | --- |
| Title | Export Authoring Package |
| Domain | `generators` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `authoring-package` |
| Exposure | `mcp`, `ai` |
| Audit events | `ProjectGraphSnapshotRead` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `GET` | `/api/games/:gameId/authoring-package/export` |  |
| mcp |  |  | `world_build_export_authoring_package` |

### blender.model.create

Author a detailed Blender model with the dedicated Astra model, render and import it through the durable generation service.

| Field | Value |
| --- | --- |
| Title | Create Blender Model |
| Domain | `generation` |
| Kind | `job_start` |
| Lifecycle | `active` |
| Owner | `generation` |
| Exposure | `ai` |
| Audit events | `BlenderModelRequested` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `blender_model_create` |

### blueprint.package.apply

Apply a canonical Smart Asset Package manifest through backend package service paths and Project Graph transactions.

| Field | Value |
| --- | --- |
| Title | Apply Smart Asset Package |
| Domain | `blueprint` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `blueprints` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `SmartAssetPackageApplied`, `ProjectGraphTransactionApplied` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `project_apply_smart_asset_package` |
| ai |  |  | `apply_smart_asset_package` |
| sdk |  | `Project.applySmartAssetPackage` |  |

### blueprint.template.apply

Compatibility alias for applying a creation template; canonical package application is blueprint.package.apply.

| Field | Value |
| --- | --- |
| Title | Apply Creation Template |
| Domain | `blueprint` |
| Kind | `command` |
| Lifecycle | `planned` |
| Owner | `blueprints` |
| Exposure | `ui`, `sdk` |
| Audit events | `CreationTemplateApplied` |

Surface mappings:

No surface mappings; reachable through the exposure surfaces above.

### commerce.offer.list

List every offer defined on a game, drafts and archived included, with keys, prices, kinds and statuses. Read this before naming an offer key in a script so the purchase prompt points at an offer that exists and is active.

| Field | Value |
| --- | --- |
| Title | List Commerce Offers |
| Domain | `control-plane` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `commerce` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `ListCommerceOffers` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `GET` | `/api/games/:gameId/commerce/catalog` |  |
| mcp |  |  | `commerce_list_offers` |
| ai |  |  | `list_commerce_offers` |
| sdk |  | `Commerce.listOffers` |  |

### commerce.offer.set

Create or update one purchasable offer on a game: its title, price, kind (durable or consumable), status (draft, active, archived) and the entitlement or item grants it delivers. Offers are what a script's Commerce.promptPurchase names, so the offer must exist before a purchase prompt can open.

| Field | Value |
| --- | --- |
| Title | Set Commerce Offer |
| Domain | `control-plane` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `commerce` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `UpsertCommerceOffer` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `PUT` | `/api/games/:gameId/commerce/offers/:offerKey` |  |
| mcp |  |  | `commerce_set_offer` |
| ai |  |  | `set_commerce_offer` |
| sdk |  | `Commerce.setOffer` |  |

### engine.asset_package.list

List canonical Smart Asset Package manifests before applying a launch package or package variant.

| Field | Value |
| --- | --- |
| Title | List Engine Smart Asset Packages |
| Domain | `engine` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `engine` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `EngineSmartAssetPackagesListed` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `engine_list_smart_asset_packages` |

### engine.capability.graph.read

Read the canonical engine capability graph for agent self-discovery before complex builds.

| Field | Value |
| --- | --- |
| Title | Read Engine Capability Graph |
| Domain | `engine` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `engine` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `EngineCapabilityGraphRead` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `engine_get_capability_graph` |

### engine.component.schema.read

Get the exact schema, field contracts, canonical draft, and reference requirements for one built-in ECS component type (for example TransformComponent). Call this before authoring a component value so the value carries the correct type discriminator and required fields.

| Field | Value |
| --- | --- |
| Title | Read Engine Component Schema |
| Domain | `engine` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `engine` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `EngineComponentSchemaRead` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `engine_get_component_schema` |

### engine.component.types.list

List built-in ECS component types with their canonical drafts, add modes, reference admission contracts, and field contracts. Use before authoring entity components to learn which component types exist and their exact shapes.

| Field | Value |
| --- | --- |
| Title | List Engine Component Types |
| Domain | `engine` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `engine` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `EngineComponentTypesListed` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `engine_list_component_types` |

### engine.sdk.function.signature.read

Get the metadata and signature for one script SDK host function by namespace.name. Use to resolve one script host function before calling it in an authored script.

| Field | Value |
| --- | --- |
| Title | Read Engine SDK Function Signature |
| Domain | `engine` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `engine` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `EngineSdkFunctionSignatureRead` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `engine_get_sdk_function_signature` |

### engine.sdk.functions.list

List the script SDK host functions available to authored scripts. Use before writing TypeScript scripts to learn which host APIs exist.

| Field | Value |
| --- | --- |
| Title | List Engine Script SDK Functions |
| Domain | `engine` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `engine` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `EngineSdkFunctionsListed` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `engine_list_sdk_functions` |

### environment.create

Create a game environment through the control-plane service.

| Field | Value |
| --- | --- |
| Title | Create Environment |
| Domain | `control-plane` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `control-plane` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `CreateEnvironment` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/environments` |  |
| mcp |  |  | `project_create_environment` |

### factory.proof.run

Disabled native-AI action: a build-time factory-proof provenance harness, not a runtime owner. Returns a typed unsupported gap if requested by the agent.

| Field | Value |
| --- | --- |
| Title | Run Factory Proof |
| Domain | `factory-qa` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `factory-proof` |
| Exposure | `sdk` |
| Audit events | `FactoryProofRun` |

Surface mappings:

No surface mappings; reachable through the exposure surfaces above.

### game.create

Create a game/project row and apply the caller's declared canonical template intent.

| Field | Value |
| --- | --- |
| Title | Create Project |
| Domain | `control-plane` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `control-plane` |
| Exposure | `ui`, `mcp`, `ai` |
| Audit events | `CreateGame` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/workspaces/:workspaceId/games` |  |
| mcp |  |  | `project_create_game` |

### game.multiplayer_blueprint.set

Set the game's default multiplayer blueprint (rooms, queues, teams, seats, placement, lifecycle, and netcode runtime budgets). Configures matchmaking and netcode parameters a script cannot set.

| Field | Value |
| --- | --- |
| Title | Set Multiplayer Blueprint |
| Domain | `control-plane` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `control-plane` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `SetGameMultiplayerDefault` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `PATCH` | `/api/games/:gameId/multiplayer-default` |  |
| mcp |  |  | `project_set_multiplayer_blueprint` |
| ai |  |  | `set_game_multiplayer_blueprint` |
| sdk |  | `Project.setMultiplayerBlueprint` |  |

### game.update

Update project control-plane fields such as title and thumbnail.

| Field | Value |
| --- | --- |
| Title | Update Project |
| Domain | `control-plane` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `control-plane` |
| Exposure | `ui`, `sdk`, `mcp`, `ai` |
| Audit events | `UpdateGame`, `SetGameThumbnail` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `PATCH` | `/api/games/:gameId` |  |
| http | `PUT` | `/api/games/:gameId/thumbnail` |  |
| mcp |  |  | `project_update_game` |

### generation.capability.list

List generation offerings visible to the requester through the canonical generation owner.

| Field | Value |
| --- | --- |
| Title | List Generation Capabilities |
| Domain | `generation` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `generation` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `GenerationCapabilitiesListed` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `generation_list_capabilities` |

### generation.job.cancel

Cancel an unclaimed generation job through its owner, or explicitly cancel saved placement with scope placement while rendering and incurred charges continue. Inspect the returned placement status for completion races.

| Field | Value |
| --- | --- |
| Title | Cancel Generation Job |
| Domain | `generation` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `generation` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `GenerationJobCancel` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/generation/jobs/:jobId/cancel` |  |
| mcp |  |  | `generation_cancel_job` |

### generation.job.claim

Claim the next queued generation job for a worker lease.

| Field | Value |
| --- | --- |
| Title | Claim Generation Job |
| Domain | `generation` |
| Kind | `job_start` |
| Lifecycle | `active` |
| Owner | `generation` |
| Exposure | `cli`, `admin` |
| Audit events | `GenerationJobClaim` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/generation/worker/claim` |  |

### generation.job.complete

Complete and finalize a generation job.

| Field | Value |
| --- | --- |
| Title | Complete Generation Job |
| Domain | `generation` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `generation` |
| Exposure | `cli`, `admin` |
| Audit events | `GenerationJobComplete` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/generation/worker/jobs/:jobId/complete` |  |

### generation.job.create

Create a durable generation job for an approved capability.

| Field | Value |
| --- | --- |
| Title | Create Generation Job |
| Domain | `generation` |
| Kind | `job_start` |
| Lifecycle | `active` |
| Owner | `generation` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `GenerationJobCreated`, `GenerationJobQueued` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/generation/jobs` |  |
| mcp |  |  | `generation_create_job` |

### generation.job.fail

Fail or retry a generation job through worker-owned state transitions.

| Field | Value |
| --- | --- |
| Title | Fail Generation Job |
| Domain | `generation` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `generation` |
| Exposure | `cli`, `admin` |
| Audit events | `GenerationJobFail` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/generation/worker/jobs/:jobId/fail` |  |

### generation.job.heartbeat

Extend a generation job worker lease.

| Field | Value |
| --- | --- |
| Title | Heartbeat Generation Job |
| Domain | `generation` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `generation` |
| Exposure | `cli`, `admin` |
| Audit events | `GenerationJobHeartbeat` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/generation/worker/jobs/:jobId/heartbeat` |  |

### generation.job.list

List durable generation jobs visible to the requester through the canonical generation owner.

| Field | Value |
| --- | --- |
| Title | List Generation Jobs |
| Domain | `generation` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `generation` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `GenerationJobsListed` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `generation_list_jobs` |

### generation.job.progress

Record worker-owned generation job progress.

| Field | Value |
| --- | --- |
| Title | Progress Generation Job |
| Domain | `generation` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `generation` |
| Exposure | `cli`, `admin` |
| Audit events | `GenerationJobProgress` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/generation/worker/jobs/:jobId/progress` |  |

### generation.job.quote

Quote a generation request against capability, policy, and budget controls.

| Field | Value |
| --- | --- |
| Title | Quote Generation Job |
| Domain | `generation` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `generation` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `GenerationJobQuoted` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/generation/quote` |  |
| mcp |  |  | `generation_quote_job` |

### generation.job.read

Read one durable generation job through the canonical generation owner.

| Field | Value |
| --- | --- |
| Title | Read Generation Job |
| Domain | `generation` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `generation` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `GenerationJobRead` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `generation_get_job` |

### generator.plan.apply

Recompute a plan by hash, lower it through the world-build semantic compiler (the single validator), and land the generated entities as ONE canonical transaction (one history/undo unit). Idempotent by (programHash, paramsHash, seed): a replay is a no-op. Standard approval applies.

| Field | Value |
| --- | --- |
| Title | Apply Generator Plan |
| Domain | `generators` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `ai-platform-generators` |
| Exposure | `mcp`, `ai` |
| Audit events | `GeneratorPlanApplied`, `ProjectGraphTransactionApplied` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `generator_plan_apply` |

### generator.plan.compute

Run an authored program in the bounded deterministic sandbox and return a validated world-build semantic-operation batch (the plan is the diff) plus a deterministic double-run planHash. Pure and read-only: the VM has no io/clock/Math.random, only a seeded rand(); the plan holds no write handle.

| Field | Value |
| --- | --- |
| Title | Compute Generator Plan |
| Domain | `generators` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `ai-platform-generators` |
| Exposure | `mcp`, `ai` |
| Audit events | `GeneratorPlanComputed` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `generator_plan_compute` |

### instance_set.patch.apply

Apply checked bulk InstanceSet aggregate operations (configure/populate/fill/clearRegion/setCells/clearCells/scatterInstances/paintKind/removeInstances) to a versioned instanceSet resource facet through the single instance-set patch chokepoint (compileInstanceSetPatch + applyInstanceSetPatch), advancing the facet source version so render/collider projections regenerate. Lowers into ProjectGraphService.applyInstanceSetPatch over the asset instanceSet facet via the existing updateAsset path (no parallel write path); author only through the typed ops, never raw packed cell/instance arrays.

| Field | Value |
| --- | --- |
| Title | Apply Instance Set Semantic Patch |
| Domain | `instance-set` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `instance-set` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `InstanceSetPatchApplied` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/assets/:assetId/instance-set/patches/apply` |  |
| mcp |  |  | `project_apply_instance_set_patch` |
| sdk |  | `project.instanceSet.applySemanticPatch` |  |

### knowledge.load

Load one knowledge entry by id with full provenance (source path, sha256, corpus, trust). Optional playbook/distillation corpora refuse to load under the no-skill switch.

| Field | Value |
| --- | --- |
| Title | Load Knowledge Entry |
| Domain | `knowledge` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `knowledge` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `KnowledgeLoaded` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `knowledge_load` |

### knowledge.search

Search the pull-only knowledge library (generated engine reference plus optional curated playbooks) and return pointers with distilled summaries, never bulk content.

| Field | Value |
| --- | --- |
| Title | Search Knowledge Library |
| Domain | `knowledge` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `knowledge` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `KnowledgeSearched` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `knowledge_search` |

### project.asset.create

Create a ProjectAsset through the UUID-only Project Graph client contract; internal keys, storage, pipeline, provenance, and frozen graph fields are never caller-owned.

| Field | Value |
| --- | --- |
| Title | Create Project Asset |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `CreateProjectAsset` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/assets` |  |
| mcp |  |  | `project_create_asset` |

### project.asset.delete

Delete a ProjectAsset through the UUID-only Project Graph client contract; internal keys, storage, pipeline, provenance, and frozen graph fields are never caller-owned.

| Field | Value |
| --- | --- |
| Title | Delete Project Asset |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `DeleteProjectAsset` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `DELETE` | `/api/games/:gameId/project/assets/:assetId` |  |
| mcp |  |  | `project_delete_asset` |

### project.asset.duplicate

Duplicate a ProjectAsset by canonical UUID through the Project Graph owner so storage-owned fields are copied internally and never reconstructed by a caller.

| Field | Value |
| --- | --- |
| Title | Duplicate Project Asset |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai` |
| Audit events | `CreateProjectAsset` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/assets/:assetId/duplicate` |  |
| mcp |  |  | `asset_duplicate` |

### project.asset.model_document.save

Validate and persist the authored ModelAuthoringDocument through the dedicated Project Graph merge boundary without opening the generic client asset update to server-owned rendering fields.

| Field | Value |
| --- | --- |
| Title | Save Project Model Document |
| Domain | `model-authoring` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai` |
| Audit events | `UpdateProjectAsset` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/assets/:assetId/model-document` |  |
| mcp |  |  | `model_save` |

### project.asset.update

Update a ProjectAsset through the UUID-only Project Graph client contract; internal keys, storage, pipeline, provenance, and frozen graph fields are never caller-owned.

| Field | Value |
| --- | --- |
| Title | Update Project Asset |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `UpdateProjectAsset` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `PATCH` | `/api/games/:gameId/project/assets/:assetId` |  |
| mcp |  |  | `project_update_asset` |

### project.component.create

Create a Project Graph component definition record through backend service paths. Project-defined components are production-grade backend-validated project-local data contracts for advanced/import-only data; they are not canonical engine atomics.

| Field | Value |
| --- | --- |
| Title | Create Project Component |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `sdk` |
| Audit events | `CreateProjectComponent` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/components` |  |

### project.component.delete

Delete a Project Graph component definition record through backend service paths. Project-defined components are production-grade backend-validated project-local data contracts for advanced/import-only data; they are not canonical engine atomics.

| Field | Value |
| --- | --- |
| Title | Delete Project Component |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `sdk` |
| Audit events | `DeleteProjectComponent` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `DELETE` | `/api/games/:gameId/project/components/:idOrKey` |  |

### project.component.update

Update a Project Graph component definition record through backend service paths. Project-defined components are production-grade backend-validated project-local data contracts for advanced/import-only data; they are not canonical engine atomics.

| Field | Value |
| --- | --- |
| Title | Update Project Component |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `sdk` |
| Audit events | `UpdateProjectComponent` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `PATCH` | `/api/games/:gameId/project/components/:idOrKey` |  |

### project.data_store.create

Create a Project Graph data store record through the canonical owner service; the receipt is the exact client resource.

| Field | Value |
| --- | --- |
| Title | Create Project Data Store |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `CreateProjectDataStore` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `project_create_data_store` |

### project.data_store.delete

Delete a Project Graph data store record through the canonical owner service; the receipt is the exact client resource.

| Field | Value |
| --- | --- |
| Title | Delete Project Data Store |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `DeleteProjectDataStore` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `project_delete_data_store` |

### project.data_store.read

Read one Project Graph data store record by uuid or graph key through the canonical owner service; the receipt is the exact client resource with its current version.

| Field | Value |
| --- | --- |
| Title | Read Project Data Store |
| Domain | `project-graph` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `ReadProjectDataStore` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `project_get_data_store` |

### project.data_store.update

Update a Project Graph data store record through the canonical owner service; the receipt is the exact client resource.

| Field | Value |
| --- | --- |
| Title | Update Project Data Store |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `UpdateProjectDataStore` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `project_update_data_store` |

### project.entity.bulk_create

Create up to 1,000 entities in one decisive batched call with built-in key-suffix conflict healing (each item resolves independently, one commit boundary per item). The batched multi-entity writer the AI core surface prefers over per-entity creates.

| Field | Value |
| --- | --- |
| Title | Bulk Create Entities |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `mcp`, `ai` |
| Audit events | `ProjectGraphTransactionApplied` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `project_bulk_create_entities` |

### project.entity.component.delete

Remove one component from a Project Graph entity through the canonical component mutation kernel. With expected_revision the delete goes through an optimistic-concurrency transaction and returns a transaction result; otherwise it returns the updated entity.

| Field | Value |
| --- | --- |
| Title | Delete Entity Component |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `DeleteProjectEntityComponent` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `DELETE` | `/api/games/:gameId/project/entities/:idOrKey/components/:componentKey` |  |
| mcp |  |  | `project_remove_component` |

### project.entity.component.set

Add or replace a complete component on a Project Graph entity through the canonical component mutation kernel. With expected_revision the write goes through an optimistic-concurrency transaction and returns a transaction result; otherwise it returns the updated entity.

| Field | Value |
| --- | --- |
| Title | Set Entity Component |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `SetProjectEntityComponentOverride`, `PutProjectEntityComponent`, `PatchProjectEntityComponent` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `PUT` | `/api/games/:gameId/project/entities/:idOrKey/components/:componentKey` |  |
| http | `PATCH` | `/api/games/:gameId/project/entities/:idOrKey/components/:componentKey` |  |
| mcp |  |  | `project_add_component` |

### project.entity.create

Create a Project Graph entity in a world through the canonical entity owner. worldId/parentEntityId/prefabId accept a uuid or a graph key; on_conflict controls duplicate-key handling.

| Field | Value |
| --- | --- |
| Title | Create Project Entity |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `CreateProjectEntity` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/entities` |  |
| mcp |  |  | `project_create_entity` |

### project.entity.delete

Delete a Project Graph entity through the canonical entity owner. With expected_revision the delete goes through an optimistic-concurrency transaction and returns a transaction result; otherwise it returns the deleted entity.

| Field | Value |
| --- | --- |
| Title | Delete Project Entity |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `DeleteProjectEntity` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `DELETE` | `/api/games/:gameId/project/entities/:idOrKey` |  |
| mcp |  |  | `project_delete_entity` |

### project.entity.read

Read one Project Graph entity by uuid or graph key through the canonical entity owner; the receipt is the exact client entity with its current version and components.

| Field | Value |
| --- | --- |
| Title | Read Project Entity |
| Domain | `project-graph` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `ReadProjectEntity` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `project_get_entity` |

### project.entity.search

Search Project Graph entities by query, world, tag(s), component type(s), or key prefix through the canonical entity owner, returning a bounded cursor-paginated page of entity records (the discovery reader for edit targets).

| Field | Value |
| --- | --- |
| Title | Search Project Entities |
| Domain | `project-graph` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `SearchProjectEntities` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `project_search_entities` |

### project.entity.update

Update a Project Graph entity's identity, hierarchy, tags, or metadata through the canonical entity owner. With expected_revision the write goes through an optimistic-concurrency transaction and returns a transaction result; otherwise it returns the updated entity.

| Field | Value |
| --- | --- |
| Title | Update Project Entity |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `UpdateProjectEntity` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `PATCH` | `/api/games/:gameId/project/entities/:idOrKey` |  |
| mcp |  |  | `project_update_entity` |

### project.graph.snapshot.read

Read the current typed Project Graph snapshot through its owner service.

| Field | Value |
| --- | --- |
| Title | Read Project Graph Snapshot |
| Domain | `project-graph` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `ProjectGraphSnapshotRead` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `project_get_graph_snapshot` |

### project.material.patch.apply

Apply checked semantic patch operations to a material asset and persist canonical material graph artifacts.

| Field | Value |
| --- | --- |
| Title | Apply Material Semantic Patch |
| Domain | `material-authoring` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `material-semantic-patch` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `ProjectGraphAssetUpdated` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/assets/:assetId/material/patches/apply` |  |
| mcp |  |  | `project_apply_material_semantic_patch` |
| ai |  |  | `apply_material_semantic_patch` |
| sdk |  | `project.materials.applySemanticPatch` |  |

### project.prefab.create

Create a Project Graph prefab record through the canonical owner service; the receipt is the exact client resource.

| Field | Value |
| --- | --- |
| Title | Create Project Prefab |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `CreateProjectPrefab` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/prefabs` |  |
| mcp |  |  | `project_create_prefab` |

### project.prefab.delete

Delete a Project Graph prefab record through the canonical owner service; the receipt is the exact client resource.

| Field | Value |
| --- | --- |
| Title | Delete Project Prefab |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `DeleteProjectPrefab` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `DELETE` | `/api/games/:gameId/project/prefabs/:idOrKey` |  |
| mcp |  |  | `project_delete_prefab` |

### project.prefab.read

Read one Project Graph prefab record by uuid or graph key through the canonical owner service; the receipt is the exact client resource with its current version.

| Field | Value |
| --- | --- |
| Title | Read Project Prefab |
| Domain | `project-graph` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `ReadProjectPrefab` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `project_get_prefab` |

### project.prefab.update

Update a Project Graph prefab record through the canonical owner service; the receipt is the exact client resource.

| Field | Value |
| --- | --- |
| Title | Update Project Prefab |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `UpdateProjectPrefab` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `PATCH` | `/api/games/:gameId/project/prefabs/:idOrKey` |  |
| mcp |  |  | `project_update_prefab` |

### project.script.create

Create a Project Graph script from a structural GessaScript shell through the canonical script owner.

| Field | Value |
| --- | --- |
| Title | Create Project Script |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `CreateProjectScript` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/scripts` |  |
| mcp |  |  | `project_create_script` |

### project.script.delete

Delete a Project Graph script through the canonical script owner.

| Field | Value |
| --- | --- |
| Title | Delete Project Script |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `DeleteProjectScript` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `DELETE` | `/api/games/:gameId/project/scripts/:idOrKey` |  |
| mcp |  |  | `project_delete_script` |

### project.script.patch.apply

Apply checked semantic patch operations to a Project Script and persist canonical Script IR.

| Field | Value |
| --- | --- |
| Title | Apply Script Semantic Patch |
| Domain | `script-authoring` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `script-semantic-patch` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `UpdateProjectScript` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/scripts/:idOrKey/patches/apply` |  |
| mcp |  |  | `project_apply_script_semantic_patch` |
| ai |  |  | `apply_script_semantic_patch` |
| sdk |  | `project.scripts.applySemanticPatch` |  |

### project.script.read

Read one Project Graph script by uuid or graph key through the canonical script owner; the receipt is the exact client script carrying its current version and IR fingerprint together, so a semantic patch never needs to probe for concurrency coordinates.

| Field | Value |
| --- | --- |
| Title | Read Project Script |
| Domain | `project-graph` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `ReadProjectScript` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `project_get_script` |

### project.script.update

Update a Project Graph script's metadata through the canonical script owner.

| Field | Value |
| --- | --- |
| Title | Update Project Script |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `UpdateProjectScript` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `PATCH` | `/api/games/:gameId/project/scripts/:idOrKey` |  |
| mcp |  |  | `project_update_script` |

### project.transaction.apply

Atomically apply several low-level Project Graph ops as ONE checked, idempotent, undoable transaction. Each op is a { kind, ...fields } object (record.create/update/delete, component.put/patch/delete/add/remove) over a resourceKind (asset, world, component, prefab, entity, script, workflow, ui-panel, data-store); the ops field description carries the exact shapes. The precision batched writer: no engine-owned component defaults, strong per-op validation on receipt.

| Field | Value |
| --- | --- |
| Title | Apply Project Graph Transaction |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `workflow` |
| Audit events | `ProjectGraphTransactionApplied` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/transactions` |  |
| mcp |  |  | `project_apply_transaction` |

### project.ui_panel.create

Create a Project Graph ui panel record through the canonical owner service; the receipt is the exact client resource.

| Field | Value |
| --- | --- |
| Title | Create Project Ui Panel |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `CreateProjectUiPanel` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/ui-panels` |  |
| mcp |  |  | `project_create_ui_panel` |

### project.ui_panel.delete

Delete a Project Graph ui panel record through the canonical owner service; the receipt is the exact client resource.

| Field | Value |
| --- | --- |
| Title | Delete Project Ui Panel |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `DeleteProjectUiPanel` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `DELETE` | `/api/games/:gameId/project/ui-panels/:idOrKey` |  |
| mcp |  |  | `project_delete_ui_panel` |

### project.ui_panel.read

Read one Project Graph ui panel record by uuid or graph key through the canonical owner service; the receipt is the exact client resource with its current version.

| Field | Value |
| --- | --- |
| Title | Read Project Ui Panel |
| Domain | `project-graph` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `ReadProjectUiPanel` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `project_get_ui_panel` |

### project.ui_panel.update

Update a Project Graph ui panel record through the canonical owner service; the receipt is the exact client resource.

| Field | Value |
| --- | --- |
| Title | Update Project Ui Panel |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `UpdateProjectUiPanel` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `PATCH` | `/api/games/:gameId/project/ui-panels/:idOrKey` |  |
| mcp |  |  | `project_update_ui_panel` |

### project.world.create

Create a Project Graph world record through the canonical owner service; the receipt is the exact client resource.

| Field | Value |
| --- | --- |
| Title | Create Project World |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `CreateProjectWorld` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/worlds` |  |
| mcp |  |  | `project_create_world` |

### project.world.delete

Delete a Project Graph world record through the canonical owner service; the receipt is the exact client resource.

| Field | Value |
| --- | --- |
| Title | Delete Project World |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `DeleteProjectWorld` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `DELETE` | `/api/games/:gameId/project/worlds/:idOrKey` |  |
| mcp |  |  | `project_delete_world` |

### project.world.read

Read one Project Graph world record by uuid or graph key through the canonical owner service; the receipt is the exact client resource with its current version.

| Field | Value |
| --- | --- |
| Title | Read Project World |
| Domain | `project-graph` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `ReadProjectWorld` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `project_get_world` |

### project.world.update

Update a Project Graph world record through the canonical owner service; the receipt is the exact client resource.

| Field | Value |
| --- | --- |
| Title | Update Project World |
| Domain | `project-graph` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `project-graph` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `UpdateProjectWorld` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `PATCH` | `/api/games/:gameId/project/worlds/:idOrKey` |  |
| mcp |  |  | `project_update_world` |

### publish.dev

Create a dev content version and deployment candidate through publish gates.

| Field | Value |
| --- | --- |
| Title | Publish Dev Build |
| Domain | `publish` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `publish` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `PublishDev` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/publish/dev` |  |
| mcp |  |  | `runtime_create_deployment` |

### qa.renderer.viewport.capture

Render one immutable verified Versioning checkpoint through the real runtime and renderer, independently content-address the PNG bytes, and return exact runtime/browser/media lineage.

| Field | Value |
| --- | --- |
| Title | Prove Runtime Renderer Frame |
| Domain | `qa` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `qa` |
| Exposure | `mcp`, `ai` |
| Audit events | `RendererViewportCaptured` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `qa_capture_renderer_viewport` |

### qa.run.start

Execute bounded deterministic simulation QA from an immutable verified Versioning checkpoint to verify the physics simulation converges to its expected numerical value, returning an executable numerical-oracle receipt with an independent repeat and seed-sensitivity control.

| Field | Value |
| --- | --- |
| Title | Run Simulation QA |
| Domain | `qa` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `simulation` |
| Exposure | `mcp`, `ai`, `workflow` |
| Audit events | `SimulationQaRun` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `simulation_run` |

### renderer.visual_profile.apply

Apply a canonical renderer visual profile by mutating the Project Graph world environment through backend authority.

| Field | Value |
| --- | --- |
| Title | Apply Renderer Visual Profile |
| Domain | `renderer` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `renderer` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `RendererVisualProfileApplied` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/worlds/:idOrKey/visual-profile/apply` |  |
| sdk |  | `renderer.visualProfiles.apply` |  |
| mcp |  |  | `world_apply_visual_profile` |

### renderer.visual_qa.run

Retired native-AI composite. The canonical renderer pixel-capture primitive is qa.renderer.viewport.capture; this SDK-surface convenience adds profile/fallback receipt checks over it.

| Field | Value |
| --- | --- |
| Title | Run Renderer Visual QA |
| Domain | `renderer-qa` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `qa` |
| Exposure | `sdk` |
| Audit events | `RendererVisualQaRun` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| sdk |  | `renderer.visualQa.run` |  |

### runtime.proof.run

Execute one author-declared input against an immutable Project Graph snapshot in an isolated real runtime actor and return typed causal transition evidence with provider and checkpoint lineage.

| Field | Value |
| --- | --- |
| Title | Run Runtime Proof |
| Domain | `runtime-qa` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `runtime` |
| Exposure | `mcp`, `ai`, `sdk` |
| Audit events | `RuntimeProofRun` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `runtime_proof_run` |

### spatial.asset.import

Queue and run backend-authoritative spatial asset import processing through Jobs and Capability Registry.

| Field | Value |
| --- | --- |
| Title | Import Spatial Asset |
| Domain | `spatial-ingestion` |
| Kind | `job_start` |
| Lifecycle | `active` |
| Owner | `spatial-ingestion` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk`, `cli` |
| Audit events | `SpatialAssetImportQueued`, `SpatialAssetImportProcessed` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/spatial-assets/imports` |  |
| http | `POST` | `/api/games/:gameId/spatial-assets/import-jobs/:jobId/run` |  |
| mcp |  |  | `spatial_asset_queue_import` |

### spatial.capture.annotate

Record semantic anchors for spatial captures through backend-validated Project Graph facets.

| Field | Value |
| --- | --- |
| Title | Annotate Spatial Capture |
| Domain | `spatial-ingestion` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `spatial-ingestion` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk`, `cli` |
| Audit events | `SpatialCaptureAnnotationRecorded` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/spatial-assets/:assetId/annotations` |  |
| mcp |  |  | `spatial_capture_record_annotations` |

### spatial.capture.proxy.generate

Generate or record collision/nav/query proxy receipts for a spatial capture asset.

| Field | Value |
| --- | --- |
| Title | Generate Spatial Capture Proxy |
| Domain | `spatial-ingestion` |
| Kind | `job_start` |
| Lifecycle | `active` |
| Owner | `spatial-ingestion` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk`, `cli` |
| Audit events | `SpatialCaptureProxyGenerationQueued`, `SpatialCaptureProxyGenerationRecorded` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/spatial-assets/:assetId/proxy-jobs` |  |
| http | `POST` | `/api/games/:gameId/spatial-assets/proxy-jobs/:jobId/run` |  |
| mcp |  |  | `spatial_capture_queue_proxy_job` |

### terrain.artifacts.build

Build the explicit terrain artifacts (render height tile, collision proxy, nav source mesh) from the terrain resource source, writing regenerate-gated receipts onto the facet and lifting acceptance to navigable_terrain. Backed by ProjectGraphService.buildTerrainArtifacts over the deterministic buildTerrainArtifacts builder (same source -> same artifactHash, one no-drift build for collision/nav/render). v1 runs the build inline; the durable job-queue worker is a later optimization. Build is a job; path query is runtime.

| Field | Value |
| --- | --- |
| Title | Build Terrain Artifacts |
| Domain | `terrain` |
| Kind | `job_start` |
| Lifecycle | `active` |
| Owner | `terrain` |
| Exposure | `ui`, `mcp`, `ai`, `sdk`, `cli` |
| Audit events | `TerrainArtifactsBuildQueued`, `TerrainArtifactsBuilt` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/assets/:assetId/terrain/artifacts/build` |  |
| sdk |  | `project.terrain.buildArtifacts` |  |
| mcp |  |  | `terrain_build_artifacts` |

### terrain.patch.apply

Apply checked semantic terrain operations (sculpt/paint/road/biome/generate/cutHole/erosion/scatter) to the versioned terrain resource through the single terrain patch chokepoint (compileTerrainPatch + applyTerrainPatch), invalidating collision/nav/render artifacts for gated rebuild so collision and nav never drift from the source. Lowers into ProjectGraphService.applyTerrainPatch over the asset terrain facet via the existing updateAsset path (no parallel write path).

| Field | Value |
| --- | --- |
| Title | Apply Terrain Semantic Patch |
| Domain | `terrain` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `terrain` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `TerrainPatchApplied` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/project/assets/:assetId/terrain/patches/apply` |  |
| mcp |  |  | `project_apply_terrain_semantic_patch` |
| sdk |  | `project.terrain.applySemanticPatch` |  |

### terrain.resource.create

Create a versioned hybrid terrain resource (heightfield + mesh under one resource) as a Project Graph asset terrain facet. Backed by the terrain resource contract (terrain-resource-contract.v1) + the terrain patch chokepoint; the dedicated REST/MCP/AI handlers are pending (planned).

| Field | Value |
| --- | --- |
| Title | Create Terrain Resource |
| Domain | `terrain` |
| Kind | `command` |
| Lifecycle | `planned` |
| Owner | `terrain` |
| Exposure | `ui`, `sdk` |
| Audit events | `TerrainResourceCreated` |

Surface mappings:

No surface mappings; reachable through the exposure surfaces above.

### versioning.proof.state_diff

Compare immutable pre-author and final Versioning checkpoints, reconstruct the complete canonical Project Graph transition, and evaluate exact reviewer-authored assertions.

| Field | Value |
| --- | --- |
| Title | Prove Canonical State Diff |
| Domain | `versioning` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `versioning` |
| Exposure | `mcp`, `ai`, `sdk` |
| Audit events | `VersioningStateDiffProofRun` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `versioning_state_diff_proof_run` |

### workflow.definition.create

Hidden privileged/deferred Workflow IR definition mutation. Normal UI, MCP, AI, and SDK workflow authoring stays unavailable until a complete creator-facing projection ships.

| Field | Value |
| --- | --- |
| Title | Create Workflow Definition |
| Domain | `workflow` |
| Kind | `admin` |
| Lifecycle | `internal` |
| Owner | `workflows` |
| Exposure | `admin` |
| Audit events | `CreateProjectWorkflow` |

Surface mappings:

No surface mappings; reachable through the exposure surfaces above.

### workflow.run.start

Start a durable workflow run through the workflow runner.

| Field | Value |
| --- | --- |
| Title | Start Workflow Run |
| Domain | `workflow` |
| Kind | `workflow_step` |
| Lifecycle | `active` |
| Owner | `workflows` |
| Exposure | `ui`, `sdk`, `mcp`, `ai` |
| Audit events | `WorkflowRunStarted` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/workflows/:idOrKey/runs` |  |
| mcp |  |  | `project_start_workflow_run` |

### workspace.asset.link

Link an authorized existing workspace asset into a project and return its owner-issued project identity without supplying raw storage coordinates.

| Field | Value |
| --- | --- |
| Title | Link Workspace Asset |
| Domain | `workspace-assets` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `workspace-assets` |
| Exposure | `ui`, `mcp`, `ai` |
| Audit events | `WorkspaceAssetLinkedToGame`, `ProjectAssetCreated` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `workspace_asset_link` |
| http | `POST` | `/api/workspaces/:workspaceId/assets/:assetIdOrKey/link-game` |  |

### workspace.create

Create a workspace through the control-plane service.

| Field | Value |
| --- | --- |
| Title | Create Workspace |
| Domain | `control-plane` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `control-plane` |
| Exposure | `ui`, `mcp`, `ai`, `sdk` |
| Audit events | `CreateWorkspace` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/workspaces` |  |
| mcp |  |  | `workspace_create` |

### world_build.operation_catalog.read

Return the world-build semantic operation catalog (intent operation ids, titles, lowered targets, required coordinates) that documents what a world-build document can express.

| Field | Value |
| --- | --- |
| Title | Read World Build Operation Catalog |
| Domain | `generators` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `ai-platform-generators` |
| Exposure | `mcp`, `ai` |
| Audit events | `WorldBuildOperationCatalogRead` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `world_build_get_operation_catalog` |

### world_build.semantic_operations.apply

Apply a batch of high-level world-build semantic operations as ONE canonical transaction: compile the operations through the single world-build semantic compiler (the same validator world_build_compile_semantic_operations uses), lower them to Native Agent Runtime operations, and land them via one atomic idempotent applyTransaction (one history/undo unit). Budget-capped and plan-hash deterministic; a replay by idempotency key is a no-op. The WRITE twin of world_build_compile_semantic_operations and the primary document write path. Standard approval applies; conflict and budget overflow surface as typed rejections.

| Field | Value |
| --- | --- |
| Title | Apply World Build Semantic Operations |
| Domain | `generators` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `ai-platform-generators` |
| Exposure | `mcp`, `ai` |
| Audit events | `WorldBuildSemanticOperationsApplied`, `ProjectGraphTransactionApplied` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `world_build_apply_semantic_operations` |

### world_build.semantic_operations.compile

Compile high-level world-build semantic operations through the single world-build semantic compiler and return lowered operations, receipts, and diagnostics without writing anything. The dry-run READ twin of world_build.semantic_operations.apply.

| Field | Value |
| --- | --- |
| Title | Compile World Build Semantic Operations |
| Domain | `generators` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `ai-platform-generators` |
| Exposure | `mcp`, `ai` |
| Audit events | `WorldBuildSemanticOperationsCompiled` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `world_build_compile_semantic_operations` |

### world.author.program

Typecheck and compile ONE bounded build.ts against the generated builder SDK, compute its world-build plan, land it through the widened generator apply seam as ONE canonical transaction (one history/undo unit), observe one frame, optionally run a default playtest scenario (possess the start entity, move, interact), and return ONE receipt: plan steps, apply stages with per-owner mutation counts and wiring truth, an inline frame, a graded playtest verdict, source-mapped diagnostics back to build.ts lines, and a terminal outcome. Idempotent by (programHash, paramsHash, seed): a replay is a no-op. dry_run computes without applying. Standard approval applies.

| Field | Value |
| --- | --- |
| Title | Author World From One Program |
| Domain | `generators` |
| Kind | `command` |
| Lifecycle | `active` |
| Owner | `ai-platform-generators` |
| Exposure | `mcp`, `ai` |
| Audit events | `GeneratorPlanApplied`, `ProjectGraphTransactionApplied` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `world_author_program` |

### world.build.from_prompt

Client ingress that routes a prompt-to-world request to the neutral authoring kernel. Not an engine mutation action; carries no owner binding.

| Field | Value |
| --- | --- |
| Title | Build World From Prompt |
| Domain | `world-factory` |
| Kind | `workflow_step` |
| Lifecycle | `active` |
| Owner | `world-factory` |
| Exposure | `ui`, `sdk` |
| Audit events | `AiWorldBuildStarted`, `AiWorldBuildAccepted` |

Surface mappings:

No surface mappings; reachable through the exposure surfaces above.

### world.build.from_spatial_asset

Create an executable Project Graph world from an imported spatial asset while enforcing proxy, anchor, and playability receipts.

| Field | Value |
| --- | --- |
| Title | Build World From Spatial Asset |
| Domain | `world-factory` |
| Kind | `workflow_step` |
| Lifecycle | `active` |
| Owner | `world-factory` |
| Exposure | `ui`, `mcp`, `ai`, `workflow`, `sdk` |
| Audit events | `SpatialAssetWorldBuildStarted`, `SpatialAssetWorldBuildAccepted` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| http | `POST` | `/api/games/:gameId/spatial-assets/:assetId/build-world` |  |
| mcp |  |  | `world_build_from_spatial_asset` |
| ai |  |  | `build_world_from_spatial_asset` |
| sdk |  | `world.build.fromSpatialAsset` |  |

### world.builder.sdk

Return the builder SDK .d.ts generated from this project's REAL catalog (built-in + project components) and its workspace asset ids: the exact type surface world_author_program typechecks build.ts against. Read-only - one authorized snapshot read plus a pure codegen, writing nothing. Lets an author working outside the editor autocomplete against the vocabulary the server will actually judge, instead of a default-catalog baseline whose asset ids match no real game.

| Field | Value |
| --- | --- |
| Title | Fetch Builder SDK Types |
| Domain | `generators` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `ai-platform-generators` |
| Exposure | `mcp`, `cli`, `ai` |
| Audit events | `WorldBuilderSdkRead` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `world_builder_sdk` |

### world.observe.entity_view

Look at what you built: frame up to 8 authored entities in a 3/4 fit-bounds (F-key) view and render the CURRENT head so you SEE placeholders, floating props, and muddy paint a graph digest hides. The frame rides back as an image where the render lane is wired, else a typed capture_unavailable names the missing seam. Use after scenery/prop authoring.

| Field | Value |
| --- | --- |
| Title | Observe Entity View (The Eye) |
| Domain | `observation` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `ai-platform-observation` |
| Exposure | `mcp`, `ai` |
| Audit events | `WorldObserveEntityView` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `world_observe_entity_view` |

### world.observe.frame

Capture one editor or runtime viewport frame through the existing qa renderer capture lane where a browser runtime is available, returning a bounded frame descriptor (camera, viewport, renderer, media hash, pixel diagnostics, browser health) or an honest typed unavailable envelope when no browser runtime is present.

| Field | Value |
| --- | --- |
| Title | Observe Viewport Frame |
| Domain | `observation` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `ai-platform-observation` |
| Exposure | `mcp`, `ai` |
| Audit events | `WorldObserveFrame` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `world_observe_frame` |

### world.observe.logs

Read a bounded newest-first tail of runtime and script diagnostics for one runtime room.

| Field | Value |
| --- | --- |
| Title | Observe Runtime Logs |
| Domain | `observation` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `ai-platform-observation` |
| Exposure | `mcp`, `ai` |
| Audit events | `WorldObserveLogs` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `world_observe_logs` |

### world.observe.rooms

Read a bounded roster of active runtime rooms for a game with per-room player and observer counts, status, and lifecycle timestamps.

| Field | Value |
| --- | --- |
| Title | Observe Active Rooms |
| Domain | `observation` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `ai-platform-observation` |
| Exposure | `mcp`, `ai` |
| Audit events | `WorldObserveRooms` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `world_observe_rooms` |

### world.observe.scene

Read a bounded revision-stamped digest of the authored project graph (entity and per-component-type counts, world summary, spatial bounds, named-entity summary, and an optional bounded diff against a prior revision handle).

| Field | Value |
| --- | --- |
| Title | Observe Scene Digest |
| Domain | `observation` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `ai-platform-observation` |
| Exposure | `mcp`, `ai` |
| Audit events | `WorldObserveScene` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `world_observe_scene` |

### world.playtest.scenario

Boot an isolated proof room for a world, possess an entity, execute a typed action sequence (move/look/jump/interact/press) with per-step tick budgets, and return a revision-stamped outcome (before/after scene digests, per-step applied/failed, diagnostics). Executed proof over a discardable proof room; no durable project mutation.

| Field | Value |
| --- | --- |
| Title | Playtest Scenario |
| Domain | `playtest` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `ai-platform-playtest` |
| Exposure | `mcp`, `ai` |
| Audit events | `WorldPlaytestScenario` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `world_playtest_scenario` |

### world.sample.terrain

Sample the authored terrain surface height, normal, and slope at up to 64 (x,z) points, reusing the SAME no-drift height math the runtime draws and clamps to. Call BEFORE placing props on sculpted terrain so they rest on the surface instead of a hand-guessed y.

| Field | Value |
| --- | --- |
| Title | Sample Terrain Surface |
| Domain | `observation` |
| Kind | `query` |
| Lifecycle | `active` |
| Owner | `ai-platform-observation` |
| Exposure | `mcp`, `ai` |
| Audit events | `WorldSampleTerrain` |

Surface mappings:

| Surface | Method | Path | Tool |
| --- | --- | --- | --- |
| mcp |  |  | `world_sample_terrain` |
