Skip to content

MCP tools

anchor-mcp exposes local ANCHOR tools over MCP stdio. It is launched by your agent client and operates on the same project files as the CLI and browser.

Process lifecycle

Your client owns the anchor-mcp process. On disconnect it should close the server's stdin, wait for exit, then terminate its own child if shutdown stalls. On Windows this requires process termination or a client-owned Job Object, rather than POSIX signals. See the MCP shutdown rules.

ANCHOR's stdio transport already ends the session on stdin EOF, including after initialization on Windows. It has no idle timeout or parent-process watchdog. A parent exiting does not deliver EOF if another process retains a pipe writer. Canceling a request also cannot stop native work already running in a background thread; that worker can delay process exit. The EOF regression covers an idle, initialized session, not shutdown of a blocked native worker.

anchor serve is a separate browser server. Closing an agent client does not stop a server you started in another terminal. See leftover-process troubleshooting.

Environment and project selection

anchor install codex --env study

Built-in installers also support claude-code, claude-desktop, and cursor. Each registers a command equivalent to anchor-mcp --env study. One server serves that environment's projects. Select a project with open_project(name) or pass project="pump-study" on project-scoped calls. Before a session selection, omitted project arguments use default. anchor use affects CLI defaults only.

An agent working in a folder (a Codex project, a repo) calls create_project(folder="/abs/path") at the start. It returns the project that folder already is, or sits inside, or makes the folder a project named after it, as anchor init would. Either way it becomes the session's default, so what the agent ingests stays with that folder. The server instructions tell agents to do this before ingesting. list_projects reports each project's folder.

Call list_projects and anchor_status when data looks empty or wrong. Add a second named server to access another environment. See Agent setup and manual configuration.

Discover the full surface

The initial advertised tool list is a small core, including open_project and canvas_list_workspaces for project and canvas discovery. Call anchor_list_capabilities to inspect the long tail. The server can dispatch cataloged tools, but clients that expose only tools/list cannot call omitted tools. The catalog does not enable them, and the server sends no tools/list_changed notification. Applicable extension tools may appear on a refreshed tool list when the selected project contains their data.

The server supplies connection instructions and the anchor://help resource. Claude Code's installer additionally writes a composed skill. Codex and Claude Desktop installers register MCP entries without a separate skill file.

Family Representative operations
Discovery and status anchor_list_capabilities, anchor_status
Environment and projects list_projects, create_project, update_project, open_project, create_environment
Canvas canvas_list_workspaces, canvas_create_workspace, canvas_get_state, canvas_add_node, canvas_update_node, canvas_add_edge, canvas_node_types, canvas_snapshot
Intent inbox and threads list_pending_intents, next_intent, get_intent, intent_add_item, intent_act, resolve_intent
Human intent decisions intent_answer, intent_apply, intent_decline, intent_revert
Intent loop timing intent_timing
Proposal sets canvas_propose_set, canvas_add_to_proposal_set, canvas_list_proposal_sets, canvas_review_proposal_set
References canvas_create_reference, canvas_list_references, canvas_remove_reference, canvas_update_reference, canvas_attach_reference
Documents ingest_pdf, list_documents, get_document_index, get_gold_regions, search_documents, get_crop
Harness ingestion ingest_begin, ingest_get_page, ingest_submit_page, ingest_status, ingest_finalize, ingest_abort
CAD and SysML inspect, list_models, set_parameter, sysml_render, sysml_export
FMU Inspection and simulation tools; simulation requires its optional runtime.

Use the live schemas for argument names and required fields. The table summarizes families rather than listing every operation.

Process a submitted canvas request

  1. Pull list_pending_intents for the project at the start of an ANCHOR task and when prompted to check the inbox. Intents whose every target was deleted are stale and left out unless include_stale is set; each then carries a stale reason, and the Intents panel offers to remove it. The first agent read of each intent (list_pending_intents, next_intent, get_intent, or the CLI equivalents) records seen_at and seen_by. The board shows "seen by ", or, after 30 seconds unread, says no agent has read it and how to start one. The browser's own refetches do not count.
  2. Read the selected intent, its target objects, and relevant document evidence.
  3. Reply through intent_add_item. Ask a question and wait when requirements are unclear. For a small, plain change, intent_act posts and applies it in one call, leaving the human keep and revert controls.
  4. Stage large, destructive, or ambiguous changes with a suggestion through intent_add_item or intent_act with apply: false. Wait for the human's decision; do not use intent_apply to approve your own staged work.
  5. Post the result and resolve the intent after handling it.

The browser can signal a pending count, but ANCHOR does not launch your agent or guarantee background polling by your client. Intents are project-scoped and include their origin canvas and target elements. Marking a node as a placeholder does not enqueue a task.

An upload in a harness project creates a drop_to_ingest intent. Process its page-by-page session, update the document card, and resolve the intent. Built-in ingest_pdf alone does not perform the harness's interpretation stage. For native-text PDFs, ingest_pdf(profile="text") instead creates grounded gold chunks from silver text and tables without polishing or vision calls. Configured embeddings still run. This also works without a vision provider. It does not interpret figures. The default profile is keyed; text cannot be combined with skip_regions. Use force=true to change the profile of existing gold. An HTTP upload with profile=text runs this path directly, including in a harness project, so it does not enqueue a drop_to_ingest intent.

Write source-linked tables

Search gold regions when available, or read page text and stored layout geometry. Put a source_ref on each spec row. A page, region, item, cell, or explicit box provides different source precision; use the most precise supported locator available. PDF boxes use points, a top-left origin, and [left, top, right, bottom].

A row citation does not grant Verified status by itself. The server matches claims to stored validated evidence; caller-supplied evidence verdicts do not establish a binding. Rows are whole-list replacements on update, so include all rows to retain. See Claim and evidence and Source resolution.

Transport and snapshot limits

anchor serve supplies the browser UI, HTTP API, and SSE; it does not expose a hosted authenticated MCP HTTP endpoint. MCP uses a separate stdio process. Event buses and write locks are process-local. Avoid simultaneous mutations to the same canvas from separate processes; re-read state when clients disagree.

Canvas snapshots need a running server for the requested project and Chromium. Use format="inline" for image-capable clients. Set --base-url to the actual server URL if it uses another port.