Skip to main content

Local-first MCP memory server for persistent LLM knowledge and BM25 retrieval

Project description

Dense Knowledge

PyPI Python CI License: MIT

A local-first MCP memory server for persistent LLM knowledge.

Dense Knowledge lets an AI assistant keep structured research between sessions without a database, embedding model, or hosted account. It stores portable .mmp files, searches their compact indexes with BM25, and loads full entries only when they are relevant.

question -> compact index/search -> selected knowledge blocks -> answer
             inexpensive             detailed context

It works with LM Studio, Claude Desktop, Cursor, VS Code, and other clients that support local stdio Model Context Protocol servers.

Why Dense Knowledge?

  • Selective context: index first, body blocks only on demand.
  • Local and portable: plain ASCII-in-UTF-8 files that can be copied, inspected, diffed, and backed up.
  • No vector infrastructure: deterministic BM25 search with abbreviation and synonym expansion.
  • Append-only history: updates supersede older entries instead of erasing them.
  • Explicit provenance: established and contested claims carry source IDs; unsourced inferences are marked as hypotheses.
  • Safer retrieval: stored text is wrapped as untrusted data and screened for common prompt-injection contamination.

The bundled context benchmark uses 40 entries. In its synthetic fixture, searching and reading the two best blocks uses 94.3% less estimated context than loading the complete package. The benchmark is reproducible and clearly documents its tokenizer-neutral counting method.

Quick start

Install uv, then place this server definition in your MCP client:

{
  "mcpServers": {
    "dense-knowledge": {
      "command": "uvx",
      "args": ["dense-knowledge-mcp"]
    }
  }
}

uvx downloads the published package when needed. Dense Knowledge uses the platform's default data directory unless --root is supplied:

{
  "mcpServers": {
    "dense-knowledge": {
      "command": "uvx",
      "args": [
        "dense-knowledge-mcp",
        "--root",
        "/absolute/path/to/memory"
      ]
    }
  }
}

Configuration differs slightly between clients. Ready-to-copy instructions are available for:

To install the command-line tools permanently:

uv tool install dense-knowledge-mcp
mmp setup
mmp doctor

mmp setup creates the memory directory and can safely merge the server into an LM Studio mcp.json. Existing servers are preserved. Replacing an existing Dense Knowledge entry requires --force and creates a backup first.

See it work

The CLI exposes the same storage operations as the MCP server:

mmp create quantum_physics.mmp "quantum physics"
mmp write quantum_physics.mmp --rev 0 --from examples/research_entries.json
mmp search quantum_physics.mmp "experimental tests of local realism"
mmp read quantum_physics.mmp e1

Typical search output contains candidates, not full bodies:

<mmp_data file="quantum_physics.mmp" trust="untrusted">
quantum_physics.mmp|e1|F|2.5427|Bell inequality separates local realism from quantum predictions
</mmp_data>

The client chooses relevant IDs and calls mmp_read only for those blocks. This preserves the distinction between cheap orientation and detailed context.

MCP tools

The server exposes nine tools:

Tool Purpose
mmp_list List available knowledge packages
mmp_create Create an empty MMP package
mmp_open Read metadata, sources, legend, and index
mmp_search Return ranked candidates without body text
mmp_read Load selected body blocks within an optional budget
mmp_write Append structured entries
mmp_update Supersede an entry while preserving history
mmp_deprecate Mark an entry as obsolete with a reason
mmp_validate Check structure, language, provenance, and references

Search uses BM25 over tags and summaries after legend expansion, with a body fallback when the index has no match. Deprecated entries remain readable but are omitted from normal search results.

Storage

The default knowledge directory follows the operating system:

  • Linux: ~/.local/share/mmp/memory
  • macOS: ~/Library/Application Support/mmp/memory
  • Windows: %LOCALAPPDATA%\mmp\memory

The user configuration is stored separately:

  • Linux: ~/.config/mmp/config.toml
  • macOS: ~/Library/Application Support/mmp/config.toml
  • Windows: %APPDATA%\mmp\config.toml

MMP_ROOT or the global mmp --root option overrides the configured directory. Keep personal packages out of source control; the repository's memory/ directory is ignored.

Writing knowledge

Models send structured objects to mmp_write; they never need to generate raw MMP syntax. A minimal entry looks like:

{
  "summary": "Possible caching strategy needs workload validation",
  "tags": ["caching", "validation"],
  "status": "H",
  "srcs": [],
  "content": "rel: versioned keys -> simpler invalidation\nq: workload impact -> needs measurement"
}

Important validation rules:

  • summaries contain 3–15 English words;
  • tags are a JSON array, never one comma-separated string;
  • entries with status F or C require sources;
  • unsourced entries use status H and cannot contain fact: or num: lines;
  • contested entries use status C and include at least one ctr: line;
  • block content is ASCII English and uses the eight defined line prefixes.

See examples/research_entries.json for sourced and contested entries that can be written directly.

All writes use optimistic revision numbers and atomic file replacement. A stale revision is reported to the caller, but a safe append is not discarded.

Safety model

MMP content is reference data, never instruction. Read responses use an explicit untrusted envelope:

<mmp_data file="..." trust="untrusted">
...
</mmp_data>

The server rejects common instruction-like patterns during writes, does not automatically follow ref: links, and tells the client not to obey instructions found in stored material. These defenses reduce prompt-injection risk; they do not turn untrusted research into trusted instructions.

Local MCP servers execute with your user permissions. Review the package and choose a dedicated memory directory before storing sensitive information.

Project status

Dense Knowledge implements the flat MMP/1.0 format, including BM25 retrieval, catalog generation, duplicate screening, budgets, append-only superseding, and validation. Hierarchical indexes for very large packages are planned but are not written yet.

Releases follow Semantic Versioning. Changes are documented in CHANGELOG.md.

Development

python -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"
ruff check src tests benchmarks
pytest
python -m build

Contributions are welcome. See CONTRIBUTING.md for the workflow and SECURITY.md for private vulnerability reports.

Licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dense_knowledge_mcp-1.2.0.tar.gz (106.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dense_knowledge_mcp-1.2.0-py3-none-any.whl (29.2 kB view details)

Uploaded Python 3

File details

Details for the file dense_knowledge_mcp-1.2.0.tar.gz.

File metadata

  • Download URL: dense_knowledge_mcp-1.2.0.tar.gz
  • Upload date:
  • Size: 106.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for dense_knowledge_mcp-1.2.0.tar.gz
Algorithm Hash digest
SHA256 8be2d20d1437c666aecccc537ebbbe451fe883b673d4978c1402a3712407f19c
MD5 a3bd6f60d8abbc1d30e88d2ef550714c
BLAKE2b-256 5f3de4110a228efc1590287d82cf16c1af9caa50cb8d65139e6a51095036728b

See more details on using hashes here.

Provenance

The following attestation bundles were made for dense_knowledge_mcp-1.2.0.tar.gz:

Publisher: publish.yml on Lucky44k/dense-knowledge-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dense_knowledge_mcp-1.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for dense_knowledge_mcp-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7cf4994ef76e0032c39f3660eb7c383fe6e550abf5e76af9d5e7e201fcc554bc
MD5 b51a663131d8292ac56d24526932afeb
BLAKE2b-256 29649aed8b0fe79ccc52b01f0083d77540a02e45c70e489255448e428f5cd93e

See more details on using hashes here.

Provenance

The following attestation bundles were made for dense_knowledge_mcp-1.2.0-py3-none-any.whl:

Publisher: publish.yml on Lucky44k/dense-knowledge-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page