Local-first, evidence-backed web research workflows with durable state and decision packages. Provides MCP tools for verifying, comparing, importing, and rendering Decision Receipts offline.
Four tools with complete input schemas and descriptions. Naming follows verb_noun pattern (verify_, compare_, import_, render_). Descriptions are clear and security-conscious (e.g., 'Never imports cookies, sessions, provider prompts, or executable instructions'). All parameters have type constraints and descriptions. However, output schemas are not documented in the source code provided, and error handling guidance is absent. Tool descriptions average ~120 chars (within baseline 194 chars), but lack explicit guidance on when to use each tool vs. alternatives. No parameter descriptions explain expected formats or constraints beyond type/enum.
Verify and compare two local Decision Receipts without network access.
Convert one provider-neutral local JSON result into a Decision Receipt directory. Never imports cookies, sessions, provider prompts, or executable instructions.
Verify and render a local Decision Receipt as Markdown or JSON without HTML execution.
Verify a local Decision Receipt directory offline. Integrity is not proof of truth.
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields without knowing what each tool returns.
No error handling guidance. Error responses should tell LLMs what to do next (e.g., 'Path not found. Verify DECISION_RECEIPT_ROOT is set correctly.').
Parameter descriptions lack format/constraint details. 'path' params state 'symbolic links and escapes are rejected' but do not explain what constitutes a valid path format or examples of valid relative paths.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2025-06-18+ | v2 |
Tool descriptions do not explain when to use each tool vs. alternatives. E.g., when should an LLM call compare_receipts vs. render_receipt? What is the user intent difference?
import_result has a 'force' parameter with default=false, but the description does not explain what happens when force=true or what conflict scenarios trigger the need for force=true.