Tacitus Mcp Server

io.github.ionasrobert由 GitHub 帳號 ionasrobert 發布v0.1.3更新於 Oct 31, 2026

Long-term memory for AI agents: local-first PKM with provenance and hybrid search.

發布方自己的服務:DACIX — The Store for AI Agents

概覽

AI 產生的概覽

把 Markdown 筆記資料夾變成助手可用的本機知識庫,支援帶來源的記憶、筆記檢索、連結遍歷,以及可稽核、可還原的寫入。

可以做什麼
  • 儲存、召回與刪除帶來源的型別化記憶,遇到衝突時如實提示而非默默取捨
  • 依混合、詞法或語意相關性搜尋筆記,並以大綱、frontmatter 或全文方式逐步讀取
  • 列出筆記,並透過出鏈、反向連結與鄰居遍歷 wikilink 圖譜
  • 先提出變更集並檢視前後差異,再原子提交,或依版本還原
  • 直接建立、更新筆記,加入連結與標籤,每次回傳版本號
  • 檢視最近的提交與還原稽核紀錄,並列出可用工具與目前權限範圍
適用情境
適合希望助手保留長期記憶,或在既有 Markdown 筆記庫中工作,且需要遵守 token 預算的檢索與安全可還原寫入的情境。也適用於筆記必須維持為本機純文字檔案的個人知識管理流程。
執行需求
以 stdio 在本機執行,透過 npx 加上筆記庫路徑啟動,或使用 macOS、Linux、Windows 的預先編譯原生二進位檔。未宣告需要帳號或 API 金鑰。選用的神經嵌入需額外安裝相依套件或本機 Ollama 服務;原生二進位檔支援唯讀權限範圍設定。
安裝前請注意
寫入類工具會在筆記庫中建立、更新、連結、加標籤與刪除筆記,但變更可先預覽差異、再提交並還原,且都有稽核紀錄。記憶與版本快照存放在筆記庫內的隱藏目錄中。選用的同步功能會把加密資料區塊上傳到中繼服務,並有付費方案;筆記庫金鑰是唯一鑰匙,遺失後無法復原。

安裝

在 SourceWeft 中

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

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

其他 MCP 客戶端

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

README

Tacitus

Long-term memory for your AI agents — local-first, with provenance.

[npm] [CI] [license]

Tacitus is an MCP server that turns any folder of Markdown notes into an agent-native knowledge base. It gives AI agents (Claude Code, Claude Desktop, and any MCP client) three things they actually need:

  1. Memory with provenance — typed, queryable long-term memory. Every fact carries its source and is returned within a token budget; contradictions are surfaced, not silently resolved.
  2. Retrieval that fits the context window — search returns ranked snippets (never whole notes) under a token budget; get_note discloses progressively (outline → frontmatter → full); the wikilink graph is a queryable API. Hybrid lexical + semantic search, with an optional neural embedder.
  3. Safe write-back — propose a changeset, preview the diff, commit atomically, and revert by version. Read-only scope forbids mutations; every write is audited.

Notes stay as plain .md files in your folder. No cloud, no lock-in.

[An agent remembering a fact with its source, recalling it under a token budget, proposing a diff, committing it, and reverting it]

Recorded from a real session — the memory id, changeset id, version id and audit line above are what the binary actually returned (how).

Quick start

bash
npx -y @dashiro/tacitus-mcp-server /path/to/your/vault

Claude Code

bash
claude mcp add tacitus -- npx -y @dashiro/tacitus-mcp-server /path/to/your/vault

Claude Desktop (claude_desktop_config.json)

json
{  "mcpServers": {    "tacitus": {      "command": "npx",      "args": ["-y", "@dashiro/tacitus-mcp-server", "/path/to/your/vault"]    }  }}

Native binary (no Node)

Prefer a single, zero-dependency binary? The Rust server ships prebuilt for macOS, Linux, and Windows on every release.

bash
# macOS / Linux — installs `tacitus-mcp` into your Cargo bin dircurl --proto '=https' --tlsv1.2 -LsSf \  https://github.com/ionasrobert/tacitus-mcp-server/releases/latest/download/tacitus-mcp-installer.sh | sh
powershell
# Windows (PowerShell)irm https://github.com/ionasrobert/tacitus-mcp-server/releases/latest/download/tacitus-mcp-installer.ps1 | iex

Or grab a .tar.xz / .zip for your platform from the latest release. Then point any MCP client at the binary instead of npx:

bash
claude mcp add tacitus -- tacitus-mcp /path/to/your/vault

The native binary is the flagship server (25 tools; the npm server has the core 16 — see the table below). Both share the same on-disk formats, so a vault works with either. Set TACITUS_SCOPE=read-only to run the native server without write permissions.

Tools

GroupTools
Memoryremember, recall, forget
Retrievalsearch, get_note, graph_query, list_notes, properties_query*
Write-backpropose_changes, commit_changes, revert, rename_note, delete_note, get_version*
Conveniencecreate_note, update_note, link, tag, audit_log
Templateslist_templates, create_from_template
Taskslist_tasks, toggle_task
Metacapabilities

* Native-Rust-server first (the npm server will catch up): properties_query — Bases-like structured queries over YAML frontmatter (filters eq|ne|contains|exists|not_exists|gt|lt|gte|lte, sort, select, token_budget). Templates — Markdown files in .tacitus/templates/ whose {{var}} placeholders form a schema; substitution happens before YAML parsing so numeric vars stay typed, {{date}}/{{time}}/{{datetime}} auto-fill, and creation is versioned + audited like any agent write. Tasks — every checklist line (- [ ]) as a typed entity (done, due from due:YYYY-MM-DD or 📅, #tags), queryable and toggleable; toggling takes the task text as a concurrency guard so a stale caller gets a CONFLICT instead of flipping the wrong task. rename_note retargets every wikilink that resolves to the note (alias/heading kept) in one atomic changeset — a single revert undoes the whole rename; delete_note is versioned too.

Every tool validates input with a schema and returns structured, actionable errors ({ code, reason, suggestion }) rather than stack traces.

For developers: plugins & integrations

In Tacitus, a plugin is an MCP client — the tool contract above is the public API, with permission scoping, versioning, and audit built in.

  • docs/PLUGINS.md — integration guide: connect an agent, write a plugin in Python/TypeScript, embed the Rust engine, plugin patterns
  • TypeScript SDK — @dashiro/tacitus-sdk: every tool as a typed method, {code, reason, suggestion} errors thrown as TacitusToolError:
    ts
    const tacitus = await TacitusClient.spawn({ vault: '/path/to/vault' });const hits = await tacitus.search({ query: 'client X', token_budget: 500 });
  • Sandboxed WASM plugins (experimental) — crate tacitus-plugins runs guest wasm under Wasmtime with manifest-declared permissions (tool allowlist
    • scope), fuel and memory limits, no WASI: tacitus.call is tools/call. The native binary embeds the runtime: tacitus-mcp plugin list|run for cron agents and scripts. See docs/PLUGINS.md §5
  • docs/MCP_API.md — full reference for all 25 tools (params, returns, error codes)
  • Neural search (opt-in): TACITUS_EMBEDDER=ollama uses a local Ollama daemon for embeddings (TACITUS_OLLAMA_EMBED_MODEL, default nomic-embed-text; needs an Ollama with embedding support). Vectors cached in .tacitus/vectors/; falls back to the deterministic hashing embedder when unavailable.
  • docs/SYNC.md — Sync (beta): E2E-encrypted CRDT sync between devices (tacitus-mcp sync init; sync status shows how much of the relay quota a vault uses)
  • docs/DATA_FORMAT.md — the on-disk format (.tacitus/ internals, stable ids, note conventions)
  • examples/ — three complete plugins (Python read-only analyzer, Node daily-note cron agent, sandboxed WASM guest), tested against the binary

What the sync relay can see

[Two devices exchanging a note through a relay: plain Markdown on the devices, only base64 ciphertext in the relay's log]

Left: two devices, plain Markdown. Right: everything the relay stores for that vault. Those blobs were read out of a real log.jsonl after the recording — no note title, no path, no plaintext. The vault code is the key and never leaves your devices; lose it and the relay's copy is undecryptable forever.

The relay is MIT like everything else — self-host it with no limits, or use the hosted one at sync.tacitus.md: free up to 100 MB per vault, Pro 1 GB for €5/month or €48/year (tacitus.md/#pro). No account — Pro is bought per vault id.

Semantic search (optional neural embeddings)

search defaults to hybrid mode (lexical + a deterministic, offline embedder that catches morphological variants). For synonym/paraphrase matching, opt into a neural embedder:

bash
npm i @huggingface/transformersTACITUS_EMBEDDER=transformers npx @dashiro/tacitus-mcp-server /path/to/vault

Vectors are cached under .tacitus/vectors/. Falls back to the deterministic embedder if the optional dependency or model isn't available.

How it stores things

your-vault/├── notes...             ← your Markdown files (untouched format)└── .tacitus/    ├── memory/*.md      ← agent memories (Markdown + YAML frontmatter)    ├── vectors/*.json   ← cached embeddings    ├── history/*.json   ← version snapshots (for revert)    └── audit.log        ← JSONL log of every agent write

Development

Polyglot monorepo. The reference server (shipped on npm) is TypeScript in packages/mcp-server. A native Rust server in crates/ provides a single-binary, zero-runtime-deps build (crates/tacitus-core engine + crates/tacitus-mcp rmcp server) — a superset of the TS server (25 vs 16 tools). Its stable_id matches the TS engine byte-for-byte, so memory ids are identical across both engines.

bash
# TypeScript servernpm cinpm test          # vitestnpm run typechecknpm run lintnpm run build     # tsup → packages/mcp-server/distnpm run eval      # retrieval quality report
# Rust server (native, single binary)cargo testcargo clippy --all-targets -- -D warningscargo fmt --checkcargo run -p tacitus-mcp -- /path/to/vault   # runs the MCP server on stdiocargo build --release                         # → target/release/tacitus-mcp

Cross-platform release binaries are built and published to GitHub Releases by cargo-dist (dist-workspace.toml + .github/workflows/release.yml) on every v* tag.

License

MIT — see LICENSE.

來源:README.md,提交 c7ee6c9

工具

16

remember

Store a typed memory (user|feedback|project|reference) with mandatory provenance. Returns a stable memory_id; idempotent for identical content+source.

輸入參數keyttltagstype必填sourcecontent必填

recall

Recall memories relevant to a query, ranked, within an optional token_budget. Surfaces conflicting memories instead of silently choosing.

輸入參數typequery必填token_budget

forget

Delete a memory by id. Returns whether a memory was removed.

輸入參數memory_id必填

get_note

Fetch a note progressively: outline (headings) | frontmatter_only | full, with an optional max_tokens ceiling.

輸入參數formatnote_id必填max_tokens

graph_query

Traverse the wikilink graph: links (outgoing) | backlinks | neighbors (both directions, to depth).

輸入參數from必填depthrelation必填

list_notes

List all note ids with their titles and paths.

無需輸入參數。

propose_changes

Dry-run a changeset (create/update/delete notes). Returns a change_id and a before/after diff. Nothing is written until commit_changes.

輸入參數ops必填

commit_changes

Atomically apply a previously proposed change_id (all-or-nothing). Returns a version_id usable with revert.

輸入參數change_id必填

revert

Undo a committed change by version_id, restoring the prior note state.

輸入參數version_id必填

create_note

Create a note (auto-committed). Fails if it already exists. Returns a version_id.

輸入參數content必填note_id必填frontmatter

update_note

Update a note body and/or frontmatter (auto-committed). Returns a version_id.

輸入參數contentnote_id必填frontmatter

tag

Add a tag to a note (deduplicated). Returns a version_id.

輸入參數tag必填note_id必填

audit_log

Read recent agent actions (commits/reverts), most recent first.

輸入參數limit

capabilities

List available tools and the current permission scope.

無需輸入參數。

版本歷史

2
  1. v0.1.3最新Oct 31, 2026
  2. v0.1.2Sep 16, 2026

評分

已滿足適用檢查項的 90%

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

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

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

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

其他 Dacix 整合