had3d MCP docs
Worldly for agents

Build a world
with a conversation.

Worldly MCP connects an AI partner to your projects and scenes. It can inspect a scene, enter the editor as a named collaborator, and move its camera in realtime.

01

Your project access

The connection sees the same projects and scenes your Worldly account can open.

02

Collaborative by default

Each agent is a distinct peer with a visible camera, colour, and name tag.

03

Read-only first

The initial tools inspect scene content and update presence; they cannot edit a scene.

Start here

Connect an MCP client

Add the hosted endpoint to a remote-MCP client. The client opens Worldly in your browser, where you sign in and approve its read and presence permissions.

Hosted endpoint

Use https://mcp.had3d.app/mcp. Authentication is discovered by the client and completed through the Worldly editor; no API key is copied into a prompt.

Developer preview

Connect in three steps

  1. 1
    Add the server

    Enter https://mcp.had3d.app/mcp in a client that supports remote MCP.

  2. 2
    Approve access

    Sign in at the Worldly editor and review the requested read and presence scopes.

  3. 3
    Connect a partner

    Choose a name—or use Agent—then enter a scene and move its camera.

Architecture

Agents are collaborators,
not a second write path.

MCP uses Worldly membership data and the existing per-project room. Scene reads come from the same stored document the editor opens, while camera presence is broadcast through the same peer channel used by people.

Why this matters

A city generated by an agent uses the same validation, conflict handling, run attribution, and undo stack as a city generated from the editor.

Developer preview

Tool catalog

6 tools

The first tool set establishes authenticated access, read-only scene inspection, and editor-visible camera presence. Identity is handled automatically on connect.

Project access3
list_projects

List every project the connected account can access.

list_scenes

List the scenes in one project.

inspect_scene

Read scene structure with paged entities.

Editor presence3
connect_agent

Enter a scene with an optional name, defaulting to Agent.

move_camera

Move its position, look target, and lens in realtime.

disconnect_agent

Remove it from the project room immediately.

Shared editor

A partner you can see.

Connecting an agent publishes a synthetic camera through the project room. Every editor on that scene sees the same frustum and name tag update.

Visible presence “Scout is looking here”
  • Distinct agent identity
  • Realtime camera updates
  • Scene-specific name tag
Not exposed Scene mutations
  • No raw entity writes
  • No whole-document overwrite
  • No bypass around project membership
Next phase

Scene editing comes
through collaboration.

Generator and scene-editing tools are intentionally not exposed in the first phase. They will arrive after collaborative operations can attribute, validate, and undo an agent change through the project room.

generator.ts

const cityGrid = {
  id: "roads.cityGrid",
  description: "Create a seeded city road network…",
  params: z.object({
    seed: z.number(),
    blockSize: z.number().default(120),
  }),
  run(params, context) { /* emit entities */ },
};

registry.registerGenerator(cityGrid);
Example

Tool schema

Tools have stable names, descriptions written for a client that may not see the viewport, and strict JSON Schema inputs.

tools/list

{
  "name": "move_camera",
  "description": "Move a connected agent camera…",
  "inputSchema": {
    "type": "object",
    "properties": {
      "position": { "type": "array", "minItems": 3 },
      "target": { "type": "array", "minItems": 3 }
    },
    "required": ["position", "target"]
  }
}
defaults

Up and lens have useful editor defaults.

vectors

Position and target are three-number world coordinates.

descriptions

Written for an agent that may not see the viewport.

Reference

Errors

Failures are reported at the tool boundary and do not mutate scene documents.

invalid arguments

A required id or camera value is absent or has the wrong shape.

not accessible

The project or agent is not available to the connected account.

not connected

Move was called before the agent entered a scene.

expired authorization

The browser consent request was not completed within ten minutes.

Trust & access

Account access, checked per project.

OAuth grants read and presence scopes to your account. Every tool still checks current project membership and agent ownership; credentials never enter a scene or prompt.

01Explicit consent

Approve read and presence scopes in the Worldly editor.

02Visible identity

Each partner has its own agent id, colour, and name tag.

03Current membership

Remote calls check project access when each tool runs.

04OAuth tokens

The editor session token is never handed to the MCP client.

Esc

Type to search sections and tools