ShadowGraph
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SHADOWGRAPH_FILE | No | Disposable container-local MCP store. Do not upload private stores, authentication files or transcripts. | /tmp/shadowgraph/data.json |
| SHADOWGRAPH_MCP_COMPACT | No | Must be 0 with the Workflow Profile; compact=1 conflicts and startup rejects it. | 0 |
| SHADOWGRAPH_MCP_PROFILE | No | workflow selects 20 ordinary memory tools, reusing existing handlers and authorization. Restart/reconnect to change a profile. | workflow |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Local-first decision and scoped temporal memory. Session tools/list defines the callable tools, schemas and effect hints. Literal every-term lookup: shadowgraph_search. Ranked experience: shadowgraph_recall. Content matches plus one-hop neighbours: shadowgraph_retrieve. Project working set: shadowgraph_context. Full record behind a context line: shadowgraph_expand, with the returned expansion handle. A review signal is a saved reminder to revisit a decision. Reopen rules are saved conditions on rejected alternatives. shadowgraph_review rechecks conditions and saves reminders; shadowgraph_review_context also loads the working set; shadowgraph_reconsider rechecks and explains all verdicts, including unresolved conditions. These evaluation calls commit a revision even on repeats. shadowgraph_context does not save review signals. shadowgraph_review_signals, when advertised, reads already-saved reminders without reevaluation or signal creation. shadowgraph_ack_review takes the saved signal's id; a review item's reviewSignalId maps to its required id argument. Reading saved signals and evaluating conditions have different effects. Chosen approach: shadowgraph_record_decision. Tried action and result: shadowgraph_record_attempt. Project/key observation for conditions: shadowgraph_record_fact. Scoped reusable memory: shadowgraph_remember. What happened to an existing decision: shadowgraph_record_outcome. Supporting or contradicting evidence: shadowgraph_confidence_evidence, when advertised. Lifecycle transition: shadowgraph_update_status. Replacement relation between decisions: shadowgraph_supersede. Read-capable tools accepting accessId or grantId can save a bounded audit and revision when a key is presented. A grant widens reads, never write authority. IDs do not supply project/origin scope. Returned completeness and provenance describe the result limits. Full-only operator capabilities require an operator-selected Full session and reconnect. A named sibling is callable only when advertised. Profiles change advertisement, not stored memory or product capabilities.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| shadowgraph_record_decisionA | Record one decision: chosen option, assumptions, evidence, and rejected alternatives with reopenWhen rules. Use shadowgraph_record_attempt for something tried, shadowgraph_record_fact for an observation, shadowgraph_remember for a note. Appends a decision and a journal entry; without idempotencyKey each call adds another and commits a revision. |
| shadowgraph_record_attemptA | Record one attempt with its result; returns the stored attempt. Use shadowgraph_record_decision for a choice; shadowgraph_record_outcome updates an existing decision and its confidence. An attempt is a separate record. Appends an attempt and journal entry and commits a revision; idempotencyKey prevents duplicate retries. resultClass overrides wording-based failure classification. |
| shadowgraph_reviewA | Evaluate reopen rules and persist signals; return only due decisions as { items, completeness }, with signal IDs. shadowgraph_review_signals reads saved signals; shadowgraph_reconsider explains all verdicts; shadowgraph_review_context adds context; shadowgraph_ack_review closes a signal. Persists deduplicated owned signals; every call commits a revision. Grants widen audited reads only. No choice or lifecycle changes. |
| shadowgraph_searchA | Find direct content matches for every literal query term. shadowgraph_retrieve adds ordered neighbours; shadowgraph_recall ranks matches; shadowgraph_context prepares a working set. Own-scope read saves nothing; an access key commits a revision and bounded audit. Paginated matches and completeness. "redis timeout" requires both terms, not an exact phrase; empty query applies filters only. |
| shadowgraph_contextA | Read a planning working set without saving signals: decisions, stale facts, failed attempts and fired conditions. shadowgraph_search matches every term; shadowgraph_retrieve adds neighbours; shadowgraph_recall ranks memory; shadowgraph_review_context persists signals. No decision or signal writes. Unmatched-query diagnostics stay in memory until a later save. No immediate revision without an access key; a key saves a revision and audit. |
| shadowgraph_review_contextA | Load the project working set and persist signals from evaluating reopen rules. shadowgraph_context does not save signals; shadowgraph_review also persists them, returning due decisions only; shadowgraph_ack_review acknowledges one. Deduplicates owned signals; every call commits a revision. Grants widen audited reads only. No choice or lifecycle changes. |
| shadowgraph_rememberA | Add or reconcile one scoped memory, or apply an ADD/UPDATE/DELETE/NOOP plan, by identity tuple. Use shadowgraph_record_decision for a choice, shadowgraph_record_fact for an observation, shadowgraph_recall to read memory back. Identical content is a NOOP, new content supersedes and keeps history, DELETE invalidates; every call commits a revision. |
| shadowgraph_recallA | Rank relevant scoped memory and records by lexical, vector, graph and temporal signals. shadowgraph_search requires every term; shadowgraph_retrieve adds neighbours; shadowgraph_context prepares a working set. Own-scope read saves nothing; an access key commits a revision and bounded audit. Returns scores and available signals; no provider/vector means no semantic ranking. Omitted memory scope fields select null, not any user/run. |
| shadowgraph_record_factA | Record one observed fact as a project and key, with a claimed provenance class and optional validity window. Use for the fact keys reopenWhen rules name; shadowgraph_remember stores durable memory that is not an observation. Supersedes the previous active fact, keeping it as history. No input can make a fact verified. Each call commits a revision. |
| shadowgraph_record_outcomeA | Record what happened to an existing decision and update its evidence-weighted confidence. shadowgraph_confidence_evidence records evidence short of an outcome, shadowgraph_update_status changes the lifecycle state. One outcome contribution per decision: re-recording replaces it, updates the decision timestamp and commits a revision; it does not change lifecycle status. |
| shadowgraph_confidence_evidenceA | Update decision confidence with keyed supporting or contradicting evidence; no outcome is recorded. Use shadowgraph_record_outcome once the decision has played out, shadowgraph_record_fact for an observation that can reopen it. Reusing key cannot double-count, but restamps the decision and commits a revision; a new observation needs a new key. |
| shadowgraph_update_statusA | Move one decision to another lifecycle state. shadowgraph_supersede replaces a decision, shadowgraph_maintain alone produces stale, shadowgraph_record_outcome records the result. stale and superseded are system-owned and rejected. Setting the current state writes nothing but still commits a revision. |
| shadowgraph_expandA | Read the full current record behind an existing context line; use its expansion handle as input. shadowgraph_context supplies the handle; flatten its scope into top-level inputs. Own-scope read saves nothing; an access key commits a revision and bounded audit. Returns record, revision status and bounded counterparts. A stale digest yields revision_changed; inaccessible records yield unavailable. |
| shadowgraph_supersedeA | Mark one decision superseded by a replacement in the same project. shadowgraph_record_decision creates the replacement; shadowgraph_update_status changes state without replacement. Returns previous, replacement and relation. Both IDs must be owned in the same project/origin. History stays searchable; even repeats commit a revision. |
| shadowgraph_maintainA | Age due owned decisions to stale, expire due owned facts, then evaluate reopen rules. shadowgraph_review evaluates without aging; shadowgraph_validate diagnoses integrity. Maintenance does not repair or restore. Uses now or the clock; saves lifecycle changes and signals, even on repeats. Grants widen audited reads, not writes. Returns changed IDs, due items and stored signals, including acknowledged ones. |
| shadowgraph_retrieveA | Find content matches plus ordered graph neighbours. shadowgraph_search returns matches only; shadowgraph_recall ranks relevance; shadowgraph_context prepares a working set. Own-scope read saves nothing; an access key commits a revision and bounded audit. Paginated records with match/relationship reasons. Every term must match a seed; neighbours need not match. Both stay in scope. |
| shadowgraph_validateA | Diagnose record, graph and journal integrity without applying repairs. shadowgraph_maintain ages records; shadowgraph_review checks decision rules; shadowgraph_repair_plan (full mode only) proposes repairs; shadowgraph_rebuild (full mode only) checks journal replay. Own-scope read saves nothing; an access key commits a revision and bounded audit. For full-mode tools, ask the operator to unset SHADOWGRAPH_MCP_PROFILE and restart with SHADOWGRAPH_MCP_COMPACT=0. |
| shadowgraph_review_signalsA | Read saved review signals without reevaluating conditions or creating signals. shadowgraph_review rechecks conditions and creates signals; shadowgraph_ack_review acknowledges one. Without an access key, this read saves nothing. An access key commits a revision and bounded audit. Returns { items, completeness }, unpaginated. |
| shadowgraph_ack_reviewA | Acknowledge a saved review signal; changes its status, not the decision. Use reviewSignalId from shadowgraph_review or shadowgraph_review_context as id; shadowgraph_review_signals lists signals. Change decisions with shadowgraph_update_status or shadowgraph_supersede. Overwrites signal status and acknowledgedAt without a journal entry; rebuild cannot recover it. Each call commits a revision; repeats restamp it. |
| shadowgraph_reconsiderA | Explain all reopen verdicts, including unchanged and uncertain cases, and persist review signals. shadowgraph_review returns only due items; shadowgraph_ack_review closes a signal. Saves deduplicated owned signals and commits a revision. Grants widen audited reads only. No choice, confidence or lifecycle changes. review_recommended: condition fired; manual_review: unresolved evidence; unchanged: complete evaluation, no trigger. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| shadowgraph_consequential_task | What ShadowGraph records and returns about decisions, facts, attempts and outcomes. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| ShadowGraph context | Current project context and open review signals. |
TDQS
Scored across 20 tools
The write/record tools are mostly distinct, but the read and review surface has several near-overlapping tools: search vs retrieve vs recall vs context, and review vs review_context vs reconsider vs review_signals. The descriptions explicitly cross-reference each other, which helps, but the subtle distinctions still create meaningful misselection risk.
All tools use the same shadowgraph_ prefix and snake_case style, with mostly predictable verb_noun names. A few names are noun-only or less action-oriented, such as context and confidence_evidence, but the overall convention remains readable and consistent.
Twenty tools is borderline heavy for this server, especially because several are specialized read/review variants. Each tool does appear to have a specific role in the complex memory/decision domain, but the surface feels larger than necessary.
The set covers the core lifecycle well: recording decisions, facts, attempts, memory, outcomes, confidence evidence, status changes, supersession, review, search, maintenance, and validation. Some referenced full-mode operations such as repair_plan and rebuild are not present, and explicit deletion/export paths are limited, but the main workflows are covered.