
Kirok Memory
io.github.TadFuji由 GitHub 账号 TadFuji 发布v1.4.2更新于 Oct 24, 2026
Persistent memory for AI agents - hybrid semantic + keyword recall with autonomous consolidation
发布方自己的服务:Memory.fit
概览
为 AI 助手提供持久、可检索的记忆存储,支持语义与关键词混合召回,并能自动整合为洞察。
- 可以做什么
- Kirok 是一个本地 MCP 服务器,把记忆存入 SQLite 数据库,并用混合检索取回:语义 KNN 与 FTS5 BM25 通过倒数排名融合合并,并设有经过校准的相似度下限。核心工具包括 retain、recall、reflect、smart_retain 和 consolidate,另有记忆增删改查、心智模型管理、记忆库管理以及按库配置。后台循环会定期把原始记忆综合为更高层的观察结果,启动时自动快照与带审计轨迹的软删除则用于保证数据可恢复。
- 适用场景
- 当助手需要跨会话的持久记忆、而不是每轮重读笔记时适用;也适合希望把关键词匹配与语义召回结合、而非只用纯向量库的场景。适合可接受本地 SQLite 文件、但允许把嵌入与 LLM 推理发往云端 API 的自托管环境。
- 运行要求
- 以本地进程方式运行,通过 uvx 或 uv 从 PyPI 包 kirok-mcp 启动;需要 Python 3.12+ 与 uv。需要 Google Gemini API 密钥,以 GEMINI_API_KEY 提供,可放在 ~/.kirok/.env 或客户端的 env 块中。存储默认是本地 SQLite 文件 ~/.kirok/memory.db;调用 Gemini 嵌入与推理需要网络访问。仅支持桌面 MCP 客户端。
安装
在 SourceWeft 中
- 打开 控制台中的 Kirok Memory,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Kirok
English | 日本語
[tests] [License: MIT] [Python 3.12+] [Version 1.4.2]
Persistent memory for AI agents, over MCP. Kirok (記録, "record") is a Model Context Protocol server that gives an agent a durable, searchable memory: Retain what matters, Recall it with hybrid semantic + keyword search, and Reflect to distil accumulated memories into reusable insights. A background consolidation loop turns raw memories into higher-level observations on its own.
[Kirok demo: retain a memory, then recall it later with hybrid search — consolidated observations shown first]Why Kirok
Most "agent memory" is either a flat vector store (recall is a bare cosine top-k, no keyword grounding, no forgetting) or a pile of markdown the agent has to re-read every turn. Kirok is a small, self-hostable server that does the retrieval engineering properly:
- Hybrid retrieval, not just vectors. Semantic KNN and FTS5 BM25 are fused with Reciprocal Rank Fusion, so an exact keyword match and a semantic match reinforce each other instead of competing.
- A calibrated relevance floor. Naive cosine thresholds don't work on real embedding distributions (see Search quality); Kirok's floor is measured against live data, and there's an evaluation harness to keep it honest.
- Autonomous consolidation. Memories are periodically synthesised into observations, and destructive LLM decisions are soft-deleted with an audit trail rather than executed blindly.
- Reliability first. Atomic writes, soft deletes, startup auto-snapshots, and a fail-open background pipeline that never loses a
retain.
Not local-first: storage is a local SQLite file you own, but embedding and LLM inference are sent to Google's Gemini API. If everything must stay on-device, Kirok is not for you (yet).
Architecture
Storage is a single SQLite database at ~/.kirok/memory.db. sqlite-vec provides per-bank vector KNN; if the native extension can't load, Kirok falls back to a NumPy brute-force scan with identical results. See docs/architecture.md for the full design.
🚀 Quick start
Requirements: Python 3.12+, uv (for uvx), and a Gemini API key (free tier is plenty).
Kirok ships on PyPI — nothing to clone. Put your key in ~/.kirok/.env (one line: GEMINI_API_KEY=AIza...), then verify the setup:
Connect an MCP client
Claude Code CLI:
Claude Desktop — edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):
Then restart the client. The server reads GEMINI_API_KEY from ~/.kirok/.env; an env block in the client config also works and takes precedence.
From source (development)
Point your MCP client at the checkout with uv run --directory /absolute/path/to/kirok-mcp kirok-mcp instead of uvx kirok-mcp.
[!TIP] If
uv runfails to launch the server (common on Windows or cloud-synced folders —uv runre-syncs on every launch and can hit locked.venvfiles or an in-use entry-point.exe), invoke the venv's Python directly to skip the sync entirely:On Windows use
.venv\\Scripts\\python.exeand double-backslash paths in JSON.
A bundled agent skill in skills/kirok/ teaches the agent when and how to use the memory tools on its own — point your client at skills/kirok/SKILL.md to enable it.
🛠️ Tools
19 MCP tools. One-line summaries below; full parameter tables in docs/tools-reference.md.
Core
Memory management
Mental models
Banks
Config
⚙️ Configuration
Everything is set via environment variables (typically in .env). Only GEMINI_API_KEY is required.
🔍 Search quality
Recall runs semantic KNN and FTS5 BM25 in parallel and fuses them with Reciprocal Rank Fusion (k=60). Short Japanese keyword queries get special handling: 1–2 character kanji/katakana tokens fall below the trigram tokenizer's 3-char window and can never MATCH, so they're rescued by an exact-substring LIKE supplement appended after the BM25 hits (hiragana-only short tokens stay excluded — function words would substring-match half a bank; tokens are OR-joined, matching the MATCH side).
Three details keep the hybrid honest: each source is fetched deeper than the final page (max(limit*3, 30)) so RRF can promote an item ranked just outside the cut in both lists; all FTS text is NFKC-normalized on both the index and query side, so width variants (MCP vs MCP, バグ vs バグ) actually match; and observations get the same hybrid treatment as memories — semantic hits floored, keyword hits floor-exempt — instead of being reachable only through the semantic floor.
The similarity floor is calibrated on real data. A naive cosine threshold doesn't work here: on live gemini-embedding-001 vectors the distribution is narrow — off-topic queries score 0.55–0.62 against unrelated banks while true hits score 0.66–0.73. So the usable floor sits just above the off-topic ceiling, at 0.62. Without it, an unrelated query still returns a full page of memories from any non-empty bank (context pollution); much lower and the floor filters nothing (the old hardcoded 0.4 sat below even off-topic scores). FTS keyword hits bypass the floor entirely — a literal term match is independent evidence, not a weak vector score.
Search parameters aren't tuned by vibes. scripts/search_eval.py runs a golden query set through the exact recall pipeline the server uses (extracted as hybrid_search_memories, so the harness can't drift from production) and reports hit@1/hit@5/hit@k and MRR:
🛡️ Reliability
- Atomic consolidation. Every create/update embedding is generated before any DB write; all observation changes plus the "consolidated" mark commit in a single transaction. A failure at any step leaves the database exactly as it was, with the source memories still pending for a later retry — never a half-applied batch.
- Failures surface, never fake success. A consolidation LLM failure raises and is recorded to
system_events— the batch stays pending for a later retry, instead of being silently marked consolidated with nothing produced. Runs are serialized per bank, so two retains landing together cannot double-process the same batch into duplicate observations. - Soft deletes with audit trail. An observation the consolidation LLM decides to remove is stamped
deprecated_at(excluded from search/list/stats) instead of destroyed, and a dedup UPDATE records the pre-merge content in the same transaction as the merge itself — both logged tosystem_eventsso a bad LLM decision is recoverable, not silent data loss. - Startup auto-snapshot. On launch, if the newest auto-snapshot is older than
KIROK_AUTO_SNAPSHOT_HOURS, aVACUUM INTO+integrity_checksnapshot is written under~/.kirok/backups/, keeping the newestKIROK_SNAPSHOT_KEEPgenerations. A snapshot that fails partway leaves no broken file behind, and manual backups are never rotated. - Concurrency. Connections set
PRAGMA busy_timeout=30000, so a second MCP client waits out a busy writer instead of failing withdatabase is locked. - Fail-open background work. Auto-consolidation and mental-model refresh run behind
retainand can never fail it — errors are swallowed, recorded tosystem_events, and surfaced viaKIROK_statsso silent degradation stays visible.
💾 Backup & restore
All state is one SQLite file. The offline kirok-backup CLI needs no API key:
snapshot and export write timestamped files under ~/.kirok/backups/ and refuse to overwrite. import runs in one transaction (all-or-nothing), skips existing IDs rather than overwriting, and rebuilds the FTS + vector indexes so search works immediately. Use --db to target a different database file.
🩺 Diagnostics
🧑💻 Development
The suite is fully offline — importing kirok_mcp.server is side-effect-free (the API key is checked at startup, not import) and tests swap in fake Gemini clients. CI runs the same suite on Ubuntu and Windows on every push (.github/workflows/test.yml). See CONTRIBUTING.md before opening a PR.
📚 Documentation
- docs/architecture.md — internal design, data model, consolidation engine
- docs/tools-reference.md — full parameter reference for all 19 tools
- CHANGELOG.md — version history (current: 1.4.2)
📄 License
MIT — see LICENSE.
Acknowledgements
- Model Context Protocol and the official MCP Python SDK (FastMCP)
- Google Gemini API for embeddings and LLM
- Mem0 — inspiration for smart deduplication and the knowledge layer
- Reciprocal Rank Fusion (Cormack et al., 2009)
来源:README.md,提交 4c03352
工具
0版本历史
1- v1.4.2最新Sep 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 翻译