Context7
Up-to-date docs for AI agents
作者による説明(英語の原文)
Involuntary memory for agents: time, place, sound and IoT cues surface memories unasked
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
MADELEINE_DB, MADELEINE_TEXT_BACKEND必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"madeleine": {
"command": "uvx",
"args": [
"madeleine-mcp",
"serve"
],
"env": {
"MADELEINE_DB": "your-value",
"MADELEINE_TEXT_BACKEND": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add madeleine --env MADELEINE_DB=your-value --env MADELEINE_TEXT_BACKEND=your-value -- uvx madeleine-mcp serve動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"madeleine": {
"command": "uvx",
"args": [
"madeleine-mcp",
"serve"
],
"env": {
"MADELEINE_DB": "your-value",
"MADELEINE_TEXT_BACKEND": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"madeleine": {
"type": "stdio",
"command": "uvx",
"args": [
"madeleine-mcp",
"serve"
],
"env": {
"MADELEINE_DB": "your-value",
"MADELEINE_TEXT_BACKEND": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
MADELEINE_DB envMADELEINE_TEXT_BACKEND envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント fabianimv で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.2.0)がレジストリに届いたのは一昨日です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:Context7, Codebase Memory, Exa
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Involuntary memory for AI agents. A place, an hour, a sound, a photo or a sensor reading brings back a related memory on its own, without the agent having to ask. It works the way the taste of a madeleine brought back Proust's childhood.
Local-first (SQLite) · MCP server + Python library · no telemetry
Most agent memory is *voluntary*: the agent decides to search, writes a query, and gets results. madeleine adds the other pathway. Every memory is stored with the sensory fingerprint present when it was encoded: where, when, what was said, seen or heard. Incoming cues from webhooks, phones, smart homes and wearables are matched against those fingerprints all the time. When enough channels line up, the memory is queued as an involuntary recollection, and the agent receives it with its next prompt. This is *encoding specificity* applied to agents (concepts).
# 1. See the whole loop, offline (nothing is downloaded, nothing leaves your machine)
uvx madeleine-mcp demo
The demo remembers three moments. Then a cue arrives that carries only a place and a time of day: 30 m from grandmother's house, on a Sunday afternoon. The matching memory surfaces by itself, is delivered through the MCP tool pending_recollections, and does not fire again for a repeated cue:
[madeleine 0.80 via geo+time] Sunday afternoons in grandmother's kitchen: lime-blossom tea and a madeleine (2019-04-14)
channel similarity geo=0.97, time=1.00; salience x1.16, age decay x0.70
# 2. Give Claude Code the tools
claude mcp add madeleine -- uvx madeleine-mcp serve
.claude/settings.json:{"hooks": {"UserPromptSubmit": [{"hooks": [
{"type": "command", "command": "uvx madeleine-mcp hook claude-code", "timeout": 10} ]}]}}
The hook works even if your client ignores MCP notifications. See examples/claude_code for options such as --sense-prompt, which treats what you type as a cue too.
The server is a standard stdio MCP server (uvx madeleine-mcp serve), so any MCP client can use the seven tools. Involuntary delivery on every prompt (step 3 above) is built for Claude Code; in other clients the agent receives recollections by calling pending_recollections, which the server's instructions ask it to do at the start of each turn.
Claude Desktop, Cursor, VS Code, OpenCode, Docker
Claude Desktop (claude_desktop_config.json) and Cursor (~/.cursor/mcp.json):
{"mcpServers": {"madeleine": {"command": "uvx", "args": ["madeleine-mcp", "serve"]}}}
VS Code (.vscode/mcp.json):
{"servers": {"madeleine": {"type": "stdio", "command": "uvx", "args": ["madeleine-mcp", "serve"]}}}
OpenCode (opencode.json):
{
"$schema": "https://opencode.ai/config.json", "mcp": {"madeleine": {"type": "local", "command": ["uvx", "madeleine-mcp", "serve"], "enabled": true}} }
Docker (memories persist in the madeleine-data volume):
docker build -t madeleine-mcp https://github.com/fabianimv/madeleine.git
docker run -i --rm -v madeleine-data:/data madeleine-mcp # stdio MCP server
Semantic text needs the `[text]` extra. The base install is small and offline. Without
the extra, text is matched *lexically* by a hashing embedder, so "car" and "automobile"
count as unrelated. For real sentence embeddings (this pulls in PyTorch):
`bash
claude mcp add madeleine -- uvx --from 'madeleine-mcp[text]' madeleine-mcp serve
`
Images (
[image], open_clip) and sound ([audio], LAION CLAP) are opt-in the same way.
[all]installs everything. Models download lazily on first use, never at import.
flowchart LR
subgraph Sources HA[Home Assistant] -->|webhook| HTTP IOS[iOS Shortcuts] -->|webhook| HTTP AG[Agent] -->|MCP tools| MCP end HTTP[HTTP API /cues] --> ENG MCP[MCP server] --> ENG subgraph ENG[engine] direction TB CH["channels adapter → embedder → similarity"] --> FU["fusion base · coverage · salience · decay"] FU --> RF{"push? threshold + refractory"} end ENG <--> DB[(SQLite + sqlite-vec)] RF -->|enqueue| Q[(recollection queue)] Q -->|drain| HOOK[Claude Code hook] Q -->|drain / notify| MCP
text, time (hour, weekday and season, all cyclical), geo (distance on the sphere), biometric, image, audio. smell is a documented stub for future e-noses.recall). *Push*: a cue arrives (sense, POST /cues) and memories that clear the threshold are queued without anyone asking.time (and biometric) can strengthen a match but never cause one.madeleine serve --transport http # REST + MCP (streamable HTTP at /mcp/) on 127.0.0.1:8765
curl -s localhost:8765/cues -H 'content-type: application/json' \ -d '{"lat": 48.30195, "lon": 1.24650, "signals": [{"channel": "text", "value": "smell of lime-blossom tea"}]}'
| Route | Purpose |
|---|---|
POST /cues | Generic cue: signals, at, geohash or lat/lon, tags, source |
POST /cues/{generic,home_assistant,ios_shortcuts} | Payloads straight from those tools (examples) |
POST /memories, POST /recall, GET/PATCH/DELETE /memories/{id} | Same as the MCP tools |
GET /recollections/pending · POST /recollections/drain | Peek / take queued involuntary recollections |
Ready-made integrations: Home Assistant (arriving home, media starts playing, wearable sensors), iOS Shortcuts ("Arrive at location" personal automation), curl.
MCP surface:
remember, recall, sense, pending_recollections, get_memory, update_memory, forget.recollections://pending, with resources/updated notifications when something surfaces. These notifications also work across processes that share the database.~/.madeleine/madeleine.db, owner-only permissions). There is no telemetry and no cloud.store_raw=True (per call or MADELEINE_STORE_RAW=1).madeleine serve --allow-file-uris.MADELEINE_API_TOKEN to require a bearer token. Binding to another interface without a token is refused unless you pass --insecure-no-auth.secure_delete on.madeleine bench runs a synthetic benchmark: 500 memories across 3 cities, 300 cues with known ground truth, distractors and hard negatives. It is reported for both text backends. Full tables, methodology and blind spots are in docs/benchmarks.md.
madeleine bench # offline hash text backend
madeleine bench --text-backend sentence-transformers # semantic, needs the [text] extra
| hash (offline, default) | semantic ([text], MiniLM) | |
|---|---|---|
| pull R@1 / R@10 | 0.69 / 0.81 | 0.74 / 0.82 |
| precision of involuntary fires | 0.69 | 0.70 |
| positive cues that fire their memory | 0.53 | 0.67 |
| false-trigger rate on negatives | 0.00 | 0.00 |
By cue category (hit rate = how often the right memory surfaced on its own):
| cue category | hash: hit rate | semantic: hit rate | semantic: precision |
|---|---|---|---|
| place + hour | 0.81 | 0.81 | 0.56 |
| text paraphrase only | 0.21 | 0.67 | 1.00 |
| text + place + hour | 0.67 | 0.76 | 0.76 |
| exact same photo / sound | 1.00 | 1.00 | 1.00 |
| slightly altered photo / sound | 0.00 | 0.00 | – |
| memory several years old | 0.40 | 0.60 | 0.64 |
| negatives (distractors, time-only, same place + other topic) | 0 fires | 0 fires |
Latency with 500 memories, in pure Python: sense p50 11 ms / p95 23 ms with the hash backend, p50 32 ms / p95 63 ms with the semantic one (CPU).
Honest limitations
+02:00), or "evening" means UTC evening.| Env var | Default | Meaning |
|---|---|---|
MADELEINE_DB | ~/.madeleine/madeleine.db | SQLite path (:memory: allowed) |
MADELEINE_TEXT_BACKEND | auto | auto (sentence-transformers if installed), sentence-transformers, hash |
MADELEINE_CHANNELS | all built-ins | Comma-separated enabled channels |
MADELEINE_STORE_RAW | off | Persist raw media bytes |
MADELEINE_ALLOW_LOCAL_FILES | off |
冒頭だけを表示しています。続きはリポジトリで読めます