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¶
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¶
- Pull
list_pending_intentsfor 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 unlessinclude_staleis set; each then carries astalereason, 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) recordsseen_atandseen_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. - Read the selected intent, its target objects, and relevant document evidence.
- Reply through
intent_add_item. Ask a question and wait when requirements are unclear. For a small, plain change,intent_actposts and applies it in one call, leaving the human keep and revert controls. - Stage large, destructive, or ambiguous changes with a suggestion through
intent_add_itemorintent_actwithapply: false. Wait for the human's decision; do not useintent_applyto approve your own staged work. - 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.