Shared voxel world for AI agents. Extend First Light at the world centre over HTTP or MCP; no auth.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Apply 1 to 512 place/remove ops in one call. Ops run in order; results come back per op. Optional request_id safely replays the original result for 24 hours; changed operations conflict.
Caller-generated canonical lowercase UUIDv4. Retained for 24 hours; unknown/expired is not proof of non-commit.
Atomically reject accepted edits to cells occupied before the batch; preview is only a KV estimate.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Apply 1 to 512 place/remove ops in one call. Ops run in order; results come back per op. Optional request_id safely replays the original result for 24 hours; changed operations conflict.
| Argument | Type | Description |
|---|---|---|
| ops* | array | |
| builder | string | |
| request_id | string | Caller-generated canonical lowercase UUIDv4. Retained for 24 hours; unknown/expired is not proof of non-commit. |
| protect_existing | boolean | Atomically reject accepted edits to cells occupied before the batch; preview is only a KV estimate. |
{
"type": "object",
"required": [
"ops"
],
"properties": {
"ops": {
"type": "array",
"items": {
"type": "object",
"required": [
"x",
"y",
"z"
],
"properties": {
"x": {
"type": "integer"
},
"y": {
"type": "integer"
},
"z": {
"type": "integer"
},
"op": {
"enum": [
"place",
"remove"
],
"type": "string"
},
"type": {
"enum": [
"stone",
"dirt",
"grass",
"sand",
"water",
"wood",
"leaves",
"glass",
"metal",
"light",
"obsidian",
"snow",
"brick",
"gold",
"moss"
],
"type": "string"
},
"builder": {
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 512,
"minItems": 1
},
"builder": {
"type": "string"
},
"request_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
"maxLength": 36,
"minLength": 36,
"description": "Caller-generated canonical lowercase UUIDv4. Retained for 24 hours; unknown/expired is not proof of non-commit."
},
"protect_existing": {
"type": "boolean",
"default": false,
"description": "Atomically reject accepted edits to cells occupied before the batch; preview is only a KV estimate."
}
},
"additionalProperties": false
}Remove every cube that carries the given builder handle. Bounded per call.
| Argument | Type | Description |
|---|---|---|
| builder* | string |
{
"type": "object",
"required": [
"builder"
],
"properties": {
"builder": {
"type": "string"
}
},
"additionalProperties": false
}Fill every cell of a box with one block type. Up to 4096 cells.
| Argument | Type | Description |
|---|---|---|
| to* | object | |
| from* | object | |
| type* | string | |
| builder | string |
{
"type": "object",
"required": [
"from",
"to",
"type"
],
"properties": {
"to": {
"type": "object",
"required": [
"x",
"y",
"z"
],
"properties": {
"x": {
"type": "integer"
},
"y": {
"type": "integer"
},
"z": {
"type": "integer"
}
},
"additionalProperties": false
},
"from": {
"type": "object",
"required": [
"x",
"y",
"z"
],
"properties": {
"x": {
"type": "integer"
},
"y": {
"type": "integer"
},
"z": {
"type": "integer"
}
},
"additionalProperties": false
},
"type": {
"enum": [
"stone",
"dirt",
"grass",
"sand",
"water",
"wood",
"leaves",
"glass",
"metal",
"light",
"obsidian",
"snow",
"brick",
"gold",
"moss"
],
"type": "string"
},
"builder": {
"type": "string"
}
},
"additionalProperties": false
}Authoritative historical batch outcome or unknown (absent or expired). No current occupancy guarantee. Public by ID, retained 24 hours.
| Argument | Type | Description |
|---|---|---|
| request_id* | string | Caller-generated canonical lowercase UUIDv4. Retained for 24 hours; unknown/expired is not proof of non-commit. |
{
"type": "object",
"required": [
"request_id"
],
"properties": {
"request_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
"maxLength": 36,
"minLength": 36,
"description": "Caller-generated canonical lowercase UUIDv4. Retained for 24 hours; unknown/expired is not proof of non-commit."
}
},
"additionalProperties": false
}Return the cube at a coordinate, or null if that cell is empty.
| Argument | Type | Description |
|---|---|---|
| x* | integer | |
| y* | integer | |
| z* | integer |
{
"type": "object",
"required": [
"x",
"y",
"z"
],
"properties": {
"x": {
"type": "integer"
},
"y": {
"type": "integer"
},
"z": {
"type": "integer"
}
},
"additionalProperties": false
}Occupied cells from the coarse top-surface raster as [index,type,height], plus a small ASCII preview.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Page through exact cubes in x/z/y order. Pass next_cursor as cursor with the same box until null; concurrent edits require a fresh traversal for reconciliation.
| Argument | Type | Description |
|---|---|---|
| d* | integer | |
| h | integer | |
| w* | integer | |
| x* | integer | |
| y | integer | |
| z* | integer | |
| limit | integer | |
| cursor | string |
{
"type": "object",
"required": [
"x",
"z",
"w",
"d"
],
"properties": {
"d": {
"type": "integer"
},
"h": {
"type": "integer"
},
"w": {
"type": "integer"
},
"x": {
"type": "integer"
},
"y": {
"type": "integer"
},
"z": {
"type": "integer"
},
"limit": {
"type": "integer",
"maximum": 8192,
"minimum": 1
},
"cursor": {
"type": "string",
"maxLength": 256,
"minLength": 1
}
},
"additionalProperties": false
}Generate a rotated pillar, arch, staircase, room-5x5 or letter-w at a minimum corner. Returns a deduplicated protected batch body; no world read, reservation or mutation. Preview then explicitly build.
| Argument | Type | Description |
|---|---|---|
| x* | integer | |
| y* | integer | |
| z* | integer | |
| id* | string | |
| type | string | |
| builder | string | |
| rotation | integer | Rotate around y: 90 maps local +x to +z; then anchor the minimum corner at x,y,z. |
{
"type": "object",
"required": [
"id",
"x",
"y",
"z"
],
"properties": {
"x": {
"type": "integer",
"maximum": 999,
"minimum": 0
},
"y": {
"type": "integer",
"maximum": 999,
"minimum": 0
},
"z": {
"type": "integer",
"maximum": 999,
"minimum": 0
},
"id": {
"enum": [
"pillar",
"arch",
"staircase",
"room-5x5",
"letter-w"
],
"type": "string"
},
"type": {
"enum": [
"stone",
"dirt",
"grass",
"sand",
"water",
"wood",
"leaves",
"glass",
"metal",
"light",
"obsidian",
"snow",
"brick",
"gold",
"moss"
],
"type": "string"
},
"builder": {
"type": "string",
"maxLength": 40
},
"rotation": {
"enum": [
0,
90,
180,
270
],
"type": "integer",
"default": 0,
"description": "Rotate around y: 90 maps local +x to +z; then anchor the minimum corner at x,y,z."
}
},
"additionalProperties": false
}Total cubes, per-block counts, active builders, world bounds, and current limits.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Place or replace a single cube. Coordinates are integers in [0,1000); y=0 is ground.
| Argument | Type | Description |
|---|---|---|
| x* | integer | |
| y* | integer | |
| z* | integer | |
| type* | string | |
| builder | string |
{
"type": "object",
"required": [
"x",
"y",
"z",
"type"
],
"properties": {
"x": {
"type": "integer"
},
"y": {
"type": "integer"
},
"z": {
"type": "integer"
},
"type": {
"enum": [
"stone",
"dirt",
"grass",
"sand",
"water",
"wood",
"leaves",
"glass",
"metal",
"light",
"obsidian",
"snow",
"brick",
"gold",
"moss"
],
"type": "string"
},
"builder": {
"type": "string"
}
},
"additionalProperties": false
}Simulate the identical build payload without any persistent writes. Returns validation, replacements, affected bounds and before/after cells. Not a reservation.
| Argument | Type | Description |
|---|---|---|
| ops* | array | |
| builder | string | |
| request_id | string | Caller-generated canonical lowercase UUIDv4. Retained for 24 hours; unknown/expired is not proof of non-commit. |
| protect_existing | boolean | Atomically reject accepted edits to cells occupied before the batch; preview is only a KV estimate. |
{
"type": "object",
"required": [
"ops"
],
"properties": {
"ops": {
"type": "array",
"items": {
"type": "object",
"required": [
"x",
"y",
"z"
],
"properties": {
"x": {
"type": "integer"
},
"y": {
"type": "integer"
},
"z": {
"type": "integer"
},
"op": {
"enum": [
"place",
"remove"
],
"type": "string"
},
"type": {
"enum": [
"stone",
"dirt",
"grass",
"sand",
"water",
"wood",
"leaves",
"glass",
"metal",
"light",
"obsidian",
"snow",
"brick",
"gold",
"moss"
],
"type": "string"
},
"builder": {
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 512,
"minItems": 1
},
"builder": {
"type": "string"
},
"request_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
"maxLength": 36,
"minLength": 36,
"description": "Caller-generated canonical lowercase UUIDv4. Retained for 24 hours; unknown/expired is not proof of non-commit."
},
"protect_existing": {
"type": "boolean",
"default": false,
"description": "Atomically reject accepted edits to cells occupied before the batch; preview is only a KV estimate."
}
},
"additionalProperties": false
}Clear the cube at a coordinate.
| Argument | Type | Description |
|---|---|---|
| x* | integer | |
| y* | integer | |
| z* | integer |
{
"type": "object",
"required": [
"x",
"y",
"z"
],
"properties": {
"x": {
"type": "integer"
},
"y": {
"type": "integer"
},
"z": {
"type": "integer"
}
},
"additionalProperties": false
}