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) → markdownFull 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
| Tool | Does | Scope |
|---|---|---|
workbench_flows_list | List flows in a workspace | workbench:flows:read |
workbench_flows_get | Read one flow's definition | workbench:flows:read |
workbench_node_catalog_get | Search the node catalog | workbench:flows:read |
workbench_flows_run | Run a flow | workbench:flows:run |
workbench_flows_scaffold | Draft a first-cut flow | workbench:flows:write |
workbench_flows_edit_text | Make a surgical text edit in a flow | workbench:flows:write |
workbench_flows_share_create | Mint a guest share link | workbench:flows:write |
Caliper
| Tool | Does | Scope |
|---|---|---|
caliper_datasets_list | List datasets | caliper:datasets:read |
caliper_evals_list | List evals | caliper:evals:read |
caliper_evals_run | Kick off an eval run | caliper:evals:write |
Compass
| Tool | Does | Scope |
|---|---|---|
compass_pages_list | List pages (optionally by type) | compass:pages:read |
compass_pages_search | Search pages | compass:pages:read |
compass_pages_get | Read a page's body | compass:pages:read |
compass_page_links_list | List a page's connections | compass:pages:read |
compass_pages_create | Create a page | compass:pages:write |
compass_links_create | Connect two pages with a typed link | compass:pages:write |
compass_process_diagram_ensure | Give a workflow the diagram that holds its steps | compass:pages:write |
compass_workflow_steps | List a workflow's steps and who does them | compass:pages:read |
compass_step_claims_list | List what's been said about a workflow's steps | compass:pages:read |
compass_step_claims_propose | Propose who does a workflow's steps | compass:pages:write |
compass_workflow_rollup | Add up what a workflow takes per run and per month | compass:pages:read |
compass_step_measures_propose | Propose time, cost, and gate estimates for a workflow's steps | compass:pages:write |
compass_workflow_learning | What's been learned about a workflow, and when | compass:pages:read |
compass_step_suggestions_list | List which of a workflow's steps something could do | compass:pages:read |
compass_step_suggestions_build | Build what a step suggestion names | workbench:flows:write |
compass_scenario_changes | List the changes that reach a workflow's steps | compass:pages:write |
compass_change_effects_set | Say what a change does to steps | compass:pages:write |
compass_interviews_create | Start a stakeholder interview | compass:pages:write |
Ledger
| Tool | Does | Scope |
|---|---|---|
ledger_entries_list | List decision entries (filterable) | ledger:entries:read |
ledger_entries_get | Read one entry with its expectations | ledger:entries:read |
ledger_entries_create | Record a decision or memory (approval-gated) | ledger:entries:write |
ledger_entries_settle | Settle an entry against evidence (approval-gated) | ledger:entries:write |
Napkin
| Tool | Does | Scope |
|---|---|---|
napkin_boards_list | List sketches — name, activity, shape count | napkin:boards:read |
napkin_boards_view | Render a sketch to an image the model can SEE | napkin:boards:read |
Prism
| Tool | Does | Scope |
|---|---|---|
prism_fields_list | List fields | prism:fields:read |
prism_fields_get | Read a field's nodes | prism:fields:read |
prism_fields_create | Create a field (approval-gated) | prism:fields:write |
prism_nodes_expand | Generate permutations from a node (approval-gated) | prism:fields:write |
prism_nodes_update | Edit 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.
| Product | URL |
|---|---|
| Compass | https://api.zerowidth.ai/mcp/x/compass |
| Workbench | https://api.zerowidth.ai/mcp/x/workbench |
| Caliper | https://api.zerowidth.ai/mcp/x/caliper |
| Ledger | https://api.zerowidth.ai/mcp/x/ledger |
| Prism | https://api.zerowidth.ai/mcp/x/prism |
| Napkin | https://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
- (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_accessif you're not sure), pick a default workspace (lets you skip theworkspacearg on most calls), confirm. Copy the token immediately — it's shown exactly once.Skip this step if you only need the docs tools.
- 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
--headerflag for docs-only (anonymous) access. Your shell fills in$ZEROWIDTH_TOKENbefore Claude Code sees the command, so the token itself is saved to your local Claude Code config. Add--scope userto use the server in every project, not just this one.To share the server with everyone on a repo, commit a
.mcp.jsonat the repo root instead. Don't use--scope projectwith 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 listhealth-checks the connection. - Restart the client
Desktop hosts like Claude Desktop and Cursor only re-scan their config on startup — quit fully and re-open, and the
zerowidthserver appears in the tools menu. Terminal agents pick it up on the next session: start a newclaudeorcodexand ask it what tools it has. - 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_docsand thenget_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_listwithworkspace: "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 listhealth-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_varis 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
zerowidthMCP 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.