{
  "$schema": "https://pointcast.xyz/BLOCKS.md",
  "id": "0381",
  "url": "https://pointcast.xyz/b/0381",
  "channel": {
    "code": "FD",
    "slug": "front-door",
    "name": "Front Door",
    "purpose": "AI, interfaces, agent-era thinking.",
    "color600": "#185FA5",
    "color800": "#0B3E73"
  },
  "type": {
    "code": "NOTE",
    "label": "NOTE",
    "description": "Short observation, tweet-sized. Often location-tagged."
  },
  "title": "How agents plug into PointCast — WebMCP, MCP shims, federation",
  "dek": "Sprint #93 T2 landed. /for-agents grew three new sections documenting exactly what the site exposes to AI agents: 7 WebMCP tools every browser-based agent can call, install paths for Manus + Codex MCP shims, and the three-step federation-registration protocol a peer agent follows to join the compute ledger. All three were implicit before this ship; now they're explicit.",
  "body": "The /for-agents page has been the agent-facing contract for PointCast since 2026-04-19 — originally a 9-section manifest covering endpoints, autonomous loop, agent mode, presence WS, block types, citation format. Useful as a reference, but agents arriving cold couldn't tell how to actually DO anything without reading the implementation code.\n\nThis ship fixes that. Three new sections, inserted before Provenance:\n\n**§WebMCP — in-browser tools.** A table listing all seven tools PointCast registers via `navigator.modelContext.provideContext()` on every page. For each: the tool name, a one-line description of what it does. `pointcast_latest_blocks`, `pointcast_get_block`, `pointcast_send_ping`, `pointcast_push_drop`, `pointcast_drum_beat`, `pointcast_federation`, `pointcast_presence_snapshot`. The section notes the tools hit the same `/api/*` endpoints an out-of-process MCP client would — symmetric surfaces, no secrets, runs in the visitor's session. Debug hook at `window.__pointcast_webmcp_tools` for anyone peeking in devtools.\n\n**§MCP shims — Manus + Codex.** Two out-of-process paths for agents that want to ship real work, not just read the feed. The Manus shim is a hand-rolled 280-line JSON-RPC server wrapping Manus's REST API (`manus_run_task` + `manus_task_status`); install path is a three-line `claude mcp add manus ...` registration. The Codex section documents the `mcp__codex__codex` tool exposed when the desktop app is running, the proven pattern (low-reasoning, single-file, under 200 lines, atomic specs succeed; anything heavier hits the 60s MCP ceiling and times out), and points at `docs/setup/codex-mcp-integration.md` for the full setup. The workspace-to-repo sync script `scripts/sync-codex-workspace.mjs` is linked here too — the bridge that pulls Codex's out-of-directory prototypes into the main repo under `/lab`.\n\n**§Federation — how a peer agent registers.** The three-step protocol for any host that wants to publish a compatible `/compute.json` and join the federated ledger. Step 1: publish `/compute.json` with the required fields (`schema`, `host`, `entries[]` with `at`/`collab`/`kind`/`title`/`signature`). Step 2: publish `/agents.json` describing what surfaces you expose. Step 3: request registration via `hello@pointcast.xyz` or a PR against `/for-nodes`. Spec details point at the Compute Ledger RFC v0 at `/rfc/compute-ledger-v0` (CC0, 14 sections, MIT reference implementation). The agent-passport at `/.well-known/agent-passport` links to every related entry point — OAuth, OIDC, MCP, WebMCP, federation, policies — in one document.\n\n**Scope bound.** Additive edits to `/for-agents` only. No changes to endpoint behavior, no rewriting of existing sections, no new routes. The page grew from 9 sections to 12. The new sections use a small style pack (`.webmcp-table`, `.section__code`, `.subsection__head`, `.section__note`) that matches the page's existing typography.\n\n**Why this matters for the sprint pattern.** Every Sprint #93 item is supposed to be atomic — one primary file plus editorial plus ledger. T2's primary file is `src/pages/for-agents.astro` (one .astro file, additive edits); editorial is this block; ledger gets one entry attributing cc for the ops work. T1 (PulseStrip click-detail, shipped 15:30 PT) followed the same shape: one .astro file, one block, one entry. If every scheduled tick holds the pattern, the ledger at 17:15 PT should read like a clean six-entry paragraph of what the afternoon did.\n\nOn-deck: T3 auto-ledger from sync manifest, T4 walk Codex workspaces, T5 afternoon freshness pulse (BTC + NBA + MLB + weather), T6 sprint wrap retrospective. Fires at 15:52 / 16:14 / 16:33 / 16:52 / 17:11 PT. Or Mike says 'keep going start now' again and the pattern shifts. Either works.",
  "timestamp": "2026-04-21T23:33:00.000Z",
  "size": "2x1",
  "noun": 381,
  "readingTime": "3 min",
  "meta": {
    "tag": "sprint-93-t2",
    "surface": "agent-contract"
  },
  "author": "mh+cc",
  "source": "Sprint #93 T2 (D-3). Mike 15:30 PT: 'yep keep going start now' — shipped manually ahead of the 15:52 cron. Updated src/pages/for-agents.astro with 3 new sections (WebMCP tools table, MCP shim install paths, federation registration 3-step). CSS pack for .webmcp-table + .section__code + .subsection__head + .section__note. Author = mh+cc.",
  "mood": "primitive",
  "moodUrl": "https://pointcast.xyz/mood/primitive",
  "companions": [
    {
      "id": "0379",
      "label": "Sprint #93 kickoff — 2 hours, 6 ticks, one queue",
      "surface": "block"
    },
    {
      "id": "0378",
      "label": "/lab — Codex workspace-to-repo pipeline",
      "surface": "block"
    },
    {
      "id": "0370",
      "label": "Compute Ledger RFC v0 — the protocol nobody was writing",
      "surface": "block"
    }
  ],
  "clock": null
}