cwi-mcp-server
OfficialThis server is a read-only MCP server for reading CWI's Gear Ledger and running local verification tools.
Read live Gear Ledger version summary (version, updated_at, sha, task/agent counts).
Fetch full or selected ledger state fields (agents, tasks, presence, handoffs, approvals).
List agents with their latest presence heartbeat.
List task summaries, optionally filtered by lifecycle state.
Get full task detail by task_id, including state history and artifacts.
Score agent trust via the CWI Verdict Engine, returning a deterministic score or an honest
insufficient-data/evidence-disputedverdict.Verify hash-chain integrity of NEEDLE DROP placement ledgers (
cwi-needledrop/v1), defaulting to the vendored example ledger or verifying any absolute file path.Everything is read-only: no signing, writing, presence heartbeats, or state mutation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cwi-mcp-serverCheck the trust verdict for agent agent-42 with the latest signals."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
cwi-mcp-server
CWI's read-only MCP (Model Context Protocol) server. Nine tools, zero dependencies, stdio transport — connect it to any MCP client (Claude Desktop, Claude Code, Cursor, or another agent) and read CWI's trust infrastructure from your own runtime.
What you get:
Gear Ledger reads (5 tools) — the live, public provenance log of the CWI agent company: version, full state, agents + presence, task summaries, single-task detail.
trust_verdict— score agent trust with the CWI Verdict Engine v1.0.0 (deterministic, evidence-bound; it returnsinsufficient-datainstead of inventing a score).needledrop_verify— verify the hash-chain integrity of any NEEDLE DROP placement ledger (cwi-needledrop/v1).errorbar_stamp— stamp any claim with a reproducible confidence interval + provenance check (The Error Bar v1.0.0; deterministic given the seed — fake precision dies on contact).errorbar_verify— re-run an Error Bar stamp and check byte-equivalence. A stamp that cannot be re-run is void.
Read-only means read-only. No write tools, no signing, no presence heartbeats, no task creation, no state mutation. The server holds no secrets: no tokens, passwords, or keys in code, config, or logs.
Don't trust us — see VERIFY.md for how to check every claim yourself, cold, in under five minutes.
Install (copy-paste)
Requirements: Node ≥ 18 and python3 on your PATH. Nothing to install — there are zero dependencies.
git clone https://github.com/CumulativeWebInc/cwi-mcp-server.git
cd cwi-mcp-server
node test.js # expect: 28/28 tests passedThat's it. server.js is the server.
Related MCP server: Archive MCP Server
Connect your MCP client
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"cwi": {
"command": "node",
"args": ["/absolute/path/to/cwi-mcp-server/server.js"]
}
}
}Claude Code / any stdio MCP client: same shape — command node, one
argument: the absolute path to server.js. Transport is stdio: one JSON-RPC
object per line on stdin, responses on stdout.
The 7 tools
# | Tool | Arguments | Returns |
1 |
| none |
|
2 |
|
| Full ledger state, or selected top-level keys |
3 |
| none | Every registered agent + latest presence heartbeat |
4 |
|
| Task summaries; filter by lifecycle state |
5 |
|
| Full task detail incl. state history and artifacts |
6 |
|
| Trust score or honest |
7 |
|
|
|
Example — read the ledger version
// tools/call {"name": "ledger_state_version", "arguments": {}}
{
"version": 1541,
"updated_at": "2026-09-17T11:23:35Z",
"sha": "3b2b46c8b8e14e0a3351e8896c6bd75e53391cde",
"tasks": 38,
"agents": 11
}Example — score trust (or get an honest refusal)
// tools/call {"name": "trust_verdict", "arguments": {"input": {
"engine_version": "1.0.0",
"subject": {"agent_id": "some_agent"},
"context": "agent-trust",
"observed_at": "2026-09-17T12:00:00Z",
"signals": {"erc8004": [], "needle_drop": [], "first_spin": []}
}}}
{
"status": "insufficient-data",
"score": null,
"missing": ["at least 3 verified signals across 2 families"],
"input_sha256": "9f2c…"
}Empty evidence → insufficient-data, never a made-up number. That's the
engine's whole point. Feed it real, citable evidence and you get a real
score; the output carries input_sha256 so anyone can reproduce it
byte-for-byte.
Example — verify a NEEDLE DROP ledger
// tools/call {"name": "needledrop_verify", "arguments": {}}
{
"file": "vendor/needledrop/example-ledger.json",
"ok": true,
"messages": ["chain intact"]
}Point file at any absolute path to a cwi-needledrop/v1 ledger to verify
that one instead. Tampered entries fail — try it: copy the example ledger,
edit one byte, watch ok flip to false with the entry named.
How the ledger reads work on your machine
On CWI's infrastructure the tools read through the canonical ledger CLI. On
yours, they read the same bytes from CWI's public
gear-ledger repo — no
auth, no setup. (trust_verdict and needledrop_verify are fully local and
never touch the network at all.)
Files
server.js— the server (7 tools, stdio, zero deps)test.js— full protocol + tool harness (node test.js→ 28/28)VERIFY.md— the zero-trust verification guide: check everything yourselfEQUIPS.md— public, receipt-only log of external equipsagent-card.json— machine-readable card for agent discoveryvendor/cwi-verdict-engine-v1.0.0/— the vendored verdict engine (byte-identical copy; seevendor/cwi-verdict-engine-v1.0.0/SOURCE.md)vendor/needledrop/—ledger.py+ schema + a 2-entry example ledger (entries sealed by the realledger.py, clearly labeled as examples)examples/— real verdict output from a 2026-09-17 run
Result, measurement, kill rule
Result this must produce: an external agent calls a tool with their identity attached. Receipts go in EQUIPS.md.
Measured by: real tool calls with checkable receipts.
Kill rule: 0 external calls by 2026-10-01 → the MCP server is retired as an adoption surface (kept for internal use) and the lesson is logged.
License
MIT — see LICENSE.
Available Tools
7 toolsledger_agentsA
Read-only: Gear Ledger agents with their latest presence heartbeat merged in (status, last seen, current task, note). No arguments. On machines without the CWI ledger CLI, reads the public CWI gear-ledger repo (no auth, read-only).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states the tool is read-only, which is a key behavioral trait. It also discloses the fallback to reading a public repo without authentication, which is useful context. It does not mention error handling or rate limits, but for a read-only tool with no arguments, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the critical 'Read-only' qualifier, then details the resource and return fields, and finally the fallback. Every sentence adds value with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description provides a clear account of what the tool returns (status, last seen, current task, note) and how it behaves on machines without the CLI. This is sufficient for an agent to decide to call it and understand the result, though it does not detail the exact output structure or potential edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty. The description confirms 'No arguments,' so the description fully covers the parameter semantics. Since there are no parameters, the baseline is 4, and the description appropriately notes the absence of arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a read-only operation that retrieves Gear Ledger agents with presence heartbeat data. It specifies the resource (agents) and the verb (read), and lists the returned fields. However, it does not explicitly differentiate from sibling tools like ledger_state_get or ledger_tasks, which also appear to be read-only queries, so it lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this tool to get agent status and presence information. It notes there are no arguments and describes a fallback behavior for machines without the CWI ledger CLI. However, it does not provide guidance on when to use this tool over sibling tools such as ledger_state_get or ledger_tasks, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_state_getA
Read-only: full Gear Ledger state.json document (agents, tasks, presence, handoffs, approvals). Optionally pass fields to select top-level keys. On machines without the CWI ledger CLI, reads the public CWI gear-ledger repo (no auth, read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Top-level keys to include (e.g. ["agents","tasks"]). Omit for the whole document. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly discloses the read-only nature, the fallback to a public repo without auth, and the optional field selection behavior. Since no annotations are provided, the description carries the full burden, and it does so well by covering safety (read-only), auth requirements (no auth in fallback), and data scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The read-only nature and resource are front-loaded, followed by the optional parameter behavior and the fallback context. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter and no output schema, the description covers the essential context: what it returns, how to filter, and what happens in different environments. It doesn't describe the return format, but with no output schema and a simple JSON document, this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the `fields` parameter. The description adds context by explaining that fields selects top-level keys and that omitting it returns the whole document, which aligns with the schema. This is baseline 3 territory since the schema does the heavy lifting and the description adds only marginal clarification.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('read-only') and resource ('full Gear Ledger state.json document'), and enumerates the document's contents (agents, tasks, presence, handoffs, approvals). It also distinguishes itself from sibling tools by describing the full-document scope, while siblings like ledger_agents and ledger_tasks target specific subsets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use this tool: to retrieve the full ledger state document, with optional field filtering. It also provides a fallback behavior (reads public repo when CLI is unavailable), which helps an agent understand when the tool will work. However, it doesn't explicitly name sibling alternatives or state when to prefer them over this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_state_versionA
Read-only: Gear Ledger version summary (version number, updated_at, repo sha, task count, agent count). No arguments. On machines without the CWI ledger CLI, reads the public CWI gear-ledger repo (no auth, read-only).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It clearly states the tool is read-only and takes no arguments, and it discloses a fallback behavior: on machines without the CWI ledger CLI, it reads the public CWI gear-ledger repo without auth. This covers the key behavioral traits. It does not mention error conditions or output format details, but for a simple read-only summary tool, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences with no redundant information. The first sentence front-loads the purpose and output fields, while the second adds the fallback behavior. Every word earns its place; there is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, read-only, no output schema), the description covers all essential information: what it returns, the read-only nature, and the fallback environment. It does not specify the exact data types or response format, but the listed fields are sufficient for an agent to understand the return value. It is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (empty object). The description explicitly confirms 'No arguments,' which matches the schema. Since there are no parameters to describe, the baseline score of 4 applies; the description adds no additional semantic burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: it returns a version summary of the Gear Ledger with specific fields (version number, updated_at, repo sha, task count, agent count). It also declares 'Read-only' and 'No arguments,' which distinguishes it from sibling tools like ledger_state_get, ledger_agents, and ledger_tasks that focus on different aspects. The verb is implied but the resource and output are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly mention when to use this tool versus alternatives or provide any exclusions. However, the name and content make it obvious that this is the tool for version summary, so usage is implied. No guidance is given on when not to use it or when to prefer siblings, but the tool's simplicity and self-evident purpose mitigate the lack.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_task_getA
Read-only: full detail of one Gear Ledger task by task_id (including state history and artifacts). On machines without the CWI ledger CLI, reads the public CWI gear-ledger repo (no auth, read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task_id to fetch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It explicitly discloses that the operation is read-only, requires no auth when falling back to the public repo, and only that fallback occurs on machines without the CWI ledger CLI. It could additionally mention failure/error behavior, but the safety and access profile are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with no filler. The read-only nature and core purpose are front-loaded, and the fallback behavior is added as a clearly separable second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter fetch tool without an output schema, the description gives enough context about the response scope ('full detail', 'state history and artifacts') and the operational fallback behavior. It is not exhaustive about exact response formatting or error cases, but those are reasonable gaps for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter is already fully documented. The description reaffirms that task_id selects the task, but it does not add new semantic detail beyond the schema, keeping this at the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('get'), a specific resource ('one Gear Ledger task'), and the identifying key ('task_id'). It differentiates itself from the sibling 'ledger_tasks' by emphasizing singular full-detail retrieval including state history and artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly conveys when to use this tool: when the agent needs the full detail of exactly one Gear Ledger task by ID. It does not explicitly name alternate tools or exclusion conditions, but the singular vs. plural sibling split makes the intended usage evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ledger_tasksA
Read-only: list Gear Ledger tasks (summaries). Optionally filter by state (created, assigned, in_progress, delivered, verified, cancelled, failed). On machines without the CWI ledger CLI, reads the public CWI gear-ledger repo (no auth, read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Filter tasks by lifecycle state. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well by explicitly declaring 'Read-only' and repeating 'no auth, read-only' for the fallback path. It does not detail behavior when the CWI ledger CLI is present or describe pagination/limits, but the most important side-effect and auth traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with 'Read-only: list...', and each clause contributes distinct information: purpose, filter, and fallback/auth behavior. There is no filler or boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter read-only listing tool, the description is nearly complete: it specifies the output type ('summaries'), the optional filter, and the auth/environment behavior. Without an output schema, explicit return-shape or pagination details would be the only meaningful addition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the schema already documents the optional `state` parameter with an enum and a description. The description merely restates the enum values, so it adds no semantic value beyond the structured definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb-resource pair: 'list Gear Ledger tasks (summaries)', and the opening 'Read-only:' immediately sets expectations. The singular/plural contrast with siblings such as ledger_task_get and ledger_agents signals that this is the collection-listing entry point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states when to use the tool (to get task summaries) and how to refine it (optional state filter), and it documents the environment-specific fallback to the public repo with no auth. It does not explicitly name sibling alternatives or say when not to use it, but the listing/summaries scope is enough to avoid obvious misrouting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
needledrop_verifyA
Verify-only: check the hash-chain integrity of a NEEDLE DROP placement ledger (cwi-needledrop/v1). Recomputes every entry hash, checks prev_hash linkage, chain head, and revision-note consistency. Tampered or corrupt ledgers fail. No signing, no sealing — verification only. Defaults to the vendored example ledger (vendor/needledrop/example-ledger.json); pass an absolute file path to verify any other cwi-needledrop/v1 ledger, e.g. CWI's canonical needle-drop.json.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Absolute path to a cwi-needledrop/v1 ledger JSON file. Defaults to the canonical CWI needle-drop.json. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that the tool is verification-only, recomputes entry hashes, checks prev_hash linkage and chain head, and fails on tampered or corrupt ledgers. It does not describe the success return/exit behavior, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense, front-loaded sentences. Every clause adds operational detail—verification scope, checks performed, failure condition, default path, and parameter guidance—with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter tool with no output schema, the description provides enough to invoke it correctly: exact verification checks, tamper/corruption failure behavior, default input, and how to override the default. The only notable omission is what a successful verification returns, but that does not block correct tool selection or invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds useful details such as 'absolute path' and the default file location, but its stated default (vendor/needledrop/example-ledger.json) is not clearly aligned with the schema's 'canonical CWI needle-drop.json', introducing some ambiguity about what happens with no file argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Verify-only' and states a specific operation: checking hash-chain integrity of a cwi-needledrop/v1 ledger. It names the exact checks performed and explicitly contrasts with signing/sealing, making the tool's purpose unmistakable and distinguishable from the sibling ledger getters and trust_verdict.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: verify a ledger, default to the vendored example, or pass an absolute file path for any other cwi-needledrop/v1 ledger. It does not explicitly name an alternative sibling to use instead, but the 'No signing, no sealing — verification only' note removes the main boundary confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trust_verdictA
Score agent trust with the CWI Verdict Engine v1.0.0 (deterministic, evidence-bound). Pass input as the engine input object: {engine_version, subject:{agent_id,...}, context, observed_at, signals:{erc8004:[], needle_drop:[], first_spin:[]}}. The engine NEVER invents a score: insufficient evidence yields status "insufficient-data" (score null), disputed evidence yields "evidence-disputed" — report those as-is. Inputs must be real, citable evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | Engine input document per trust/spec.md section 3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral burden. It explicitly discloses that the engine NEVER invents a score, specifies the two special statuses ('insufficient-data' with null score, 'evidence-disputed'), instructs agents to report those statuses as-is, and mandates that inputs must be real, citable evidence. This level of disclosure exceeds expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, input structure, and behavioral caveats. The description is front-loaded with the primary action and includes a concrete input template. Minor density in the middle sentence could be tightened, but there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested input, no output schema), the description covers input structure and special statuses well. It stops short of describing the full successful response shape (e.g., the score value and evidence binding), but the mention of statuses and the 'report as-is' directive gives agents enough to handle the key edge cases. A short note on the normal payload would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only says 'Engine input document per trust/spec.md section 3,' which is nearly meaningless without external specs. The description compensates by spelling out the exact expected object shape: {engine_version, subject:{agent_id,...}, context, observed_at, signals:{erc8004:[], needle_drop:[], first_spin:[]}}. This adds critical structural semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Score agent trust with the CWI Verdict Engine v1.0.0.' It also adds distinguishing traits ('deterministic, evidence-bound') that separate it from ledger or verification siblings. An agent can immediately identify this as the trust-scoring tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool (to score agent trust) and how to structure the input, but it never explicitly names alternatives or conditions for not using it. It does not reference sibling tools or state exclusions, leaving the when-not-to-use guidance to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.2.0- First observed
ledger_agents - First observed
ledger_state_get - First observed
ledger_state_version - First observed
ledger_task_get - First observed
ledger_tasks - First observed
needledrop_verify - First observed
trust_verdict
TDQS
Scored across 7 tools
Each tool has a distinct purpose: ledger_state_get returns the full state document, ledger_agents and ledger_tasks are specialized views, ledger_task_get is a detail lookup, and trust_verdict/needledrop_verify cover different verification domains. The only mild ambiguity is that ledger_state_get can also reach agents/tasks via its fields argument, but descriptions make the specialized tools clearly preferable for those cases.
The ledger tools share a useful `ledger_` prefix and snake_case, but verb placement is inconsistent: some names end with `_get` (ledger_state_get, ledger_task_get), others are bare nouns (ledger_agents, ledger_tasks), one is a noun phrase (ledger_state_version), and the non-ledger tools use different forms (trust_verdict, needledrop_verify). The convention is readable but not predictable enough to infer tool names without reading descriptions.
Seven tools is a well-scoped set for this server. It provides the core read-only ledger views, a task detail endpoint, the state version, plus two specialized verification/scoring tools without unnecessary redundancy.
The read-only ledger surface covers the main entities: full state, agents with presence, task summaries, and task detail, plus a version endpoint. The main gap is that handoffs and approvals are only reachable through ledger_state_get rather than dedicated tools, but agents can work around that by requesting the full state or selecting fields.
Maintenance
Related MCP Connectors
Verifies Bernstein run receipts and hash chains; lists the shipped presets and adapters. Read-only.
71Read-only gateway for durable agent identity, consent, recognized work, and signed receipts.
Read-only verifier for 25 ProofRelay MCP tools and non-confidential evidence bundles.
Look up a witnessed Trust Profile, read a domain's security surface, or verify a Trust Ledger Token.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables validating and verifying verifiable claims through structural checks, hash anchoring, and optional script execution, exposing self-test, validate, and verify tools over stdio.3MIT
- FlicenseNot gradedqualityCmaintenanceEnables querying enterprise records and retention policies from any MCP client over stdio, with read-only tools for searching records, fetching retention verdicts, identifying archival candidates, summarizing departments, forecasting retentions, and viewing audit history.-
- AlicenseAqualityBmaintenanceEnables agents to read Cluby markets, positions, and pre-trade quotes over stdio, using the same arithmetic as the interface while holding no keys and signing nothing.9MIT
- AlicenseNot gradedqualityAmaintenanceEnables agents and applications to record, query, verify, and receive hash-chained event provenance over stdio, supporting self-metering and independent audit of autonomous system activity.6MIT