neurodock-mcp-cognitive-graph
Persistent entity memory for the NeuroDock substrate, exposed as an MCP
server. Externalises the user's working memory of people, projects,
decisions, and concepts so a hyperfocused or context-switched session does
not start from zero.
This is v0.0.3 β the current release. Vector recall, fastembed
embeddings, and sqlite-vec are deferred to a future version; see CHANGELOG.md.
Install
uv add neurodock-mcp-cognitive-graph
pip install neurodock-mcp-cognitive-graph
Use as an MCP server
Add to your ~/.claude.json (Claude Code) or claude_desktop_config.json (Claude Desktop):
{
"mcpServers": {
"neurodock-cognitive-graph": {
"command": "uv",
"args": ["run", "neurodock-mcp-cognitive-graph"]
}
}
}
Quickstart
uv sync --all-packages
uv run neurodock-mcp-cognitive-graph
The server stores its graph at ~/.neurodock/cognitive-graph.sqlite by
default. Override with the NEURODOCK_GRAPH_DB_PATH environment variable.
| Tool | Purpose |
|---|
recall_entity(name_or_alias) | Look up a person/project/decision/concept. Returns the entity, its facts (capped at 500), first-degree neighbours (capped at 20), and a resolution diagnostic. |
record_fact(subject, predicate, object, source?, confidence?) | Persist a typed-edge fact. Auto-creates entities by (type, name). Enforces the v0.1.0 eight-predicate vocabulary. |
recall_decisions(project, since?) | Return decisions for a project, ordered by date desc, capped at 200. |
weekly_rollup(project?) | Server-templated activity summary for the trailing seven UTC days. No LLM call (vendor boundary). |
The full input/output contract is in schemas/. The Pydantic v2 models in
src/neurodock_mcp_cognitive_graph/types.py mirror those schemas.
Predicate vocabulary
The eight predicates in v0.1.0 are: mentioned_in, decided_in,
reports_to, depends_on, resolved_by, blocked_by, tagged,
belongs_to. Unknown predicates raise PREDICATE_NOT_IN_VOCABULARY.
Extension predicates land via the v0.2 type_extensions mechanism β see
ADR 0002 β cognitive-graph tool design.
Privacy
- Local-first. No network access. No telemetry.
source strings are stored verbatim and never fetched by the server.
- User content (entity names, decision titles, fact text) is never logged.
Error logs include only the structured error code.
Storage
SQLite. One file. Migrations live as numbered .sql files in
src/neurodock_mcp_cognitive_graph/migrations/ and are applied on first
connect. The schema is described in migrations/0001_init.sql.
Architecture
src/neurodock_mcp_cognitive_graph/
βββ server.py FastMCP wiring + CLI entrypoint
βββ types.py Pydantic v2 models (mirror of the JSON Schemas)
βββ config.py Resolves the SQLite path
βββ clock.py SystemClock / FixedClock
βββ errors.py ToolError envelope
βββ resolution.py Entity name/alias cascade (exact, alias only in v0.0.3)
βββ rollup.py Heuristic decision/blocker/next-action assembly
βββ storage/
β βββ base.py Storage Protocol + row dataclasses
β βββ memory.py InMemoryStorage (used by tests)
β βββ sqlite.py SQLiteStorage (production backing)
βββ tools/
β βββ recall_entity.py
β βββ record_fact.py
β βββ recall_decisions.py
β βββ weekly_rollup.py
βββ migrations/
βββ 0001_init.sql
ADR pointers
Tests
uv run pytest packages/mcp-cognitive-graph/tests/ -v
25 tests covering: per-tool unit tests, a FastMCP protocol-conformance suite
that exercises every tool and validates the response against the JSON Schema
using jsonschema, and an end-to-end test that runs against a real
file-backed SQLite store.