A persistent learning graph engine for Claude Code via MCP — structured knowledge that carries forward across sessions
Strong foundation with 22 well-named tools using verb_noun convention (backpack_register, backpack_switch, backpack_add_edge). All tools have descriptions (avg ~150 chars, within 10-1024 baseline). Input schemas present with Zod validation. However, output schemas are not documented in the tool definitions, responses are inferred from code. Parameter descriptions are present but some lack format/constraint details (e.g., backpack_import_nodes edges array lacks clarity on index vs ID semantics). Error handling returns actionable messages but lacks recovery guidance in some cases. Tool composition is clean (single responsibility), and naming is consistent. Missing: explicit output schema documentation, per-parameter format constraints, and dry-run/confirmation patterns for destructive ops.
Show which backpack is currently active. Cheap to call — the agent should use this any time it needs to confirm context before writing to or reading from a graph.
Create a relationship between two items in a learning graph. The type is freeform (e.g. 'WORKS_WITH', 'REPORTS_TO', 'DEPENDS_ON').
Detect structural patterns in a learning graph using deterministic algorithms — no LLM inference. Identifies frequency outliers, dependency risks, cost drivers, governance gaps (missing owners), and contract/reality mismatches. Returns scored, ranked findings with recommended actions.
Pull a graph from Backpack App as a one-shot snapshot and save it locally as a new graph. Creates a fork: edits to the local copy do not sync back to cloud. Requires BACKPACK_TOKEN env var (and optional BACKPACK_APP_URL).
Explore connections from an item in a learning graph. Returns related items with their relationships. Use depth > 1 to follow the chain further (max 3).
Output schemas not documented in tool definitions. Responses are inferred from code; LLMs cannot predict return structure before calling. Affects all 22 tools.
backpack_import_nodes and backpack_validate_extraction lack clarity on edge source/target semantics. Parameter description says 'integer index (0-based) or string node ID' but does not explain how LLM should choose or what happens on mismatch.
Destructive tools (backpack_remove_edge, backpack_kb_delete, backpack_move_to_cloud) lack dry-run or confirmation patterns. Agents can delete data without preview or undo path.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Add multiple items and their relationships to a learning graph in one call. The batch is validated first: errors block the commit, warnings (type drift, duplicates, three-role rule violations) are surfaced in the response. Pass dryRun=true to get the validation result without committing. Edges reference new nodes by array index (0-based) or existing nodes by ID string.
Delete a document from the knowledge base. Cannot delete from read-only mounts.
Read a document from the KB (by ID) or from an arbitrary file path, and return its content formatted for mining into a learning graph. Use this to feed existing documents back into the mine → graph → synthesize cycle.
List documents in the knowledge base. Aggregates across all KB mounts, or filter by collection.
Add or remove a KB mount for the active backpack. Mounts are named filesystem paths. Use this to connect an Obsidian vault, shared drive, or any folder as a KB source.
List all configured KB mounts for the active backpack, with document counts.
Read the full content of a knowledge base document by ID.
Save a document to the knowledge base. Documents are markdown with metadata (tags, source graphs, source nodes). Use this to persist synthesis outputs, reports, analyses, or any derived artifact. Provide an id to update an existing document.
Search documents by text query across title, tags, and content. Optionally filter by collection.
Push a local graph to Backpack App as a one-shot snapshot, then delete the local copy (default) or keep it as a frozen archive. Cloud becomes the canonical home for the graph; no ongoing sync. Requires BACKPACK_TOKEN env var (and optional BACKPACK_APP_URL). Use backpack_export_from_cloud for the reverse one-shot fork.
Add a backpack — a pointer to a graphs directory that lets the user switch between multiple collections of learning graphs (personal, a shared OneDrive folder, a project-specific folder, etc). The display name is derived from the last segment of the path (e.g. '/Users/me/OneDrive/work' shows as 'work'). The path is created if it doesn't exist. Registering an already-registered path is a no-op. Does not switch to the new backpack unless activate=true.
List every backpack the user has registered, marking which one is currently active. Use this to show the user their options before a switch.
Remove a relationship between two items in a learning graph.
Change which backpack is currently active. All subsequent reads and writes go to the new backpack's graphs directory. The previous backpack's data is untouched and can be switched back to at any time. Accepts either a derived display name (e.g. 'work') or an absolute path.
Answer the 7 universal consulting intelligence questions about a learning graph using deterministic pattern detection — no LLM inference required. Questions: top problems by cost/frequency, relationship risks, overloaded people, governance gaps, opportunities, financial picture, disconnected systems. Returns structured findings per question.
Remove a backpack from the registry. Does NOT delete any data — the graphs directory at the backpack's path is left alone. Refuses to unregister the last remaining backpack. If the removed backpack was active, the first remaining backpack becomes active automatically. Accepts either a display name or an absolute path.
Run quality checks on proposed nodes and edges before importing them. Uses a processor pipeline (vagueness filter, relationship threshold, role-rule audit, duplicate detection) to surface errors and warnings. Errors block import; use force=true to override. Returns a quality report with recommendations.
backpack_kb_list, backpack_kb_search lack explicit pagination limits. Description mentions 'limit' and 'offset' but does not state max page size or default behavior when limit is omitted.
Error responses in code return generic error messages. No recovery guidance (e.g., 'Try backpack_active() to confirm context' or 'Available backpacks: ...'). Limits agent self-correction.