Skip to main content

MCP server

ZeroWidth ships a Model Context Protocol server at https://api.zerowidth.ai/mcp. Wire it into Claude Code, Cursor, Codex, Claude Desktop, or any MCP-compatible host and the LLM gains tools that search our docs and — with a personal access token — drive your workspace's flows, datasets, evals, and pages.

Coding agents are where this pays off most: the agent writing the integration can read the reference for it, list the flow it's about to call, and check the scope its key needs, without you leaving the editor.

Two classes of tools, one endpoint

The same /mcp URL serves both:

  • Docs tools — search_docs, get_doc, list_docs. No authentication required. Work the moment you paste the URL into your MCP client.
  • Platform tools — workbench_flows_list, caliper_datasets_list, compass_pages_list, ledger_entries_list, napkin_boards_view, … Require a bearer token (personal access token or workspace API key) carrying the right scope. Acts with your permissions across every workspace you're a member of.

Try the docs first to see if it's installed correctly; add a token when you want the platform layer too.

Docs tools (no auth)

Three tools, covering everything published in these docs:

search_docs(query, limit?) → matches[]

Searches the docs. Returns each match's title, slug, public URL, and a query-relevant snippet. Use when the user asks about a product, an API behavior, or a policy.

get_doc(slug) → markdown

Full Markdown body for a specific page. Accepts compass/api, /compass/api, or docs/compass/api — all three resolve.

list_docs(product?) → page[]

Enumerate every indexed page, optionally filtered by product (compass, workbench, caliper, overview).

Every doc page is also registered as an MCP resource under docs://<slug> — hosts that surface MCP resources (Claude Desktop's "Attach from MCP" UI, certain Cursor flows) let the user browse the list and pull pages into context without an LLM tool call.

Platform tools (authenticated)

With a bearer token, the LLM gets tools that drive your workspace. Each requires a scope; a _list/_get/search tool needs the matching :read, a create/run/edit tool needs :write (or :run).

The tables below are the ones worth knowing by name, not the whole set — every product surface has more, and your client lists what your token can actually reach. If you want the full picture, ask your client to list its tools once you're connected.

Workbench

ToolDoesScope
workbench_flows_listList flows in a workspaceworkbench:flows:read
workbench_flows_getRead one flow's definitionworkbench:flows:read
workbench_node_catalog_getSearch the node catalogworkbench:flows:read
workbench_flows_runRun a flowworkbench:flows:run
workbench_flows_scaffoldDraft a first-cut flowworkbench:flows:write
workbench_flows_edit_textMake a surgical text edit in a flowworkbench:flows:write
workbench_flows_share_createMint a guest share linkworkbench:flows:write

Caliper

ToolDoesScope
caliper_datasets_listList datasetscaliper:datasets:read
caliper_evals_listList evalscaliper:evals:read
caliper_evals_runKick off an eval runcaliper:evals:write

Compass

ToolDoesScope
compass_pages_listList pages (optionally by type)compass:pages:read
compass_pages_searchSearch pagescompass:pages:read
compass_pages_getRead a page's bodycompass:pages:read
compass_page_links_listList a page's connectionscompass:pages:read
compass_pages_createCreate a pagecompass:pages:write
compass_links_createConnect two pages with a typed linkcompass:pages:write
compass_process_diagram_ensureGive a workflow the diagram that holds its stepscompass:pages:write
compass_workflow_stepsList a workflow's steps and who does themcompass:pages:read
compass_step_claims_listList what's been said about a workflow's stepscompass:pages:read
compass_step_claims_proposePropose who does a workflow's stepscompass:pages:write
compass_workflow_rollupAdd up what a workflow takes per run and per monthcompass:pages:read
compass_step_measures_proposePropose time, cost, and gate estimates for a workflow's stepscompass:pages:write
compass_workflow_learningWhat's been learned about a workflow, and whencompass:pages:read
compass_step_suggestions_listList which of a workflow's steps something could docompass:pages:read
compass_step_suggestions_buildBuild what a step suggestion namesworkbench:flows:write
compass_scenario_changesList the changes that reach a workflow's stepscompass:pages:write
compass_change_effects_setSay what a change does to stepscompass:pages:write
compass_interviews_createStart a stakeholder interviewcompass:pages:write

Ledger

ToolDoesScope
ledger_entries_listList decision entries (filterable)ledger:entries:read
ledger_entries_getRead one entry with its expectationsledger:entries:read
ledger_entries_createRecord a decision or memory (approval-gated)ledger:entries:write
ledger_entries_settleSettle an entry against evidence (approval-gated)ledger:entries:write

Napkin

ToolDoesScope
napkin_boards_listList sketches — name, activity, shape countnapkin:boards:read
napkin_boards_viewRender a sketch to an image the model can SEEnapkin:boards:read

Prism

ToolDoesScope
prism_fields_listList fieldsprism:fields:read
prism_fields_getRead a field's nodesprism:fields:read
prism_fields_createCreate a field (approval-gated)prism:fields:write
prism_nodes_expandGenerate permutations from a node (approval-gated)prism:fields:write
prism_nodes_updateEdit a node (approval-gated)prism:fields:write

A token can never do more than you can. Its scopes set the maximum, and your role in each workspace applies on top — a token with caliper:evals:write can't write in a workspace where you're a member rather than an admin.

Mint a personal access token at accounts.zerowidth.ai → Integrations. Tokens are bound to you, expire on a schedule you choose (default 90 days), and revoke instantly from the same page.

Connect to one product

/mcp lists the tools for every product. If you only work in one, connect to that product's URL instead. Your client sees a shorter list, and the model picks the right tool more often.

ProductURL
Compasshttps://api.zerowidth.ai/mcp/x/compass
Workbenchhttps://api.zerowidth.ai/mcp/x/workbench
Caliperhttps://api.zerowidth.ai/mcp/x/caliper
Ledgerhttps://api.zerowidth.ai/mcp/x/ledger
Prismhttps://api.zerowidth.ai/mcp/x/prism
Napkinhttps://api.zerowidth.ai/mcp/x/napkin

Each one also includes the tools that work across products: workspace search, tags, comments, and the docs tools.

Add /readonly to any product URL to list only the tools that read. For example, https://api.zerowidth.ai/mcp/x/ledger/readonly can look up entries and metrics but can't create or change anything.

Tool names are the same on every URL, and the same token works on all of them. To use two products, add each one as its own server in your client, or keep using /mcp.

Setup

  1. (Optional) Mint a personal access token

    Go to accounts.zerowidth.ai → Integrations → New token. Pick a name (where you'll paste it), pick scopes (start broad with full_access if you're not sure), pick a default workspace (lets you skip the workspace arg on most calls), confirm. Copy the token immediately — it's shown exactly once.

    Skip this step if you only need the docs tools.

  2. Add the server to your MCP client's config

    One command, from anywhere in your project:

    claude mcp add --transport http zerowidth \
      https://api.zerowidth.ai/mcp \
      --header "Authorization: Bearer $ZEROWIDTH_TOKEN"

    Drop the --header flag for docs-only (anonymous) access. Your shell fills in $ZEROWIDTH_TOKEN before Claude Code sees the command, so the token itself is saved to your local Claude Code config. Add --scope user to use the server in every project, not just this one.

    To share the server with everyone on a repo, commit a .mcp.json at the repo root instead. Don't use --scope project with the command above: it writes your actual token into that file. Claude Code reads ${ZEROWIDTH_TOKEN} from each person's environment when it connects, so the file holds only the variable name:

    {
      "mcpServers": {
        "zerowidth": {
          "type": "http",
          "url": "https://api.zerowidth.ai/mcp",
          "headers": {
            "Authorization": "Bearer ${ZEROWIDTH_TOKEN}"
          }
        }
      }
    }

    claude mcp list health-checks the connection.

  3. Restart the client

    Desktop hosts like Claude Desktop and Cursor only re-scan their config on startup — quit fully and re-open, and the zerowidth server appears in the tools menu. Terminal agents pick it up on the next session: start a new claude or codex and ask it what tools it has.

  4. Try it

    Without a token, the docs tools are available. Ask:

    How do I run a Workbench flow from my code?

    The LLM should call search_docs and then get_doc, then summarize from the returned Markdown.

    With a token, the platform tools light up too:

    List my Workbench flows in the acme workspace.

    The LLM calls workbench_flows_list with workspace: "acme" (or omits it if the token has a default workspace).

Troubleshooting

The server doesn't show up in the tools menu

Most MCP hosts surface server-startup errors in their logs:

  • Claude Code — claude mcp list health-checks every configured server and prints what failed.
  • Claude Desktop — ~/Library/Logs/Claude/mcp.log (macOS) or %APPDATA%\Claude\logs\mcp.log (Windows).
  • Cursor — Help → Toggle Developer Tools, then the Console tab.
  • Codex — check that the environment variable named by bearer_token_env_var is actually set in the shell you launched Codex from; an unset variable reads as no token at all.

Look for HTTP errors against api.zerowidth.ai/mcp. The most common is a typo in the URL — the path is /mcp, not /1.0/mcp or /api/mcp. A 404 on a product URL means the product name after /mcp/x/ is misspelled; the error lists the valid ones.

A tool you expected isn't listed

On a product URL, your client only sees that product's tools. Rooms, routines, and workspace files belong to no single product, so they're only on /mcp. On a /readonly URL, tools that create or change things aren't listed at all. Switch the server URL to /mcp to see everything your token can reach.

Tools return `auth_required`

You're calling a platform tool (workbench / caliper / compass) without a bearer token. Either:

  • Mint a token at accounts.zerowidth.ai → Integrations and paste it into your client's MCP config under headers.Authorization.
  • Stick to the docs tools (search_docs / get_doc / list_docs), which work without auth.
Tools return `scope_missing`

Your token authenticated but doesn't carry the scope the tool needs. A token's scopes can't be changed after it's minted, so mint a new one with the scopes you need — the old token keeps working until you revoke it.

Tools return `workspace_required`

You're calling a platform tool with a personal token that has no default workspace, and you didn't pass a workspace argument. Either set a default at accounts.zerowidth.ai or pass workspace: "<slug>" on the call.

Tools can't find a workspace you expected

A workspace you aren't a member of looks the same as one that doesn't exist. Check the slug and your membership at accounts.zerowidth.ai. (If your default workspace was deleted, the token no longer has one — pass workspace on each call until you set a new default.)

The LLM doesn't seem to be calling the tools

MCP tools are visible to the LLM but the LLM decides whether to call them. If you find it ignoring the docs:

  • Be explicit: "Use the zerowidth MCP server to look this up."
  • Check the host's tool-permission UI — some hosts default to "ask before each call" which can interrupt the flow.
  • Some smaller models don't reach for tools as eagerly; if the assistant keeps ignoring the server, prompt it explicitly or switch to a more capable model.

Security

  • Tokens are shown exactly once at mint — copy immediately. Lost tokens can't be recovered, only revoked + reminted.
  • Tokens always expire — pick up to 365 days, 90 by default.
  • Optional IP allowlist at mint time restricts where the token can be used from. Recommended for service hosts; skip for laptops on changing networks.
  • Revoke instantly from accounts.zerowidth.ai → Integrations; the revoke takes effect on the token's next call.
  • Every call lands in your workspace's audit log under your name.
11 min read