Context7
Up-to-date docs for AI agents
作者による説明(英語の原文)
Auditable memory for AI agents: provable deletion, tamper-evident audit, time-travel recall.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
ATTESTARI_KEK, ATTESTARI_DATABASE_URL, ATTESTARI_SQLITE_PATH, ATTESTARI_MCP_ALLOW_FORGET, ANTHROPIC_API_KEY「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"attestari": {
"command": "uvx",
"args": [
"attestari"
],
"env": {
"ATTESTARI_KEK": "your-value",
"ATTESTARI_DATABASE_URL": "your-value",
"ATTESTARI_SQLITE_PATH": "your-value",
"ATTESTARI_MCP_ALLOW_FORGET": "your-value",
"ANTHROPIC_API_KEY": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add attestari --env ATTESTARI_KEK=your-value --env ATTESTARI_DATABASE_URL=your-value --env ATTESTARI_SQLITE_PATH=your-value --env ATTESTARI_MCP_ALLOW_FORGET=your-value --env ANTHROPIC_API_KEY=your-value -- uvx attestari動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"attestari": {
"command": "uvx",
"args": [
"attestari"
],
"env": {
"ATTESTARI_KEK": "your-value",
"ATTESTARI_DATABASE_URL": "your-value",
"ATTESTARI_SQLITE_PATH": "your-value",
"ATTESTARI_MCP_ALLOW_FORGET": "your-value",
"ANTHROPIC_API_KEY": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"attestari": {
"type": "stdio",
"command": "uvx",
"args": [
"attestari"
],
"env": {
"ATTESTARI_KEK": "your-value",
"ATTESTARI_DATABASE_URL": "your-value",
"ATTESTARI_SQLITE_PATH": "your-value",
"ATTESTARI_MCP_ALLOW_FORGET": "your-value",
"ANTHROPIC_API_KEY": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
ATTESTARI_SQLITE_PATH envATTESTARI_MCP_ALLOW_FORGET envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント attestari で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:ATTESTARI_KEK, ATTESTARI_DATABASE_URL, ANTHROPIC_API_KEY
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.0.8)がレジストリに届いたのは28 日前です。
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、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
The auditable memory layer for AI agents. Give your agent long-term memory — like any memory layer — except every fact carries a receipt (where it came from, when), it runs on plain Postgres, the audit trail is tamper-evident, and any user's data can be provably deleted with a signed certificate.
from attestari import Memory
mem = Memory() mem.add("Hi, I'm Alice. I live in Toronto and I work at Acme.", subject_id="alice", valid_from="2021-06-01") mem.add("Update: I moved to Berlin and I now work at Globex.", subject_id="alice", valid_from="2026-01-01") # supersedes Acme + Toronto
mem.answer("where does the user work", subject_id="alice") # -> "Globex" (latest) mem.answer("where did the user live", subject_id="alice", as_of="2022-01-01") # -> "Toronto" (time-travel)
cert = mem.forget("alice") # right-to-be-forgotten -> a signed deletion certificate
No database, no API key, no model download required to run that — the core engine has zero dependencies.
Hosted memory is a black box: you can't see where a "memory" came from, you can't cleanly delete one user's data, and you can't *prove* the history wasn't altered. For a bank, hospital, or insurer — and under GDPR / the EU AI Act — that's a dealbreaker. Attestari is the neutral, self-hostable layer that fixes exactly that.
| Attestari | Typical memory layer | |
|---|---|---|
| Runs on plain Postgres (no graph DB) | ✅ | ✗ (needs Neo4j / a vector service) |
| Provenance on every fact | ✅ | partial |
| Bi-temporal ("what was true on date D?") | ✅ | ✗ |
| Provable deletion + certificate (GDPR) | ✅ | ✗ |
| Tamper-evident audit trail (hash chain) | ✅ | ✗ |
| Works across model vendors | ✅ | usually locked to one |
The last two rows are the moat. Deletion you can prove: each user's data is encrypted with their own key; forget() destroys the key, so the content is unrecoverable — while an immutable log and a signed certificate remain as proof. A history you can verify: every event is hash-linked, so verify_audit() catches any edit, insert, or delete — and the proof survives deletion.
as_of any past instant; corrections supersede old facts without erasing them, so history is always reconstructable. as_of filters on valid time (when a fact was true). System time (when Attestari recorded it) is stored on every fact, but there's no query on it yet.forget(subject_id) crypto-shreds a user's data and returns a signed DeletionCertificate; content backups and replicas are covered (key storage needs its own backup policy — see the threat model).verify_audit() detects any edit/insert/delete, and the proof survives crypto-shred.conflicts(), not silently dropped.search() and timeline() still see each surface form separately.git clone https://github.com/attestari/attestari && cd attestari
python examples/spike.py # zero-dep end-to-end loop python examples/agent_with_memory.py # the "give an agent memory" pattern
You'll see facts change over time, a bi-temporal query answer differently "as of" different dates, a provenance trace back to the source, and a forget() that issues a certificate. No install, no API key, no database.
One facade, Memory, covers the whole surface:
from attestari import Memory
mem = Memory() # zero-dep, in-memory (tests, demos)
fact_ids = mem.add( "I moved to Berlin and I now work at Globex.", subject_id="alice", # whose memory this is valid_from="2026-01-01", # when it became true (defaults to now) source_ref="chat:msg-42", # where it came from (for provenance) )
mem.search("where does the user work", subject_id="alice") # ranked SearchResults mem.answer("where does the user work", subject_id="alice") # -> "Globex" mem.answer("where did the user live", subject_id="alice", as_of="2022-01-01") # time travel: recall as-of a past date mem.timeline(subject_id="alice") # full bi-temporal history mem.get_provenance(fact_ids[0]) # source episode + span mem.conflicts(subject_id="alice") # surfaced conflicts
report = mem.verify_audit() # AuditReport — is the hash chain intact? cert = mem.forget("alice") # DeletionCertificate — provable erasure
| Method | Returns | What it does | |
|---|---|---|---|
add(text, *, subject_id, valid_from=…, source_ref=…) | list[str] | Ingest a message; extract, dedup, and supersede facts. | |
search(query, *, subject_id, as_of=…, limit=5) | list[SearchResult] | Hybrid retrieval with an optional time filter. | |
answer(query, **kwargs) | `str \ | None` | The single top object for a query. |
timeline(*, subject_id) | list[Edge] | Every fact for a subject, live and superseded. | |
get_provenance(fact_id) | `Provenance \ | None` | Trace a fact to its source episode + span. |
conflicts(*, subject_id=None) | list[dict] | Conflicts resolved by predicate cardinality. | |
resolve_entities(names=None, *, auto=True) | ResolutionResult | Merge duplicate entities (reversible). | |
forget(subject_id) | DeletionCertificate | Crypto-shred a subject; return proof. | |
verify_audit(deep=False) | AuditReport | Verify the tamper-evident hash chain; deep=True also catches silent edits to event content. |
Three storage tiers, one engine — every guarantee (audit chain, crypto-shred, deep verification, time travel) holds on all three:
| Tier | Storage | For | Setup |
|---|---|---|---|
Memory() | in-memory | tests, demos, determinism | none |
Memory.local() | one SQLite file (~/.attestari/attestari.db) | a personal agent, MCP, prototypes — durable, single-process | none (stdlib) |
Memory.postgres() | Postgres + pgvector | production: concurrent access, indexed hybrid search | one container |
Durable with zero infrastructure (survives restarts; nothing to install or run):
from attestari import Memory
mem = Memory.local() # or Memory.local("path/to/agent.db")
Durable, on Postgres + pgvector (one container, no graph DB):
ATTESTARI_PG_PORT=5433 docker compose up -d # applies the schema on first boot
pip install -e ".[postgres,embeddings]" export ATTESTARI_DATABASE_URL=postgresql://attestari:attestari@localhost:5433/attestari
Already have a Postgres (managed or local)? The schema ships inside the pip package — no clone needed:
python -m attestari.initdb postgresql://user:pass@host:5432/db # idempotent
from attestari import Memory
mem = Memory.postgres() # durable; materialized projections + pgvector + full-text search
As a REST API + visual console:
pip install -e ".[server]"
uvicorn attestari.server:app # API at /v1/*, the memory-graph console at /
As an MCP server (any agent — Claude, frameworks — can use it) — exposes add_memory / search_memory / get_provenance over stdio, plus forget_subject if you opt in (below). Register it in your MCP client's config (e.g. Claude Desktop's claude_desktop_config.json); the client launches the process for you:
{
"mcpServers": { "attestari": { "command": "attestari-mcp", "args": [], "env": { "ATTESTARI_SQLITE_PATH": "~/.attestari/attestari.db", "ANTHROPIC_API_KEY": "sk-ant-...", "ATTESTARI_KEK": "base64-kek-here" } } } }
Only `command`/`args` are required. Durable by default (memories go to the local
SQLite file, so they survive app restarts); the env block is where per-server config lives — add ATTESTARI_DATABASE_URL to use Postgres instead of SQLite, ANTHROPIC_API_KEY to upgrade extraction to Claude, ATTESTARI_KEK to enable crypto-shred. To run it standalone (e.g. to debug): attestari-mcp (or python -m attestari.mcp). Without a local install, MCP clients can spawn it straight from PyPI: uvx --from "attestari[server]" attestari-mcp.
Erasure over MCP is opt-in. An agent can be steered by text it reads, and erasure can't be undone, so forget_subject is only offered when the env block sets "ATTESTARI_MCP_ALLOW_FORGET": "1". It is then flagged destructive (clients that honour tool annotations ask before running it) and takes two calls: the first previews what would be erased and returns a manifest_hash; the second passes that hash back as confirm_manifest_hash, and erases only if the subject's records still match the preview. Leave it off unless the agent is meant to erase people; Memory.forget() and POST /v1/forget are unaffected.
From TypeScript — the TS client talks to the REST API, so start the server first (see above; it defaults to http://localhost:8000). Then see clients/ts (@attestari/client), a thin typed client mirroring the Memory surface.
With LangChain: see clients/langchain (attestari-langchain) — a AttestariRetriever (recall facts with provenance) and AttestariChatMessageHistory (drop-in memory for RunnableWithMessageHistory) for any chain or agent.
With real Claude extraction (instead of the zero-dep deterministic extractor):
pip install -e ".[anthropic]"
export ANTHROPIC_API_KEY=sk-ant-... python examples/spike.py --llm anthropic
Enable crypto-shred deletion (turn forget() from a logical delete into cr
冒頭だけを表示しています。続きはリポジトリで読めます