Skip to main content
Glama

lancedb-kb-mcp

A knowledge base for Claude (or any MCP client) that lives in one folder on disk.

  • Hybrid search: vector similarity and BM25 keyword search in one query, merged with reciprocal rank fusion. Meaning-based questions and exact strings like E1042 both work.

  • Notes: Claude can save, update and delete notes while it works.

  • Folder ingest: Markdown, text and reStructuredText files are chunked by heading, with the file and line range kept on every chunk so answers can cite their source.

  • Versions: every write creates a new version. Search the knowledge base as it was yesterday, or roll it back.

No server to run, no Docker, no API key. LanceDB is an embedded database (like SQLite, but for vectors), and the embedding model is small enough to run on a laptop CPU.

How it fits together

Claude Code ──stdio──▶ lancedb-kb-mcp ──▶ LanceDB table in ./kb-data
                           │                 ├─ vectors (384-dim)
                           │                 ├─ full-text index
                           └─ bge-small      └─ version history
                              (local model)

One table holds both notes and document chunks. Each row has the text, a title, a project, tags, the source file and line range, and its vector. Writes go through LanceDB's merge_insert, and the full-text index is rebuilt after each write.

Related MCP server: HomeKB MCP Server

Quick start

You need uv and Python 3.11 or newer.

git clone <this repo> && cd lancedb-kb-mcp
uv sync

# Index the sample docs and try a search from the command line
uv run lance-kb ingest examples/docs --project demo
uv run lance-kb search "why is the queue backing up"
uv run lance-kb search "E1042"

The first run downloads the embedding model (about 130 MB) into the Hugging Face cache. After that, ingesting the three sample files takes a few seconds.

The first query shares no keywords with the runbook it finds; the second is an exact error code. Three files are too few to show the difference between the modes. On mypy's documentation (37 files, 662 chunks), searching for each of its 78 error codes on its own put the right section first 61 times with vector search, 62 with keyword search and 69 with hybrid search. Try --mode vector and --mode text on your own docs to see where they differ.

Use it from Claude Code

This repo ships a project-scoped .mcp.json, so the quickest trial is to open Claude Code in this folder:

claude

Approve the lance-kb server when asked, then try:

  • "Index the docs in examples/docs under project demo."

  • "What should I check first when the queue backlog alert fires?"

  • "Save a note: device cache entries expire after 15 minutes, tag it cache."

  • "List the knowledge base versions, then search for E1042 as it was at version 2."

To use the same knowledge base from any project, register it once at user scope:

claude mcp add lance-kb --scope user \
  --env LANCE_KB_DIR=$HOME/lance-kb-data \
  -- uv run --directory /path/to/lancedb-kb-mcp lancedb-kb-mcp

Any other MCP client works the same way: the command is uv run lancedb-kb-mcp, over stdio.

Tools

Tool

What it does

search(query, k, project, kind, tag, version, mode)

Hybrid search by default; mode can be vector or text. Filters apply before the search, so a narrow filter still returns k results. version searches an older version.

get(item_id)

One note or chunk with its full text and metadata.

add_note(title, text, project, tags)

Save a note and return its id.

update_note(item_id, ...)

Change a note; it is re-embedded.

delete(item_id)

Delete a note or chunk. It stays in the version history.

ingest_folder(path, project)

Index a folder. Unchanged files are skipped by content hash; changed files have their chunks replaced.

list_versions()

Every version with its timestamp.

restore_version(version)

Make an older version current. This writes a new version, so nothing is lost.

Every search result has a score where higher is better: the fused rank score in hybrid mode, BM25 in text mode, cosine similarity in vector mode.

Configuration

Variable

Default

Meaning

LANCE_KB_DIR

kb-data

Where the LanceDB table lives.

LANCE_KB_MODEL

BAAI/bge-small-en-v1.5

Any sentence-transformers model. hash uses a tiny bag-of-words embedder with no download, meant for tests.

LANCE_KB_DEVICE

auto

cpu, cuda or mps.

The model is part of your schema. Vectors from different models are not comparable, so if you change LANCE_KB_MODEL, start a new LANCE_KB_DIR and re-ingest.

Why bge-small: 33M parameters and 384 dimensions, so it runs comfortably on a laptop CPU and keeps the table small, while scoring well on retrieval benchmarks for its size. For non-English content, swap in a multilingual model such as intfloat/multilingual-e5-small.

Sharing it with a team

The knowledge base is just a folder, so the simplest way to share it is to share the folder: commit a snapshot, sync it, or copy it. Each person points LANCE_KB_DIR at their copy.

LanceDB can also open a table on object storage (s3://, gs://, az://), which lets a team read the same table. This demo has only been tested on a local folder. If you try a shared bucket, keep to one writer at a time (for example, a scheduled job that runs lance-kb ingest on your docs) and let everyone else read.

Development

LANCE_KB_MODEL=hash uv run pytest
uv run ruff check src tests

The tests use the hash embedder, so they run in about a second with no model download.

Limits

  • One process writing at a time. Two Claude sessions writing notes to the same local folder can race; reads are fine.

  • The full-text index is rebuilt after every write, which is fine for thousands of rows and slow for millions. A larger deployment would batch writes and reindex on a schedule.

  • No vector index is built. Exact search over tens of thousands of chunks is fast; past a few hundred thousand, add one with table.create_index(...).

  • Only text files are ingested. PDFs, images and code need their own chunkers.

License

Apache-2.0. See LICENSE.

Available Tools

8 tools
add_noteC

Save a note (a decision, a finding, a how-to). Returns its id.

NameRequiredDescriptionDefault
tagsNo
textYes
titleYes
projectNodefault

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It adds only that the tool returns an id; it says nothing about persistence scope, permission requirements, duplicate handling, or whether tags/project must pre-exist. For a write tool with zero annotation coverage that is a substantial gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste, with the purpose front-loaded before the return-value note. Its brevity is a virtue structurally, though it shades into under-specification for a 4-parameter write tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so 'Returns its id' being terse is acceptable, but with no annotations, 0% parameter coverage, and an undocumented project-scoping parameter, the definition leaves an agent without enough to call this correctly in a multi-project store.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description mentions none of the four parameters — not title, text, tags, or project. The non-obvious 'project' parameter (default 'default') and the tags array are completely undocumented anywhere, so the description does not compensate at all for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Save a note') plus a parenthetical naming the kinds of content it holds (decision, finding, how-to), which makes the intent concrete. It does not explicitly differentiate itself from the sibling update_note, so an agent must infer that 'Save' means create-new rather than amend-existing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The content-type examples imply when this tool is appropriate (capturing decisions, findings, how-tos), but there is no explicit routing versus update_note, get, or search, and no statement about when not to use it. Usage is inferable but not guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deleteB

Delete a note or chunk. It stays recoverable through restore_version.

NameRequiredDescriptionDefault
item_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the important recoverability trait ('stays recoverable through restore_version'), which is valuable beyond the schema, but omits permissions, permanence after version lifetime, and side effects on chunks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and followed by the key recoverability note. There is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the essential delete-and-recover model for a mutation tool with an output schema. It still lacks permission requirements and the conditions under which recovery stops being possible, which matter for a destructive operation with no annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for the single required item_id, so the description should compensate. It only hints that the target may be 'a note or chunk', which adds some type context but does not explain the expected ID format or whether IDs are shared across both resource types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Delete') and resource ('a note or chunk'), which is clearer than a bare name. It partially distinguishes itself from the sibling restore_version by noting recoverability, though it doesn't clarify the exact identity or type of the target item_id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: delete a note or chunk, and recover via restore_version. However, it doesn't explicitly say when to choose this over update_note or when deletion is inappropriate, leaving alternatives and exclusions to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getB

Fetch one note or chunk by id, with its full text and metadata.

NameRequiredDescriptionDefault
item_idYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read ("Fetch") and says the full text and metadata come back, but says nothing about what happens when the id is missing, whether note ids and chunk ids share a namespace, or what access is required. For a lookup tool with zero annotation coverage, that is a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the verb, the resource, the selector, and the return payload all front-loaded. No filler to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the description correctly stays brief on that. However, with no annotations and a 0%-covered schema, the agent still lacks the id-format and not-found semantics needed to call this reliably rather than falling back to search.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (item_id) with 0% schema description coverage. The description's 'by id' tells the agent what item_id is, which partly compensates, but it does not clarify the accepted id format or whether note and chunk ids are interchangeable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: fetch one note or chunk, by id, returning full text and metadata. That distinguishes it from the other retrieval siblings (search, list_versions) which return collections. It doesn't name a sibling explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: you call this when you already have an id and need the full payload. There is no explicit statement of when to prefer this over search, nor what to do when the id is unknown (i.e. search first). Nothing is misleading, but the agent must infer the routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ingest_folderA

Index the Markdown, text and reStructuredText files under path, chunked by heading with file and line provenance. Unchanged files are skipped; changed files are re-chunked.

NameRequiredDescriptionDefault
pathYes
projectNodefault

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden; it does disclose the valuable incremental behavior (unchanged files skipped, changed files re-chunked). However, it never says that indexing writes state, what happens to files deleted from disk since the last run, which project/store is affected, or whether the operation is idempotent or costly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler and the core action front-loaded. Slightly dense clauses ('chunked by heading with file and line provenance') but every clause adds information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation-style tool with no annotations and no output schema, the description should cover the undocumented project parameter and say something about the result or scope of indexing. It covers the main path behavior well but leaves the second parameter and the effect of the operation unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for two parameters. The description clarifies that path is a directory root traversed for files, which is useful, but the project parameter is never mentioned at all, and there is no detail on path format, recursion depth, or how project scopes the index.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Index) and resource (Markdown, text and reStructuredText files under path), plus the chunking strategy. It is unmistakably distinct from the note-oriented siblings like get, search, and add_note.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the name and the 'under path' phrasing, but there is no explicit when-to-use guidance, no prerequisites, and no statement about how this relates to the search/get tools that consume the index. An agent must infer the workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_versionsA

List the knowledge base's versions (every write creates one).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose one genuinely useful trait: every write creates a version, so the list is effectively a write history. It omits ordering, pagination, permissions required, and whether the operation is read-only, all of which an agent would benefit from knowing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with the resource and the key behavioral fact front-loaded, and the parenthetical adds real value rather than restating the name. Nothing extraneous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and with zero parameters the description's burden is light. It is nearly complete, though it could note ordering (e.g., newest first) and how version identifiers connect to restore_version.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No parameter details are needed or missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the knowledge base's versions'), which is unambiguous. It doesn't explicitly contrast with siblings like get or restore_version, but the resource scope makes the purpose clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the verb: an agent can infer this is the way to enumerate versions, presumably before calling restore_version. No explicit when-to-use or when-not-to-use guidance, and no mention of alternatives such as get.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_versionA

Make an older version current again (a new version is written; history is kept).

NameRequiredDescriptionDefault
versionYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does real work: it discloses copy-on-write semantics ('a new version is written; history is kept'), telling the agent this is effectively non-destructive rather than an in-place overwrite. It does not cover permissions, whether the current version can be restored, or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with the action front-loaded and the important side effect in a parenthetical. No filler, and nothing essential is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the tool is a simple single-parameter mutation. The remaining gap is sourcing and validating the version argument, which the description leaves entirely to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single 'version' parameter, so the description must compensate. It implies the parameter identifies an 'older version' to promote, but does not say whether it is a version number versus an ID, where to obtain it, or whether the current version is a valid input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: make an older version current again. An agent can tell this apart from list_versions, get, or delete without opening a schema. It does not explicitly name the sibling that lists versions to source the input from, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'make an older version current again' implies the use case (rolling back to a prior state), but there is no explicit when-to-use/when-not guidance and no mention of siblings such as list_versions for discovering valid version numbers. Usage is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_noteB

Change a note's title, text, project or tags. It is re-embedded automatically.

NameRequiredDescriptionDefault
tagsNo
textNo
titleNo
item_idYes
projectNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose a genuine side effect ('re-embedded automatically'), which is real value beyond structured data, but it omits the critical mutation semantics: whether omitted/null fields leave values unchanged or clear them, whether tags are replaced or merged, and whether the update is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, and the mutation scope is front-loaded before the side-effect note. Nothing could be cut without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the re-embedding note helps. But for a 5-parameter mutation with 0% schema coverage and no annotations, the description leaves the partial-update contract and the meaning of item_id unaddressed — an agent cannot call this confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It lists four field names that map loosely onto the schema, but adds no semantics — nothing on whether null means 'no change' or 'clear', nothing on tag replacement vs merge, and it never mentions item_id, the sole required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Change') and resource ('note') and enumerates the mutable fields (title, text, project, tags). It is clearly distinct from add_note/delete, though it never names a sibling or states the scope constraint that item_id identifies the target.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Change a note's ...' implies this is for modifying an already-existing note rather than creating one, which implicitly separates it from add_note. However there is no explicit when-to-use guidance, no mention of prerequisites (note must exist), and no routing to restore_version for reverting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.1.0
    • First observedadd_note
    • First observeddelete
    • First observedget
    • First observedingest_folder
    • First observedlist_versions
    • First observedrestore_version
    • First observedsearch
    • First observedupdate_note

TDQS

A3.5/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a distinct action: get by id, search by query, add/update/delete notes, ingest folders, and manage versions. Although get/search/delete all operate on notes or chunks, their purposes and inputs are clearly separable.

Naming Consistency3/5

All names use snake_case, but the convention is mixed: add_note, update_note, ingest_folder, list_versions and restore_version are verb_noun, while get, search and delete are bare verbs. Still readable, but not a single predictable pattern.

Tool Count5/5

Eight tools is well-scoped for a knowledge-base server: CRUD for notes, search, folder ingestion, and version list/restore. Each tool earns its place without obvious redundancy.

Completeness4/5

The surface covers note creation, retrieval, update, deletion, search, ingestion, and version history/restore, so core lifecycle workflows are complete. Minor gaps exist around browsing/listing notes, projects or tags directly, but search filters largely compensate.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables Claude Code to search and retrieve from a local knowledge base of markdown notes using hybrid semantic+keyword search, keeping data entirely offline.
    20 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language interaction with a personal knowledge base stored locally on your computer, supporting semantic search, note reading, and writing through Claude Code or mobile apps.
    13
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables Claude Code to use local markdown notes as persistent, searchable memory with hybrid recall, episodic memory, note-graph traversal, design memory, and optional cloud sync.
    287 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables Claude to save, retrieve, update, search, and organize personal ideas and reusable analytical frameworks in a private SQLite-backed knowledge base. Supports local desktop use or always-on access across a user's own devices over a private network.
    8
    Apache 2.0