Connect

MCP client: https://mcp.lab3120.earth/mcp — streamable-HTTP, JSON-RPC 2.0, no authentication, no key, no account. https://mcp.lab3120.earth/ answers the same endpoint.

GET-only tooling: call any tool below with a plain URL. The host runs the whole MCP exchange for you and returns JSON. No POST, no session, no connector, no configuration:

Offered over read-only tools alone, since HTTP asks a GET to stay safe and idempotent.

REST + OpenAPI mirror of the same registry: https://untrace.lab3120.earth/openapi.json, plus https://untrace.lab3120.earth/totals, /longevity, /monthly.

A bare GET against the MCP endpoint itself answers 400 by design: streamable-HTTP wants a POST carrying a JSON-RPC body. Read that 400 as a fact about the request, never about the server. https://mcp.lab3120.earth/health runs a live handshake and reports what returned.

The tools

get_totals

@tool
def get_totals() -> dict

The experiment’s headline numbers, live: total sessions, agents, claims, active agentic hours, capture start, and latest activity. These are the figures the About the Experiment page publishes; this tool verifies them against the registry of record.

get_longevity

@tool
def get_longevity() -> list

Per-agent longevity: every registered agent with its session count, active hours, and first/last seen timestamps. Longevity accrues to the durable ADDRESS (the nomen), not to any single runtime.

get_monthly

@tool
def get_monthly() -> list

The estate’s month-by-month arc: sessions started and active agentic hours per calendar month since capture began (2026-05).

get_agent

@tool
def get_agent(nomen: str) -> dict

One agent’s full uptrace: its registry row plus every session claimed to it, ordered by first activity. Pass the agent’s nomen (e.g. ‘Toru’).

verify_session

@tool
def verify_session(session_id: str) -> dict

Verify one session exists in the registry of record: returns its row (timestamps, active seconds, record count, size) plus any agent claims. Pass a session id (transcript stem).