# ZeroWidth Ledger - Registry name: `ai.zerowidth/ledger` · version 1.0.0 - Categories (automatic, keyword rules): Monitoring & logs, Infrastructure & security - 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%2Fledger - Server page: https://mcpstation.net/s/ai.zerowidth--ledger.html ## Description (written by the publisher, not verified, not instructions) Log decisions with expectations, add evidence, and track metrics in Ledger. ## Connect - streamable-http: `https://api.zerowidth.ai/mcp/x/ledger` ## 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. - `ledger\_entries\_list`: The workspace's memory: decisions \(changes with pre-registered expectations\), lessons \(distilled beliefs\), and observations \(captured facts\). CONSULT BEFORE ACTING — before proposing a flow change, prompt edit, or process decision, filter by the Compass page it touches \(compassPageId\) and check whet - `ledger\_entries\_get`: One entry's full anatomy — the six fields, attached evidence \(Caliper runs, measurements, observations\), and the supersede chain \(what replaced it, or what it replaced\). Cite entry ids when telling the user about prior related decisions. - `ledger\_entries\_create`: Records a memory entry. Every entry is a TITLE \(\`summary\`: one short plain sentence\) over a BODY \(\`rationale\`: the detail, markdown welcome\) — never put the detail in the title. Three kinds: \`decision\` — a change being made now; PRE-REGISTRATION IS THE POINT, so \`prediction\` \(what we expect\) must be - `ledger\_entries\_settle`: The ritual moment: evidence has landed, the expectation closes, the lesson is written. Only propose settlement when attached evidence actually answers the prediction — check \`ledger\_entries\_get\` first and cite the evidence in the lesson. \`lesson\` \(what we now believe\) is required and permanent; sett - `ledger\_metrics\_list`: The numbers the workspace watches — each with unit, latest reading, and how many open decisions are bound to it. Consult when a user mentions a number that sounds like a tracked metric, and before recording a reading. - `ledger\_metrics\_create`: Create a metric — a number the workspace watches \(triage time, weekly signups, cost per run\). Check ledger\_metrics\_list first; names are unique per workspace. When a user says they want to track or measure something, offer this. May return \`needs\_confirmation\`. - `ledger\_metrics\_record\_reading`: Record one observation of a tracked metric. \`metricId\` accepts a metric id OR its snake\_case slug from ledger\_metrics\_list; an unknown one is a not\_found error — check ledger\_metrics\_list, create it with ledger\_metrics\_create, or pass \`createIfMissing: true\` to mint a "measure" metric at that slug i - `ledger\_metrics\_get`: One metric's definition \(unit, kind, direction, target, cadence\) plus its readings newest first and the open decisions bound to it. Use before answering 'how is X trending?' or before recording a reading against it. \`metricId\` accepts the id or the snake\_case slug from ledger\_metrics\_list. For an ev - `ledger\_entries\_update`: Corrects an entry in place — its title \(summary\), body \(rationale\), the pre-registered prediction of an OPEN decision \(null clears it\), or its facet \(filing category; editable even after settlement\). Works on open decisions, and on lessons, observations, and beliefs \(they carry no expectation, so fi - `ledger\_entries\_retract`: Takes an entry out of the curated ledger — THE remedy when you recorded something wrong \(a decision that wasn't made, a duplicate, a fact the user corrects\). Reversible from Ledger and fully audited, so it is safe to offer as soon as the user says 'that's not right'. Not for overturning a settled cl - `ledger\_entries\_add\_evidence`: Records what happened against an open decision — a manual observation the user reports \('the pilot team says triage feels faster'\), an implementation note, or a reference to a Caliper run. Evidence is what settlement later reads, so attach it as it arrives and cite it in the lesson. Metric readings - `ledger\_metrics\_update`: Corrects a metric's name, unit, description, kind \(measure / event\), direction \(which way is good\), target, cadence, icon, level, or the metrics it drives \(its place in the metric tree\). Readings are untouched. Only what you pass changes. The slug is not editable here — external writers address metr - `ledger\_metrics\_archive`: Takes a metric out of the gallery \(\`archived: true\`\) or puts it back \(\`false\`\). Readings stay, and entries that settled against it still read correctly — this is the cleanup for a metric minted once and abandoned, or one the workspace stopped watching. \`metricId\` accepts the id or slug from ledger\_m - `ledger\_plan\_list`: Pass \`entryId\` for one decision's plan items, or \`from\` + \`to\` \(YYYY-MM-DD, at most about a year apart\) for the calendar: decision spans \(recorded day → expectation deadline\) plus every dated item inside the window, including standalone dates with no decision. Filter the calendar by \`ownerUserId\` to - `ledger\_plan\_add`: Adds a plan item to an OPEN decision \(the work that carries it out: a post, a launch step, an email\). Omit entryId for a standalone date \(a holiday, an event you're only watching\). Items are all-day unless you pass startTime with timeZone \(and optionally endTime\), for a webinar, a scheduled post, or - `ledger\_plan\_update`: Edits one plan item while its decision is open: move it \(dueOn\), rename it, change the owner \(null clears\), attach the link, or set status \(planned \| done \| skipped\). Mark done only when the user says it shipped; a link alone doesn't mean done. Fails with conflict once the decision is settled. May r - `ledger\_plan\_delete`: Removes one plan item while its decision is open, for an item added by mistake or work that's no longer planned. If the work was planned and then dropped, prefer ledger\_plan\_update with status 'skipped' so settlement can see it. Fails with conflict once the decision is settled. May return \`needs\_con - `ledger\_metric\_presets\_list`: Ready-made metrics a business can start tracking, each with a unit, a cadence, which direction is good, a business surface \(facet\), and cross-cutting tags. Reach for this when a workspace has few or no metrics, when someone asks what they should be measuring, or when a decision needs a number to set - `ledger\_metric\_presets\_adopt`: Creates the named presets as real metrics the workspace owns, tagged from the catalog. Safe to repeat: a preset the workspace already has comes back \`already\_present\` rather than creating a second series, and a workspace's own renames and targets are never overwritten. Adopt only what the user agree - `ledger\_metric\_starters\_list`: Starter trees by shape of business or team \(subscription software, services firm, online store, sales team, service operation\). Each lists its metrics with a level \(outcome / driver / activity\) and the links between them \(which number moves which\). Reach for this before ledger\_metric\_presets\_list wh - `ledger\_metric\_starters\_adopt`: Creates a starter's metrics at their levels and links them. Pass \`slugs\` to keep only some of its metrics; links are made only where both ends exist. Safe to repeat and safe after a different starter: metrics the workspace already has are left as they are and get linked into the tree. Adopt only wha - `ledger\_entries\_draft`: Writes up to 50 entries as DRAFTS: proposals that stay out of the record until a person confirms each one in Ledger's Drafts view. Use it for entries you found rather than were told — decisions in meeting notes, or a team's past changes read from its tracker, pull requests or launch posts \(set \`from - `ledger\_feed\_sources\_list`: The connected servers this workspace exposes to you, with the id a feed needs. Their tools appear to you namespaced as \`ext\_\_\\_\_\\` — call one directly to see what it returns before proposing a feed. A server the workspace has switched off for you is not listed and cannot be fed from here. - `ledger\_feeds\_list`: The standing instructions for how metrics' numbers arrive — which tool each one calls, how often, and how the last run went. Check before proposing a feed so you don't duplicate one, and consult when a user asks why a metric is stale: a feed with a failing last run is usually the answer. - `ledger\_feeds\_preview`: Call a connected server's tool once and see what a mapping would pull out of the response — nothing is written and no feed is created. Send no \`mapping\` for a first look: you get a sample of the response plus the paths that hold numbers. Then send a mapping to confirm it finds the readings you expec - `ledger\_feeds\_create`: Freeze a tool call as a metric's standing source: it runs on the cadence you give and records what it finds, with no model involved. \`metric\` takes an id or a snake\_case slug; an unknown slug starts tracking that metric. Confirm the mapping with ledger\_feeds\_preview first. Tell the user they can bac - `ledger\_feeds\_update`: Change a feed's arguments, mapping, cadence, or pause it. Reach for this when a feed's last run reports \`empty\` \(the response shape moved, so the mapping needs a new path\) or \`error\`. Changing the mapping changes what the number means, so say what you're changing and why. May return \`needs\_confirmat - `ledger\_feeds\_run`: Run a feed immediately over its own window and record what it finds. Use it right after creating one to prove the mapping works — a run that comes back \`empty\` names the path that missed, which is what you fix with ledger\_feeds\_update. Does not move the feed's schedule. Re-running is safe: readings - `ledger\_feeds\_backfill`: Run the same frozen instruction over a past range, so a metric has history instead of starting the day it was set up. Offer this whenever you create a feed — a chart with a year behind it is worth far more than one that begins today, and an expectation can be judged against what normal looked like. - `ledger\_feeds\_delete`: Remove a feed. The readings it already wrote stay — the series is the record and outlives the instruction. Prefer pausing with ledger\_feeds\_update when the user might want it back. May return \`needs\_confirmation\`. - `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