プロトタイプ · プレビュー版:公式レジストリのすべてのサーバーを掲載し、30分ごとに同期しています。レビューとアカウント機能は今後のステップで始まります。
PopNx MCPAIを使う人のためのMCPサーバー · やさしい言葉で解説

Kirok Memory

作者:TadFujiバージョン 1.4.2i★ –iパソコンで動く
レジストリ名io.github.TadFuji/kirok-mcp

インストール

概要

作者による説明(英語の原文)

Persistent memory for AI agents - hybrid semantic + keyword recall with autonomous consolidation

PopNx MCPの3つの柱

この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。

できること

このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。

  • 接続方法: パソコンで動く
  • トランスポート: stdio
  • カテゴリ: 検索・AIの記憶
  • 入力が必要なもの:GEMINI_API_KEY

インストール

使っているAIアプリを選んで、設定をコピーしてください。

インストールの前に

「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。

必要なもの

  • PyPIPythonのuvのインストール(uvxコマンドに必要)

どのアプリを使っていますか?

上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。

Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます

{
  "mcpServers": {
    "kirok": {
      "command": "uvx",
      "args": [
        "kirok-mcp"
      ],
      "env": {
        "GEMINI_API_KEY": "your-value"
      }
    }
  }
}

ターミナルでこれを実行します

claude mcp add kirok --env GEMINI_API_KEY=your-value -- uvx kirok-mcp

動かす前に、空欄の値を入力してください。

Cursorで開く

または、設定を自分でコピーする

プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます

{
  "mcpServers": {
    "kirok": {
      "command": "uvx",
      "args": [
        "kirok-mcp"
      ],
      "env": {
        "GEMINI_API_KEY": "your-value"
      }
    }
  }
}

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

VS Codeで開く

または、設定を自分でコピーする

プロジェクトの .vscode/mcp.json に貼り付けます

{
  "servers": {
    "kirok": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "kirok-mcp"
      ],
      "env": {
        "GEMINI_API_KEY": "your-value"
      }
    }
  }
}

ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。

これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。

選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。

自分で入力する値

  • GEMINI_API_KEY 秘密 必須 env
    Google Gemini API key used for embeddings and LLM inference (can also be placed in ~/.kirok/.env)

この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。

できること

パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。

基本チェックi

誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月10日にチェック

  • ✓ 合格

    作者とリポジトリが一致

    レジストリ名は、リポジトリを所有するGitHubアカウント TadFuji で確認済みです

  • … 未チェック

    今もメンテナンスされている

    このリポジトリはまだGitHubから読み取っていません

  • … 未チェック

    ライセンスがある

    このリポジトリはまだGitHubから読み取っていません

  • – 対象外

    エンドポイントが応答する

    これはパソコンで動くため、インターネット上のエンドポイントはありません

  • – 対象外

    OAuthでサインイン

    パソコンで動き、代わりにローカルの設定を使います

  • … 未チェック

    ツールの説明に隠れた指示がない

    パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです

検索・AIの記憶のほかのサーバーとの比較i

  • このカテゴリのほかの5831件のうち0%よりスターが多い
  • このカテゴリのほかの5831件のうち23%より最近レジストリに公開
  • 基本チェックの結果が、このカテゴリのほかの5831件のうち100%と同じかそれ以上

レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。

よくある質問

Kirok Memoryは安全ですか?

当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。

どんなキーやコードが必要ですか?

入力が必要なもの:GEMINI_API_KEY

パソコンで動きますか、それともクラウドですか?

あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。

今もメンテナンスされていますか?

GitHubリポジトリの最終更新は–、最新バージョン(1.4.2)がレジストリに届いたのは4 か月前です。

どのアプリで使えますか?

Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。

代わりに使えるものは?

同じカテゴリには:Context7, Codebase Memory, Exa

代わりの候補

同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。

カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i

Context7

Up-to-date docs for AI agents

作者:upstash広く使われている↓ 97.3万/週★ 6.4万今日更新

パソコンでもクラウドでも

Codebase Memory

Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.

作者:DeusData広く使われている↓ 1.8万/週★ 4.8万23 日前更新

パソコンで動く

Exa

Connect AI agents to Exa for web search, content fetching, and multi-step research.

作者:exa-labs広く使われている★ 52132 か月前更新

クラウドで動く✓ exa.ai

作者のREADME

READMEを開く

作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。

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 run re-syncs on every launch and can hit locked .venv files 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.exe and 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

ToolPurpose
KIROK_retainStore a memory: entity/keyword extraction + embedding + smart ADD/UPDATE/NOOP dedup
KIROK_recallHybrid semantic + keyword search (RRF), observations shown first
KIROK_reflectSynthesise memories into a mental model (insight), optionally auto-refreshing
KIROK_smart_retainScore importance (1–10) first, then retain only if it clears a threshold
KIROK_consolidateManually run observation consolidation for a bank

Memory management

ToolPurpose
KIROK_get_memory / KIROK_list_memoriesFetch one memory / browse a bank with pagination
KIROK_update_memoryEdit content or context (re-extracts and re-embeds on content change)
KIROK_forgetDelete a single memory (irreversible)

Mental models

ToolPurpose
KIROK_list_mental_models / KIROK_get_mental_modelList / inspect insights from Reflect
KIROK_refresh_mental_modelRe-analyse against current memories
KIROK_delete_mental_modelDelete a mental model (irreversible)

Banks

ToolPurpose
KIROK_list_banks / KIROK_statsList banks with counts / detailed per-bank stats incl. background failures
KIROK_clear_bankDelete a bank's memories + observations (requires confirm=true; previews otherwise)
KIROK_delete_bankDelete a bank entirely (requires confirm=true; previews otherwise)

Config

ToolPurpose
KIROK_set_bank_config / KIROK_get_bank_configSet / 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.

VariableDefaultDescription
GEMINI_API_KEY—Required. Google Gemini API key.
KIROK_DB_PATH~/.kirok/memory.dbSQLite database location.
KIROK_DEDUP_THRESHOLD0.85Cosine similarity above which retain invokes the LLM dedup (ADD/UPDATE/NOOP) decision.
KIROK_RECALL_MIN_SIMILARITY0.62Similarity floor for semantic memory hits in recall. Keyword/FTS hits are exempt.
KIROK_OBS_MIN_SIMILARITY0.62Similarity floor for observation hits in recall.
KIROK_CONSOLIDATION_BATCH_SIZE5Run auto-consolidation only once this many memories are pending (1 = every retain).
KIROK_CONSOLIDATION_TIMEOUT120Consolidation timeout, seconds.
KIROK_REFLECT_TIMEOUT300Reflect timeout, seconds.
KIROK_AUTO_SNAPSHOT_HOURS24Min hours between startup auto-snapshots (0 disables).
KIROK_SNAPSHOT_KEEP5Auto-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 to system_events so 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, a VACUUM INTO + `integrity

冒頭だけを表示しています。続きはリポジトリで読めます

PopNxに聞く