world-model-mcp
Maintain a persistent, deterministic 3D/2D spatial world model for AI agents, enabling entity tracking, spatial reasoning, simulation, multi-agent coordination, and Playwright game automation.
Entity management: Create, update, query, and search spatial entities with 3D positions, orientations, AABBs, tags, properties, confidence, and lifecycle status.
Spatial relationships: Record topological links like
on,inside,near,contains, and custom relations between entities.World export: Export the spatial model as JSON, GeoJSON, glTF, OBJ, summary, compact decision slices, and more.
Movement simulation: Predict trajectories, detect AABB collisions, and compute obstacle-avoiding navigation waypoints.
Vision integration: Ingest camera/sensor detections, re-identify entities by proximity, and reconcile against expected frustum views.
View computation: Determine which entities are visible or occluded from an observer pose using FOV cones and ray-AABB occlusion.
Goal linking: Associate entities and regions with state-memory tasks and retrieve goal-relevant spatial context.
Outcome recording: Record action results, movement deltas, property changes, and entity destruction.
Spatial SDD: Register physical baseline contracts, verify constraints (clearance, containment, bounds), and create SHA-256 evidence packs.
Multi-agent coordination: Use a spatial blackboard for topics, collision alerts, and mutex region leases across agents.
Snapshots & rollback: Save, diff, restore, undo, and time-travel the spatial database state.
Game automation: Generate Playwright WASD/arrow hold sequences and project/unproject 3D coordinates to screen pixels.
Async waiting: Poll until an entity exists, becomes active, exceeds a confidence threshold, or enters a region.
CLI & visualizer: Initialize projects, run stats, inspect maps, export/import, and launch a 3D WebGL scene visualizer.
@putervision/world-model-mcp
@putervision/world-model-mcp is a zero-infrastructure, deterministic Model Context Protocol (MCP) server that maintains a persistent 3D/2D spatial world model for AI agents. It bridges perception (@putervision/vision-memory-mcp) and reasoning/action (@putervision/state-memory-mcp) with durable entity tracking, object permanence with confidence decay, movement simulation with AABB collision avoidance, expected view frustum projection, and Playwright 3D game automation.
๐ Official Documentation & Website: putervision.com
โก Quick Start & Installation
Prerequisites: Node.js >= 18.18.0
# 1. Install globally
npm install -g @putervision/world-model-mcp
# 2. Navigate to your project directory
cd your-project
# 3. Initialize world-model-mcp
# Creates .world-model-mcp/, updates .gitignore, registers project,
# and scaffolds IDE instructions and MCP configs for Cursor, Claude, VS Code, Windsurf, etc.
world-model-mcp init
# Done! Restart your IDE or Agent Manager to activate.Alternative Options
# Run directly via binary (after global install)
world-model-mcp run
# Launch interactive 3D WebGL Scene Visualizer
world-model-mcp view
# Display database metrics and permanence confidence stats
world-model-mcp statsRelated MCP server: persistent-kb-mcp
๐ Key Highlights
๐ Deterministic 3D/2D Spatial Memory & Compact Slices: Zero LLM in the loop for spatial indexing; deterministic SQLite WAL queries with FTS5 search, 3D Euclidean proximity radius lookups, and sub-1KB observer-relative compact slices ($K \le 16$ nearest entities) for System 1 fast path evaluation.
โก 15 Production-Grade Consolidated MCP Tools: Full CRUD, topological spatial graphs (
on,inside,contains,near), ray-AABB occlusion frustum culling, waypoint navigation, and time-travel rollback.โณ Object Permanence & Decay: Entities remain in persistent memory even when out of view, with configurable exponential confidence decay ($C = C_0 \cdot e^{-\lambda t}$) and status lifecycles (
activeโhiddenโlost).๐ Collision & Movement Simulation: Predicts entity displacement trajectories, detects AABB obstacle collisions, and computes obstacle-avoiding navigation waypoints before actions execute.
๐ฎ Playwright Game Automation: Generates timed WASD / Arrow keyboard hold sequences (
KeyW for 450ms,ArrowLeft for 290ms) and 3Dโ2D coordinate screen projections.๐ค Multi-Agent Spatial Blackboard: Topic-based coordination with TTL, mutex locks, and collision intent alerts across parallel subagents.
๐ก๏ธ Spatial Spec-Driven Development (Spatial SDD): Physical design contract baseline registration, live verification (clearance, bounds, containment), and cryptographic SHA-256 evidence bundles.
๐จ Interactive 3D WebGL Visualizer: Browser-based Three.js 3D viewport rendering active entities, orientation axes, frustum cones, and topological links (
world-model-mcp view).๐ 100% Local & Private: All spatial entities, relations, and history stay inside
.world-model-mcp/in your workspace.
๐ ๏ธ MCP Tool Suite
@putervision/world-model-mcp provides 15 production-grade consolidated MCP tools organized across 5 core workflow domains:
Spatial Memory & Search:
update_entity(entity CRUD, 3D bounds, properties, confidence),query_entities(FTS5 search, proximity radius, status/tags filter, history lookup),set_relation(topological graph links:on,inside,near,contains),get_spatial_map(JSON, GeoJSON, glTF 2.0, OBJ, summary, andformat: "compact_slice").Simulation & Vision Integration:
simulate_movement(displacement prediction, AABB collision checks, waypoint routing),ingest_observation(vision detection ingestion, Euclidean re-identification, frustum reconciliation),get_expected_view(observer pose, horizontal FOV cone, ray-AABB occlusion).Goal & State Integration:
link_to_goal(associate entities/regions with State Memory tasks, extract spatial context slices),record_outcome(record execution results, position shifts, property changes, destruction).Spatial SDD & Proofs:
manage_spatial_spec(register physical clearance/containment contracts, live verification scoring),create_evidence_pack(cryptographic SHA-256 evidence bundles linking spatial proofs to task nodes).Multi-Agent, Replay & Automation:
use_spatial_blackboard(topic board, mutex claim/release, intent conflicts),manage_snapshot(checkpoints, snapshot diffing, time-travel undo),wait_for_spatial_state(async polling for target spatial condition),generate_game_inputs(Playwright WASD hold timings, 3Dโ2D screen ray projection).
๐ For complete parameter specifications, return schemas, and example payloads, see the API Reference Guide and Database Schema.
๐ Architecture & Spatial Memory Lifecycle
Perception / Vision Detection
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Perception Ingestion & Re-ID โ โโโถ ingest_observation(reconcile: true)
โโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Durable Entity & Permanence โ โโโถ update_entity(...)
โ (3D Bounding Boxes, Decay) โ โโโถ set_relation(relation: "on"|"inside")
โโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Simulation & Waypoint Routing โ โโโถ simulate_movement(mode: "navigate")
โ (AABB Collision Avoidance) โ โโโถ get_expected_view(fov: 90)
โโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Playwright & Action Execution โ โโโถ generate_game_inputs(...)
โ (WASD Sequences, Screen Rays) โ โโโถ record_outcome(action_type: "move")
โโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Spatial SDD & Cryptographic โ โโโถ manage_spatial_spec(action: "verify")
โ Evidence Bundling to Tasks โ โโโถ create_evidence_pack(...)
โโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Persistent SQLite Engine โ โโโถ .world-model-mcp/world.db (WAL mode)
โ Append-Only History Ledger โ โโโถ SHA-256 Cryptographic Audit Chain
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ๐ Documentation Directory
Explore dedicated guides and deep dives in the docs/ directory:
Guide | Description |
High-signal architectural overview, module inventory, data flows, and design decisions. | |
PuterVision Autonomous Triad interaction, 3D WebGL scene visualizer, and evidence packs. | |
Object Permanence ($C = C_0 \cdot e^{-\lambda t}$), Confidence Decay, Frustum Projection, and Spatial SDD. | |
โ๏ธ Configuration & IDE Setup | Auto-Initialization details, Environment Variables, and Editor Configs (Cursor, VS Code, Claude, Windsurf). |
๐ ๏ธ CLI Command Reference | CLI flags ( |
Complete reference for all 15 Consolidated MCP Tools, legacy tool mapping, and parameter examples. | |
๐๏ธ Database Schema | SQLite tables ( |
Autonomous 3D browser arena with Three.js bridge diagnostics ( | |
๐งญ Examples & Tutorials | Deep-dive examples: Spatial Navigation, Perception Reconciliation, and Multi-Agent Blackboard. |
๐ Agent Playbook: 5-Step Canonical Workflow
When an autonomous AI agent enters a repository with world-model-mcp:
1. Orient & Explore โโโถ get_spatial_map(format: "summary") + get_expected_view(fov: 90)
2. Query & Locate โโโถ query_entities(query: "chest", radius: 15) + query_entities(entity_id: "...")
3. Plan & Simulate โโโถ simulate_movement(mode: "navigate") + manage_spatial_spec(action: "verify")
4. Execute & Ingest โโโถ generate_game_inputs(...) + ingest_observation(reconcile: true)
5. Record & Evidence โโโถ record_outcome(...) + create_evidence_pack(task_id: "...")๐งช Testing
# Run full unit, integration, and geometry stress test suite across 47 test files (206 tests)
npm test
# Run multi-Node matrix test suite across Node.js 18, 20, and 22
npm run test:matrix
# Run 3D geometry, projection, and Playwright game loop tests
npm run test:3dโ๏ธ License & Disclaimers
Developed and maintained by PuterVision. Released under the MIT License.
Local Storage Guarantee: All spatial coordinates, bounding volumes, and entity history remain 100% local in your workspace. No telemetry or project data is ever transmitted.
Trademarks & Non-Affiliation: Product names (Cursor, Claude Code, Gemini, Windsurf, VS Code, GitHub, SQLite, Three.js, Playwright) are property of their respective owners and used solely for compatibility identification.
Available Tools
15 toolscreate_evidence_packA
Package entity positions, observation reconciliations, and snapshot states into an immutable, SHA-256 hashed cryptographic evidence pack for compliance and state-memory task verification. Does not change entities; hashes current proof. Returns {ok, pack_id, hash, payload}. Use create_evidence_pack instead of manage_snapshot when creating immutable cryptographic verification packages rather than database checkpoints.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project identifier | |
| task_id | No | Primary state-memory task ID linked to this proof | |
| entity_ids | No | Entity IDs included in evidence pack | |
| observation_ids | No | Observation IDs included in evidence pack | |
| after_snapshot_id | No | Snapshot ID after action execution | |
| before_snapshot_id | No | Snapshot ID before action execution | |
| linked_state_memory_nodes | No | Linked state-memory node IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint=false, destructiveHint=false and idempotentHint=false, the description adds real context: it hashes rather than mutates, produces an immutable artifact, and discloses the return shape. It does not address the non-idempotent implication (repeat calls yielding distinct packs), which is the one behavioral gap left to annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and return shape are front-loaded and the text is dense with little waste. The final sentence restates 'immutable cryptographic' and repeats the tool's own name, which is slight redundancy but it carries the sibling differentiation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description supplies the return shape ({ok, pack_id, hash, payload}), which covers the main informational gap. For a 7-parameter, nested-object, zero-required tool it is nearly complete, though it never explains what happens when the optional ID sets are omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters, including the nested linked_state_memory_nodes object. The description maps its prose ('entity positions, observation reconciliations, snapshot states') onto some of those inputs but adds no format, ordering, or requiredness guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('package') plus named resources (entity positions, observation reconciliations, snapshot states) and a declared output artifact (immutable SHA-256 hashed evidence pack). It also distinguishes itself from the sibling manage_snapshot by scope, so an agent can separate the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the selection rule against an alternative: use this instead of manage_snapshot when producing immutable cryptographic verification packages rather than database checkpoints. It also clarifies the non-mutation boundary ('does not change entities; hashes current proof').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_game_inputsARead-onlyIdempotent
Translate 3D navigation paths into Playwright commands (WASD/click-to-move) or project/unproject 3D coordinates and screen pixels. Actions: generate_inputs, project_screen, unproject_ray. Read-only: generates Playwright inputs, does not press keys. Returns {ok, action, inputs[]|screen_coords|ray}. Use generate_game_inputs instead of simulate_movement when translating 3D trajectories into Playwright browser automation commands.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | Action to perform (default: generate_inputs) | |
| camera | No | Camera state for projection / click-to-move | |
| project | No | Optional project identifier | |
| screen_x | No | Screen pixel X coordinate for screen_to_world unprojection | |
| screen_y | No | Screen pixel Y coordinate for screen_to_world unprojection | |
| viewport | No | Browser viewport dimensions | |
| direction | No | Projection direction for projection mode | |
| entity_id | No | Player or target entity ID | |
| waypoints | No | Optional intermediate navigation waypoints | |
| output_format | No | Output format (default: playwright_mcp) | |
| world_position | No | 3D world position for projection or starting point | |
| control_profile | No | Game control key bindings and physical parameters | |
| target_position | No | Destination 3D coordinates | |
| current_position | No | Starting 3D coordinates (auto-resolved from entity_id if omitted) | |
| ground_elevation | No | Ground plane elevation Y for raycast intercept (default: 0) | |
| target_entity_id | No | Target destination entity ID | |
| current_orientation | No | Starting orientation angles |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds real context beyond them: it clarifies that 'read-only' here means the tool generates Playwright inputs and 'does not press keys', and it states the return shape ({ok, action, inputs[]|screen_coords|ray}). It omits rate limits, auth requirements, or failure modes, so it stops short of full disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core purpose and backed by the action list, return shape, and sibling routing. The 'Read-only: generates Playwright inputs, does not press keys' clause partially restates the readOnlyHint annotation, a minor redundancy, but overall there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter, nested-object tool with no output schema, the description compensates by stating the return shape and the three action modes, which is what an agent needs to call it correctly. It is nearly complete, though the absence of guidance on which parameter groups pair with which action leaves some inference to the caller.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema with defaults and enums. The description adds only indirect meaning (naming the action enum values and the WASD/click-to-move schemes); it does not explain how camera, viewport, or control_profile interact for a given action, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Translate 3D navigation paths into Playwright commands'), enumerates the three concrete actions (generate_inputs, project_screen, unproject_ray), and explicitly routes the agent away from the sibling simulate_movement. An agent can identify the tool's scope without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the alternative (simulate_movement) and the condition that selects this tool instead ('when translating 3D trajectories into Playwright browser automation commands'), which is strong routing guidance. However, it offers no when-to-use discrimination among its own three actions (e.g. project_screen vs unproject_ray, or when click-to-move beats WASD), so guidance is clear but partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_expected_viewARead-onlyIdempotent
Compute which entities should be visible from an observer pose and FOV cone, with ray-AABB occlusion. Read-only. Does not write entities. Returns {visible[], occluded[], observer}. Use get_expected_view instead of get_spatial_map when computing observer FOV visibility and occlusion cones rather than unfiltered world states.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project identifier | |
| fov_degrees | No | Horizontal field of view in degrees (default: 90) | |
| max_distance | No | Maximum view distance in units (default: 100) | |
| observer_position | Yes | Observer 3D coordinates | |
| observer_orientation | No | Observer orientation (yaw determines heading direction) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is read-only, idempotent, and non-destructive, and the description reinforces that it does not write entities. It adds useful behavioral context beyond the annotations by naming the occlusion method (ray-AABB) and the return structure. It stops short of describing edge cases or performance characteristics, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the computation and its scope. However, 'Read-only. Does not write entities.' is redundant with each other and largely duplicates the annotation-style safety information, slightly reducing efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description supplies the return shape as {visible[], occluded[], observer}, and it covers the core behavior, occlusion method, and sibling alternative. Together with the fully documented input schema and annotations, an agent has enough context to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters, including defaults for fov_degrees and max_distance. The description does not add syntax, constraints, or meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific computation: which entities should be visible from an observer pose and FOV cone, including ray-AABB occlusion. It distinguishes this tool from the sibling get_spatial_map by contrasting filtered visibility/occlusion with unfiltered world states.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use this tool instead of get_spatial_map when the task is computing observer FOV visibility and occlusion cones rather than unfiltered world states. The condition for choosing this tool over the named alternative is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spatial_mapARead-onlyIdempotent
Export the known world as json, geojson, topological_graph, gltf, obj, joint, spatial_vlm, summary, or compact_slice. Optional region_id and min_confidence filters. Read-only snapshot of current SQLite state (not a live renderer). Returns the payload in requested format. Use get_spatial_map instead of query_entities when exporting full environment snapshots or 3D meshes rather than filtering entities.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | Max nearest entities to include in compact_slice (default: 16) | |
| format | No | Export or view format (default: json, use "summary" for high-level environment overview, "compact_slice" for fast System One decision slice) | |
| project | No | Optional project identifier | |
| region_id | No | Optional region ID to filter | |
| min_confidence | No | Filter out entities below confidence threshold | |
| observer_heading | No | Optional heading angle in degrees for compact_slice bearing calculation | |
| observer_position | No | Optional [x, y, z] observer position for compact_slice |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely new context: it is a snapshot of current SQLite state, explicitly 'not a live renderer,' and the payload is returned in the requested format. It stops short of noting snapshot staleness timing or size limits, hence not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the format list, then filters, then the routing rule. Efficient overall, though the long inline enumeration of nine formats partially duplicates the schema enum and makes the opening sentence dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, multi-format export tool with no output schema, the description covers what is produced, the read-only snapshot nature, and the key filters. It does not explain what the non-obvious formats (spatial_vlm, joint, compact_slice) contain, leaving some format choices under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description re-states region_id and min_confidence as optional filters and mentions the format enum, but adds no syntax, defaults, or interaction detail beyond what the schema descriptions already provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Export the known world' with the full set of supported formats enumerated, and it explicitly distinguishes itself from the sibling query_entities. An agent can tell what it produces and when it differs from the filtering tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the alternative by name and the condition that selects it: 'Use get_spatial_map instead of query_entities when exporting full environment snapshots or 3D meshes rather than filtering entities.' This is an explicit when-to-use / when-not-to-use routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_observationA
Merge vision detections into the world model: re-identify by Euclidean proximity, boost confidence, and optionally reconcile against the expected frustum. This is the perception writer. It may create or update entities when reconcile=true. Returns {ok, matched[], created[], lost[], reconcile}. Use ingest_observation instead of update_entity when merging camera or sensor perception detections rather than manual authoring.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project identifier | |
| reconcile | No | If true, also performs/returns frustum reconciliation analysis (confirmed, new, displaced, missing) | |
| detections | Yes | List of detected objects in the frame | |
| field_of_view | No | ||
| observer_pose | No | Position and orientation of the camera/agent when observing | |
| visual_state_id | No | Associated visual state ID from vision-memory-mcp |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits: it may create or update entities (a write operation) when reconcile=true, it re-identifies by Euclidean proximity, boosts confidence, and optionally reconciles against the expected frustum. It also returns a specific shape {ok, matched[], created[], lost[], reconcile}. Annotations already flag readOnlyHint=false, so the description adds useful context about what actually happens (merge, re-identify, confidence boost). Doesn't mention idempotency or failure modes, hence a 4 not 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then behavioral details, then a usage-routing sentence. Efficient and well-structured, though the return shape list and the phrase 'This is the perception writer' could be trimmed without loss. Every sentence carries some value, but not maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no output schema, the description does a good job covering what the tool does, its write behavior, and its return shape. It explains the reconcile option's effect and routes the agent away from update_entity. Missing: what happens when no match is found (created vs lost semantics), and any mention of required permissions or failure modes. Given annotations cover safety, this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents most parameters thoroughly (project, reconcile, detections with nested fields, observer_pose, visual_state_id). The description adds meaning for reconcile ('reconcile against the expected frustum') and explains the merge logic but doesn't add syntax or format beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Merge vision detections into the world model') and explicitly distinguishes from the sibling update_entity ('use ingest_observation instead of update_entity when merging camera or sensor perception detections'). This is a clear purpose with sibling differentiation. However, the title is null and some phrasing like 'perception writer' is jargon-adjacent rather than precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear condition for choosing this tool over the sibling update_entity (merging camera/sensor detections vs manual authoring). The reconcile parameter's behavioral trigger is also stated ('optionally reconcile against the expected frustum'). However, no exclusions or prerequisites are given, and it doesn't address when to use it vs. recording outcomes or querying entities.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
link_to_goalA
Link or unlink entities and regions to state-memory task nodes, or extract a goal-relevant spatial slice. Actions: link, unlink, get_context. link/unlink mutate association rows only. get_context is read-only. Returns {ok, action, links[]|context}. Use link_to_goal instead of record_outcome when associating entities with state-memory task nodes rather than recording physical movement deltas.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Context notes | |
| action | No | Action to perform: "link" (default), "unlink", or "get_context" to retrieve goal-relevant spatial slice | |
| radius | No | Proximity radius around agent for get_context action (default: 30) | |
| project | No | Optional project identifier | |
| task_id | No | State memory task node ID | |
| entity_id | No | Target entity ID to link/unlink | |
| region_id | No | Target region ID to link | |
| max_entities | No | Maximum entities to return for get_context action (default: 20) | |
| relationship | No | Role of entity relative to goal (default: target) | |
| min_clearance | No | Minimum clearance distance required to satisfy the goal | |
| success_region | No | Spatial bounding volume region defining goal arrival | |
| target_entity_id | No | Direct target entity ID for navigation and clearance tracking | |
| current_agent_position | No | Current agent position for get_context action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering readOnlyHint=false, destructiveHint=false, and idempotentHint=false, the description adds useful behavioral detail: link/unlink mutate association rows only, get_context is read-only, and it specifies the return shape. This clarifies the mixed read/write nature of the tool beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and action variants, then adds mutation scope, return shape, and the sibling alternative. Every sentence contributes useful selection or invocation information without unnecessary padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 13-parameter tool with nested objects and no output schema, the description supplies the key missing context: action behavior, read-only vs mutating distinctions, return shape, and the sibling alternative. It does not explain every parameter interaction, but the exhaustive schema descriptions carry that load.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all 13 parameters, including enums and nested objects. The description repeats the action values and return shape but does not add parameter-level meaning beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states specific verbs and resources: linking/unlinking entities and regions to state-memory task nodes, plus extracting a goal-relevant spatial slice. It names the action variants and explicitly distinguishes itself from record_outcome, so an agent can route to it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear alternative: use link_to_goal instead of record_outcome when associating entities with state-memory task nodes rather than recording physical movement deltas. However, it does not address when to prefer get_context over neighbouring read tools such as query_entities or get_spatial_map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_snapshotADestructive
Checkpoint, diff, undo, or time-travel the spatial world database. Actions: save, restore, diff, list, undo, history, time_travel. restore (overwrites live state) and undo (reverts last matching mutation) are destructive and not always reversible except by saving first. diff, list, history, and time_travel are read-only. Returns {ok, action, snapshots[]|diff|state}. Use manage_snapshot instead of update_entity when rolling back, diffing, or time-traveling database state rather than editing single entities.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Snapshot name for save/restore | |
| type | No | Mutation type to undo (default: any) | |
| action | No | Action to perform (default: list) | |
| project | No | Optional project identifier | |
| entity_id | No | Target entity ID for undo or history lookup | |
| timestamp | No | ISO timestamp for time-travel reconstruction | |
| snapshot_a | No | First snapshot name for diff | |
| snapshot_b | No | Second snapshot name for diff | |
| description | No | Optional snapshot description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing per-action behavior: restore overwrites live state, undo reverts the last matching mutation, and both are 'not always reversible except by saving first,' while diff/list/history/time_travel are read-only. The annotations only give tool-level destructive/idempotent hints; the description gives action-level detail that is exactly what an agent needs to avoid data loss.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb set, then actions, then safety warnings, then return shape, then sibling routing โ every sentence carries distinct information with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-action tool with no output schema and no required params, the description supplies the action taxonomy, destructive/read-only classification, return envelope ({ok, action, snapshots[]|diff|state}), and routing versus siblings. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds action semantics and defaults ('type' is the mutation type to undo, default any) and maps parameters to actions (name for save/restore, timestamp for reconstruction). It adds meaning beyond the field-level descriptions without fully restating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb set ('Checkpoint, diff, undo, or time-travel') and resource ('spatial world database'), then enumerates the exact action enum. It explicitly distinguishes itself from the sibling update_entity, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when to use it versus a named alternative: 'Use manage_snapshot instead of update_entity when rolling back, diffing, or time-traveling database state rather than editing single entities.' It also flags which actions are destructive, giving both when-to-use and when-to-be-careful guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_spatial_specA
Manage Spatial Spec-Driven Development (Spatial SDD) physical baseline contracts. Actions: set (registers a baseline spec), verify (evaluates live entities against constraints without mutating), list (returns all registered specs). verify is read-only. set persists constraints. Returns {ok, action, spec_id, passed:boolean, violations[]}. Use manage_spatial_spec instead of update_entity when validating physical contract baselines rather than mutating live entity state.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name of the spatial specification | |
| action | No | Action to perform (default: list) | |
| bounds | No | Spatial bounding box limits | |
| project | No | Optional project identifier | |
| tolerance | No | Verification tolerance percentage (default: 0.05) | |
| constraints | No | List of spatial constraints | |
| description | No | Specification description | |
| sdd_requirement_id | No | Linked state-memory SDD requirement node ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are tool-level (readOnlyHint=false, destructiveHint=false, idempotentHint=false) and the description adds the crucial per-action nuance that verify is read-only while set persists constraints. It also discloses the return shape {ok, action, spec_id, passed, violations[]} in the absence of an output schema. It stops short of covering overwrite/idempotency behavior for repeated 'set' calls or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and action list, then mutation semantics, return shape, and the sibling disambiguation โ every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, nested-object tool with no output schema, the description covers action set, mutation semantics, return shape, and routing to the right sibling. Gaps remain around re-set/idempotency behavior and the meaning of the 'custom' constraint and 'tolerance' percentage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description adds value by tying parameters to actions (constraints and baseline registration belong to 'set', live-entity evaluation belongs to 'verify'). It does not explain tolerance semantics, the 'custom' constraint type, or which params each action requires, so it stays just above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (Spatial SDD physical baseline contracts) and enumerates the three concrete actions with one-line semantics for each, so an agent knows exactly what the tool does. It also names the sibling it should not be confused with (update_entity), making it distinguishable without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit routing rule: 'Use manage_spatial_spec instead of update_entity when validating physical contract baselines rather than mutating live entity state.' It also disambiguates the internal actions (verify is non-mutating, set persists), giving both when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_entitiesARead-onlyIdempotent
Find entities by keyword query (FTS5 search), type, region, spatial proximity, tags, or status. Alternatively, provide entity_id for single-entity location and historical trajectory lookup. Read-only. Returns {ok, count, entities[]}. Use query_entities instead of get_spatial_map when searching for specific subsets rather than exporting the full topology.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Filter by matching tags | |
| type | No | Filter by entity type | |
| limit | No | Maximum number of entities to return (default: 50) | |
| query | No | Full-text search query across entity names, tags, and properties | |
| status | No | Filter by status | |
| project | No | Optional project identifier | |
| entity_id | No | Specific entity ID to look up directly (returns location and state) | |
| region_id | No | Filter by region ID | |
| max_distance | No | Maximum distance radius from near_position | |
| history_limit | No | Maximum number of history events to return when include_history is true (default: 20) | |
| near_position | No | Center position for proximity distance search | |
| min_confidence | No | Minimum confidence score (e.g. 0.5 to filter out decayed entities) | |
| include_history | No | If true and entity_id is specified, returns recent movement/event history |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower; the description reinforces 'Read-only' and adds the return envelope {ok, count, entities[]} plus the dual-mode behavior (search vs direct entity_id lookup with history). It doesn't mention pagination or cost limits, but the added context is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the primary search purpose, then the alternate mode and return shape, then the sibling routing. Three dense sentences with no filler, though it is slightly packed for a single paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, zero-required read tool with no output schema, the description supplies the return shape, the two invocation modes, and the sibling boundary. An agent has enough to select it and choose the right parameter family.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 13 parameters is already documented in the schema; the description only paraphrases the filter categories. No syntax, format, or interaction details (e.g., include_history requiring entity_id) are added beyond what the schema states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb (find entities) plus the full set of filter dimensions (keyword/FTS5, type, region, proximity, tags, status) and a distinct alternate mode via entity_id. It explicitly differentiates itself from the sibling get_spatial_map by scope (subset search vs full topology export).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative tool and the condition selecting it ('Use query_entities instead of get_spatial_map when searching for specific subsets rather than exporting the full topology'), and explains the second usage mode (entity_id for single-entity lookup and trajectory). Both when-to-use paths are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_outcomeA
Record action execution results, movement deltas, property changes, entity destruction, or spool outcome ingestion from 60Hz loop. Not for vision ingest or manual pose edits. Mark entity destroyed via status: "destroyed". Returns {ok, action, success:boolean, ...}. Use record_outcome instead of update_entity when applying executed action results and status deltas rather than hand-authoring entities.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | Alias for spooled_outcomes batch array | |
| action | No | Action type: "record" (default) for single outcome or "from_tick" for 60Hz batch spool ingestion | |
| project | No | Optional project identifier | |
| success | No | Whether the action succeeded | |
| task_id | No | Linked task ID | |
| destroyed | No | If true, marks entity as destroyed | |
| entity_id | No | Primary entity affected | |
| action_name | No | Name of the executed action (e.g. move_to, pickup, place, destroy) | |
| affordance_mask | No | Updated affordance bitmask after action | |
| property_changes | No | Updated properties to merge | |
| spooled_outcomes | No | Batch of spooled outcomes to ingest from 60Hz loop off-tick execution | |
| resulting_position | No | New position of entity after action | |
| resulting_velocity | No | New velocity vector of entity after action |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the description's main added value is the return shape ({ok, action, success:boolean}) and the 60Hz off-tick spool ingestion mode, both of which are useful. However, the claim that the tool records 'entity destruction' sits in tension with destructiveHint=false, and the description does not clarify idempotency or what happens on repeated ingestion of the same spool batch โ a real gap given idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the primary capability before exclusions and alternatives. It is dense but every clause carries routing or return-value information; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully supplies the return shape, and it covers both the single-record and batch-spool modes despite 13 parameters and 0 required fields. It could be more explicit about what happens if neither entity_id nor items is supplied, but overall it is complete enough to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across 13 parameters, so the baseline is 3 and the schema already documents enum values ('record' default, 'from_tick' batch) and the batch alias. The description adds little beyond that, and its instruction to mark destruction 'via status: "destroyed"' does not match the actual boolean `destroyed` parameter, which is a minor but real inaccuracy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (record) and enumerates the exact resource types handled: action execution results, movement deltas, property changes, entity destruction, and 60Hz spool ingestion. It actively distinguishes itself from siblings by ruling out vision ingest and manual pose edits and by contrasting with update_entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-not guidance ('Not for vision ingest or manual pose edits') and names the alternative with the selecting condition ('Use record_outcome instead of update_entity when applying executed action results and status deltas rather than hand-authoring entities'). Nothing about tool selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_relationA
Record or remove a spatial relationship between two entities. Actions: add, remove. Relations: on, inside, next_to, above, below, near, contains, occluded_by, connected_to, facing, holding, part_of, custom. This mutates the relation graph only, not entity poses. Returns {ok, relation}. Use set_relation instead of update_entity when establishing topological links (on, inside, contains) rather than setting entity coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | Action to perform (default: add) | |
| offset | No | Relative offset vector from source to target | |
| project | No | Optional project identifier | |
| distance | No | Optional measured distance between entities | |
| metadata | No | Additional relation metadata | |
| relation | Yes | Type of spatial relation | |
| source_id | Yes | Source entity ID | |
| target_id | Yes | Target entity ID | |
| bidirectional | No | If true, automatically sets inverse relationship on target |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds real value beyond that: it clarifies that only the relation graph is mutated (not entity poses) and states the return shape {ok, relation}. It does not discuss idempotency semantics of add-vs-remove, but the scope clarification is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and scope, then usage routing. The inline enumeration of all 13 relation values duplicates the schema enum, which is mild waste, but the rest is tight and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-param mutation tool with nested objects and no output schema, the description covers mutation scope, return shape, and alternative selection well. Undocumented areas (bidirectional auto-inverse, offset semantics) are fully described in the schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 params. The description largely repeats the action and relation enums already present in the schema and adds no meaning for offset, distance, bidirectional, or metadata. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (record/remove) and resource (spatial relationship between two entities), and immediately contrasts with update_entity. An agent can distinguish it from siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'Use set_relation instead of update_entity when establishing topological links (on, inside, contains) rather than setting entity coordinates.' It names the alternative and the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_movementARead-onlyIdempotent
Predict entity trajectory, test for AABB obstacle collisions, or compute navigation waypoints (modes: simulate, navigate, waypoints). Read-only simulation. Returns {ok, is_valid, destination, collisions[], waypoints[]}. Use simulate_movement instead of record_outcome when testing hypothetical motion and collisions before executing an action.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Operation mode: "simulate" (default) for physics/collision, "navigate" or "waypoints" for path planning | |
| project | No | Optional project identifier | |
| velocity | No | Velocity vector in units per second | |
| entity_id | No | Entity ID to simulate or move | |
| delta_position | No | Relative movement displacement | |
| start_position | No | Starting 3D coordinates for navigation mode | |
| start_entity_id | No | Starting entity ID for navigation mode | |
| target_position | No | Target position destination | |
| check_collisions | No | Whether to test for AABB obstacle collisions (default: true) | |
| duration_seconds | No | Movement duration in seconds | |
| target_entity_id | No | Target destination entity ID for navigation mode |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, and the description is consistent ('Read-only simulation'). It adds value by disclosing the return shape {ok, is_valid, destination, collisions[], waypoints[]}, which is otherwise unavailable since there is no output schema. It stops short of noting side effects or failure behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with capabilities and ending with the sibling routing rule. The inline return-shape object is dense but earns its place given no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter, zero-required tool with modes and no output schema, the description supplies the mode semantics and return keys an agent needs. It does not explain which parameters pair with which mode, leaving that inference to the schema's own descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 11 parameters are already documented, including mode-dependent fields. The description's mode list adds light routing help, but it largely restates the enum in the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States three specific capabilities (predict trajectory, test AABB collisions, compute navigation waypoints) with the exact mode names that trigger each, so an agent can map intent to mode without opening the schema. It also explicitly separates itself from record_outcome.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use rule and names the alternative: prefer this over record_outcome for hypothetical motion/collision testing before executing an action. This is the exact routing information an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_entityA
Create or upsert one spatial entity (position, orientation, AABB, tags, properties, confidence). Manual authoring only. Omit id to create (ULID assigned). Provide id to update. Omitted fields are preserved; this is a partial merge, not a full replace. status defaults to active. confidence is 0.0โ1.0 object-permanence. Does not ingest vision detections or apply action results. Returns {ok, entity_id, created:boolean, entity}. Use update_entity instead of ingest_observation when authoring entities directly rather than merging perception detections.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Optional entity ID (auto-generated ULID if omitted for creation) | |
| name | Yes | Human-readable name or label of the entity | |
| tags | No | Array of searchable string tags | |
| type | Yes | Categorical entity type | |
| status | No | Entity lifecycle status (default: active) | |
| project | No | Optional project identifier | |
| position | No | 3D world position coordinates | |
| velocity | No | 3D velocity vector (vx, vy, vz) for physical motion and predictive permanence | |
| parent_id | No | Optional parent entity ID for hierarchical containment or attachments | |
| region_id | No | Optional named region ID where this entity resides | |
| confidence | No | Object permanence confidence score from 0.0 to 1.0 (default: 1.0) | |
| properties | No | Arbitrary JSON key-value properties (physics, materials, interactive state) | |
| orientation | No | 3D Euler orientation angles in degrees | |
| bounding_box | No | AABB bounding volume size | |
| affordance_mask | No | Bitmask of physical interaction affordances (1=traversable, 2=occluder, 4=container, 8=interactable, 16=threat) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), yet the description adds the semantics that actually matter: this is a partial merge that preserves omitted fields rather than a full replace, ids are ULID-assigned on create, status defaults to active, and it does not ingest vision detections or apply action results. With no output schema present, it also supplies the return shape {ok, entity_id, created, entity}.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb and merge rule, and nearly every clause carries information. There is mild redundancy: 'Manual authoring only' and 'Does not ingest vision detections' partially overlap with the closing sentence routing to ingest_observation, which could be tightened to one statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 15-parameter tool with nested objects and no output schema, the description covers everything an agent needs: creation vs update branching, merge vs replace semantics, defaults, the confidence scale, what the tool deliberately does not do, and the response payload. No material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3. The description goes beyond it by explaining id's dual role (create vs update), the ULID auto-assignment behavior, the 0.0โ1.0 object-permanence meaning of confidence, and the active default for status โ semantics the schema states only as types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb pair and resource: 'Create or upsert one spatial entity', then enumerates the payload domains (position, orientation, AABB, tags, properties, confidence). It explicitly contrasts itself with the sibling ingest_observation, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use rules keyed on the id parameter ('Omit id to create', 'Provide id to update'), states the scope constraint ('Manual authoring only'), and names the alternative with the discriminating condition versus ingest_observation. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
use_spatial_blackboardADestructive
Publish or read multi-agent spatial coordination topics, collision alerts, and mutex region leases. Actions: get, set, delete, lease, list, post, read, claim, release. set writes payload (coordinates allowed for collision alerts) with optional ttl_seconds. lease acquire fails if the resource is held. delete is destructive. Returns {ok, action, items[]|entry|lease}. Use use_spatial_blackboard instead of set_relation when coordinating transient multi-agent collision alerts and mutex region leases.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Blackboard entry identifier for get or delete | |
| mode | No | Lease action mode: acquire or release (default: acquire) | |
| limit | No | Maximum number of items or topics to return | |
| topic | No | Blackboard topic name | |
| action | No | Action to perform (default: get) | |
| sender | No | Agent identifier posting or claiming | |
| payload | No | Payload object (supports coordinates for collision alerts) | |
| project | No | Optional project identifier | |
| agent_id | No | Agent identifier (alias for sender) | |
| resource_id | No | Resource or entity ID to lease or release | |
| ttl_seconds | No | Post TTL expiration in seconds | |
| intention_id | No | Cross-server intention identifier from agent-reasoning-mcp to bind execution directives | |
| topic_prefix | No | Prefix filter for listing topics | |
| include_expired | No | Whether to include expired entries | |
| duration_seconds | No | Lease duration in seconds (default: 60) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructive/highlight non-idempotent writes), the description discloses real behavioral traits: lease acquire fails if the resource is held, set accepts a payload with coordinates plus optional ttl_seconds, and the return shape is {ok, action, items[]|entry|lease}. It does not add detail about permission requirements or what specifically is destroyed on delete, but the added failure-mode and TTL context is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the sibling routing rule are front-loaded, which is good, but the inline enumeration of all nine action values restates the schema enum and consumes space without adding information. It is compact for a 15-parameter tool yet contains some redundant structured data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex multi-action tool with 15 parameters and no output schema, the description supplies the missing return shape plus the key failure and TTL semantics, which is more than most. It still omits prerequisites, defaults (beyond the schema's), and richer lease-conflict behavior, so it is strong but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with 15 documented parameters, so the baseline is 3 per the rubric. The description adds meaning for a few fields (payload/coordinates, ttl_seconds, lease acquire-vs-release behavior) but is silent on many others such as intention_id, topic_prefix, include_expired, limit, and sender/agent_id, so it does not exceed the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete domain (multi-agent spatial coordination: topics, collision alerts, mutex region leases) and enumerates the supported actions, so an agent knows what the tool manipulates. It also explicitly separates itself from set_relation. The only weakness is that the many-action surface makes the core purpose slightly diffuse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit routing rule: use this instead of set_relation when coordinating transient multi-agent collision alerts and mutex region leases, which implicitly tells the agent when not to use it (persistent relations). However, it only contrasts against one of fifteen siblings and offers no broader context on when a blackboard is preferable to other coordination tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_spatial_stateARead-onlyIdempotent
Poll and wait until an entity reaches a specific spatial condition (exists, active, confidence threshold, or enters region). Read-only polling tool. Default timeout: 10000ms, poll_interval: 500ms. On timeout returns {ok: false, timeout: true}. Returns {ok, condition_met:boolean, entity}. Use wait_for_spatial_state instead of query_entities when polling asynchronously for an entity state transition or region entry.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Optional project identifier | |
| condition | Yes | Condition to wait for | |
| entity_id | Yes | Entity ID to monitor | |
| region_id | No | Target region ID for in_region condition | |
| threshold | No | Confidence threshold (default: 0.8) | |
| timeout_ms | No | Timeout in milliseconds (default: 10000) | |
| poll_interval_ms | No | Polling interval in milliseconds (default: 250) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, but the description adds real behavioral context: it blocks/polls, states the default timeout and poll cadence, and gives the timeout failure shape ({ok:false, timeout:true}). However it states poll_interval default 500ms while the schema says 250ms, an internal inconsistency that weakens trust in the disclosed defaults.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core verb and condition list, then behavior, then the routing rule to query_entities; every sentence carries information. It loses a point for spending a sentence on defaults already in the schema, one of which contradicts them.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description helpfully supplies the return shape and the timeout payload, and covers defaults and blocking behavior for a 7-parameter tool. Remaining gaps are minor: no mention of maximum timeout, cancellation, or what happens to concurrent polls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents every parameter including defaults, so the baseline is 3. The description's restatement of timeout/interval defaults adds no new meaning and even conflicts with the schema's poll_interval default, while the enum values it paraphrases are already self-describing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource ('poll and wait until an entity reaches a specific spatial condition') and enumerates the four condition kinds, so the agent knows exactly what is being awaited. It explicitly distinguishes itself from the sibling query_entities, so the tool is separable without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The final sentence gives an explicit alternative and the selecting condition: use this instead of query_entities when polling asynchronously for a state transition or region entry. Both when-to-use and which-sibling-not-to-use are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.6.0- Changed
link_to_goal3 fields changed- added
Input schema / properties / min_clearanceAdded value: +{ + "description": "Minimum clearance distance required to satisfy the goal", + "type": "number" +} - added
Input schema / properties / success_regionAdded value: +{ + "description": "Spatial bounding volume region defining goal arrival", + "properties": { + "max": { + "properties": { + "x": { + "type": "number" + }, + "y": { + "type": "number" + }, + "z": { + "type": "number" + } + }, + "type": "object" + }, + "min": { + "properties": { + "x": { + "type": "number" + }, + "y": { + "type": "number" + }, + "z": { + "type": "number" + } + }, + "type": "object" + } + }, + "type": "object" +} - added
Input schema / properties / target_entity_idAdded value: +{ + "description": "Direct target entity ID for navigation and clearance tracking", + "type": "string" +}
- Changed
record_outcome6 fields changed- added
Input schema / properties / actionAdded value: +{ + "description": "Action type: \"record\" (default) for single outcome or \"from_tick\" for 60Hz batch spool ingestion", + "enum": [ + "record", + "from_tick" + ], + "type": "string" +} - added
Input schema / properties / affordance_maskAdded value: +{ + "description": "Updated affordance bitmask after action", + "type": "number" +} - added
Input schema / properties / itemsAdded value: +{ + "description": "Alias for spooled_outcomes batch array", + "items": { + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / resulting_velocityAdded value: +{ + "description": "New velocity vector of entity after action", + "properties": { + "x": { + "type": "number" + }, + "y": { + "type": "number" + }, + "z": { + "type": "number" + } + }, + "type": "object" +} - added
Input schema / properties / spooled_outcomesAdded value: +{ + "description": "Batch of spooled outcomes to ingest from 60Hz loop off-tick execution", + "items": { + "type": "object" + }, + "type": "array" +} - removed
Input schema / requiredRemoved value: -[ - "action_name", - "success" -]
- Changed
update_entity2 fields changed- added
Input schema / properties / affordance_maskAdded value: +{ + "description": "Bitmask of physical interaction affordances (1=traversable, 2=occluder, 4=container, 8=interactable, 16=threat)", + "type": "number" +} - added
Input schema / properties / velocityAdded value: +{ + "description": "3D velocity vector (vx, vy, vz) for physical motion and predictive permanence", + "properties": { + "x": { + "description": "Velocity along X axis", + "type": "number" + }, + "y": { + "description": "Velocity along Y axis", + "type": "number" + }, + "z": { + "description": "Velocity along Z axis", + "type": "number" + } + }, + "type": "object" +}
- Changed
use_spatial_blackboard1 field changed- added
Input schema / properties / intention_idAdded value: +{ + "description": "Cross-server intention identifier from agent-reasoning-mcp to bind execution directives", + "type": "string" +}
7 tool updates
v0.5.1- Changed
generate_game_inputs1 field changed- added
Input schema / properties / action / enumAdded value: +[ + "generate_inputs", + "project_screen", + "unproject_ray" +]
- Changed
get_spatial_map5 fields changed- changed
Input schema / properties / format / descriptionPrevious value: -"Export or view format (default: json, use \"summary\" for high-level environment overview)"New value: +"Export or view format (default: json, use \"summary\" for high-level environment overview, \"compact_slice\" for fast System One decision slice)" - changed
Input schema / properties / format / enumPrevious value: -[ - "json", - "geojson", - "topological_graph", - "gltf", - "obj", - "joint", - "spatial_vlm", - "summary" -]New value: +[ + "json", + "geojson", + "topological_graph", + "gltf", + "obj", + "joint", + "spatial_vlm", + "summary", + "compact_slice" +] - added
Input schema / properties / kAdded value: +{ + "description": "Max nearest entities to include in compact_slice (default: 16)", + "type": "number" +} - added
Input schema / properties / observer_headingAdded value: +{ + "description": "Optional heading angle in degrees for compact_slice bearing calculation", + "type": "number" +} - added
Input schema / properties / observer_positionAdded value: +{ + "description": "Optional [x, y, z] observer position for compact_slice", + "items": { + "type": "number" + }, + "type": "array" +}
- Changed
link_to_goal1 field changed- added
Input schema / properties / action / enumAdded value: +[ + "link", + "unlink", + "get_context" +]
- Changed
manage_snapshot1 field changed- added
Input schema / properties / action / enumAdded value: +[ + "save", + "restore", + "diff", + "list", + "undo", + "history", + "time_travel" +]
- Changed
manage_spatial_spec1 field changed- added
Input schema / properties / action / enumAdded value: +[ + "set", + "verify", + "list" +]
- Changed
set_relation1 field changed- added
Input schema / properties / action / enumAdded value: +[ + "add", + "remove" +]
- Changed
use_spatial_blackboard1 field changed- added
Input schema / properties / action / enumAdded value: +[ + "get", + "set", + "delete", + "lease", + "list", + "post", + "read", + "claim", + "release" +]
15 tool updates
v0.4.1- Changed
create_evidence_pack3 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / linked_state_memory_nodes / additionalPropertiesRemoved value: -true
- Changed
generate_game_inputs13 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / action / enumRemoved value: -[ - "generate_inputs", - "project_screen", - "unproject_ray" -] - removed
Input schema / properties / camera / additionalPropertiesRemoved value: -true - removed
Input schema / properties / camera / properties / orientation / additionalPropertiesRemoved value: -true - removed
Input schema / properties / camera / properties / position / additionalPropertiesRemoved value: -true - removed
Input schema / properties / control_profile / additionalPropertiesRemoved value: -true - removed
Input schema / properties / current_orientation / additionalPropertiesRemoved value: -true - removed
Input schema / properties / current_position / additionalPropertiesRemoved value: -true - removed
Input schema / properties / target_position / additionalPropertiesRemoved value: -true - removed
Input schema / properties / viewport / additionalPropertiesRemoved value: -true - removed
Input schema / properties / waypoints / items / additionalPropertiesRemoved value: -true - removed
Input schema / properties / world_position / additionalPropertiesRemoved value: -true
- Changed
get_expected_view4 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / observer_orientation / additionalPropertiesRemoved value: -true - removed
Input schema / properties / observer_position / additionalPropertiesRemoved value: -true
- Changed
get_spatial_map2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
ingest_observation9 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / detections / items / additionalPropertiesRemoved value: -true - removed
Input schema / properties / detections / items / properties / attributes / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / detections / items / properties / estimated_position / additionalPropertiesRemoved value: -true - removed
Input schema / properties / field_of_view / additionalPropertiesRemoved value: -true - removed
Input schema / properties / observer_pose / additionalPropertiesRemoved value: -true - removed
Input schema / properties / observer_pose / properties / orientation / additionalPropertiesRemoved value: -true - removed
Input schema / properties / observer_pose / properties / position / additionalPropertiesRemoved value: -true
- Changed
link_to_goal4 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / action / enumRemoved value: -[ - "link", - "unlink", - "get_context" -] - removed
Input schema / properties / current_agent_position / additionalPropertiesRemoved value: -true
- Changed
manage_snapshot3 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / action / enumRemoved value: -[ - "save", - "restore", - "diff", - "list", - "undo", - "history", - "time_travel" -]
- Changed
manage_spatial_spec7 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / action / enumRemoved value: -[ - "set", - "verify", - "list" -] - removed
Input schema / properties / bounds / additionalPropertiesRemoved value: -true - removed
Input schema / properties / bounds / properties / max / additionalPropertiesRemoved value: -true - removed
Input schema / properties / bounds / properties / min / additionalPropertiesRemoved value: -true - removed
Input schema / properties / constraints / items / additionalPropertiesRemoved value: -true
- Changed
query_entities3 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / near_position / additionalPropertiesRemoved value: -true
- Changed
record_outcome4 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / property_changes / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / resulting_position / additionalPropertiesRemoved value: -true
- Changed
set_relation5 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / action / enumRemoved value: -[ - "add", - "remove" -] - removed
Input schema / properties / metadata / additionalPropertiesRemoved value: -{} - removed
Input schema / properties / offset / additionalPropertiesRemoved value: -true
- Changed
simulate_movement6 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / delta_position / additionalPropertiesRemoved value: -true - removed
Input schema / properties / start_position / additionalPropertiesRemoved value: -true - removed
Input schema / properties / target_position / additionalPropertiesRemoved value: -true - removed
Input schema / properties / velocity / additionalPropertiesRemoved value: -true
- Changed
update_entity6 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / bounding_box / additionalPropertiesRemoved value: -true - removed
Input schema / properties / orientation / additionalPropertiesRemoved value: -true - removed
Input schema / properties / position / additionalPropertiesRemoved value: -true - removed
Input schema / properties / properties / additionalPropertiesRemoved value: -{}
- Changed
use_spatial_blackboard13 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / action / descriptionPrevious value: -"Action to perform (default: read)"New value: +"Action to perform (default: get)" - removed
Input schema / properties / action / enumRemoved value: -[ - "post", - "read", - "claim", - "release" -] - added
Input schema / properties / agent_idAdded value: +{ + "description": "Agent identifier (alias for sender)", + "type": "string" +} - changed
Input schema / properties / duration_seconds / descriptionPrevious value: -"Claim duration in seconds (default: 60)"New value: +"Lease duration in seconds (default: 60)" - added
Input schema / properties / idAdded value: +{ + "description": "Blackboard entry identifier for get or delete", + "type": "string" +} - added
Input schema / properties / include_expiredAdded value: +{ + "description": "Whether to include expired entries", + "type": "boolean" +} - added
Input schema / properties / limitAdded value: +{ + "description": "Maximum number of items or topics to return", + "type": "number" +} - added
Input schema / properties / modeAdded value: +{ + "description": "Lease action mode: acquire or release (default: acquire)", + "enum": [ + "acquire", + "release" + ], + "type": "string" +} - removed
Input schema / properties / payload / additionalPropertiesRemoved value: -{} - changed
Input schema / properties / resource_id / descriptionPrevious value: -"Resource or entity ID to claim/release"New value: +"Resource or entity ID to lease or release" - added
Input schema / properties / topic_prefixAdded value: +{ + "description": "Prefix filter for listing topics", + "type": "string" +}
- Changed
wait_for_spatial_state2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / additionalPropertiesRemoved value: -false
15 tool updates
v0.3.1- First observed
create_evidence_pack - First observed
generate_game_inputs - First observed
get_expected_view - First observed
get_spatial_map - First observed
ingest_observation - First observed
link_to_goal - First observed
manage_snapshot - First observed
manage_spatial_spec - First observed
query_entities - First observed
record_outcome - First observed
set_relation - First observed
simulate_movement - First observed
update_entity - First observed
use_spatial_blackboard - First observed
wait_for_spatial_state
TDQS
Scored across 15 tools
The descriptions aggressively disambiguate with explicit 'Use X instead of Y when...' guidance, which helps a lot. However, there are still three entity-writing paths (update_entity, record_outcome, ingest_observation) and three reading/export paths (query_entities, get_spatial_map, get_expected_view) whose boundaries require careful reading, so some residual confusion remains.
All 15 tools use snake_case verb-first naming (update_entity, query_entities, manage_snapshot, create_evidence_pack, wait_for_spatial_state). Even the multi-word variants (link_to_goal, wait_for_spatial_state) follow a predictable verb_noun/verb_prep_noun convention.
15 tools sits at the top of the well-scoped range and each tool maps to a distinct capability (authoring, perception, querying, simulation, snapshots, coordination, verification, automation). For a spatial world-model server, this breadth is justified rather than padded.
The surface covers entity lifecycle (create/update, status-destroyed), relations, querying, export, simulation, perception ingest, snapshots, goal linking, blackboard coordination, spec verification, evidence packing, game inputs, and polling. Explicit deletion/region-management tools are absent, but the destroy-status pattern and region references mostly compensate.
Maintenance
Related MCP Connectors
Cloud-hosted MCP server for durable AI memory
Shared voxel world for AI agents. Extend First Light at the world centre over HTTP or MCP; no auth.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Governed personal world model and memory for your AI agent. Pair once, connect over MCP.
Related MCP Servers
- AlicenseAqualityAmaintenanceA local-first MCP server that gives AI coding agents persistent memory and controlled commands. Features a git-backed markdown knowledge vault with FTS5 search, surgical section edits, token-aware context budgeting, and a sandboxed command engine with human approval gates. Works with Claude Code, Cursor, Copilot, Gemini, and more.45860 npm1Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA local-first MCP server providing persistent, searchable knowledge base via SQLite, enabling AI agents to save and recall facts across sessions without cloud dependencies.MIT
- AlicenseAqualityCmaintenancePersistent memory MCP server for AI agents, using SQLite with hybrid keyword and semantic search for long-term memory storage.5Do What The F*ck You Want To Public
- FlicenseNot gradedqualityAmaintenanceA local MCP server using SQLite to unify context and memory across multiple AI agents, enabling persistent decisions and preferences without re-explanation.-