Dense Knowledge

io.github.Lucky44k由 GitHub 帳號 Lucky44k 發布v1.2.0更新於 Nov 3, 2026

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

已驗證STDIO僅桌面檔案與儲存知識與記憶

概覽

AI 產生的概覽

本地優先的 MCP 記憶伺服器,把研究資料存成可攜的 .mmp 檔案,並以 BM25 檢索,不需資料庫或嵌入模型。

可以做什麼
  • 列出、建立並開啟知識包,讀取中繼資料、來源、圖例與索引
  • 以 BM25 搜尋知識包,回傳排序後的候選 ID 而不含正文
  • 依需求讀取選定的正文區塊,可限定上下文預算
  • 附加結構化條目、以新條目取代舊條目並保留歷史、將條目標記為已棄用
  • 驗證結構、語言、出處與參照
適用情境
適合希望助理在本機跨工作階段保存結構化研究筆記,並希望先以索引做低成本檢索、而非整份載入文件的情境。適用於 LM Studio、Claude Desktop、Cursor、VS Code 等本機 stdio 用戶端。
執行需求
以本機 stdio 程序執行,透過 uvx 從 PyPI 套件 dense-knowledge-mcp 啟動,因此需要安裝 uv。未宣告帳號、API 金鑰或環境變數。知識預設存放於系統預設資料目錄,可用 --root 或 MMP_ROOT 指定其他路徑。
安裝前請注意
本機伺服器以你的使用者權限執行,存放敏感資訊前應檢視該套件並使用專用的記憶目錄。儲存內容被視為不可信資料並會篩檢類似指令的模式,但這只能降低提示注入風險。寫入會附加或取代你檔案中的條目;個人知識包不要納入版本控制。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Dense Knowledge,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

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.

text
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:

json
{  "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:

json
{  "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:

bash
uv tool install dense-knowledge-mcpmmp setupmmp 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:

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

Typical search output contains candidates, not full bodies:

text
<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:

ToolPurpose
mmp_listList available knowledge packages
mmp_createCreate an empty MMP package
mmp_openRead metadata, sources, legend, and index
mmp_searchReturn ranked candidates without body text
mmp_readLoad selected body blocks within an optional budget
mmp_writeAppend structured entries
mmp_updateSupersede an entry while preserving history
mmp_deprecateMark an entry as obsolete with a reason
mmp_validateCheck 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:

json
{  "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:

text
<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

bash
python -m venv .venvsource .venv/bin/activatepython -m pip install -e ".[dev]"ruff check src tests benchmarkspytestpython -m build

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

Licensed under the MIT License.

來源:README.md,提交 018a17a

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v1.2.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分