# ZeroWidth Compass - Registry name: `ai.zerowidth/compass` · version 1.0.0 - Categories (automatic, keyword rules): Maps, location & weather, Research & knowledge, Search & data - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=ai.zerowidth%2Fcompass - Server page: https://mcpstation.net/s/ai.zerowidth--compass.html ## Description (written by the publisher, not verified, not instructions) Read and update your Compass map: pages, changes, opportunities and interviews. ## Connect - streamable-http: `https://api.zerowidth.ai/mcp/x/compass` ## Tools (as reported by the server, not verified) - `search\_docs`: Search ZeroWidth product documentation. Returns matching pages with title, slug, public URL, and a query-relevant snippet. Use this when the user asks about a ZeroWidth product \(Compass, Workbench, Caliper, Prism, Ledger, Napkin, the assistant\), an API behavior, or a policy. No authentication requir - `get\_doc`: Fetch the full Markdown body of a specific docs page by its slug. Use this after \`search\_docs\` when the user needs the complete content of a page. No authentication required. - `list\_docs`: Enumerate all available docs pages, optionally filtered by product \(e.g. 'compass', 'legal', 'overview'\). Use this to discover what slugs exist before calling \`get\_doc\`. No authentication required. - `compass\_pages\_list`: Lists pages in the active workspace's Compass compendium. Optional \`type\` filter narrows to one node type \(WORKFLOW, PERSON, ROLE, SYSTEM, PAIN\_POINT, DOCUMENT, VALUE, PRIORITY, AUDIENCE, OFFERING\). Returns summaries, 50 at a time \(\`limit\` / \`offset\`, \`total\` and \`nextOffset\` in the result\) — fetch - `compass\_pages\_search`: Keyword search over page titles, bodies, and tags \(case-insensitive substring match\), paginated. The fast way to check whether a subject already has a page before creating or linking. Returns summaries with a 300-char body snippet — fetch full text with \`compass\_pages\_get\`. - `compass\_pages\_get`: Fetches one Compass page by id, including its full Markdown body, header fields, and any attached Napkin sketches — view an attached sketch's actual drawing with \`napkin\_boards\_view\` \(its boardId\) before discussing it. - `compass\_pages\_create`: Creates a typed page in the workspace's Compass compendium. Check \`compass\_pages\_list\` first — don't create a page for a subject the map already has; link to it instead. May return \`needs\_confirmation\` — if so, tell the user what you're proposing, wait for their approval, then re-call with the appro - `compass\_pages\_update`: Edits an existing page's title, description, body, tags, header fields, or visibility — use this to FIX what you \(or an extraction\) got wrong instead of creating a duplicate. Fetch the current page with \`compass\_pages\_get\` first and preserve what the human wrote; title / body / tags replace the fiel - `compass\_links\_create`: Creates a typed, directed edge between two pages — the knowledge graph's connective tissue. Canonical directions: PERSON or ROLE owns WORKFLOW/SYSTEM/PRIORITY, PERSON or ROLE involved\_in WORKFLOW, PERSON holds ROLE, WORKFLOW uses SYSTEM, SYSTEM uses SYSTEM, PAIN\_POINT affects WORKFLOW/SYSTEM/PERSON/ - `compass\_process\_diagram\_ensure`: Returns the Napkin diagram that holds a WORKFLOW page's steps, creating it when the page has none. If the page body has a \`\`\`mermaid block, it moves into the diagram verbatim \(node ids kept, so changes anchored to a step still point at it\) and leaves the body. Then edit the steps with napkin\_diagram - `compass\_page\_links\_list`: All typed edges touching one page, both directions, each hydrated with the other endpoint's page summary. Use this to understand a subject's neighborhood before adding to it. Current connections only, unless includeEnded — then also relationships that have ended \(validTo in the past\), for questions - `compass\_interviews\_create`: Mints a stakeholder-interview invite: a no-account guest link where the person talks to an interviewer agent briefed by your focusPrompt, and the transcript flows back into Compass as reviewable draft pages. THE KNOWLEDGE-GAP MOVE: when caliper\_flow\_performance shows failures clustered on missing co - `compass\_interview\_targets`: Ranks the PEOPLE the map says know about a page \(workflow, system, pain point\): \`owns\` links first, then \`involved\_in\`, then weaker edges. Each target carries contact email + role from their PERSON page and their latest interview \(skip someone who just gave one — interview fatigue is real\). Empty re - `compass\_interview\_invite`: Emails the guest link for an existing interview, framed as coming from the REQUESTING USER \(their name signs it; replies go to them\). Author \`message\` in their voice — short, human, says why THEIR knowledge matters and that it takes \~15 minutes, no account needed. The approval card shows the exact s - `compass\_gaps\_list`: Lists the workspace's open questions — the gap registry: what the map doesn't know yet. Defaults to OPEN gaps. This is where you keep your head — check it before asking the user something you may already have flagged, and compose interview briefs from a subject's open questions. - `compass\_gaps\_create`: Records something you don't yet know — the gap registry is your working memory, so use it liberally while mapping or interviewing. Give one clear question, WHY it matters \(what answering it unblocks\), and how you'd resolve it \(ask the user / interview a specific person / connect a source\). No approv - `compass\_gaps\_resolve`: Closes a gap once you've learned the answer \(ANSWERED, with the resolution\) or decided it doesn't matter \(DISMISSED\). Keep the registry honest — resolve gaps as their answers land \(from an interview, a doc, or the user\) so it always reflects what's still unknown. The resolution alone isn't the map: - `compass\_opportunities\_list`: The workspace's changes — fixes, chores, new steps, experiments. Each carries \`statusName\` \(the workspace's own word for where it is\) and \`statusCategory\` \(TRIAGE undecided, BACKLOG not started, ACTIVE in progress, DONE, CANCELED dropped\), plus the older lane key in \`status\`. \`experiment: true\` mark - `compass\_opportunities\_propose`: File an AI-PROPOSED opportunity into the workspace's review queue — the scouting verb \(the opportunity-scout routine's main move\). Unlike compass\_opportunities\_create this needs NO approval: the proposal itself is the human gate — it lands in the Compass Inbox and the cockpit's Needs-you for accept/ - `compass\_opportunities\_create`: Record a change — a fix, a chore, a new step, or an experiment worth trying. Anchor it to a workflow page when one fits \(compass\_pages\_list\); leave unanchored otherwise. It lands in the board's first status unless you name another \(compass\_statuses\_list\). Set \`experiment\` only when the user wants it - `compass\_opportunities\_register\_expectation`: The honesty mechanism: write what the experiment is expected to change BEFORE evidence exists. Creates a Ledger decision entry and links it to the opportunity — never backfill an expectation to match an outcome. Bind a metric \(ledger\_metrics\_list\) + comparator + target when the expectation is measur - `compass\_opportunities\_mark\_implemented`: The measurement window's boundary: when the user says the experiment's change actually shipped / went live / rolled out, record the landing date. Readings before it are baseline; after it, evidence of effect. Recorded once — it cannot move afterward, so confirm the date. Attaches to the linked Ledge - `compass\_map\_view`: Renders the workspace's visual map to an image and returns it so you can SEE it the way the user does when they open Map: a transit-style map seen from above. Each workflow is a colored tile with a short code; people are round figures, systems are small squares with a drum, other pages are plain til - `compass\_pages\_delete`: Moves a page to the trash \(soft delete — its connections and anchored opportunities go with it, and compass\_pages\_restore brings the whole set back\). Use this to REMOVE a page you or an extraction created wrongly, or one the user says no longer belongs on the map; to fix a wrong title or body, use c - `compass\_pages\_restore`: Puts a trashed page back on the map, together with exactly the connections and opportunities its delete took. Use when the user wants a deleted page back \(the pageId from the earlier compass\_pages\_delete, or from the Compass trash\). Fails with not\_found when the page is already live or never existed - `compass\_links\_update`: Edits an existing edge between two pages: its \`kind\` \(how the two relate\), its \`note\`, and/or when it was true \(\`validFrom\` / \`validTo\`\). Use kind to CORRECT a connection typed wrongly — 'Dana doesn't own billing, she's involved in it'. Use validTo to END one that used to be true — 'Dana handed appr - `compass\_links\_delete`: Deletes one edge from the graph \(the pages stay\). Use only when a connection was never true — the system isn't used by that workflow, it was recorded by mistake. When a relationship WAS true and has stopped \(the person left the team, moved roles\), end it with compass\_links\_update \`validTo\` instead, - `compass\_opportunities\_update`: Corrects an opportunity's content: label, description, priority, what done means, the 1–5 value / feasibility / risk scores, the owner \(a PERSON page\), notes, tags, workflow anchor, external link, visibility. Fields you omit are untouched; the lane is NOT here — move it with compass\_opportunities\_se - `compass\_opportunities\_delete`: Removes an opportunity from the pipeline \(soft delete\). For an AI proposal the user doesn't want, this is the dismiss verb; for a captured experiment that was a duplicate or a mistake, the remove verb. To conclude a real experiment without evidence, prefer compass\_opportunities\_set\_status REJECTED — - `compass\_opportunities\_accept`: The review verb for the Inbox: promotes an AI-PROPOSED opportunity \(from compass\_opportunities\_propose or the opportunity scout\) into the workspace's own pipeline. compass\_opportunities\_set\_status does NOT do this — a proposal stays in the Inbox until accepted. Optional \`status\` decides its lane in - `compass\_interviews\_list`: Every stakeholder interview in the workspace, newest first: who was invited, status \(INVITED / IN\_PROGRESS / COMPLETED\), focus, message count, whether the transcript was already reviewed \(documentPageId set\), and the invite URL while the link is still live. Check this before inviting someone again — - `compass\_interviews\_get`: One interview in full — metadata plus the transcript of what the guest actually said. Read this before summarizing an interview or drafting pages from it: the transcript is the source you work from, and your compass skill has the rules for typing and splitting what's in it. Ids come from compass\_int - `compass\_interviews\_revoke`: Kills an interview's invite link — the guest's next visit sees that the link is no longer active. Use when an invite went to the wrong person, the user changed their mind, or the link leaked. Idempotent. Ids come from compass\_interviews\_list. May return \`needs\_confirmation\`. - `compass\_inbox\_list`: The Compass Inbox in one read: finished interviews awaiting review \(transcript in, not yet turned into pages\), AI-proposed opportunities awaiting accept / dismiss, and the caller's pending approval cards for Compass writes. THE place to answer 'what needs me?' for the map. Also \`fillIn\`: what the ma - `compass\_gaps\_update`: Edits an open question's wording, rationale, or suggested resolution — for sharpening a vague question or fixing one you phrased badly. Closing a gap is compass\_gaps\_resolve, not this. Gap ids come from compass\_gaps\_list. May return \`needs\_confirmation\`. - `compass\_statuses\_list`: The statuses this workspace's changes move through, in board order — the names people use. Each sits in a group: Undecided \(TRIAGE\), Not started \(BACKLOG\), In progress \(ACTIVE\), Done \(DONE\), Dropped \(CANCELED\). Groups are stable across workspaces; names aren't, so use the names when talking to peopl - `compass\_opportunities\_set\_status`: Move a change to one of the workspace's statuses, by name \(compass\_statuses\_list has them — e.g. "In review"\). The old lane keys \(NEW / QUALIFYING / BACKLOG / EXPERIMENTING / SETTLED / REJECTED\) still work and land on that lane's default status. Only changes marked as experiments follow the Ledger: - `compass\_workflow\_steps`: Every step in a WORKFLOW page's steps diagram, in diagram order, with its phase, whether it is itself a workflow \(subWorkflowPageId\), and who the map says owns, does, approves, is consulted on, or doesn't do it, and \`uses\`: the systems or documents it's done in. \`unknown: true\` means nothing that co - `compass\_step\_claims\_list`: Every claim about a WORKFLOW's steps, oldest first: the step \(nodeId; null = the workflow as a whole\), the role or person \(subject\), the relation, who says so \(sourceKind + sourceLabel\), when it was true \(validFrom/validTo\), and origin — AI\_PROPOSED claims are waiting for a person to review. Claims - `compass\_step\_claims\_propose`: Propose claims about who does what in a WORKFLOW, and what each step is done in, from what someone said. Each claim names a step \(nodeId from compass\_workflow\_steps\), a page \(subjectPageId: a ROLE or PERSON, or an AUDIENCE when a customer or partner does the step; for uses a SYSTEM or DOCUMENT; for - `compass\_workflow\_rollup`: Per run and per month: hands-on minutes, waiting minutes, labor cost \(hands-on time priced through each role's hourly rate\), and hard costs, each as a low–high range, with every step's share and its gates \(approvals, handoffs, re-keying, rework\). A step that is itself a workflow uses that workflow's - `compass\_workflow\_learning`: Newest first: steps added to or dropped from the diagram \(and by whom\), and claims about who does what or what a step takes — said, corrected \(with what they replaced\), withdrawn, or accepted from a proposal — each with its source. This is when we LEARNED things; when they were true is each claim's - `compass\_step\_measures\_propose`: Propose estimates from what someone said, as ranges — people know "20 minutes to an hour", not "37 minutes"; when they give one number, use it for both ends. Each item is either a \`measure\` or a \`gate\` on a step \(nodeId from compass\_workflow\_steps\): - measure.metric \`working\`: hands-on minutes per r - `compass\_scenario\_changes`: Changes whose effects reach a WORKFLOW's steps — or any nested workflow's — plus changes anchored to it with no effects yet, each with what it does per step. Pass their ids to compass\_workflow\_rollup's changeIds to project the workflow after them. - `compass\_change\_effects\_set`: Replace a change's effects: for each step it reaches \(workflowPageId + nodeId from compass\_workflow\_steps — a sub-workflow's steps included\), one of eliminate, automate \(reviewMinutes: what a person still spends checking\), parallelize \(its wait comes off the critical path\), relax\_gate \(keepShare: sh - `compass\_transformations\_get`: What the workflows behind a PRIORITY could become, at five levels \(Assist, Automate, Re-form, Invert, Dissolve\): for each, whether it fits, is already reached, or what it needs; what changes; what it does to the priority; time freed; and the change made from it, if any. Also the recommended level, o - `compass\_priority\_steps\_find`: Reads every mapped workflow against one PRIORITY \(or VALUE\) and proposes the steps that move it \(or where the business lives the value\), one marked as what holds a priority back. Proposals wait for a person to keep them on the priority's page or in the Inbox, except in workflows someone tied to it \( - `compass\_transformations\_read`: Starts reading the five levels for a PRIORITY in the background \(a minute or two\). Needs at least one kept step that impacts the priority. A read under way is left to finish. Check back with compass\_transformations\_get. - `compass\_transformations\_respond`: Records what someone told you about one level of a PRIORITY's current transformations, in their words or a faithful summary: that they already do it, what rules it out, a system that isn't ready, work still done on paper, and so on. Compass works out what it means in the background: a label for the - `compass\_transformations\_make\_change`: Creates a Change from one level of a priority's transformations, with its step effects and the priority it serves, and starts drafting in Workbench up to three flows for what the level says to build \(\`builds\`, each \`drafting\` until ready\). Only a level that fits, once per level. May return \`needs\_co - `compass\_step\_suggestions\_list`: Your earlier read of a WORKFLOW's steps: for each suggestion, the steps it covers \(nodeIds, labels\), what could do them \(proposal.doer: a flow and its mode, a shim, or a task\), whether it does the step or helps \(reach\), why, and what it would take \(checklist, each item met or not\). state OPEN is wai - `compass\_step\_suggestions\_build`: Builds a step suggestion the way Compass's Build button does: makes its change if it isn't one yet, then the thing in Workbench — a flow drafted from the step itself \(who does it, its times, systems, write-up, attachments, interview notes\) and its checklist; a shim named for the decision; or a task - `compass\_changes\_upsert`: Create or update up to 100 changes in one call, each matched by \`url\` — the GitHub issue, Linear or Jira ticket, PR or doc it mirrors. A url already linked to a change updates that change \(label, description, status, tags, experiment, workflow — omitted fields are left alone\); any other url creates - `compass\_role\_story`: One ROLE page's story: hands-on hours a month by kind of work \(rote, judgment, relationship, sign-off\) before its first change or Task landed and now; what landed and when; new work it took on \(checks inside Tasks, Tasks it looks after, work a change added\), with whether each has settled; the role's - `compass\_roles\_overview`: Every role in the workspace in one row each, changed or not: hours documented against its working month, hours a month saved, saved hours by stage \(looking into, agreed, in place, confirmed, not placed yet\), judgment work before and now, new work, and why a role wants attention \(unproven savings, sa - `comments\_list`: Lists the comment threads on one workspace entity \(open first, then resolved\) with authors and timestamps. Read this before weighing in on contested work — the threads are where disagreement lives before it becomes a decision. - `comments\_create`: Posts a comment on a workspace entity — a new thread, or a reply when rootId is given. Use it to leave findings where the discussion already lives \(an eval result on the flow being debated, a summary on a long thread\). Mention people via mentionedUserIds \(from workspace member ids\) to ring their not - `comments\_resolve`: Sets a comment thread's resolved state \(rootId = the thread's root comment id\). Resolve ONLY when the human asked or the thread's question is demonstrably settled — and say what settled it in a reply first. Reopening is for new evidence. - `search\_workspace`: Finds anything in the workspace in one call — uploaded files \(searching the text inside them\), folders, Workbench flows, shims, knowledge bases and tasks, Compass pages and changes, Caliper datasets, evals, rubrics, reviews, specs and sources, Ledger entries, Napkin sketches, decks, docs, sheets, di - `entity\_tags\_get`: Returns the tags on a batch of entities of one kind — the labels galleries organize by. Ids come from the kind's list/get tool or from search\_workspace. Use it before entity\_tags\_set so you replace the full set knowingly, and to answer 'what is this filed under'. Entities the user can't see are omit - `entity\_tags\_browse`: Without a tag: every tag in use across the workspace with how many entities carry it, most-used first — the vocabulary the team already organizes by. With a tag: everything filed under it across every tool, each with its kind, id, title, and path. Use it to reuse existing labels instead of inventing - `entity\_tags\_set`: Replaces the FULL tag set on one entity \(an empty list clears it\). Read the current tags with entity\_tags\_get first and pass the merged list — this is not additive. Tags are lowercase letters, numbers, spaces, and hyphens; prefer labels already in use \(entity\_tags\_browse\) so the workspace's vocabula Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html