Kirok Memory
Resumen
Descripción del creador (original en inglés)
Persistent memory for AI agents - hybrid semantic + keyword recall with autonomous consolidation
Los tres pilares de PopNx MCP
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
- Opinión de usuariosiAún no hay reseñasLas reseñas se abrirán junto con las cuentas en una etapa posterior
- Nuestras revisiones básicasi1 de 1 superadasRevisado con información pública; el código aún no se ha escaneado
- UsoiMuy nuevo↓ 28/sem · ★ –
Qué puedes hacer con él
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
- Conexión: Se ejecuta en tu computadora
- Transporte: stdio
- Categoría: Búsqueda y memoria de IA
- Debes completar: GEMINI_API_KEY
Instalación
Elige la app de IA que usas y copia la configuración.
Antes de instalar
- Revisiones básicas: 1 de 1 superadas
- Se ejecuta en tu computadora con los permisos de tu usuario (archivos, red, apps).
- Debes completar tú:
GEMINI_API_KEY
Los valores marcados como secretos son llaves de tu cuenta. Nunca los compartas ni los pegues en un chat.
Necesitas
- PyPIuv de Python instalado (para el comando uvx)
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"kirok": {
"command": "uvx",
"args": [
"kirok-mcp"
],
"env": {
"GEMINI_API_KEY": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add kirok --env GEMINI_API_KEY=your-value -- uvx kirok-mcpCompleta los valores vacíos antes de ejecutarlo.
O copia la configuración tú
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"kirok": {
"command": "uvx",
"args": [
"kirok-mcp"
],
"env": {
"GEMINI_API_KEY": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
O copia la configuración tú
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"kirok": {
"type": "stdio",
"command": "uvx",
"args": [
"kirok-mcp"
],
"env": {
"GEMINI_API_KEY": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
Valores que debes completar
- Google Gemini API key used for embeddings and LLM inference (can also be placed in ~/.kirok/.env)
Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Qué puede hacer
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisiones básicasi
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 10 nov 2026
- ✓ Superada
El creador coincide con el repo
El nombre en el registro se verificó con la cuenta de GitHub TadFuji, dueña del repo
- … Aún sin revisar
Sigue en mantenimiento
Todavía no hemos leído este repo en GitHub
- … Aún sin revisar
Tiene licencia
Todavía no hemos leído este repo en GitHub
- – No aplica
El endpoint responde
Este se ejecuta en tu computadora; no hay endpoint en internet
- – No aplica
Inicio de sesión con OAuth
Se ejecuta en tu computadora y usa ajustes locales en su lugar
- … Aún sin revisar
Sin instrucciones ocultas en las descripciones de herramientas
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con otros en Búsqueda y memoria de IAi
- Más estrellas que el 0% de los otros 5825 servidores de esta categoría
- Publicado en el registro más recientemente que el 23% de los otros 5825 servidores de esta categoría
- Revisiones básicas iguales o mejores que el 100% de los otros 5825 servidores de esta categoría
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Preguntas frecuentes
¿Es seguro Kirok Memory?
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
¿Qué claves o códigos necesita?
Debes completar: GEMINI_API_KEY
¿Se ejecuta en mi computadora o en la nube?
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
¿Sigue en mantenimiento?
El repo de GitHub cambió por última vez –, y la última versión (1.4.2) llegó al registro hace 4 meses.
¿Qué apps pueden usarlo?
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Python (uv) en tu computadora.
¿Qué puedo usar en su lugar?
En la misma categoría: Context7, Codebase Memory, Exa
Alternativas
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:↓ Descargas por semanai★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
Codebase Memory
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Exa
Connect AI agents to Exa for web search, content fetching, and multi-step research.
README del creador
Abrir el README
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
Kirok
English | 日本語
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.
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
flowchart TB
client["MCP Client (Claude Desktop / Claude Code / Cursor / …)"] subgraph server["Kirok MCP Server (FastMCP)"] direction TB tools["19 MCP tools Retain · Recall · Reflect · consolidate · CRUD"] pipeline["Hybrid search (RRF) · Smart dedup Consolidation · Auto-refresh"] end subgraph storage["Local SQLite (WAL)"] direction LR fts["FTS5 trigram (BM25 keyword)"] vec["sqlite-vec (KNN, brute-force fallback)"] tables["memories · observations mental_models · banks · system_events"] end gemini["Google Gemini API gemini-embedding-001 (3072-d) gemini-2.5-flash-lite"]
client <-->|"stdio (JSON-RPC 2.0)"| tools tools --> pipeline pipeline <--> storage pipeline <-->|embeddings · entity extraction reflection · consolidation| gemini
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:
uvx --from kirok-mcp kirok-doctor # offline sanity check
Connect an MCP client
Claude Code CLI:
claude mcp add kirok -s user -- uvx kirok-mcp
Claude Desktop — edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):
{
"mcpServers": { "kirok": { "command": "uvx", "args": ["kirok-mcp"] } } }
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)
git clone https://github.com/TadFuji/kirok-mcp.git
cd kirok-mcp uv sync # installs deps, including sqlite-vec cp .env.example .env # then put your key in it: GEMINI_API_KEY=AIza... uv run kirok-doctor # offline sanity check of the whole setup
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 run` fails 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:
`json
{
"mcpServers": {
"kirok": {
"command": "/absolute/path/to/kirok-mcp/.venv/bin/python",
"args": ["-m", "kirok_mcp.server"],
"env": { "PYTHONPATH": "/absolute/path/to/kirok-mcp/src" }
}
}
}
`
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
| Tool | Purpose |
|---|---|
KIROK_retain | Store a memory: entity/keyword extraction + embedding + smart ADD/UPDATE/NOOP dedup |
KIROK_recall | Hybrid semantic + keyword search (RRF), observations shown first |
KIROK_reflect | Synthesise memories into a mental model (insight), optionally auto-refreshing |
KIROK_smart_retain | Score importance (1–10) first, then retain only if it clears a threshold |
KIROK_consolidate | Manually run observation consolidation for a bank |
Memory management
| Tool | Purpose |
|---|---|
KIROK_get_memory / KIROK_list_memories | Fetch one memory / browse a bank with pagination |
KIROK_update_memory | Edit content or context (re-extracts and re-embeds on content change) |
KIROK_forget | Delete a single memory (irreversible) |
Mental models
| Tool | Purpose |
|---|---|
KIROK_list_mental_models / KIROK_get_mental_model | List / inspect insights from Reflect |
KIROK_refresh_mental_model | Re-analyse against current memories |
KIROK_delete_mental_model | Delete a mental model (irreversible) |
Banks
| Tool | Purpose |
|---|---|
KIROK_list_banks / KIROK_stats | List banks with counts / detailed per-bank stats incl. background failures |
KIROK_clear_bank | Delete a bank's memories + observations (requires confirm=true; previews otherwise) |
KIROK_delete_bank | Delete a bank entirely (requires confirm=true; previews otherwise) |
Config
| Tool | Purpose |
|---|---|
KIROK_set_bank_config / KIROK_get_bank_config | Set / view a bank's retain & observation "missions" (what to focus on) |
⚙️ Configuration
Everything is set via environment variables (typically in .env). Only GEMINI_API_KEY is required.
| Variable | Default | Description |
|---|---|---|
GEMINI_API_KEY | — | Required. Google Gemini API key. |
KIROK_DB_PATH | ~/.kirok/memory.db | SQLite database location. |
KIROK_DEDUP_THRESHOLD | 0.85 | Cosine similarity above which retain invokes the LLM dedup (ADD/UPDATE/NOOP) decision. |
KIROK_RECALL_MIN_SIMILARITY | 0.62 | Similarity floor for semantic memory hits in recall. Keyword/FTS hits are exempt. |
KIROK_OBS_MIN_SIMILARITY | 0.62 | Similarity floor for observation hits in recall. |
KIROK_CONSOLIDATION_BATCH_SIZE | 5 | Run auto-consolidation only once this many memories are pending (1 = every retain). |
KIROK_CONSOLIDATION_TIMEOUT | 120 | Consolidation timeout, seconds. |
KIROK_REFLECT_TIMEOUT | 300 | Reflect timeout, seconds. |
KIROK_AUTO_SNAPSHOT_HOURS | 24 | Min hours between startup auto-snapshots (0 disables). |
KIROK_SNAPSHOT_KEEP | 5 | Auto-snapshot generations to keep before rotating out the oldest. |
🔍 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:
cp scripts/search_eval.example.json my_golden.json # add 30–50 real cases
uv run python scripts/search_eval.py my_golden.json --limit 10
🛡️ 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
Solo se muestra el principio; lee el resto en el repo