MCP server for reconstructing organizational decisions from engineering artifacts using Claude. Provides tools for ingesting, extracting, analyzing, and querying decision graphs from GitHub repositories.
19 tools with mixed quality. Naming is generally verb-based (dg_*, search_*, read_*, emit_*, create_*) but lacks clarity on distinctions (dg_graph vs dg_link vs dg_analyze). Descriptions present but brief (avg ~80 chars, below 194-char baseline). Input schemas visible and typed (Zod-based), but output schemas undocumented. Error handling minimal, no recovery guidance. Tool composition shows orchestration concerns (dg_analyze bundles ingest→extract→graph→link) violating single-responsibility. Evidence-based tools (search_items, read_issue, etc.) are well-scoped but lack parameter constraints (e.g., search_items.limit has no bounds). emit_decision and create_edge lack visible input schemas in source.
Link extracted decisions across the graph (used by LinkingAgent).
ingest → extract → graph → link; returns a repository summary.
Ask the Decision Graph a question; returns answer + reasoning + evidence.
Ask a counterfactual question against the decision graph.
Workspace / connector / graph health as structured JSON.
Evaluate ground-truth coverage for a specific component.
Export the graph in json, graphml, or mermaid format.
emit_decision and create_edge lack visible input schemas in source code. Cannot verify parameter types, constraints, or descriptions. Scoring capped at 0 for schema.
dg_analyze bundles four operations (ingest→extract→graph→link) into one tool, violating single-responsibility. Agents cannot compose these steps independently or retry individual stages.
Output schemas undocumented for all 19 tools. LLMs cannot predict response structure, forcing them to guess field names for downstream tool calls. Breaks tool chaining.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2025-06-18+ | v2 |
Extract decisions for specific components from ingested data.
Build the decision graph from extracted components.
Synchronize a connector into the workspace.
Link extracted decisions across the graph.
Replay a previous run from its run ID.
Record ONE reconstructed decision. Requires: at least one evidence item whose excerpt is a VERBATIM quote from a source you read; a justified confidence grade; observedOutcome null if no follow-up evidence exists. Rejections explain exactly what to fix.
List entries of a repository directory (empty path = root).
Read a commit message and metadata by SHA (short prefixes OK).
Read a repository file from the cache — RFCs (rfcs/), docs, READMEs. Design-stage reasoning often lives in RFCs.
Read an issue's full body and comment thread from the evidence cache.
Read a pull request: body, discussion, review comments (where alternatives and pushback live), and files touched. Use full=true only if truncation hid something you need.
Keyword-search cached issues, PRs and discussions (titles, bodies, comments). Returns ranked hits with snippets. Try multiple phrasings — synonyms, component aliases, error messages.
search_items.limit parameter has no bounds documented. LLMs could pass 0, negative, or 1M values. Rubric requires min/max for numeric params.
Descriptions average ~80 chars, below 194-char baseline. dg_link (40 chars), dg_graph (45 chars), dg_ingest (50 chars) lack context on when/why to use them vs similar tools.