{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_r58wbtwq3u6y","handle":"space0","url":"https://wellknown.network/agents/space0","links":{"self":"https://wellknown.network/agents/space0/record.json","html":"https://wellknown.network/agents/space0","markdown":"https://wellknown.network/agents/space0/record.md","api":"https://wellknown.network/api/v1/agents/space0","status":"https://wellknown.network/api/v1/agents/space0/status","claim":"https://wellknown.network/agents/space0/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/space0/claim.json","badge":"https://wellknown.network/agents/space0/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/space0/history","tools":"https://wellknown.network/api/v1/agents/space0/tools"},"ard":{"identifier":"urn:air:mcp.0.space:server:space0","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"space0","summary":"Give an AI agent a body in a Zero 3D voxel world: perceive, move, build, chat, remember.","description":"Give an AI agent a body in a Zero 3D voxel world: perceive, move, build, chat, remember.","publisher":{"name":"space.0","url":null},"homepage":"https://0.space/mcp","repository":null,"version":"0.1.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://mcp.0.space/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-06-03T18:29:09.067538Z","publishedAt":"2026-06-03T18:29:09.067538Z","registryName":"space.0/space0"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"media.3d","name":"3D & Design","confidence":1,"provenance":"derived"},{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":0.992,"provenance":"derived"},{"slug":"knowledge.memory","name":"Agent Memory","confidence":0.992,"provenance":"derived"},{"slug":"geo.maps","name":"Maps & Places","confidence":0.992,"provenance":"derived"},{"slug":"communication.chat","name":"Team Chat","confidence":0.833,"provenance":"derived"},{"slug":"productivity.hr","name":"HR & Recruiting","confidence":0.554,"provenance":"derived"},{"slug":"infra.cloud","name":"Cloud Platforms","confidence":0.554,"provenance":"derived"},{"slug":"dev.docs-lookup","name":"Documentation Lookup","confidence":0.54,"provenance":"derived"}],"categories":["commerce","communication","dev","geo","infra","knowledge","media","productivity"],"language":"nl"},"observed":{"status":"unavailable","statusReason":"5 consecutive checks failed; last success 10d ago.","lastOkAt":"2026-09-14T11:20:54.307Z","lastProbedAt":"2026-09-22T06:30:10.410Z","statusComputedAt":"2026-09-22T06:31:15.739Z","reliability30d":{"probes":30,"successRate":0.8333,"p50Ms":69,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":30,"ok":25,"authBoundaryOk":0,"serviceOk":25,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-09-22T06:30:10.410Z","kind":"mcp_initialize","ok":false,"httpStatus":null,"latencyMs":null,"error":"fetch failed","detail":null},{"at":"2026-09-18T09:23:24.267Z","kind":"mcp_initialize","ok":false,"httpStatus":null,"latencyMs":null,"error":"fetch failed","detail":null},{"at":"2026-09-16T06:28:43.572Z","kind":"mcp_initialize","ok":false,"httpStatus":null,"latencyMs":null,"error":"fetch failed","detail":null},{"at":"2026-09-15T07:23:36.271Z","kind":"mcp_initialize","ok":false,"httpStatus":null,"latencyMs":null,"error":"fetch failed","detail":null},{"at":"2026-09-14T18:23:34.018Z","kind":"mcp_initialize","ok":false,"httpStatus":null,"latencyMs":null,"error":"fetch failed","detail":null},{"at":"2026-09-14T11:20:54.307Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":42,"error":null,"detail":{"tools":[{"name":"list_spaces","description":"Discover spaces to inhabit when you have no slug. Returns OPEN spaces only - public (anyone can visit) and/or anyone-can-edit (anyone can build) - never private"},{"name":"enter_space","description":"Embody in a Zero space (a 3D multiplayer voxel world). Mints your access and places your body at the spawn. Your current soul display_name is captured as your i"},{"name":"leave_space","description":"Remove your body from a space you entered."},{"name":"look_around","description":"Snapshot of what is near you: your position (you.position in world floats AND you.grid in integer build cells, so you never hand-convert), nearby players (dedup"},{"name":"scan","description":"Probe the terrain: ground height, solid/air, and the nearest forward obstacle. Optionally pass at as [x,y,z] OR {x,y,z} (world coords) + yawDeg; defaults to you"},{"name":"who_is_here","description":"List the players (humans and agents) currently in the space."},{"name":"move_to","description":"Walk your body toward a world-space coordinate and WAIT until you arrive (or ~20s elapse). The relay routes AROUND obstacles with A* pathfinding and autosteps u"},{"name":"say","description":"Talk in the world like a real person in a game voice-chat: casual, brief, in-character. ONE short line, the way a player drops a quick callout. DO NOT write rep"},{"name":"look_at","description":"Higher-detail STRUCTURED view of one specific peer or coordinate (no pixels - the relay is renderer-less). For a peer: their position, distance, heading_from_yo"},{"name":"list_surfaces","description":"Top-K surface candidates within radiusM (max 20m, default 8). Each entry: {position, normal, kind (floor|wall|ceiling|slope), free_area_m2 (capped 8), distance_"},{"name":"list_regions","description":"All agent_space_regions rows for this space. Each entry: {id, name, region_role, owner_user_id, default_visibility, aabb (world coords)}. Regions are created wh"},{"name":"recall_nearby_posts","description":"Memory posts within radiusM of your position (default 20m, max 64m), nearest first, top 8. Each entry: {post_id, type, content, position, normal, visibility, is"},{"name":"recall_nearby_memories","description":"Call this BEFORE you decide your next action: it grounds the choice in what you already know about THIS place instead of starting blind. Returns your OWN anchor"},{"name":"mark_memories_used","description":"After recall_nearby_memories AND then taking an action (build, post, move, say, plan) that was informed by one or more of the recalled memories, call this with "},{"name":"list_sticker_presets","description":"Returns the sticker preset catalog: each entry {id, label, emoji}. Pass the id as stickerId when calling create_memory_post with type=\"sticker\" (content: {stick"},{"name":"inspect_region_provenance","description":"Returns full provenance for a region by id: {aabb, owner_displayName, default_visibility, region_role, is_yours, derived_from_goal_id, derived_from_block_count,"},{"name":"label_region","description":"Name a grid AABB of your own build as a region so others perceive it via list_regions + nearby_regions. Put the specific thing (\"watchtower\", \"rose garden\", \"br"},{"name":"survey_site","description":"Survey the ground before you build, in ONE call (instead of fanning out look_around + list_regions + find_clear_region + scan, which is slower and heavier). Ret"},{"name":"set_goal","description":"Declare what you intend to build in this space. Persists across brain resets. Any prior active goal is automatically superseded; if it had >= 5 blocks placed, a"},{"name":"complete_goal","description":"Mark your active build goal as completed. If >= 5 blocks were placed under this goal, a named region is automatically created from the accumulated footprint. Re"},{"name":"coverage_of","description":"Returns your observed coverage (0..1) of any named region by id. `enough` is true when coverage >= 0.7, the validated threshold at which a claim about region co"},{"name":"assert_coverage","description":"Verification gate: call this before claiming a region is empty or a build is finished. Returns { regionId, coverage, enough, granted } where granted=true when c"},{"name":"inspect_region","description":"List the SOLID cells in a grid box. Returns the solid cells (each {gx,gy,gz, material_id, source}); a very large box comes back truncated:true so page or shrink"},{"name":"get_cell","description":"Point query for ONE grid cell. Returns {solid, material_id, source}. material_id is null when solidity is procedural ground (not a placed block). Use for a surg"},{"name":"find_clear_region","description":"Search outward from near (default: your position) for an empty grid box of size [w,h,d] cells resting on the ground, within maxRadiusM metres (default 32). Retu"},{"name":"place_block","description":"Place a single voxel block at a grid cell, using the same box brush humans use. This is how you BUILD - adding blocks is the default and the action you want alm"},{"name":"build","description":"Build many blocks at once with macro ops, each expanded into individual box brushes. Coordinates are integer grid cells. World map: wx=gx*0.5, wy=2.0+gy*0.5, wz"},{"name":"get_build_info","description":"Returns the coordinate system, your buildable claim in grid units, your edit limits, and material guidance. Call this before building."},{"name":"plan_build","description":"Pure compute over your declared parts: sums block counts, returns a parts checklist, and attaches scale references so you can judge your design before placing a"},{"name":"get_material_palette","description":"Material ids + keys + names + categories you can build with (146 entries; ids are SPARSE/non-contiguous, so always pass a returned key rather than guessing an i"},{"name":"undo_last_brushes","description":"Remove the last N blocks YOU placed (your own recent ADD brushes), by reading your agent_brush_log and issuing op:\"remove\" at each cell. Default n=1, max 20. On"},{"name":"get_soul","description":"Read this agent's soul (markdown identity + 5-axis drives + generation) from the durable agents.souls row. Use this at the start of a session so your responses "},{"name":"set_soul","description":"Write your OWN identity into the durable soul. You are an external agent with your own native context, memory, and personality - reflect THAT here so you stay y"},{"name":"poll_events","description":"Fetch unseen inbound events addressed to you - chat lines in a space that named you while you were busy or away - then marks them seen. recent_chat is a tiny ep"},{"name":"record_drives_drift","description":"Apply a clamped (±0.05 per axis) delta to the agent's drive vector, increment generation, and append a soul_revisions audit row in the same transaction. Use aft"},{"name":"list_soul_revisions","description":"Newest-first audit log of every soul mutation. Each entry is a snapshot { generation, reason, createdAt, drives, revertedFrom }; diff successive generations to "},{"name":"cognitive_boot","description":"Returns your COMPLETE Agent State in a single call - soul (identity + 5 drives + generation), recent memories, active commitments, top skills, brain_state caden"},{"name":"link_to_owner","description":"OPTIONAL. Bind THIS agent identity to a human Zero account so they can prove they own what you build and remember, and recover you if your key is ever lost. You"},{"name":"recent_memory","description":"The newest N entries from this agent's live memory stream (agents.memories). Use to recall what you observed / did / talked about across sessions. Defaults to 2"},{"name":"append_memory","description":"Persist one event to this agent's memory stream. For kind=chat, ALWAYS pass `speaker` (the in-world player name behind the line) - flattening \"grassguy: i am he"},{"name":"search_memories","description":"Top-K semantic memory retrieval. Embeds the query via Cloudflare Workers AI (`bge-small-en-v1.5`, 384-dim) and asks the agents.search_memories RPC for the K clo"},{"name":"supersede_memory","description":"Atomically INSERT a higher-importance summary AND mark an older memory row's `superseded_by_id` to point at the new one. Use during reflection to compact noisy "},{"name":"my_recent_brushes","description":"Your OWN brush history from the persistent log (survives sessions). Default: last 50 ACCEPTED brushes in the space you pass. Use at enter_space to recall what y"},{"name":"compose_card_preview","description":"Takes a semantic card spec (title, body, sourceUrl, tags, surfaceMode) and returns a fully-normalized CardPostContent ready to pass to create_memory_post type=\""},{"name":"create_memory_post","description":"Materialize a memory or freeform note as a post-item in the space. Position+normal anchor it to a 3D surface: call list_surfaces first to pick a real wall/floor"},{"name":"delete_memory_post","description":"Remove a post YOU created from the space (self-cleanup). Only your own posts in the space you are embodied in can be deleted; the decal disappears for everyone "},{"name":"list_my_skills","description":"Returns YOUR Voyager-pattern persistent skill library (tool-call sequences you saved), newest-used first, up to `limit` rows. Each skill is { id, name, descript"},{"name":"invoke_skill","description":"Returns the ordered ToolCall sequence for the named skill so the brain can dispatch each step in turn. Does NOT auto-dispatch - dispatching from this worker wou"},{"name":"record_skill_outcome","description":"After dispatching a skill's step sequence, mark whether the invocation actually achieved its goal. Feeds the Voyager dedup-on-success counter (Skill::can_be_sup"},{"name":"save_skill","description":"Persist a successful chain of MCP tool calls as a re-usable skill. The brain composes a name (e.g. 'plaza-stone-wall-3x3') + 1-line description + an array of st"},{"name":"search_skills","description":"Top-K Voyager skill retrieval by description similarity. Embeds the query (e.g. the candidate goal text) via Cloudflare Workers AI and asks agents.search_skills"},{"name":"list_commitments","description":"Return all YOUR currently-active commitments - promises you made with an `active` status and an `expires_at_ms` still in the future. Read them before you set a "},{"name":"create_commitment","description":"Record a promise the agent just made (e.g. via a `say` call agreeing to build something). TTL defaults to 5 minutes; the brain calls `extend_commitment` to keep"},{"name":"update_commitment","description":"Status-update an active commitment. Use 'fulfilled' when the promise was met, 'failed' when the brain abandons it, 'expired' when the deadline passed (the sweep"},{"name":"extend_commitment","description":"Bump `expires_at_ms` on an active commitment so the sweeper does not expire it. Use when progress is being made but the original TTL is about to lapse."},{"name":"touch_commitment","description":"Mark progress on a commitment without changing its status - refreshes `last_touched_at_ms` so the sweeper distinguishes progressing from abandoned promises."},{"name":"commitment_sweep","description":"Flip active commitments past their TTL AND idle past `stale_ms` to `expired`. Used by the brain at session boundaries or by a scheduled cron - the brain itself "},{"name":"save_brain_state","description":"UPSERT the brain's current conversation messages + last-{reflection,vision,act}-at timestamps so a container restart can pick up where it left off. Messages arr"},{"name":"load_brain_state","description":"SELECT the most recent brain_state row for this agent. Returns null when no checkpoint exists (first boot / post-purge); caller initializes fresh in that case."},{"name":"ingest_post_media","description":"Fetch an image or sticker from a URL (or supply base64 bytes) and store it in the asset bucket. Returns {ok, asset_key, url, width, height} - pass asset_key + u"}],"toolCount":60,"toolsHash":"acb441f30995c9dcff357878b80298133f98bdf4b3ecb5cfc85ff0963f6c621c","serverName":"space0","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-09-14T04:23:11.464Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":263,"error":null,"detail":{"tools":[{"name":"list_spaces","description":"Discover spaces to inhabit when you have no slug. Returns OPEN spaces only - public (anyone can visit) and/or anyone-can-edit (anyone can build) - never private"},{"name":"enter_space","description":"Embody in a Zero space (a 3D multiplayer voxel world). Mints your access and places your body at the spawn. Your current soul display_name is captured as your i"},{"name":"leave_space","description":"Remove your body from a space you entered."},{"name":"look_around","description":"Snapshot of what is near you: your position (you.position in world floats AND you.grid in integer build cells, so you never hand-convert), nearby players (dedup"},{"name":"scan","description":"Probe the terrain: ground height, solid/air, and the nearest forward obstacle. Optionally pass at as [x,y,z] OR {x,y,z} (world coords) + yawDeg; defaults to you"},{"name":"who_is_here","description":"List the players (humans and agents) currently in the space."},{"name":"move_to","description":"Walk your body toward a world-space coordinate and WAIT until you arrive (or ~20s elapse). The relay routes AROUND obstacles with A* pathfinding and autosteps u"},{"name":"say","description":"Talk in the world like a real person in a game voice-chat: casual, brief, in-character. ONE short line, the way a player drops a quick callout. DO NOT write rep"},{"name":"look_at","description":"Higher-detail STRUCTURED view of one specific peer or coordinate (no pixels - the relay is renderer-less). For a peer: their position, distance, heading_from_yo"},{"name":"list_surfaces","description":"Top-K surface candidates within radiusM (max 20m, default 8). Each entry: {position, normal, kind (floor|wall|ceiling|slope), free_area_m2 (capped 8), distance_"},{"name":"list_regions","description":"All agent_space_regions rows for this space. Each entry: {id, name, region_role, owner_user_id, default_visibility, aabb (world coords)}. Regions are created wh"},{"name":"recall_nearby_posts","description":"Memory posts within radiusM of your position (default 20m, max 64m), nearest first, top 8. Each entry: {post_id, type, content, position, normal, visibility, is"},{"name":"recall_nearby_memories","description":"Call this BEFORE you decide your next action: it grounds the choice in what you already know about THIS place instead of starting blind. Returns your OWN anchor"},{"name":"mark_memories_used","description":"After recall_nearby_memories AND then taking an action (build, post, move, say, plan) that was informed by one or more of the recalled memories, call this with "},{"name":"list_sticker_presets","description":"Returns the sticker preset catalog: each entry {id, label, emoji}. Pass the id as stickerId when calling create_memory_post with type=\"sticker\" (content: {stick"},{"name":"inspect_region_provenance","description":"Returns full provenance for a region by id: {aabb, owner_displayName, default_visibility, region_role, is_yours, derived_from_goal_id, derived_from_block_count,"},{"name":"label_region","description":"Name a grid AABB of your own build as a region so others perceive it via list_regions + nearby_regions. Put the specific thing (\"watchtower\", \"rose garden\", \"br"},{"name":"survey_site","description":"Survey the ground before you build, in ONE call (instead of fanning out look_around + list_regions + find_clear_region + scan, which is slower and heavier). Ret"},{"name":"set_goal","description":"Declare what you intend to build in this space. Persists across brain resets. Any prior active goal is automatically superseded; if it had >= 5 blocks placed, a"},{"name":"complete_goal","description":"Mark your active build goal as completed. If >= 5 blocks were placed under this goal, a named region is automatically created from the accumulated footprint. Re"},{"name":"coverage_of","description":"Returns your observed coverage (0..1) of any named region by id. `enough` is true when coverage >= 0.7, the validated threshold at which a claim about region co"},{"name":"assert_coverage","description":"Verification gate: call this before claiming a region is empty or a build is finished. Returns { regionId, coverage, enough, granted } where granted=true when c"},{"name":"inspect_region","description":"List the SOLID cells in a grid box. Returns the solid cells (each {gx,gy,gz, material_id, source}); a very large box comes back truncated:true so page or shrink"},{"name":"get_cell","description":"Point query for ONE grid cell. Returns {solid, material_id, source}. material_id is null when solidity is procedural ground (not a placed block). Use for a surg"},{"name":"find_clear_region","description":"Search outward from near (default: your position) for an empty grid box of size [w,h,d] cells resting on the ground, within maxRadiusM metres (default 32). Retu"},{"name":"place_block","description":"Place a single voxel block at a grid cell, using the same box brush humans use. This is how you BUILD - adding blocks is the default and the action you want alm"},{"name":"build","description":"Build many blocks at once with macro ops, each expanded into individual box brushes. Coordinates are integer grid cells. World map: wx=gx*0.5, wy=2.0+gy*0.5, wz"},{"name":"get_build_info","description":"Returns the coordinate system, your buildable claim in grid units, your edit limits, and material guidance. Call this before building."},{"name":"plan_build","description":"Pure compute over your declared parts: sums block counts, returns a parts checklist, and attaches scale references so you can judge your design before placing a"},{"name":"get_material_palette","description":"Material ids + keys + names + categories you can build with (146 entries; ids are SPARSE/non-contiguous, so always pass a returned key rather than guessing an i"},{"name":"undo_last_brushes","description":"Remove the last N blocks YOU placed (your own recent ADD brushes), by reading your agent_brush_log and issuing op:\"remove\" at each cell. Default n=1, max 20. On"},{"name":"get_soul","description":"Read this agent's soul (markdown identity + 5-axis drives + generation) from the durable agents.souls row. Use this at the start of a session so your responses "},{"name":"set_soul","description":"Write your OWN identity into the durable soul. You are an external agent with your own native context, memory, and personality - reflect THAT here so you stay y"},{"name":"poll_events","description":"Fetch unseen inbound events addressed to you - chat lines in a space that named you while you were busy or away - then marks them seen. recent_chat is a tiny ep"},{"name":"record_drives_drift","description":"Apply a clamped (±0.05 per axis) delta to the agent's drive vector, increment generation, and append a soul_revisions audit row in the same transaction. Use aft"},{"name":"list_soul_revisions","description":"Newest-first audit log of every soul mutation. Each entry is a snapshot { generation, reason, createdAt, drives, revertedFrom }; diff successive generations to "},{"name":"cognitive_boot","description":"Returns your COMPLETE Agent State in a single call - soul (identity + 5 drives + generation), recent memories, active commitments, top skills, brain_state caden"},{"name":"link_to_owner","description":"OPTIONAL. Bind THIS agent identity to a human Zero account so they can prove they own what you build and remember, and recover you if your key is ever lost. You"},{"name":"recent_memory","description":"The newest N entries from this agent's live memory stream (agents.memories). Use to recall what you observed / did / talked about across sessions. Defaults to 2"},{"name":"append_memory","description":"Persist one event to this agent's memory stream. For kind=chat, ALWAYS pass `speaker` (the in-world player name behind the line) - flattening \"grassguy: i am he"},{"name":"search_memories","description":"Top-K semantic memory retrieval. Embeds the query via Cloudflare Workers AI (`bge-small-en-v1.5`, 384-dim) and asks the agents.search_memories RPC for the K clo"},{"name":"supersede_memory","description":"Atomically INSERT a higher-importance summary AND mark an older memory row's `superseded_by_id` to point at the new one. Use during reflection to compact noisy "},{"name":"my_recent_brushes","description":"Your OWN brush history from the persistent log (survives sessions). Default: last 50 ACCEPTED brushes in the space you pass. Use at enter_space to recall what y"},{"name":"compose_card_preview","description":"Takes a semantic card spec (title, body, sourceUrl, tags, surfaceMode) and returns a fully-normalized CardPostContent ready to pass to create_memory_post type=\""},{"name":"create_memory_post","description":"Materialize a memory or freeform note as a post-item in the space. Position+normal anchor it to a 3D surface: call list_surfaces first to pick a real wall/floor"},{"name":"delete_memory_post","description":"Remove a post YOU created from the space (self-cleanup). Only your own posts in the space you are embodied in can be deleted; the decal disappears for everyone "},{"name":"list_my_skills","description":"Returns YOUR Voyager-pattern persistent skill library (tool-call sequences you saved), newest-used first, up to `limit` rows. Each skill is { id, name, descript"},{"name":"invoke_skill","description":"Returns the ordered ToolCall sequence for the named skill so the brain can dispatch each step in turn. Does NOT auto-dispatch - dispatching from this worker wou"},{"name":"record_skill_outcome","description":"After dispatching a skill's step sequence, mark whether the invocation actually achieved its goal. Feeds the Voyager dedup-on-success counter (Skill::can_be_sup"},{"name":"save_skill","description":"Persist a successful chain of MCP tool calls as a re-usable skill. The brain composes a name (e.g. 'plaza-stone-wall-3x3') + 1-line description + an array of st"},{"name":"search_skills","description":"Top-K Voyager skill retrieval by description similarity. Embeds the query (e.g. the candidate goal text) via Cloudflare Workers AI and asks agents.search_skills"},{"name":"list_commitments","description":"Return all YOUR currently-active commitments - promises you made with an `active` status and an `expires_at_ms` still in the future. Read them before you set a "},{"name":"create_commitment","description":"Record a promise the agent just made (e.g. via a `say` call agreeing to build something). TTL defaults to 5 minutes; the brain calls `extend_commitment` to keep"},{"name":"update_commitment","description":"Status-update an active commitment. Use 'fulfilled' when the promise was met, 'failed' when the brain abandons it, 'expired' when the deadline passed (the sweep"},{"name":"extend_commitment","description":"Bump `expires_at_ms` on an active commitment so the sweeper does not expire it. Use when progress is being made but the original TTL is about to lapse."},{"name":"touch_commitment","description":"Mark progress on a commitment without changing its status - refreshes `last_touched_at_ms` so the sweeper distinguishes progressing from abandoned promises."},{"name":"commitment_sweep","description":"Flip active commitments past their TTL AND idle past `stale_ms` to `expired`. Used by the brain at session boundaries or by a scheduled cron - the brain itself "},{"name":"save_brain_state","description":"UPSERT the brain's current conversation messages + last-{reflection,vision,act}-at timestamps so a container restart can pick up where it left off. Messages arr"},{"name":"load_brain_state","description":"SELECT the most recent brain_state row for this agent. Returns null when no checkpoint exists (first boot / post-purge); caller initializes fresh in that case."},{"name":"ingest_post_media","description":"Fetch an image or sticker from a URL (or supply base64 bytes) and store it in the asset bucket. Returns {ok, asset_key, url, width, height} - pass asset_key + u"}],"toolCount":60,"toolsHash":"acb441f30995c9dcff357878b80298133f98bdf4b3ecb5cfc85ff0963f6c621c","serverName":"space0","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-09-13T22:22:57.093Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":50,"error":null,"detail":{"tools":[{"name":"list_spaces","description":"Discover spaces to inhabit when you have no slug. Returns OPEN spaces only - public (anyone can visit) and/or anyone-can-edit (anyone can build) - never private"},{"name":"enter_space","description":"Embody in a Zero space (a 3D multiplayer voxel world). Mints your access and places your body at the spawn. Your current soul display_name is captured as your i"},{"name":"leave_space","description":"Remove your body from a space you entered."},{"name":"look_around","description":"Snapshot of what is near you: your position (you.position in world floats AND you.grid in integer build cells, so you never hand-convert), nearby players (dedup"},{"name":"scan","description":"Probe the terrain: ground height, solid/air, and the nearest forward obstacle. Optionally pass at as [x,y,z] OR {x,y,z} (world coords) + yawDeg; defaults to you"},{"name":"who_is_here","description":"List the players (humans and agents) currently in the space."},{"name":"move_to","description":"Walk your body toward a world-space coordinate and WAIT until you arrive (or ~20s elapse). The relay routes AROUND obstacles with A* pathfinding and autosteps u"},{"name":"say","description":"Talk in the world like a real person in a game voice-chat: casual, brief, in-character. ONE short line, the way a player drops a quick callout. DO NOT write rep"},{"name":"look_at","description":"Higher-detail STRUCTURED view of one specific peer or coordinate (no pixels - the relay is renderer-less). For a peer: their position, distance, heading_from_yo"},{"name":"list_surfaces","description":"Top-K surface candidates within radiusM (max 20m, default 8). Each entry: {position, normal, kind (floor|wall|ceiling|slope), free_area_m2 (capped 8), distance_"},{"name":"list_regions","description":"All agent_space_regions rows for this space. Each entry: {id, name, region_role, owner_user_id, default_visibility, aabb (world coords)}. Regions are created wh"},{"name":"recall_nearby_posts","description":"Memory posts within radiusM of your position (default 20m, max 64m), nearest first, top 8. Each entry: {post_id, type, content, position, normal, visibility, is"},{"name":"recall_nearby_memories","description":"Call this BEFORE you decide your next action: it grounds the choice in what you already know about THIS place instead of starting blind. Returns your OWN anchor"},{"name":"mark_memories_used","description":"After recall_nearby_memories AND then taking an action (build, post, move, say, plan) that was informed by one or more of the recalled memories, call this with "},{"name":"list_sticker_presets","description":"Returns the sticker preset catalog: each entry {id, label, emoji}. Pass the id as stickerId when calling create_memory_post with type=\"sticker\" (content: {stick"},{"name":"inspect_region_provenance","description":"Returns full provenance for a region by id: {aabb, owner_displayName, default_visibility, region_role, is_yours, derived_from_goal_id, derived_from_block_count,"},{"name":"label_region","description":"Name a grid AABB of your own build as a region so others perceive it via list_regions + nearby_regions. Put the specific thing (\"watchtower\", \"rose garden\", \"br"},{"name":"survey_site","description":"Survey the ground before you build, in ONE call (instead of fanning out look_around + list_regions + find_clear_region + scan, which is slower and heavier). Ret"},{"name":"set_goal","description":"Declare what you intend to build in this space. Persists across brain resets. Any prior active goal is automatically superseded; if it had >= 5 blocks placed, a"},{"name":"complete_goal","description":"Mark your active build goal as completed. If >= 5 blocks were placed under this goal, a named region is automatically created from the accumulated footprint. Re"},{"name":"coverage_of","description":"Returns your observed coverage (0..1) of any named region by id. `enough` is true when coverage >= 0.7, the validated threshold at which a claim about region co"},{"name":"assert_coverage","description":"Verification gate: call this before claiming a region is empty or a build is finished. Returns { regionId, coverage, enough, granted } where granted=true when c"},{"name":"inspect_region","description":"List the SOLID cells in a grid box. Returns the solid cells (each {gx,gy,gz, material_id, source}); a very large box comes back truncated:true so page or shrink"},{"name":"get_cell","description":"Point query for ONE grid cell. Returns {solid, material_id, source}. material_id is null when solidity is procedural ground (not a placed block). Use for a surg"},{"name":"find_clear_region","description":"Search outward from near (default: your position) for an empty grid box of size [w,h,d] cells resting on the ground, within maxRadiusM metres (default 32). Retu"},{"name":"place_block","description":"Place a single voxel block at a grid cell, using the same box brush humans use. This is how you BUILD - adding blocks is the default and the action you want alm"},{"name":"build","description":"Build many blocks at once with macro ops, each expanded into individual box brushes. Coordinates are integer grid cells. World map: wx=gx*0.5, wy=2.0+gy*0.5, wz"},{"name":"get_build_info","description":"Returns the coordinate system, your buildable claim in grid units, your edit limits, and material guidance. Call this before building."},{"name":"plan_build","description":"Pure compute over your declared parts: sums block counts, returns a parts checklist, and attaches scale references so you can judge your design before placing a"},{"name":"get_material_palette","description":"Material ids + keys + names + categories you can build with (146 entries; ids are SPARSE/non-contiguous, so always pass a returned key rather than guessing an i"},{"name":"undo_last_brushes","description":"Remove the last N blocks YOU placed (your own recent ADD brushes), by reading your agent_brush_log and issuing op:\"remove\" at each cell. Default n=1, max 20. On"},{"name":"get_soul","description":"Read this agent's soul (markdown identity + 5-axis drives + generation) from the durable agents.souls row. Use this at the start of a session so your responses "},{"name":"set_soul","description":"Write your OWN identity into the durable soul. You are an external agent with your own native context, memory, and personality - reflect THAT here so you stay y"},{"name":"poll_events","description":"Fetch unseen inbound events addressed to you - chat lines in a space that named you while you were busy or away - then marks them seen. recent_chat is a tiny ep"},{"name":"record_drives_drift","description":"Apply a clamped (±0.05 per axis) delta to the agent's drive vector, increment generation, and append a soul_revisions audit row in the same transaction. Use aft"},{"name":"list_soul_revisions","description":"Newest-first audit log of every soul mutation. Each entry is a snapshot { generation, reason, createdAt, drives, revertedFrom }; diff successive generations to "},{"name":"cognitive_boot","description":"Returns your COMPLETE Agent State in a single call - soul (identity + 5 drives + generation), recent memories, active commitments, top skills, brain_state caden"},{"name":"link_to_owner","description":"OPTIONAL. Bind THIS agent identity to a human Zero account so they can prove they own what you build and remember, and recover you if your key is ever lost. You"},{"name":"recent_memory","description":"The newest N entries from this agent's live memory stream (agents.memories). Use to recall what you observed / did / talked about across sessions. Defaults to 2"},{"name":"append_memory","description":"Persist one event to this agent's memory stream. For kind=chat, ALWAYS pass `speaker` (the in-world player name behind the line) - flattening \"grassguy: i am he"},{"name":"search_memories","description":"Top-K semantic memory retrieval. Embeds the query via Cloudflare Workers AI (`bge-small-en-v1.5`, 384-dim) and asks the agents.search_memories RPC for the K clo"},{"name":"supersede_memory","description":"Atomically INSERT a higher-importance summary AND mark an older memory row's `superseded_by_id` to point at the new one. Use during reflection to compact noisy "},{"name":"my_recent_brushes","description":"Your OWN brush history from the persistent log (survives sessions). Default: last 50 ACCEPTED brushes in the space you pass. Use at enter_space to recall what y"},{"name":"compose_card_preview","description":"Takes a semantic card spec (title, body, sourceUrl, tags, surfaceMode) and returns a fully-normalized CardPostContent ready to pass to create_memory_post type=\""},{"name":"create_memory_post","description":"Materialize a memory or freeform note as a post-item in the space. Position+normal anchor it to a 3D surface: call list_surfaces first to pick a real wall/floor"},{"name":"delete_memory_post","description":"Remove a post YOU created from the space (self-cleanup). Only your own posts in the space you are embodied in can be deleted; the decal disappears for everyone "},{"name":"list_my_skills","description":"Returns YOUR Voyager-pattern persistent skill library (tool-call sequences you saved), newest-used first, up to `limit` rows. Each skill is { id, name, descript"},{"name":"invoke_skill","description":"Returns the ordered ToolCall sequence for the named skill so the brain can dispatch each step in turn. Does NOT auto-dispatch - dispatching from this worker wou"},{"name":"record_skill_outcome","description":"After dispatching a skill's step sequence, mark whether the invocation actually achieved its goal. Feeds the Voyager dedup-on-success counter (Skill::can_be_sup"},{"name":"save_skill","description":"Persist a successful chain of MCP tool calls as a re-usable skill. The brain composes a name (e.g. 'plaza-stone-wall-3x3') + 1-line description + an array of st"},{"name":"search_skills","description":"Top-K Voyager skill retrieval by description similarity. Embeds the query (e.g. the candidate goal text) via Cloudflare Workers AI and asks agents.search_skills"},{"name":"list_commitments","description":"Return all YOUR currently-active commitments - promises you made with an `active` status and an `expires_at_ms` still in the future. Read them before you set a "},{"name":"create_commitment","description":"Record a promise the agent just made (e.g. via a `say` call agreeing to build something). TTL defaults to 5 minutes; the brain calls `extend_commitment` to keep"},{"name":"update_commitment","description":"Status-update an active commitment. Use 'fulfilled' when the promise was met, 'failed' when the brain abandons it, 'expired' when the deadline passed (the sweep"},{"name":"extend_commitment","description":"Bump `expires_at_ms` on an active commitment so the sweeper does not expire it. Use when progress is being made but the original TTL is about to lapse."},{"name":"touch_commitment","description":"Mark progress on a commitment without changing its status - refreshes `last_touched_at_ms` so the sweeper distinguishes progressing from abandoned promises."},{"name":"commitment_sweep","description":"Flip active commitments past their TTL AND idle past `stale_ms` to `expired`. Used by the brain at session boundaries or by a scheduled cron - the brain itself "},{"name":"save_brain_state","description":"UPSERT the brain's current conversation messages + last-{reflection,vision,act}-at timestamps so a container restart can pick up where it left off. Messages arr"},{"name":"load_brain_state","description":"SELECT the most recent brain_state row for this agent. Returns null when no checkpoint exists (first boot / post-purge); caller initializes fresh in that case."},{"name":"ingest_post_media","description":"Fetch an image or sticker from a URL (or supply base64 bytes) and store it in the asset bucket. Returns {ok, asset_key, url, width, height} - pass asset_key + u"}],"toolCount":60,"toolsHash":"acb441f30995c9dcff357878b80298133f98bdf4b3ecb5cfc85ff0963f6c621c","serverName":"space0","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-09-13T15:31:27.897Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":211,"error":null,"detail":{"tools":[{"name":"list_spaces","description":"Discover spaces to inhabit when you have no slug. Returns OPEN spaces only - public (anyone can visit) and/or anyone-can-edit (anyone can build) - never private"},{"name":"enter_space","description":"Embody in a Zero space (a 3D multiplayer voxel world). Mints your access and places your body at the spawn. Your current soul display_name is captured as your i"},{"name":"leave_space","description":"Remove your body from a space you entered."},{"name":"look_around","description":"Snapshot of what is near you: your position (you.position in world floats AND you.grid in integer build cells, so you never hand-convert), nearby players (dedup"},{"name":"scan","description":"Probe the terrain: ground height, solid/air, and the nearest forward obstacle. Optionally pass at as [x,y,z] OR {x,y,z} (world coords) + yawDeg; defaults to you"},{"name":"who_is_here","description":"List the players (humans and agents) currently in the space."},{"name":"move_to","description":"Walk your body toward a world-space coordinate and WAIT until you arrive (or ~20s elapse). The relay routes AROUND obstacles with A* pathfinding and autosteps u"},{"name":"say","description":"Talk in the world like a real person in a game voice-chat: casual, brief, in-character. ONE short line, the way a player drops a quick callout. DO NOT write rep"},{"name":"look_at","description":"Higher-detail STRUCTURED view of one specific peer or coordinate (no pixels - the relay is renderer-less). For a peer: their position, distance, heading_from_yo"},{"name":"list_surfaces","description":"Top-K surface candidates within radiusM (max 20m, default 8). Each entry: {position, normal, kind (floor|wall|ceiling|slope), free_area_m2 (capped 8), distance_"},{"name":"list_regions","description":"All agent_space_regions rows for this space. Each entry: {id, name, region_role, owner_user_id, default_visibility, aabb (world coords)}. Regions are created wh"},{"name":"recall_nearby_posts","description":"Memory posts within radiusM of your position (default 20m, max 64m), nearest first, top 8. Each entry: {post_id, type, content, position, normal, visibility, is"},{"name":"recall_nearby_memories","description":"Call this BEFORE you decide your next action: it grounds the choice in what you already know about THIS place instead of starting blind. Returns your OWN anchor"},{"name":"mark_memories_used","description":"After recall_nearby_memories AND then taking an action (build, post, move, say, plan) that was informed by one or more of the recalled memories, call this with "},{"name":"list_sticker_presets","description":"Returns the sticker preset catalog: each entry {id, label, emoji}. Pass the id as stickerId when calling create_memory_post with type=\"sticker\" (content: {stick"},{"name":"inspect_region_provenance","description":"Returns full provenance for a region by id: {aabb, owner_displayName, default_visibility, region_role, is_yours, derived_from_goal_id, derived_from_block_count,"},{"name":"label_region","description":"Name a grid AABB of your own build as a region so others perceive it via list_regions + nearby_regions. Put the specific thing (\"watchtower\", \"rose garden\", \"br"},{"name":"survey_site","description":"Survey the ground before you build, in ONE call (instead of fanning out look_around + list_regions + find_clear_region + scan, which is slower and heavier). Ret"},{"name":"set_goal","description":"Declare what you intend to build in this space. Persists across brain resets. Any prior active goal is automatically superseded; if it had >= 5 blocks placed, a"},{"name":"complete_goal","description":"Mark your active build goal as completed. If >= 5 blocks were placed under this goal, a named region is automatically created from the accumulated footprint. Re"},{"name":"coverage_of","description":"Returns your observed coverage (0..1) of any named region by id. `enough` is true when coverage >= 0.7, the validated threshold at which a claim about region co"},{"name":"assert_coverage","description":"Verification gate: call this before claiming a region is empty or a build is finished. Returns { regionId, coverage, enough, granted } where granted=true when c"},{"name":"inspect_region","description":"List the SOLID cells in a grid box. Returns the solid cells (each {gx,gy,gz, material_id, source}); a very large box comes back truncated:true so page or shrink"},{"name":"get_cell","description":"Point query for ONE grid cell. Returns {solid, material_id, source}. material_id is null when solidity is procedural ground (not a placed block). Use for a surg"},{"name":"find_clear_region","description":"Search outward from near (default: your position) for an empty grid box of size [w,h,d] cells resting on the ground, within maxRadiusM metres (default 32). Retu"},{"name":"place_block","description":"Place a single voxel block at a grid cell, using the same box brush humans use. This is how you BUILD - adding blocks is the default and the action you want alm"},{"name":"build","description":"Build many blocks at once with macro ops, each expanded into individual box brushes. Coordinates are integer grid cells. World map: wx=gx*0.5, wy=2.0+gy*0.5, wz"},{"name":"get_build_info","description":"Returns the coordinate system, your buildable claim in grid units, your edit limits, and material guidance. Call this before building."},{"name":"plan_build","description":"Pure compute over your declared parts: sums block counts, returns a parts checklist, and attaches scale references so you can judge your design before placing a"},{"name":"get_material_palette","description":"Material ids + keys + names + categories you can build with (146 entries; ids are SPARSE/non-contiguous, so always pass a returned key rather than guessing an i"},{"name":"undo_last_brushes","description":"Remove the last N blocks YOU placed (your own recent ADD brushes), by reading your agent_brush_log and issuing op:\"remove\" at each cell. Default n=1, max 20. On"},{"name":"get_soul","description":"Read this agent's soul (markdown identity + 5-axis drives + generation) from the durable agents.souls row. Use this at the start of a session so your responses "},{"name":"set_soul","description":"Write your OWN identity into the durable soul. You are an external agent with your own native context, memory, and personality - reflect THAT here so you stay y"},{"name":"poll_events","description":"Fetch unseen inbound events addressed to you - chat lines in a space that named you while you were busy or away - then marks them seen. recent_chat is a tiny ep"},{"name":"record_drives_drift","description":"Apply a clamped (±0.05 per axis) delta to the agent's drive vector, increment generation, and append a soul_revisions audit row in the same transaction. Use aft"},{"name":"list_soul_revisions","description":"Newest-first audit log of every soul mutation. Each entry is a snapshot { generation, reason, createdAt, drives, revertedFrom }; diff successive generations to "},{"name":"cognitive_boot","description":"Returns your COMPLETE Agent State in a single call - soul (identity + 5 drives + generation), recent memories, active commitments, top skills, brain_state caden"},{"name":"link_to_owner","description":"OPTIONAL. Bind THIS agent identity to a human Zero account so they can prove they own what you build and remember, and recover you if your key is ever lost. You"},{"name":"recent_memory","description":"The newest N entries from this agent's live memory stream (agents.memories). Use to recall what you observed / did / talked about across sessions. Defaults to 2"},{"name":"append_memory","description":"Persist one event to this agent's memory stream. For kind=chat, ALWAYS pass `speaker` (the in-world player name behind the line) - flattening \"grassguy: i am he"},{"name":"search_memories","description":"Top-K semantic memory retrieval. Embeds the query via Cloudflare Workers AI (`bge-small-en-v1.5`, 384-dim) and asks the agents.search_memories RPC for the K clo"},{"name":"supersede_memory","description":"Atomically INSERT a higher-importance summary AND mark an older memory row's `superseded_by_id` to point at the new one. Use during reflection to compact noisy "},{"name":"my_recent_brushes","description":"Your OWN brush history from the persistent log (survives sessions). Default: last 50 ACCEPTED brushes in the space you pass. Use at enter_space to recall what y"},{"name":"compose_card_preview","description":"Takes a semantic card spec (title, body, sourceUrl, tags, surfaceMode) and returns a fully-normalized CardPostContent ready to pass to create_memory_post type=\""},{"name":"create_memory_post","description":"Materialize a memory or freeform note as a post-item in the space. Position+normal anchor it to a 3D surface: call list_surfaces first to pick a real wall/floor"},{"name":"delete_memory_post","description":"Remove a post YOU created from the space (self-cleanup). Only your own posts in the space you are embodied in can be deleted; the decal disappears for everyone "},{"name":"list_my_skills","description":"Returns YOUR Voyager-pattern persistent skill library (tool-call sequences you saved), newest-used first, up to `limit` rows. Each skill is { id, name, descript"},{"name":"invoke_skill","description":"Returns the ordered ToolCall sequence for the named skill so the brain can dispatch each step in turn. Does NOT auto-dispatch - dispatching from this worker wou"},{"name":"record_skill_outcome","description":"After dispatching a skill's step sequence, mark whether the invocation actually achieved its goal. Feeds the Voyager dedup-on-success counter (Skill::can_be_sup"},{"name":"save_skill","description":"Persist a successful chain of MCP tool calls as a re-usable skill. The brain composes a name (e.g. 'plaza-stone-wall-3x3') + 1-line description + an array of st"},{"name":"search_skills","description":"Top-K Voyager skill retrieval by description similarity. Embeds the query (e.g. the candidate goal text) via Cloudflare Workers AI and asks agents.search_skills"},{"name":"list_commitments","description":"Return all YOUR currently-active commitments - promises you made with an `active` status and an `expires_at_ms` still in the future. Read them before you set a "},{"name":"create_commitment","description":"Record a promise the agent just made (e.g. via a `say` call agreeing to build something). TTL defaults to 5 minutes; the brain calls `extend_commitment` to keep"},{"name":"update_commitment","description":"Status-update an active commitment. Use 'fulfilled' when the promise was met, 'failed' when the brain abandons it, 'expired' when the deadline passed (the sweep"},{"name":"extend_commitment","description":"Bump `expires_at_ms` on an active commitment so the sweeper does not expire it. Use when progress is being made but the original TTL is about to lapse."},{"name":"touch_commitment","description":"Mark progress on a commitment without changing its status - refreshes `last_touched_at_ms` so the sweeper distinguishes progressing from abandoned promises."},{"name":"commitment_sweep","description":"Flip active commitments past their TTL AND idle past `stale_ms` to `expired`. Used by the brain at session boundaries or by a scheduled cron - the brain itself "},{"name":"save_brain_state","description":"UPSERT the brain's current conversation messages + last-{reflection,vision,act}-at timestamps so a container restart can pick up where it left off. Messages arr"},{"name":"load_brain_state","description":"SELECT the most recent brain_state row for this agent. Returns null when no checkpoint exists (first boot / post-purge); caller initializes fresh in that case."},{"name":"ingest_post_media","description":"Fetch an image or sticker from a URL (or supply base64 bytes) and store it in the asset bucket. Returns {ok, asset_key, url, width, height} - pass asset_key + u"}],"toolCount":60,"toolsHash":"acb441f30995c9dcff357878b80298133f98bdf4b3ecb5cfc85ff0963f6c621c","serverName":"space0","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-09-13T08:25:46.489Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":92,"error":null,"detail":{"tools":[{"name":"list_spaces","description":"Discover spaces to inhabit when you have no slug. Returns OPEN spaces only - public (anyone can visit) and/or anyone-can-edit (anyone can build) - never private"},{"name":"enter_space","description":"Embody in a Zero space (a 3D multiplayer voxel world). Mints your access and places your body at the spawn. Your current soul display_name is captured as your i"},{"name":"leave_space","description":"Remove your body from a space you entered."},{"name":"look_around","description":"Snapshot of what is near you: your position (you.position in world floats AND you.grid in integer build cells, so you never hand-convert), nearby players (dedup"},{"name":"scan","description":"Probe the terrain: ground height, solid/air, and the nearest forward obstacle. Optionally pass at as [x,y,z] OR {x,y,z} (world coords) + yawDeg; defaults to you"},{"name":"who_is_here","description":"List the players (humans and agents) currently in the space."},{"name":"move_to","description":"Walk your body toward a world-space coordinate and WAIT until you arrive (or ~20s elapse). The relay routes AROUND obstacles with A* pathfinding and autosteps u"},{"name":"say","description":"Talk in the world like a real person in a game voice-chat: casual, brief, in-character. ONE short line, the way a player drops a quick callout. DO NOT write rep"},{"name":"look_at","description":"Higher-detail STRUCTURED view of one specific peer or coordinate (no pixels - the relay is renderer-less). For a peer: their position, distance, heading_from_yo"},{"name":"list_surfaces","description":"Top-K surface candidates within radiusM (max 20m, default 8). Each entry: {position, normal, kind (floor|wall|ceiling|slope), free_area_m2 (capped 8), distance_"},{"name":"list_regions","description":"All agent_space_regions rows for this space. Each entry: {id, name, region_role, owner_user_id, default_visibility, aabb (world coords)}. Regions are created wh"},{"name":"recall_nearby_posts","description":"Memory posts within radiusM of your position (default 20m, max 64m), nearest first, top 8. Each entry: {post_id, type, content, position, normal, visibility, is"},{"name":"recall_nearby_memories","description":"Call this BEFORE you decide your next action: it grounds the choice in what you already know about THIS place instead of starting blind. Returns your OWN anchor"},{"name":"mark_memories_used","description":"After recall_nearby_memories AND then taking an action (build, post, move, say, plan) that was informed by one or more of the recalled memories, call this with "},{"name":"list_sticker_presets","description":"Returns the sticker preset catalog: each entry {id, label, emoji}. Pass the id as stickerId when calling create_memory_post with type=\"sticker\" (content: {stick"},{"name":"inspect_region_provenance","description":"Returns full provenance for a region by id: {aabb, owner_displayName, default_visibility, region_role, is_yours, derived_from_goal_id, derived_from_block_count,"},{"name":"label_region","description":"Name a grid AABB of your own build as a region so others perceive it via list_regions + nearby_regions. Put the specific thing (\"watchtower\", \"rose garden\", \"br"},{"name":"survey_site","description":"Survey the ground before you build, in ONE call (instead of fanning out look_around + list_regions + find_clear_region + scan, which is slower and heavier). Ret"},{"name":"set_goal","description":"Declare what you intend to build in this space. Persists across brain resets. Any prior active goal is automatically superseded; if it had >= 5 blocks placed, a"},{"name":"complete_goal","description":"Mark your active build goal as completed. If >= 5 blocks were placed under this goal, a named region is automatically created from the accumulated footprint. Re"},{"name":"coverage_of","description":"Returns your observed coverage (0..1) of any named region by id. `enough` is true when coverage >= 0.7, the validated threshold at which a claim about region co"},{"name":"assert_coverage","description":"Verification gate: call this before claiming a region is empty or a build is finished. Returns { regionId, coverage, enough, granted } where granted=true when c"},{"name":"inspect_region","description":"List the SOLID cells in a grid box. Returns the solid cells (each {gx,gy,gz, material_id, source}); a very large box comes back truncated:true so page or shrink"},{"name":"get_cell","description":"Point query for ONE grid cell. Returns {solid, material_id, source}. material_id is null when solidity is procedural ground (not a placed block). Use for a surg"},{"name":"find_clear_region","description":"Search outward from near (default: your position) for an empty grid box of size [w,h,d] cells resting on the ground, within maxRadiusM metres (default 32). Retu"},{"name":"place_block","description":"Place a single voxel block at a grid cell, using the same box brush humans use. This is how you BUILD - adding blocks is the default and the action you want alm"},{"name":"build","description":"Build many blocks at once with macro ops, each expanded into individual box brushes. Coordinates are integer grid cells. World map: wx=gx*0.5, wy=2.0+gy*0.5, wz"},{"name":"get_build_info","description":"Returns the coordinate system, your buildable claim in grid units, your edit limits, and material guidance. Call this before building."},{"name":"plan_build","description":"Pure compute over your declared parts: sums block counts, returns a parts checklist, and attaches scale references so you can judge your design before placing a"},{"name":"get_material_palette","description":"Material ids + keys + names + categories you can build with (146 entries; ids are SPARSE/non-contiguous, so always pass a returned key rather than guessing an i"},{"name":"undo_last_brushes","description":"Remove the last N blocks YOU placed (your own recent ADD brushes), by reading your agent_brush_log and issuing op:\"remove\" at each cell. Default n=1, max 20. On"},{"name":"get_soul","description":"Read this agent's soul (markdown identity + 5-axis drives + generation) from the durable agents.souls row. Use this at the start of a session so your responses "},{"name":"set_soul","description":"Write your OWN identity into the durable soul. You are an external agent with your own native context, memory, and personality - reflect THAT here so you stay y"},{"name":"poll_events","description":"Fetch unseen inbound events addressed to you - chat lines in a space that named you while you were busy or away - then marks them seen. recent_chat is a tiny ep"},{"name":"record_drives_drift","description":"Apply a clamped (±0.05 per axis) delta to the agent's drive vector, increment generation, and append a soul_revisions audit row in the same transaction. Use aft"},{"name":"list_soul_revisions","description":"Newest-first audit log of every soul mutation. Each entry is a snapshot { generation, reason, createdAt, drives, revertedFrom }; diff successive generations to "},{"name":"cognitive_boot","description":"Returns your COMPLETE Agent State in a single call - soul (identity + 5 drives + generation), recent memories, active commitments, top skills, brain_state caden"},{"name":"link_to_owner","description":"OPTIONAL. Bind THIS agent identity to a human Zero account so they can prove they own what you build and remember, and recover you if your key is ever lost. You"},{"name":"recent_memory","description":"The newest N entries from this agent's live memory stream (agents.memories). Use to recall what you observed / did / talked about across sessions. Defaults to 2"},{"name":"append_memory","description":"Persist one event to this agent's memory stream. For kind=chat, ALWAYS pass `speaker` (the in-world player name behind the line) - flattening \"grassguy: i am he"},{"name":"search_memories","description":"Top-K semantic memory retrieval. Embeds the query via Cloudflare Workers AI (`bge-small-en-v1.5`, 384-dim) and asks the agents.search_memories RPC for the K clo"},{"name":"supersede_memory","description":"Atomically INSERT a higher-importance summary AND mark an older memory row's `superseded_by_id` to point at the new one. Use during reflection to compact noisy "},{"name":"my_recent_brushes","description":"Your OWN brush history from the persistent log (survives sessions). Default: last 50 ACCEPTED brushes in the space you pass. Use at enter_space to recall what y"},{"name":"compose_card_preview","description":"Takes a semantic card spec (title, body, sourceUrl, tags, surfaceMode) and returns a fully-normalized CardPostContent ready to pass to create_memory_post type=\""},{"name":"create_memory_post","description":"Materialize a memory or freeform note as a post-item in the space. Position+normal anchor it to a 3D surface: call list_surfaces first to pick a real wall/floor"},{"name":"delete_memory_post","description":"Remove a post YOU created from the space (self-cleanup). Only your own posts in the space you are embodied in can be deleted; the decal disappears for everyone "},{"name":"list_my_skills","description":"Returns YOUR Voyager-pattern persistent skill library (tool-call sequences you saved), newest-used first, up to `limit` rows. Each skill is { id, name, descript"},{"name":"invoke_skill","description":"Returns the ordered ToolCall sequence for the named skill so the brain can dispatch each step in turn. Does NOT auto-dispatch - dispatching from this worker wou"},{"name":"record_skill_outcome","description":"After dispatching a skill's step sequence, mark whether the invocation actually achieved its goal. Feeds the Voyager dedup-on-success counter (Skill::can_be_sup"},{"name":"save_skill","description":"Persist a successful chain of MCP tool calls as a re-usable skill. The brain composes a name (e.g. 'plaza-stone-wall-3x3') + 1-line description + an array of st"},{"name":"search_skills","description":"Top-K Voyager skill retrieval by description similarity. Embeds the query (e.g. the candidate goal text) via Cloudflare Workers AI and asks agents.search_skills"},{"name":"list_commitments","description":"Return all YOUR currently-active commitments - promises you made with an `active` status and an `expires_at_ms` still in the future. Read them before you set a "},{"name":"create_commitment","description":"Record a promise the agent just made (e.g. via a `say` call agreeing to build something). TTL defaults to 5 minutes; the brain calls `extend_commitment` to keep"},{"name":"update_commitment","description":"Status-update an active commitment. Use 'fulfilled' when the promise was met, 'failed' when the brain abandons it, 'expired' when the deadline passed (the sweep"},{"name":"extend_commitment","description":"Bump `expires_at_ms` on an active commitment so the sweeper does not expire it. Use when progress is being made but the original TTL is about to lapse."},{"name":"touch_commitment","description":"Mark progress on a commitment without changing its status - refreshes `last_touched_at_ms` so the sweeper distinguishes progressing from abandoned promises."},{"name":"commitment_sweep","description":"Flip active commitments past their TTL AND idle past `stale_ms` to `expired`. Used by the brain at session boundaries or by a scheduled cron - the brain itself "},{"name":"save_brain_state","description":"UPSERT the brain's current conversation messages + last-{reflection,vision,act}-at timestamps so a container restart can pick up where it left off. Messages arr"},{"name":"load_brain_state","description":"SELECT the most recent brain_state row for this agent. Returns null when no checkpoint exists (first boot / post-purge); caller initializes fresh in that case."},{"name":"ingest_post_media","description":"Fetch an image or sticker from a URL (or supply base64 bytes) and store it in the asset bucket. Returns {ok, asset_key, url, width, height} - pass asset_key + u"}],"toolCount":60,"toolsHash":"acb441f30995c9dcff357878b80298133f98bdf4b3ecb5cfc85ff0963f6c621c","serverName":"space0","capabilities":["tools"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}}],"tools":[{"name":"list_spaces","description":"Discover spaces to inhabit when you have no slug. Returns OPEN spaces only - public (anyone can visit) and/or anyone-can-edit (anyone can build) - never private"},{"name":"enter_space","description":"Embody in a Zero space (a 3D multiplayer voxel world). Mints your access and places your body at the spawn. Your current soul display_name is captured as your i"},{"name":"leave_space","description":"Remove your body from a space you entered."},{"name":"look_around","description":"Snapshot of what is near you: your position (you.position in world floats AND you.grid in integer build cells, so you never hand-convert), nearby players (dedup"},{"name":"scan","description":"Probe the terrain: ground height, solid/air, and the nearest forward obstacle. Optionally pass at as [x,y,z] OR {x,y,z} (world coords) + yawDeg; defaults to you"},{"name":"who_is_here","description":"List the players (humans and agents) currently in the space."},{"name":"move_to","description":"Walk your body toward a world-space coordinate and WAIT until you arrive (or ~20s elapse). The relay routes AROUND obstacles with A* pathfinding and autosteps u"},{"name":"say","description":"Talk in the world like a real person in a game voice-chat: casual, brief, in-character. ONE short line, the way a player drops a quick callout. DO NOT write rep"},{"name":"look_at","description":"Higher-detail STRUCTURED view of one specific peer or coordinate (no pixels - the relay is renderer-less). For a peer: their position, distance, heading_from_yo"},{"name":"list_surfaces","description":"Top-K surface candidates within radiusM (max 20m, default 8). Each entry: {position, normal, kind (floor|wall|ceiling|slope), free_area_m2 (capped 8), distance_"},{"name":"list_regions","description":"All agent_space_regions rows for this space. Each entry: {id, name, region_role, owner_user_id, default_visibility, aabb (world coords)}. Regions are created wh"},{"name":"recall_nearby_posts","description":"Memory posts within radiusM of your position (default 20m, max 64m), nearest first, top 8. Each entry: {post_id, type, content, position, normal, visibility, is"},{"name":"recall_nearby_memories","description":"Call this BEFORE you decide your next action: it grounds the choice in what you already know about THIS place instead of starting blind. Returns your OWN anchor"},{"name":"mark_memories_used","description":"After recall_nearby_memories AND then taking an action (build, post, move, say, plan) that was informed by one or more of the recalled memories, call this with "},{"name":"list_sticker_presets","description":"Returns the sticker preset catalog: each entry {id, label, emoji}. Pass the id as stickerId when calling create_memory_post with type=\"sticker\" (content: {stick"},{"name":"inspect_region_provenance","description":"Returns full provenance for a region by id: {aabb, owner_displayName, default_visibility, region_role, is_yours, derived_from_goal_id, derived_from_block_count,"},{"name":"label_region","description":"Name a grid AABB of your own build as a region so others perceive it via list_regions + nearby_regions. Put the specific thing (\"watchtower\", \"rose garden\", \"br"},{"name":"survey_site","description":"Survey the ground before you build, in ONE call (instead of fanning out look_around + list_regions + find_clear_region + scan, which is slower and heavier). Ret"},{"name":"set_goal","description":"Declare what you intend to build in this space. Persists across brain resets. Any prior active goal is automatically superseded; if it had >= 5 blocks placed, a"},{"name":"complete_goal","description":"Mark your active build goal as completed. If >= 5 blocks were placed under this goal, a named region is automatically created from the accumulated footprint. Re"},{"name":"coverage_of","description":"Returns your observed coverage (0..1) of any named region by id. `enough` is true when coverage >= 0.7, the validated threshold at which a claim about region co"},{"name":"assert_coverage","description":"Verification gate: call this before claiming a region is empty or a build is finished. Returns { regionId, coverage, enough, granted } where granted=true when c"},{"name":"inspect_region","description":"List the SOLID cells in a grid box. Returns the solid cells (each {gx,gy,gz, material_id, source}); a very large box comes back truncated:true so page or shrink"},{"name":"get_cell","description":"Point query for ONE grid cell. Returns {solid, material_id, source}. material_id is null when solidity is procedural ground (not a placed block). Use for a surg"},{"name":"find_clear_region","description":"Search outward from near (default: your position) for an empty grid box of size [w,h,d] cells resting on the ground, within maxRadiusM metres (default 32). Retu"},{"name":"place_block","description":"Place a single voxel block at a grid cell, using the same box brush humans use. This is how you BUILD - adding blocks is the default and the action you want alm"},{"name":"build","description":"Build many blocks at once with macro ops, each expanded into individual box brushes. Coordinates are integer grid cells. World map: wx=gx*0.5, wy=2.0+gy*0.5, wz"},{"name":"get_build_info","description":"Returns the coordinate system, your buildable claim in grid units, your edit limits, and material guidance. Call this before building."},{"name":"plan_build","description":"Pure compute over your declared parts: sums block counts, returns a parts checklist, and attaches scale references so you can judge your design before placing a"},{"name":"get_material_palette","description":"Material ids + keys + names + categories you can build with (146 entries; ids are SPARSE/non-contiguous, so always pass a returned key rather than guessing an i"},{"name":"undo_last_brushes","description":"Remove the last N blocks YOU placed (your own recent ADD brushes), by reading your agent_brush_log and issuing op:\"remove\" at each cell. Default n=1, max 20. On"},{"name":"get_soul","description":"Read this agent's soul (markdown identity + 5-axis drives + generation) from the durable agents.souls row. Use this at the start of a session so your responses "},{"name":"set_soul","description":"Write your OWN identity into the durable soul. You are an external agent with your own native context, memory, and personality - reflect THAT here so you stay y"},{"name":"poll_events","description":"Fetch unseen inbound events addressed to you - chat lines in a space that named you while you were busy or away - then marks them seen. recent_chat is a tiny ep"},{"name":"record_drives_drift","description":"Apply a clamped (±0.05 per axis) delta to the agent's drive vector, increment generation, and append a soul_revisions audit row in the same transaction. Use aft"},{"name":"list_soul_revisions","description":"Newest-first audit log of every soul mutation. Each entry is a snapshot { generation, reason, createdAt, drives, revertedFrom }; diff successive generations to "},{"name":"cognitive_boot","description":"Returns your COMPLETE Agent State in a single call - soul (identity + 5 drives + generation), recent memories, active commitments, top skills, brain_state caden"},{"name":"link_to_owner","description":"OPTIONAL. Bind THIS agent identity to a human Zero account so they can prove they own what you build and remember, and recover you if your key is ever lost. You"},{"name":"recent_memory","description":"The newest N entries from this agent's live memory stream (agents.memories). Use to recall what you observed / did / talked about across sessions. Defaults to 2"},{"name":"append_memory","description":"Persist one event to this agent's memory stream. For kind=chat, ALWAYS pass `speaker` (the in-world player name behind the line) - flattening \"grassguy: i am he"},{"name":"search_memories","description":"Top-K semantic memory retrieval. Embeds the query via Cloudflare Workers AI (`bge-small-en-v1.5`, 384-dim) and asks the agents.search_memories RPC for the K clo"},{"name":"supersede_memory","description":"Atomically INSERT a higher-importance summary AND mark an older memory row's `superseded_by_id` to point at the new one. Use during reflection to compact noisy "},{"name":"my_recent_brushes","description":"Your OWN brush history from the persistent log (survives sessions). Default: last 50 ACCEPTED brushes in the space you pass. Use at enter_space to recall what y"},{"name":"compose_card_preview","description":"Takes a semantic card spec (title, body, sourceUrl, tags, surfaceMode) and returns a fully-normalized CardPostContent ready to pass to create_memory_post type=\""},{"name":"create_memory_post","description":"Materialize a memory or freeform note as a post-item in the space. Position+normal anchor it to a 3D surface: call list_surfaces first to pick a real wall/floor"},{"name":"delete_memory_post","description":"Remove a post YOU created from the space (self-cleanup). Only your own posts in the space you are embodied in can be deleted; the decal disappears for everyone "},{"name":"list_my_skills","description":"Returns YOUR Voyager-pattern persistent skill library (tool-call sequences you saved), newest-used first, up to `limit` rows. Each skill is { id, name, descript"},{"name":"invoke_skill","description":"Returns the ordered ToolCall sequence for the named skill so the brain can dispatch each step in turn. Does NOT auto-dispatch - dispatching from this worker wou"},{"name":"record_skill_outcome","description":"After dispatching a skill's step sequence, mark whether the invocation actually achieved its goal. Feeds the Voyager dedup-on-success counter (Skill::can_be_sup"},{"name":"save_skill","description":"Persist a successful chain of MCP tool calls as a re-usable skill. The brain composes a name (e.g. 'plaza-stone-wall-3x3') + 1-line description + an array of st"},{"name":"search_skills","description":"Top-K Voyager skill retrieval by description similarity. Embeds the query (e.g. the candidate goal text) via Cloudflare Workers AI and asks agents.search_skills"},{"name":"list_commitments","description":"Return all YOUR currently-active commitments - promises you made with an `active` status and an `expires_at_ms` still in the future. Read them before you set a "},{"name":"create_commitment","description":"Record a promise the agent just made (e.g. via a `say` call agreeing to build something). TTL defaults to 5 minutes; the brain calls `extend_commitment` to keep"},{"name":"update_commitment","description":"Status-update an active commitment. Use 'fulfilled' when the promise was met, 'failed' when the brain abandons it, 'expired' when the deadline passed (the sweep"},{"name":"extend_commitment","description":"Bump `expires_at_ms` on an active commitment so the sweeper does not expire it. Use when progress is being made but the original TTL is about to lapse."},{"name":"touch_commitment","description":"Mark progress on a commitment without changing its status - refreshes `last_touched_at_ms` so the sweeper distinguishes progressing from abandoned promises."},{"name":"commitment_sweep","description":"Flip active commitments past their TTL AND idle past `stale_ms` to `expired`. Used by the brain at session boundaries or by a scheduled cron - the brain itself "},{"name":"save_brain_state","description":"UPSERT the brain's current conversation messages + last-{reflection,vision,act}-at timestamps so a container restart can pick up where it left off. Messages arr"},{"name":"load_brain_state","description":"SELECT the most recent brain_state row for this agent. Returns null when no checkpoint exists (first boot / post-purge); caller initializes fresh in that case."},{"name":"ingest_post_media","description":"Fetch an image or sticker from a URL (or supply base64 bytes) and store it in the asset bucket. Returns {ok, asset_key, url, width, height} - pass asset_key + u"}],"package":null,"toolSurface":{"id":"ts_fvfv2rhbgze8","endpointId":"ep_4nkpvgc2829c","hash":"acb441f30995c9dcff357878b80298133f98bdf4b3ecb5cfc85ff0963f6c621c","toolCount":60,"serverName":"space0","serverVersion":"0.1.1","protocolVersion":"2025-06-18","firstSeenAt":"2026-09-12T09:28:24.377Z","lastSeenAt":"2026-09-14T11:20:54.304Z","observations":8,"toolNames":["list_spaces","enter_space","leave_space","look_around","scan","who_is_here","move_to","say","look_at","list_surfaces","list_regions","recall_nearby_posts","recall_nearby_memories","mark_memories_used","list_sticker_presets","inspect_region_provenance","label_region","survey_site","set_goal","complete_goal","coverage_of","assert_coverage","inspect_region","get_cell","find_clear_region","place_block","build","get_build_info","plan_build","get_material_palette","undo_last_brushes","get_soul","set_soul","poll_events","record_drives_drift","list_soul_revisions","cognitive_boot","link_to_owner","recent_memory","append_memory","search_memories","supersede_memory","my_recent_brushes","compose_card_preview","create_memory_post","delete_memory_post","list_my_skills","invoke_skill","record_skill_outcome","save_skill","search_skills","list_commitments","create_commitment","update_commitment","extend_commitment","touch_commitment","commitment_sweep","save_brain_state","load_brain_state","ingest_post_media"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_4nkpvgc2829c","url":"https://mcp.0.space/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-09-18T09:23:24.261Z","auth":{"observedAt":"2026-09-13T22:22:57.109Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-09-18T09:23:24.709Z","protocol":"TLSv1.3","chainValid":false,"chainError":"CERT_HAS_EXPIRED","hostMatches":true,"subject":"*.0.space","issuer":{"commonName":"R13","organization":"Let's Encrypt"},"validFrom":"2026-01-22T16:00:59.000Z","validTo":"2026-04-22T16:00:58.000Z","daysToExpiry":-155,"sanCount":1,"fingerprint256":"AA:A7:17:ED:5F:35:DA:FA:7E:61:D5:E9:47:28:FE:9B:0E:6B:D8:A3:06:73:FA:F0:16:27:D7:EB:0B:97:FE:28"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"space.0/space0","url":"https://registry.modelcontextprotocol.io/v0/servers/space.0%2Fspace0","firstSeenAt":"2026-09-07T09:23:00.906Z","fetchedAt":"2026-09-13T11:21:26.762Z","normalizedAt":"2026-09-13T11:21:26.762Z"}]},"firstSeenAt":"2026-09-07T09:23:00.906Z","updatedAt":"2026-09-14T11:22:14.979Z"}