
Droste
io.github.lorismascio17由 GitHub 帳號 lorismascio17 發布v1.3.0更新於 Nov 2, 2026
Local code exploration with progressive zoom and measured token budgets.
發布方自己的服務:Memory.fit
概覽
Droste 把本機程式碼倉庫索引成靜態程式碼圖,讓助理查找符號、追蹤引用並依 token 預算取得上下文,而不必盲目讀取檔案。
- 可以做什麼
- 索引與檢查專案:建立本機程式碼圖,驗證原始碼雜湊並回報過期或涵蓋不完整的情況。
- 查找與追蹤程式碼:查詢符號 ID、路徑與行號,並檢視雙向的呼叫者與被呼叫者。
- 依 token 預算探索:在實測 token 上限內從地圖縮放到結構再到原始碼,並重複使用未變動的檢視。
- 檢視狀態與視覺化地圖:回報索引狀態,並操作互動式放射狀程式碼星系檢視。
- 適用情境
- 適合助理在本機倉庫中工作時需要結構性上下文——誰呼叫了誰、某個符號在哪裡——又不想把上下文視窗耗在整份檔案上。對多檔案 Python 或多語言程式碼庫特別有用,此時以圖為基礎的檢索優於純文字搜尋。
- 執行需求
- 以 Python 套件 droste-memory 透過 stdio 在本機執行;以 pip 安裝並在用戶端設定中註冊 droste mcp 指令。需先為專案建立索引。不需帳號或 API 金鑰;預設嵌入後端首次使用時可能下載模型,可用 DROSTE_DB 或 --db 指定依專案分開的資料庫。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Droste,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
Droste
An expanding code space. A fixed token window.
Search your local code graph, then zoom from a map to structure and source.
The new explore interface keeps its entire response inside a measured token
budget, including metadata, and reuses unchanged views the client still retains.
Find definitions, inspect static references and verify source freshness.
Local-first · progressive zoom · measured tokens · CLI + MCP
[PyPI] [Python] [CI] [License: MIT]
[Droste code galaxy flythrough]
Explore the FastAPI code galaxy in motion. Watch the video or open the interactive galaxy.
Code galaxy · Token zoom demo · Quickstart · Exploration · MCP
Quickstart
Install v1.3.0 from PyPI or GitHub Releases. See release status.
Install once, then index and view. droste view opens a full-screen, zoomable map of your
code — scroll to dive from the project star into folder orbits, down to the
individual functions and their indexed relationships.
Need it for an agent instead of your eyes?
Use returned node IDs as --focus and choose --level map, structure or
source to navigate the same region at different detail. used measures the
complete compact response under the selected tokenizer. Source bodies downgrade
explicitly when they cannot fit. Prepare the small token vocabularies once with
droste explore --prepare-tokenizers for later offline use. See
the workflow, receipts and measured limits.
The older droste context --budget interface still budgets characters.
For everyday code investigation:
references returns candidates for ambiguous names; choose a file or symbol ID
instead of guessing. Python links include the call expression and source line.
Other language links report their heuristic resolution method. check exits
with status 1 for stale, partial or unverifiable indexes. Context responses warn
about stale/partial coverage using a quick size/mtime check; check additionally
verifies SHA-256 hashes. Run it before relying on an old index.
Indexing respects nested .gitignore rules and a project-root .drosteignore
(Git ignore syntax; applied last). Symlinks, generated bundles, dependency
directories and Droste's own storage are excluded. Use an explicit --db per
project when running independent writers. watch batches root refreshes and
reuses unchanged extraction/embeddings; view remains a snapshot, so reopen it
to see a refreshed graph.
Running droste with no arguments prints the command palette:
Why it's different
Droste combines lexical and semantic retrieval with a static code graph and an interactive map. A graph can bring callers and callees into context even when they share few words with the query. Other tools also offer graph-based MCP retrieval; see the dated ecosystem review.
Droste focuses on a small Python CLI, budgeted context, and visual exploration. The graph is a static approximation: name matching and cross-language bridges can produce false positives and do not prove runtime behavior.
The useful building blocks are:
- Explainable static references. Python calls use lexical scopes, import
aliases and explicit
self/clsmembers. Dynamic receivers remain unresolved. Other languages use local/unique-name matching; ambiguous candidates are skipped. - Cross-language bridges. Droste links across
languages — app code to SQL functions/tables (
.rpc('x'),.from('table')), to edge functions, and same-name handlers between any two languages. Your Dart/TS/Python frontend and your database stop being two separate worlds on the map. - Visual exploration. Navigate files, symbols and indexed relationships in an interactive radial map.
- Zero-config and local. No cloud, no account, no API key. fastembed (ONNX, no torch) gives real semantics; a deterministic fallback keeps it runnable anywhere.
Polyglot: Python (AST) + tree-sitter for Dart, TypeScript/JavaScript, Go, Rust, Java, C#, C/C++, Kotlin, Swift, Ruby, PHP, SQL — symbols and edges.
Honest scope: the measured advantage is structural / causal retrieval. On pure semantic "concept" queries it's competitive with a vector baseline, not a leap. Cross-language bridges are strongest where the target is actually defined in the indexed repo (e.g. SQL schema in your migrations).
Benchmarks
The public source validation uses pinned Requests and CPython revisions with manually labelled edge assertions. It currently passes 19 of 20 assertions: 15/16 expected edges found, 0/4 forbidden edges emitted. The missed edge is documented; this small corpus is not an agent-task benchmark or a comparison against competing products.
The evaluation script compares structural retrieval against lexical and vector baselines, using caller/callee relations extracted from the same code as the reference. This measures graph-neighbor retrieval, not agent task completion or superiority over another product. Previous headline numbers are omitted until we publish a fixed public corpus, pinned revisions and complete result files.
Use the real embedding backend for semantic comparisons; the offline hash mode is deterministic but does not provide semantic similarity.
How it works
- Static graph. Python scopes and imports resolve named calls; tree-sitter supplies definitions/references for other supported languages. Their name-based links and cross-language DB/string bridges are heuristics, labelled in reference results. No runtime behavior or complete type resolution is implied.
- Hybrid seed. A query is matched by a normalized blend of lexical score and
semantic cosine (fastembed
bge-small-en-v1.5, 384-dim), then the graph expands the seed bidirectionally (callees and callers). - Progressive explorer.
explorebudgets its complete response in reference tokenizer tokens, including metadata. Navigate map, structure and source by node ID; acknowledge exact retained views to avoid resending their bodies. - Legacy context packer.
context --budgetis characters, with a minimum of 500. Full source, contracts or explicit source stubs fit that effective limit, including separators. That legacy interface does not promise tokenizer-specific counts. - Sharded persistence. One shard per file under a database-specific
.droste/directory, blake2b dirty-tracking so a re-index rewrites only what changed; atomic file replacement with metadata written last. Multi-file updates are not transactions; use one writer per DB and re-index after an interrupted write.
Use it as an MCP server
Droste is a drop-in MCP server — an AI agent can call it as primary code memory instead of doing blind file reads. Add this to your client configuration file (e.g., Cursor, Claude Desktop, or Codex):
First install or upgrade to the current PyPI release:
For Codex, add this to C:\Users\<you>\.codex\config.toml on Windows, or ~/.codex/config.toml on macOS/Linux:
Installed packages store their default database in %LOCALAPPDATA%/Droste on
Windows, ~/Library/Application Support/Droste on macOS, or
${XDG_DATA_HOME:-~/.local/share}/droste on Linux. Source checkouts preserve
their repository-local database. Set DROSTE_DB or pass --db to override.
Existing databases inside an older installation are not moved automatically;
point --db at the old file to continue using it, or re-index your source.
For explicitly offline operation, set DROSTE_EMBEDDING_BACKEND=hash.
The default auto backend may download an embedding model on first use;
code is processed locally. Hash mode trades semantic retrieval for deterministic,
network-free embedding. droste view serves a snapshot; rerun it after indexing.
By default, droste mcp uses Droste's global local database. That is fine for
quick use and small workflows. For serious multi-repo work, use one database per
repository so each project has isolated memory and agents can safely re-index
that project with reset=true.
The --db option is global, so keep it before mcp:
For JSON-based MCP clients:
The same isolated-DB pattern works in JSON clients:
Restart your client after changing the MCP config. Index the project, call
droste_check_index, then use symbol lookup and references before retrieving
context. Inspect the real source before making changes.
Primary tools: droste_index_project, droste_check_index,
droste_find_symbols, droste_references, droste_explore, droste_get_context, droste_status.
Supporting canvas tools: inject_concept, move_camera_and_zoom, get_space_status.
droste_explore is the progressive token-budget path. Existing open MCP
connections keep their earlier process until reconnection; a new connection
loads the upgraded tool list. Retained-view handles are valid only while the
client still retains the corresponding text; clear them after compaction.
Use it as an agent skill
Droste also ships agent skill templates for Codex and Claude. They teach an
agent how to use Droste safely: isolated DBs, indexing, droste context, MCP
config, and root-contamination guardrails.
Codex skill:
Claude-compatible skill:
Install the Codex skill by copying the folder into your Codex skills directory:
Then ask Codex:
For Claude, import or copy the Claude skill folder as a Claude Skill package and
keep its SKILL.md, references/, and scripts/ together.
Development
tests/ = invariants + concurrency (round-trip, dirty-oracle, packer guardrail,
cross-process shard race). eval/ = performance/quality benchmarks.
Status
v1.3.0 (alpha). Progressive token-budget exploration, tested CLI/MCP workflows, source freshness checks and an explicitly limited static graph. Dynamic dispatch, receiver-type inference and complete cross-language resolution remain outside the current guarantees. Use one writer per database. See validation and limitations.
What's new in v1.3.0
- Search and zoom
map → structure → sourcewithdroste exploreanddroste_explore. - Bound the complete response with real
o200k_base/cl100k_basetoken counts. - Reuse exact unchanged views only when the client acknowledges it still retains them.
- Verify source hashes before navigation and expose downgraded detail and omissions.
- Add a recorded interactive demo, exact public responses and installed-wheel checks of the tenth MCP tool.
What's new in v1.2.1
- Keep explicit, unique symbol queries ahead of semantic lookalikes.
- Preserve complete source locations in compact context.
- Publish a practical Requests investigation, including unresolved discovery and tracing weaknesses; no comparative performance claim.
What's new in v1.2.0
- Fix Python scope/import resolution and stop guessing ambiguous name matches.
- Add
find,references,checkand matching MCP tools, with source evidence. - Refresh all supported languages after edits, additions, deletions and renames.
- Report partial coverage and stale context; preserve other roots during
--reset. - Respect ignore rules and actually collect Java, C#, Ruby and PHP files.
- Separate cached embeddings by model identity and rebuild when switching backends.
- Add independent public-source assertions and exercise all nine MCP tools.
What's new in v1.1.7
- Restored fresh-install MCP startup by requiring the compatible 1.x SDK.
- Restored polyglot syntax edges with the current tree-sitter Python API.
- Fixed
droste --db ... viewto visualize the requested database. - Viewer snapshots use temporary storage, including with read-only installations.
- Isolated shards, registries and embedding caches for databases sharing a folder.
- Installed packages use writable user data storage;
DROSTE_DBoverrides it. - Added Windows CI, wheel-content checks and an installed CLI/viewer/MCP smoke test.
- Restored the demo homepage and refreshed the competitive positioning.
What's new in v1.1.6
- Fixed the PyPI wheel packaging for
droste viewby shipping the visualizer HTML/templates and public demo graph inside the installed package. - Verified the three-command pitch from a clean install:
pip install droste-memory,droste index .,droste view.
What's new in v1.1.5
- Fixed self-index contamination by excluding Droste's own
.droste/,.tmp/, and*.egg-infodirectories from project scans. - Improved small-budget context packing by pinning the focus node's direct callers/callees before secondary lexical matches.
- Guaranteed compact stubs for true causal neighbours so important wormholes do not disappear when full context cannot fit.
What's new in v1.1.4
- Fixed Python 3.10/3.11 compatibility by replacing Python 3.12-only
Path.walk()usage. - Hardened MCP Registry publishing so metadata is only published after the matching PyPI release is live.
- Improved CI diagnostics for faster multi-version release debugging.
What's new in v1.1.3
- Added public Codex and Claude skill templates for agent-side Droste adoption.
What's new in v1.1.2
- Added MCP Registry ownership metadata in the README/PyPI description.
- Added
server.jsonfor official MCP Registry publishing. - Added manual and scheduled growth workflows for MCP registry publishing and visibility checks.
What's new in v1.1.1
- Packaging/privacy hardening: generated visualizer JSON files (
graph.json,status.json,context.json) are excluded from source distributions, while the publicvisualizer/demo_graph.jsonremains included.
What's new in v1.1.0
- MCP context is root-isolated:
droste_index_projectrecords the active repo, anddroste_get_context/droste_statusfilter to that root unless an agent passes anotherrootexplicitly. - Multi-root databases no longer silently mix repositories when no safe root can be inferred; Droste returns a clean warning instead.
- Windows CLI output is guarded for UTF-8 consoles to avoid
UnicodeEncodeErrorcrashes on older terminal encodings. - Retrieval ranking is now query-aware: runtime code gets a slight boost for normal implementation queries, while tests/docs remain fully visible when the query asks for them.
License
MIT — see LICENSE.
來源:README.md,提交 810c89d
工具
0版本歷史
2- v1.3.0最新Oct 19, 2026
- v1.1.6Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分
其他 Memory 整合

Memory.fit
fit.memory官方發布者
託管式 Memory.fit 伺服器,讓 AI 讀取你的訓練、睡眠、恢復與飲食資料,並寫回每週計畫、每日目標和飲食計畫。
pg.ddx.io: the PostgreSQL community's memory
io.ddx.pg官方發布者
pg.ddx.io: the PostgreSQL community's memory 的託管 MCP 服務,由 pg.ddx.io 發布;無需登入;Streamable HTTP;29 個工具。
var.gg Naming Memory
gg.var官方發布者
遠端 MCP 伺服器,可依領域概念推薦並檢索韓、日、中、越、英多語言的程式識別字名稱,並提供 ERD 結構查詢。

Counterparts
ai.counterparts
為 Claude Code 與 Claude Desktop 提供的本地優先長期記憶:助理自行寫下關於你與專案的筆記,並在之後的對話中回想起來。

LAHZE - Persian AI Memory Platform
由 GitHub 帳號 pedramgholizadeh 發布
以波斯語為先的地理記憶平臺:發現地點,起草併發布僅限波斯語的記憶。AI 翻譯