Gnosys
Gnosys is an MCP memory server that gives AI agents persistent, searchable memory across sessions and projects.
Read, create, update, reinforce, and reflect on structured memories with confidence, tags, status, and supersession links.
Search memories by keyword, semantic, or hybrid ranking, and recall relevant memories as context blocks.
Initialize projects, generate project briefings, inspect system health dashboards, and manage user preferences.
Traverse relationship graphs between memories and switch tool tiers at runtime (core, standard, full).
Higher tiers unlock additional capabilities such as file ingestion, attachments, codebase tracing, maintenance, remote sync, and Obsidian export.
Exports the Gnosys memory database into an Obsidian-compatible vault — atomic Markdown files with YAML frontmatter, [[wikilinks]], category summaries, and relationship graph data — so memories can be browsed and edited as a human-readable knowledge base.
Gnosys — One Brain. Zero Context Bloat.
Gnosys gives AI agents persistent memory that survives across sessions, projects, and machines.
The central brain is a single SQLite database at ~/.gnosys/gnosys.db with sub-10ms reads — no vector DBs, no black boxes, no external services. Federated search ranks results across project, user, and global scopes. It runs as a CLI and as a full MCP server that drops straight into Claude Code, Claude Desktop (Chat / Cowork / Code), Cursor, Codex, Gemini CLI, Antigravity, Grok Build, or any MCP client. When you want a human-readable view, gnosys export regenerates a full Obsidian vault on demand.
Install
Requires Node.js ^22.16.0 || >=24.0.0. FTS5 requires this floor. Node 23.x is unsupported. SQLite uses built-in
node:sqlite. No native SQLite dependency or rebuild is needed when switching supported Node versions.
npm install -g gnosys
gnosys setup # configures provider, API key, and your IDE/agentOptional local embeddings. Gnosys auto-installs @huggingface/transformers. If it cannot install, use an external embedding API. SQLite does not need this package.
Related MCP server: Mem0 MCP Server
Quick start
gnosys setup ides # wire MCP into your IDEs (once)
cd your-project
gnosys init # register the project
gnosys add "We chose PostgreSQL over MySQL for JSON support"
gnosys recall "database selection" # what's relevant right nowThat's the 60-second tour. Everything else lives on gnosys.ai.
What you get
Central brain — one
~/.gnosys/gnosys.dbunifies every project (project / user / global scopes). Sub-10ms reads, SQLite as the sole source of truth.Federated search — tier-boosted hybrid (FTS5 keyword + semantic) search across scopes, with recency and reinforcement.
MCP server —
gnosys serveexposes 50+ memory tools to any MCP client. Sandbox-first runtime keeps context cost near zero.Web Knowledge Base —
gnosys web buildturns any site into a searchable index for serverless chatbots, with optional build-time vectors for serverless-safe hybrid semantic search. Zero runtime deps.Dream Mode — idle-time consolidation: confidence decay, summaries, relationship discovery. Never deletes — only suggests.
Multi-machine sync — share your brain across machines; conflict detection with skip-and-flag resolution.
Obsidian export —
gnosys exportregenerates a full vault with frontmatter,[[wikilinks]], and graph data.
MCP Tool Reference
All tools are exposed over stdio and HTTP transports. Many tools accept an optional projectRoot parameter to target a specific project store.
This package installs two binaries:
gnosys— the CLI.gnosys servestarts the MCP server (stdio by default,--transport httpfor the central-server topology).gnosys setup ideswiresgnosys-mcpinto your IDE/agent configs.gnosys-mcp— a direct alias for the MCP stdio server entry, installed withnpm install -g gnosys, for MCP clients that spawn the server binary directly. Equivalent tognosys serve. With npx, usenpx -y gnosys serve.
On stdio EOF, the server drains received requests, writes their responses, and
closes resources before exiting 0. Embedding flushes get at most 500 ms or one
third of the shutdown timeout; reindex or an embedding-enabled Dream run recovers
missing vectors. Cleanup errors or the 1500 ms shutdown backstop exit 1.
GNOSYS_SHUTDOWN_TIMEOUT_MS accepts plain decimal integers without whitespace
(100–60000 ms). Out-of-range integers and signed infinities warn and clamp to
the nearest bound; other formats warn and use 1500 ms. Both transports exit
130 for SIGINT and 143 for SIGTERM. The first signal during an EOF drain lets
requests finish and sets that exit status. Only a second actual signal forces
immediate resource cleanup and exits with its status. HTTP ignores stdin closure.
On a signal, HTTP rejects new requests and drains admitted POST responses before closing SSE streams.
Synchronous event-loop blocking (for example a long handler or SQLite call) defeats the shutdown bound/backstop; there is no watchdog process.
Tool | Tier | Description |
| standard | Discover relevant memories by describing what you're working on. |
| core | Read a specific memory. |
| standard | Search memories by keyword across all stores. |
| standard | List memories across all stores, optionally filtered by category, tag, or store layer. |
| core | Preferred for LLM agents. Add a memory with structured fields you supply (title, category, tags, content) — makes no server-side LLM call. |
| full | Add a memory from raw text; the server's LLM structures it. For non-agent callers (scripts, cron) — agents should use |
| standard | List all tags in the registry, grouped by category. |
| full | Add a new tag to the registry. |
| core | Signal whether a memory was useful. |
| core | Initialize Gnosys in a project directory. |
| full | Migrate a Gnosys store (.gnosys/) from one directory to another. |
| core | Update an existing memory's frontmatter and/or content. |
| full | Find memories that haven't been modified or reviewed within a given number of days. |
| full | Pre-compaction memory sweep. |
| full | View audit history for a memory. |
| standard | Filtered view of memories. |
| standard | View memory creation and modification activity over time. |
| standard | Summary statistics across all memories — totals by category, status, author, authority, average confidence, and date ranges. |
| standard | Show wikilinks for a specific memory — outgoing [[links]] and backlinks from other memories. |
| standard | Show the full cross-reference graph across all memories. |
| full | Batch-import existing documents from a directory into the memory store. |
| full | Bulk import structured data (CSV, JSON, JSONL) into Gnosys memories. |
| core | Main search: keyword, semantic, or hybrid ranking with snippets and IDs. |
| standard | Search memories using semantic similarity only (no keyword matching). |
| full | Rebuild all semantic embeddings from every memory file. |
| standard | Ask a natural-language question and get a synthesized answer with citations from the entire vault. |
| full | Run vault maintenance: detect duplicate memories, apply confidence decay, consolidate similar memories. |
| full | Force-dearchive memories from archive.db back to active. |
| full | Build or rebuild the wikilink graph (.gnosys/graph.json). |
| full | Run a Dream Mode cycle — idle-time consolidation that decays confidence, generates category summaries, discovers relationships, and creates review suggestions. |
| full | Export gnosys.db to Obsidian-compatible vault — atomic Markdown files with YAML frontmatter, [[wikilinks]], category summaries, and relationship graph. |
| core | Show the Gnosys system dashboard: memory counts, maintenance health, graph stats, LLM provider status. |
| full | Debug tool — lists all detected Gnosys stores across registered projects, MCP workspace roots, cwd, and environment variables. |
| core | Fast memory recall — inject relevant memories as context. |
| full | View the audit trail of all memory operations (reads, writes, reinforcements, dearchives, maintenance). |
| core | Set a user preference. |
| core | Get a user preference by key, or list all preferences. |
| standard | Delete a user preference by key. |
| full | Get the current user preferences + project conventions formatted as a GNOSYS:START/GNOSYS:END block. |
| standard | Search across scopes with boosts, memory IDs, status labels, and replacements before history. |
| full | Check if a query matches memories in multiple projects. |
| core | Generate a project briefing — a summary of memory state, categories, recent activity, and top tags. |
| full | Portfolio dashboard — shows all registered projects with memory counts, categories, status snapshots, roadmap items, and recent activity. |
| full | Check the status of remote sync (multi-machine). |
| full | Push local memory changes to the remote (NAS) database. |
| full | Pull remote memory changes to the local database. |
| full | Resolve a sync conflict by choosing which version to keep. |
| standard | Get the prompt/template for writing a dashboard-compatible status memory for this project. |
| standard | Get the implicit working set — recently modified memories for the current project. |
| standard | Ingest a file (PDF, DOCX, TXT, MD, images via vision LLM, audio/video via Whisper transcription) into Gnosys memory. |
| standard | Attach a small binary file (logo, diagram, screenshot, small PDF) inline to a memory (~10MB limit; syncs machine-to-machine). |
| standard | Retrieve the binary attachment stored on a memory (base64 bytes, or write to disk via outputPath). |
| standard | Trace a codebase directory and store procedural "how" memories with call-chain relationships. |
| core | Record a real-world outcome against related memories, adjusting their confidence and linking them. |
| core | Walk relationship chains from a memory id (BFS, depth-limited), optionally filtered by direction or relationship types. |
| core | Inspect the tool catalog or switch the active tier. |
Toolset tiers
Tool descriptions and schemas consume agent context, so since v6.2.0 every session starts on the core tier and agents self-escalate in-session: calling gnosys_toolset without arguments lists what the higher tiers add, and gnosys_toolset {"set": "standard"|"full"} enables them at runtime (and "core" shrinks back). The switch emits notifications/tools/list_changed, so MCP clients pick up the new tools automatically.
Tier | Tools | Contents |
| 14 | Main memory workflow, hybrid search, reflection, traversal, and tier switching |
| 33 | Core plus specialist search, tracing, browsing, attachments, and ingestion |
| 56 | All tools, including freeform ingestion, maintenance, remote sync, and export |
GNOSYS_MCP_TOOLSET=core|standard|full overrides the starting tier (unknown values warn on stderr and fall back to core). The starting toolset and escalation hint are announced in the MCP server instructions. See docs/mcp-toolsets.md.
Documentation
Full docs & guides | |
Complete CLI + MCP reference | |
Changelog | |
Contributing | |
Security policy | |
Report a bug / request a feature |
License
Available Tools
14 toolsgnosys_add_structuredA
Save a structured memory without an LLM call, returning its ID, store label, and up to three active overlaps. Supply title, category, tags, and Markdown content; store defaults to project, author to ai, authority to observed, and confidence to 0.8 (also used for an explicit zero). supersedes links comma-separated predecessor IDs; cross-scope or cross-project links require allowCrossScope=true. Use gnosys_update instead to change an existing memory or unlink a predecessor with superseded_by="".
Inputs: tags (required), title (required), content (required), category (required), +8 more.
gnosys_briefingARead-onlyIdempotent
Summarize a project as Markdown with memory counts, categories, activity from the last seven days, top tags, and a summary. projectId takes precedence over projectRoot; otherwise detect from projectRoot or cwd. all=true returns summaries for all projects and ignores both selectors (default false). Use gnosys_dashboard instead for system health, graph statistics, and provider status as JSON.
Inputs: all, projectId, projectRoot.
gnosys_dashboardARead-onlyIdempotent
Inspect local memory-system health as JSON with memory counts, maintenance health, graph statistics, and LLM provider status. projectRoot selects the project context; omission uses the detected context. Use gnosys_briefing instead for a project summary and recent activity as Markdown.
Inputs: projectRoot.
gnosys_hybrid_searchA
Search memories by keyword and meaning, returning ranked snippets, IDs, scores, status, dates, and replacement links. mode is keyword, semantic, or hybrid (default); limit defaults to 15 and activeOnly to false. Use gnosys_recall instead for a context block, or gnosys_read for a full body. Specialist tools require gnosys_toolset {"set":"standard"}: use gnosys_search for plain keyword search, gnosys_federated_search for scope boosts, gnosys_discover for metadata only, or gnosys_semantic_search for embedding-only results. Embedding setup requires gnosys_toolset {"set":"full"} then gnosys_reindex. Example: {"query":"JWT refresh flow","mode":"keyword","limit":5}.
Inputs: query (required), mode, limit, activeOnly, +1 more.
gnosys_initADestructive
Initialize a project directory, returning its identity, store path, and setup summary. Pass an absolute directory (e.g. /work/app); projectName defaults to its basename. Creates .gnosys/ metadata and registers the project in the central SQLite store; run this before project-scoped operations on a new root. Use gnosys_briefing instead to inspect an already registered project.
Inputs: directory (required), projectName, projectRoot.
gnosys_preference_getARead-onlyIdempotent
Read a user preference by key, returning its title, value, confidence, and modified date, or omit key to list all preferences with their keys and values. Keys are kebab-case, e.g. {"key":"code-style"}; missing keys return a not-found message. Use gnosys_preference_set instead to save or replace a preference.
Inputs: key, projectRoot.
gnosys_preference_setADestructive
Save or replace a user preference across projects, returning its key, title, and value. Use kebab-case keys, e.g. {"key":"code-style","value":"Use named exports"}; title is generated from the key if omitted. Preferences persist as user-scoped memories; the CLI command gnosys sync refreshes generated rules files. Use gnosys_preference_get instead to inspect a key or list preferences.
Inputs: key (required), value (required), tags, title, +1 more.
gnosys_readARead-onlyIdempotent
Read a memory by ID (e.g. arch-012) or layer-prefixed path (e.g. project:decisions/why-not-rag.md), returning Markdown content, metadata, and supersession links. Unprefixed paths search stores in precedence order. Use gnosys_hybrid_search instead when you do not know the ID, or gnosys_recall for several relevant memories as context.
Inputs: path (required), projectRoot.
gnosys_recallARead-onlyIdempotent
Recall relevant memories as a context block for a task, e.g. query="JWT middleware". query="*" selects by reinforcement, confidence, and recency; limit uses config by default and is capped at 15; aggressive defaults to config (true). Use gnosys_hybrid_search instead to inspect ranked results or gnosys_read for one complete body. Registered projectRoot includes project, user, and global memories; omit it for all projects, or run gnosys_init for an unregistered root. Installed hooks may already inject this context per prompt.
Inputs: query (required), limit, traceId, aggressive, +1 more.
gnosys_reflectA
Record an outcome as a new reflection memory, returning its ID, confidence delta, updated memory IDs and confidences, and relationship count. memoryIds defaults to up to five keyword matches on outcome; success defaults to true and confidenceDelta to +0.05 on success or -0.1 on failure, clamping resulting confidence to 0.05..1. Success also reinforces targets and adds validates links; failure adds contradicts links. Use gnosys_reinforce instead for usefulness feedback without creating an outcome memory; each reflection call creates a new record and applies the delta again.
Inputs: outcome (required), notes, success, memoryIds, +2 more.
gnosys_reinforceA
Record usefulness feedback for one memory, returning a signal confirmation. useful increments reinforcement and resets decay; not_relevant records a routing miss without changing the memory; outdated marks it for review. Use gnosys_reflect instead to record an outcome memory, link evidence, and adjust confidence; repeated useful calls reinforce again.
Inputs: signal (required), memory_id (required), context, projectRoot.
gnosys_toolsetAIdempotent
List the active tool tier and a catalog of higher-tier tools as text, or set core, standard, or full to switch tiers and return added/removed tool names. Starts on core unless configured otherwise; omit set to inspect without switching. Example: {"set":"standard"} enables specialist search and tracing tools for this session.
Inputs: set.
gnosys_traverseARead-onlyIdempotent
Traverse stored memory relationships breadth-first, returning an indented text tree of IDs, titles, confidences, depths, and connecting edges. direction is out, in, or both (default); depth defaults to 3 with range 1..10. relTypes accepts stored relationship strings, including references, supersedes, leads_to, follows_from, requires, validates, contradicts, and corroborates; omission follows all types. Example: {"memoryId":"arch-012","depth":2,"relTypes":["requires"]}. To create relationships from source code, use gnosys_trace instead, which requires gnosys_toolset {"set":"standard"}.
Inputs: memoryId (required), depth, relTypes, direction, +1 more.
gnosys_updateADestructive
Update an existing memory by ID or path, returning a confirmation and changed fields. To archive, retire, or "delete" a memory, set status to archived or superseded with superseded_by (the replacement ID, mapped to supersededBy / --superseded-by in the CLI); hard deletion is human-only by design via the CLI. confidence accepts 0..1; content replaces the Markdown body; supersedes adds predecessor links and superseded_by="" unlinks a predecessor. Links reject cycles and require allowCrossScope=true across scopes or projects. Use gnosys_add_structured instead for a new memory.
Inputs: path (required), tags, title, status, +7 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Most tools have clearly distinct purposes, and descriptions explicitly cross-reference alternatives (read vs hybrid_search vs recall; reinforce vs reflect; dashboard vs briefing; update vs add_structured). The memory-retrieval trio (read/recall/hybrid_search) and the feedback pair (reinforce/reflect) overlap somewhat, but the guidance is strong enough that an agent can select confidently.
All tools share the gnosys_ prefix and use snake_case verb_noun patterns (read, add_structured, update, hybrid_search, preference_set/get, traverse). Minor deviations like gnosys_init and gnosys_toolset are noun-style rather than verb_noun, but overall very predictable.
14 tools is well within the ideal range, each mapping to a distinct memory-system operation (read/write/search/feedback/admin/preferences). The tiering mechanism gates advanced tools without bloating the default surface.
The surface covers the full memory lifecycle: create (add_structured), read, update/archive, search (hybrid_search/recall/traverse), feedback (reinforce/reflect), project setup (init/briefing/dashboard), and preferences. Hard deletion is intentionally human-only via CLI, a deliberate rather than accidental gap.
Maintenance
Related MCP Connectors
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Shared long-term memory vault for AI agents with 20 MCP tools.
Your personal library, readable by AI agents: durable snapshots, hybrid search, 46 MCP tools.
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Related MCP Servers
- AlicenseAqualityBmaintenanceMemory manager for AI apps and Agents using various graph and vector stores and allowing ingestion from 30+ data sources633,278Apache 2.0

Mem0 MCP Serverofficial
AlicenseAqualityFmaintenanceAn MCP server that integrates with mem0.ai to help users store, retrieve, and search coding preferences for more consistent programming practices.9662Apache 2.0
Supermemory MCPofficial
AlicenseNot gradedqualityDmaintenanceA universal memory server that allows users to access their chat memories across different LLMs without requiring logins or payment.1,731MIT
mcp-memoriofficial
AlicenseAqualityDmaintenanceWith Memori's MCP server, your agent can retrieve relevant memories before answering and store durable facts after responding, keeping context across sessions without any SDK integration. With MCP, it can: Store stable user facts and preferences after answering using the advanced_augmentation tool Recall relevant memories before answering using the recall tool Maintain context across sessions us248 npm2MIT