Skip to main content
Glama
putervision
by putervision

@putervision/world-model-mcp

npm version version npm downloads CI Node TypeScript Website License: MIT

@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 stats

Related 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, and format: "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

๐Ÿ—๏ธ Architecture & Codebase Distillation

High-signal architectural overview, module inventory, data flows, and design decisions.

๐Ÿ’ก Features & Triad Overview

PuterVision Autonomous Triad interaction, 3D WebGL scene visualizer, and evidence packs.

๐Ÿ“‹ Spatial World Model Concepts

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 (init, run, view, stats, inspect, map, export, import, doctor, snapshot, spec, blackboard).

๐Ÿงฐ Tools & API Reference

Complete reference for all 15 Consolidated MCP Tools, legacy tool mapping, and parameter examples.

๐Ÿ—„๏ธ Database Schema

SQLite tables (entities, spatial_relations, entity_history, spatial_specs, blackboard_items, evidence_packs).

๐ŸŽฎ Interactive 3D Game Arena Demo

Autonomous 3D browser arena with Three.js bridge diagnostics (window.__WORLD_MODEL_BRIDGE).

๐Ÿงญ 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 tools
create_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional project identifier
task_idNoPrimary state-memory task ID linked to this proof
entity_idsNoEntity IDs included in evidence pack
observation_idsNoObservation IDs included in evidence pack
after_snapshot_idNoSnapshot ID after action execution
before_snapshot_idNoSnapshot ID before action execution
linked_state_memory_nodesNoLinked state-memory node IDs

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_inputsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoAction to perform (default: generate_inputs)
cameraNoCamera state for projection / click-to-move
projectNoOptional project identifier
screen_xNoScreen pixel X coordinate for screen_to_world unprojection
screen_yNoScreen pixel Y coordinate for screen_to_world unprojection
viewportNoBrowser viewport dimensions
directionNoProjection direction for projection mode
entity_idNoPlayer or target entity ID
waypointsNoOptional intermediate navigation waypoints
output_formatNoOutput format (default: playwright_mcp)
world_positionNo3D world position for projection or starting point
control_profileNoGame control key bindings and physical parameters
target_positionNoDestination 3D coordinates
current_positionNoStarting 3D coordinates (auto-resolved from entity_id if omitted)
ground_elevationNoGround plane elevation Y for raycast intercept (default: 0)
target_entity_idNoTarget destination entity ID
current_orientationNoStarting orientation angles

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_viewA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional project identifier
fov_degreesNoHorizontal field of view in degrees (default: 90)
max_distanceNoMaximum view distance in units (default: 100)
observer_positionYesObserver 3D coordinates
observer_orientationNoObserver orientation (yaw determines heading direction)

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_mapA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoMax nearest entities to include in compact_slice (default: 16)
formatNoExport or view format (default: json, use "summary" for high-level environment overview, "compact_slice" for fast System One decision slice)
projectNoOptional project identifier
region_idNoOptional region ID to filter
min_confidenceNoFilter out entities below confidence threshold
observer_headingNoOptional heading angle in degrees for compact_slice bearing calculation
observer_positionNoOptional [x, y, z] observer position for compact_slice

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional project identifier
reconcileNoIf true, also performs/returns frustum reconciliation analysis (confirmed, new, displaced, missing)
detectionsYesList of detected objects in the frame
field_of_viewNo
observer_poseNoPosition and orientation of the camera/agent when observing
visual_state_idNoAssociated visual state ID from vision-memory-mcp

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

manage_snapshotA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSnapshot name for save/restore
typeNoMutation type to undo (default: any)
actionNoAction to perform (default: list)
projectNoOptional project identifier
entity_idNoTarget entity ID for undo or history lookup
timestampNoISO timestamp for time-travel reconstruction
snapshot_aNoFirst snapshot name for diff
snapshot_bNoSecond snapshot name for diff
descriptionNoOptional snapshot description

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName of the spatial specification
actionNoAction to perform (default: list)
boundsNoSpatial bounding box limits
projectNoOptional project identifier
toleranceNoVerification tolerance percentage (default: 0.05)
constraintsNoList of spatial constraints
descriptionNoSpecification description
sdd_requirement_idNoLinked state-memory SDD requirement node ID

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_entitiesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoFilter by matching tags
typeNoFilter by entity type
limitNoMaximum number of entities to return (default: 50)
queryNoFull-text search query across entity names, tags, and properties
statusNoFilter by status
projectNoOptional project identifier
entity_idNoSpecific entity ID to look up directly (returns location and state)
region_idNoFilter by region ID
max_distanceNoMaximum distance radius from near_position
history_limitNoMaximum number of history events to return when include_history is true (default: 20)
near_positionNoCenter position for proximity distance search
min_confidenceNoMinimum confidence score (e.g. 0.5 to filter out decayed entities)
include_historyNoIf true and entity_id is specified, returns recent movement/event history

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsNoAlias for spooled_outcomes batch array
actionNoAction type: "record" (default) for single outcome or "from_tick" for 60Hz batch spool ingestion
projectNoOptional project identifier
successNoWhether the action succeeded
task_idNoLinked task ID
destroyedNoIf true, marks entity as destroyed
entity_idNoPrimary entity affected
action_nameNoName of the executed action (e.g. move_to, pickup, place, destroy)
affordance_maskNoUpdated affordance bitmask after action
property_changesNoUpdated properties to merge
spooled_outcomesNoBatch of spooled outcomes to ingest from 60Hz loop off-tick execution
resulting_positionNoNew position of entity after action
resulting_velocityNoNew velocity vector of entity after action

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoAction to perform (default: add)
offsetNoRelative offset vector from source to target
projectNoOptional project identifier
distanceNoOptional measured distance between entities
metadataNoAdditional relation metadata
relationYesType of spatial relation
source_idYesSource entity ID
target_idYesTarget entity ID
bidirectionalNoIf true, automatically sets inverse relationship on target

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_movementA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoOperation mode: "simulate" (default) for physics/collision, "navigate" or "waypoints" for path planning
projectNoOptional project identifier
velocityNoVelocity vector in units per second
entity_idNoEntity ID to simulate or move
delta_positionNoRelative movement displacement
start_positionNoStarting 3D coordinates for navigation mode
start_entity_idNoStarting entity ID for navigation mode
target_positionNoTarget position destination
check_collisionsNoWhether to test for AABB obstacle collisions (default: true)
duration_secondsNoMovement duration in seconds
target_entity_idNoTarget destination entity ID for navigation mode

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoOptional entity ID (auto-generated ULID if omitted for creation)
nameYesHuman-readable name or label of the entity
tagsNoArray of searchable string tags
typeYesCategorical entity type
statusNoEntity lifecycle status (default: active)
projectNoOptional project identifier
positionNo3D world position coordinates
velocityNo3D velocity vector (vx, vy, vz) for physical motion and predictive permanence
parent_idNoOptional parent entity ID for hierarchical containment or attachments
region_idNoOptional named region ID where this entity resides
confidenceNoObject permanence confidence score from 0.0 to 1.0 (default: 1.0)
propertiesNoArbitrary JSON key-value properties (physics, materials, interactive state)
orientationNo3D Euler orientation angles in degrees
bounding_boxNoAABB bounding volume size
affordance_maskNoBitmask of physical interaction affordances (1=traversable, 2=occluder, 4=container, 8=interactable, 16=threat)

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_blackboardA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoBlackboard entry identifier for get or delete
modeNoLease action mode: acquire or release (default: acquire)
limitNoMaximum number of items or topics to return
topicNoBlackboard topic name
actionNoAction to perform (default: get)
senderNoAgent identifier posting or claiming
payloadNoPayload object (supports coordinates for collision alerts)
projectNoOptional project identifier
agent_idNoAgent identifier (alias for sender)
resource_idNoResource or entity ID to lease or release
ttl_secondsNoPost TTL expiration in seconds
intention_idNoCross-server intention identifier from agent-reasoning-mcp to bind execution directives
topic_prefixNoPrefix filter for listing topics
include_expiredNoWhether to include expired entries
duration_secondsNoLease duration in seconds (default: 60)

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_stateA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoOptional project identifier
conditionYesCondition to wait for
entity_idYesEntity ID to monitor
region_idNoTarget region ID for in_region condition
thresholdNoConfidence threshold (default: 0.8)
timeout_msNoTimeout in milliseconds (default: 10000)
poll_interval_msNoPolling interval in milliseconds (default: 250)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 4 tool updatesv0.6.0
    • Changedlink_to_goal3 fields changed
      • addedInput schema / properties / min_clearance
        Added value: +{
        +  "description": "Minimum clearance distance required to satisfy the goal",
        +  "type": "number"
        +}
      • addedInput schema / properties / success_region
        Added 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"
        +}
      • addedInput schema / properties / target_entity_id
        Added value: +{
        +  "description": "Direct target entity ID for navigation and clearance tracking",
        +  "type": "string"
        +}
    • Changedrecord_outcome6 fields changed
      • addedInput schema / properties / action
        Added value: +{
        +  "description": "Action type: \"record\" (default) for single outcome or \"from_tick\" for 60Hz batch spool ingestion",
        +  "enum": [
        +    "record",
        +    "from_tick"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / affordance_mask
        Added value: +{
        +  "description": "Updated affordance bitmask after action",
        +  "type": "number"
        +}
      • addedInput schema / properties / items
        Added value: +{
        +  "description": "Alias for spooled_outcomes batch array",
        +  "items": {
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / resulting_velocity
        Added value: +{
        +  "description": "New velocity vector of entity after action",
        +  "properties": {
        +    "x": {
        +      "type": "number"
        +    },
        +    "y": {
        +      "type": "number"
        +    },
        +    "z": {
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / spooled_outcomes
        Added value: +{
        +  "description": "Batch of spooled outcomes to ingest from 60Hz loop off-tick execution",
        +  "items": {
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "action_name",
        -  "success"
        -]
    • Changedupdate_entity2 fields changed
      • addedInput schema / properties / affordance_mask
        Added value: +{
        +  "description": "Bitmask of physical interaction affordances (1=traversable, 2=occluder, 4=container, 8=interactable, 16=threat)",
        +  "type": "number"
        +}
      • addedInput schema / properties / velocity
        Added 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"
        +}
    • Changeduse_spatial_blackboard1 field changed
      • addedInput schema / properties / intention_id
        Added value: +{
        +  "description": "Cross-server intention identifier from agent-reasoning-mcp to bind execution directives",
        +  "type": "string"
        +}
  2. 7 tool updatesv0.5.1
    • Changedgenerate_game_inputs1 field changed
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "generate_inputs",
        +  "project_screen",
        +  "unproject_ray"
        +]
    • Changedget_spatial_map5 fields changed
      • changedInput schema / properties / format / description
        Previous 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)"
      • changedInput schema / properties / format / enum
        Previous 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"
        +]
      • addedInput schema / properties / k
        Added value: +{
        +  "description": "Max nearest entities to include in compact_slice (default: 16)",
        +  "type": "number"
        +}
      • addedInput schema / properties / observer_heading
        Added value: +{
        +  "description": "Optional heading angle in degrees for compact_slice bearing calculation",
        +  "type": "number"
        +}
      • addedInput schema / properties / observer_position
        Added value: +{
        +  "description": "Optional [x, y, z] observer position for compact_slice",
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
    • Changedlink_to_goal1 field changed
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "link",
        +  "unlink",
        +  "get_context"
        +]
    • Changedmanage_snapshot1 field changed
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "save",
        +  "restore",
        +  "diff",
        +  "list",
        +  "undo",
        +  "history",
        +  "time_travel"
        +]
    • Changedmanage_spatial_spec1 field changed
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "set",
        +  "verify",
        +  "list"
        +]
    • Changedset_relation1 field changed
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "add",
        +  "remove"
        +]
    • Changeduse_spatial_blackboard1 field changed
      • addedInput schema / properties / action / enum
        Added value: +[
        +  "get",
        +  "set",
        +  "delete",
        +  "lease",
        +  "list",
        +  "post",
        +  "read",
        +  "claim",
        +  "release"
        +]
  3. 15 tool updatesv0.4.1
    • Changedcreate_evidence_pack3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / linked_state_memory_nodes / additionalProperties
        Removed value: -true
    • Changedgenerate_game_inputs13 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / action / enum
        Removed value: -[
        -  "generate_inputs",
        -  "project_screen",
        -  "unproject_ray"
        -]
      • removedInput schema / properties / camera / additionalProperties
        Removed value: -true
      • removedInput schema / properties / camera / properties / orientation / additionalProperties
        Removed value: -true
      • removedInput schema / properties / camera / properties / position / additionalProperties
        Removed value: -true
      • removedInput schema / properties / control_profile / additionalProperties
        Removed value: -true
      • removedInput schema / properties / current_orientation / additionalProperties
        Removed value: -true
      • removedInput schema / properties / current_position / additionalProperties
        Removed value: -true
      • removedInput schema / properties / target_position / additionalProperties
        Removed value: -true
      • removedInput schema / properties / viewport / additionalProperties
        Removed value: -true
      • removedInput schema / properties / waypoints / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / world_position / additionalProperties
        Removed value: -true
    • Changedget_expected_view4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / observer_orientation / additionalProperties
        Removed value: -true
      • removedInput schema / properties / observer_position / additionalProperties
        Removed value: -true
    • Changedget_spatial_map2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedingest_observation9 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / detections / items / additionalProperties
        Removed value: -true
      • removedInput schema / properties / detections / items / properties / attributes / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / detections / items / properties / estimated_position / additionalProperties
        Removed value: -true
      • removedInput schema / properties / field_of_view / additionalProperties
        Removed value: -true
      • removedInput schema / properties / observer_pose / additionalProperties
        Removed value: -true
      • removedInput schema / properties / observer_pose / properties / orientation / additionalProperties
        Removed value: -true
      • removedInput schema / properties / observer_pose / properties / position / additionalProperties
        Removed value: -true
    • Changedlink_to_goal4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / action / enum
        Removed value: -[
        -  "link",
        -  "unlink",
        -  "get_context"
        -]
      • removedInput schema / properties / current_agent_position / additionalProperties
        Removed value: -true
    • Changedmanage_snapshot3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / action / enum
        Removed value: -[
        -  "save",
        -  "restore",
        -  "diff",
        -  "list",
        -  "undo",
        -  "history",
        -  "time_travel"
        -]
    • Changedmanage_spatial_spec7 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / action / enum
        Removed value: -[
        -  "set",
        -  "verify",
        -  "list"
        -]
      • removedInput schema / properties / bounds / additionalProperties
        Removed value: -true
      • removedInput schema / properties / bounds / properties / max / additionalProperties
        Removed value: -true
      • removedInput schema / properties / bounds / properties / min / additionalProperties
        Removed value: -true
      • removedInput schema / properties / constraints / items / additionalProperties
        Removed value: -true
    • Changedquery_entities3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / near_position / additionalProperties
        Removed value: -true
    • Changedrecord_outcome4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / property_changes / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / resulting_position / additionalProperties
        Removed value: -true
    • Changedset_relation5 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / action / enum
        Removed value: -[
        -  "add",
        -  "remove"
        -]
      • removedInput schema / properties / metadata / additionalProperties
        Removed value: -{}
      • removedInput schema / properties / offset / additionalProperties
        Removed value: -true
    • Changedsimulate_movement6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / delta_position / additionalProperties
        Removed value: -true
      • removedInput schema / properties / start_position / additionalProperties
        Removed value: -true
      • removedInput schema / properties / target_position / additionalProperties
        Removed value: -true
      • removedInput schema / properties / velocity / additionalProperties
        Removed value: -true
    • Changedupdate_entity6 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / bounding_box / additionalProperties
        Removed value: -true
      • removedInput schema / properties / orientation / additionalProperties
        Removed value: -true
      • removedInput schema / properties / position / additionalProperties
        Removed value: -true
      • removedInput schema / properties / properties / additionalProperties
        Removed value: -{}
    • Changeduse_spatial_blackboard13 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / action / description
        Previous value: -"Action to perform (default: read)"New value: +"Action to perform (default: get)"
      • removedInput schema / properties / action / enum
        Removed value: -[
        -  "post",
        -  "read",
        -  "claim",
        -  "release"
        -]
      • addedInput schema / properties / agent_id
        Added value: +{
        +  "description": "Agent identifier (alias for sender)",
        +  "type": "string"
        +}
      • changedInput schema / properties / duration_seconds / description
        Previous value: -"Claim duration in seconds (default: 60)"New value: +"Lease duration in seconds (default: 60)"
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Blackboard entry identifier for get or delete",
        +  "type": "string"
        +}
      • addedInput schema / properties / include_expired
        Added value: +{
        +  "description": "Whether to include expired entries",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Maximum number of items or topics to return",
        +  "type": "number"
        +}
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "Lease action mode: acquire or release (default: acquire)",
        +  "enum": [
        +    "acquire",
        +    "release"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / payload / additionalProperties
        Removed value: -{}
      • changedInput schema / properties / resource_id / description
        Previous value: -"Resource or entity ID to claim/release"New value: +"Resource or entity ID to lease or release"
      • addedInput schema / properties / topic_prefix
        Added value: +{
        +  "description": "Prefix filter for listing topics",
        +  "type": "string"
        +}
    • Changedwait_for_spatial_state2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / additionalProperties
        Removed value: -false
  4. 15 tool updatesv0.3.1
    • First observedcreate_evidence_pack
    • First observedgenerate_game_inputs
    • First observedget_expected_view
    • First observedget_spatial_map
    • First observedingest_observation
    • First observedlink_to_goal
    • First observedmanage_snapshot
    • First observedmanage_spatial_spec
    • First observedquery_entities
    • First observedrecord_outcome
    • First observedset_relation
    • First observedsimulate_movement
    • First observedupdate_entity
    • First observeduse_spatial_blackboard
    • First observedwait_for_spatial_state

TDQS

A4.2/5.0

Scored across 15 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    A 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.
    4
    58
    60 npm
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A 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