memorygraph
MemoryGraph
에이전트가 관련 메모리를 찾았습니다. MemoryGraph는 그 메모리가 여전히 사실인지 알려줍니다.
MemoryGraph는 AI 에이전트의 신념을 위한 로컬 우선(local-first) 증거 및 개정 계층입니다. 소스 관찰을 보존하고, 주장을 시간적 그래프로 표현하며, 주장이 현재 유효한지, 과거의 것인지, 혹은 논쟁 중인지 설명합니다.
MVP 상태
결정론적 MVP가 실행 중입니다. 권위 있는 아키텍처는 00-architecture-index.md에서 시작합니다. 구현된 커널은 다음을 포함합니다:
불변 소스 관찰.
정확한 증거 범위를 가진 타입화된 엔티티 노드와 원자적 주장 엣지.
이중 시간적(bi-temporal) 현재 및 과거 신념 쿼리.
명시적 확인, 모순, 원자적 대체(supersession).
recall,history,explain명령.엄격한 뱅크 격리와 추가 전용(append-only) 돌연변이 이벤트 로그.
증거, 워터마크, 주장 버전, 멱등성, 신뢰도, 도전자, 검토 게이트를 갖춘 공급자 중립적 드림 제안 검증기.
영속적 드림 실행, 작업, 제안, 검토 항목, 임대, 이벤트 워터마크, 원자적 제안 커밋.
소스 데이터를 외부 모델로 보내지 않고 전체 드림 사이클을 실행하는 결정론적 메타데이터 공급자.
MemoryRotBench 픽스처, 기준선, 검색 채점, 엔진 통합.
의존성 없는 로컬 기준선과 교체 가능한 임베더를 갖춘 하이브리드 FTS/벡터 검색.
신뢰할 수 없는 명령형 콘텐츠에 대한 검색 시 격리.
임대, 하트비트 갱신, 재시도, 재생 안전 재개를 갖춘 크래시 복구 가능한 Dream 워커.
후보만 제안할 수 있는 OpenAI 호환 구조화 출력 공급자.
recall,record,explain,correct,forget의 다섯 가지 도구를 갖춘 STDIO MCP 서버.사용자 승인 Codex JSONL 수집 및 프로젝트 범위 Codex 설치 프로그램.
결정론적 Obsidian 호환 Markdown 검토 프로젝션.
성공 및 실패한 코딩 시도의 제한된 재사용을 위한 일급 절차적 에피소드.
재현 가능한 무메모리, Markdown, BM25, 플랫 컨텍스트, 외부/Graphify 벤치마크 어댑터.
크로스 플랫폼 CI, 패키지 검증, 실행 가능한
doctor진단.
현재 엔진은 12개의 공개 MemoryRotBench 쿼리와 7개의 프로덕션 카오스 계약을 모두 통과합니다. 이 체크포인트에서 저장소 테스트 스위트는 196개의 통과 테스트를 보유합니다. 첫 번째 지문 인증 공개 매트릭스에서 가장 강력한 단순 기준선은 7/12를 통과하는 반면 MemoryGraph는 12/12를 통과합니다.
Related MCP server: korely
빠른 시작
uv sync
uv run memorygraph init --database /tmp/memorygraph.db
uv run memorygraph doctor --database /tmp/memorygraph.db
uv run memorygraph bank create personal:founder --database /tmp/memorygraph.db
uv run memorygraph dogfood bootstrap --database /tmp/memorygraph.db
uv run memorygraph predicate define works_at \
--bank personal:founder --cardinality one --volatility volatile \
--database /tmp/memorygraph.db증거를 기록한 다음 주장으로 전환합니다:
OBSERVATION_ID=$(uv run memorygraph observe "Abrar works at Acme." \
--bank personal:founder --source-key event:acme \
--database /tmp/memorygraph.db)
CLAIM_ID=$(uv run memorygraph claim assert Abrar works_at Acme \
--bank personal:founder --observation "$OBSERVATION_ID" \
--database /tmp/memorygraph.db)Python API는 또한 임베디드 애플리케이션을 위해 confirm_claim, contradict_claim, supersede_claim, recall, history, explain을 노출합니다.
코딩 시도를 기록하여 향후 에이전트가 성공적인 전략을 재사용하거나 알려진 실패를 피할 수 있게 하되, 보편적으로 적용 가능한 것처럼 가장하지 않도록 합니다:
memorygraph record-attempt "Run migrations before starting the worker" \
--bank project:my-app --source-key attempt:migrate-worker \
--task "start durable worker" --outcome success \
--applicability-json '{"database":"sqlite"}'드림 사이클 실행
임베디드 공급자는 metadata.memorygraph에서 타입화된 후보를 읽고, 그래프 변경을 제안하며, 증거와 시간적 전제 조건을 검증한 다음, 적격 제안을 하나의 트랜잭션으로 커밋합니다. 모델 공급자는 동일한 후보 전용 프로토콜을 구현하며 직접 데이터베이스 쓰기 경로를 얻지 못합니다.
PYTHONPATH=src:. uv run python examples/run_dream_cycle.py \
--database /tmp/memorygraph-dream.db
uv run memorygraph dream status RUN_ID \
--bank personal:founder --database /tmp/memorygraph-dream.db
uv run memorygraph dream reviews \
--bank personal:founder --database /tmp/memorygraph-dream.db
uv run memorygraph dream rollback RUN_ID \
--bank personal:founder --database /tmp/memorygraph-dream.dbCLI 수집의 경우 observe --metadata-file FILE.json으로 후보 봉투를 전달한 다음 memorygraph dream run --bank BANK를 실행합니다. --mode dry_run은 제안을 검증하고 영속화하지만 관찰을 소비하거나 주장을 변경하지 않습니다.
영속적 실행을 위해 작업을 대기열에 넣고 워커를 별도로 실행합니다:
uv run memorygraph dream queue \
--bank personal:founder --database /tmp/memorygraph-dream.db
uv run memorygraph dream worker \
--bank personal:founder --database /tmp/memorygraph-dream.dbOpenAI 호환 Responses 엔드포인트를 사용하려면 구성된 키 변수를 설정하고 대기열과 워커 모두에 모델을 전달합니다. 공급자 출력은 엄격한 구조화 데이터로 파싱되며 동일한 결정론적 증거 및 커밋 게이트를 통과합니다.
export OPENAI_API_KEY=...
uv run memorygraph dream queue --bank personal:founder \
--provider-model YOUR_MODEL --database /tmp/memorygraph-dream.db
uv run memorygraph dream worker --bank personal:founder \
--provider-model YOUR_MODEL --database /tmp/memorygraph-dream.dbCodex 연결
패키지를 설치하고, 프로젝트 뱅크를 초기화하고, 프로젝트 범위 MCP 구성을 추가합니다:
uv run memorygraph init
uv run memorygraph bank create project:my-app
uv run memorygraph install-codex --project .
uv run memorygraph probe-codex --project .설치 프로그램은 .codex/config.toml에 [mcp_servers.memorygraph] 블록을 생성하거나 수리하고, 현재 Python 환경의 memorygraph.mcp STDIO 모듈을 가리키며, Codex가 쓰기 작업에 대해 프롬프트하도록 구성합니다. 전역 Codex 구성을 수정하지 않습니다. 다섯 가지 MCP 작업은 명시적 뱅크 범위를 요구합니다.
probe-codex는 프로젝트 구성을 검증하고 실제 MCP 하위 프로세스 수명 주기를 실행합니다. 프로브가 임시 일회용 프로브 DB 대신 구성된 프로젝트 데이터베이스를 대상으로 하려면 --project-database를 사용하십시오.
세션 콘텐츠 가져오기는 옵트인입니다. 각 JSONL 레코드는 bank, session_id, turn_id, role, content, approved를 포함해야 하며, 승인되지 않은 레코드는 기본적으로 건너뜁니다:
memorygraph ingest-codex approved-session.jsonlDogfood Alpha
공식 오프라인 6개 암(fixture matrix) 매트릭스는 다음과 같습니다:
PYTHONPATH=src:. uv run python examples/run_dogfood_fixture_matrix.py실제 프로젝트의 경우 먼저 운영 계약을 부트스트랩합니다:
uv run memorygraph dogfood bootstrap \
--database .memorygraph/memory.db \
--bank project:my-app \
--workspace my-app픽스처 매트릭스는 다음 암을 실행합니다:
no_memorymarkdownmemorygraph_graph_onlymemorygraph_gated_dreammemorygraph_always_dreamgraphify_compatible
작업 통과/실패, 유용한 검색 정밀도, 금지되거나 오래된 검색 누출, 반복 실수, 지연 시간, 토큰 추정치, 도구 호출, 재시도, 예상 비용 필드, Dream 검토 부하를 측정합니다. 결과는 benchmarks/reports/dogfood-offline-mvp.json과 추가 전용 원장 benchmarks/reports/dogfood-offline-mvp.jsonl에 기록됩니다.
작업 통과/실패는 쿼리 기대치를 따릅니다. Dream 검토 백로그는 별도의 가시적 비용으로 유지됩니다.
2026-08-22 기준 현재 오프라인 픽스처 결과:
memorygraph_always_dream:3/3memorygraph_graph_only:1/3memorygraph_gated_dream:1/3graphify_compatible:1/3markdown:1/3, 금지된 조각 누출 포함
graphify_compatible는 외부 검색기가 동일한 매니페스트, 시간 경계, 채점 계약에 대해 경쟁할 수 있게 하는 프로토콜 어댑터입니다. 이 저장소가 이미 라이브 Graphify 비교를 완료했다는 주장은 아닙니다.
Obsidian에서 인간 검토
현재 주장, 정확한 출처, 관계, Dream 검토 대기열을 포함하는 Markdown 볼트를 생성합니다:
memorygraph project-obsidian --bank project:my-app \
--output .memorygraph/obsidianMarkdown은 일회용이며 매니페스트로 관리됩니다. SQLite 관찰과 추가 전용 이벤트는 권위 있는 상태를 유지합니다. 생성된 노트에 대한 편집은 메모리를 조용히 변형하지 않습니다.
Dogfood Beta
Beta는 결정론적 Alpha 매트릭스 위에 라이브 저장소 소유 증거 루프를 추가합니다. 프로젝트 뱅크 부트스트랩, 프로젝트 범위 MCP 구성 설치, 구성된 프로젝트 데이터베이스 프로브로 시작합니다:
memorygraph dogfood bootstrap --database .memorygraph/memory.db \
--bank project:memorygraph --workspace agent-memory-research
memorygraph install-codex --project .
memorygraph probe-codex --project . --project-database --configured-only실제 세션 계측은 명시적이며 추가 전용입니다. MemoryGraph는 개인 Codex 기록을 스크랩하지 않습니다. memorygraph dogfood capture로 승인된 recall, attempt, task 이벤트를 기록한 다음 make dogfood-live를 실행합니다. 보고서는 성공적인 작업, 유용한 검색 정밀도, 금지된 검색, 반복 실수, 지연 시간, 토큰, 도구 호출, 재시도를 추적합니다. 전체 운영 계약과 이벤트 스키마는 13-dogfood-beta.md에 있습니다.
5개의 유기적 프로젝트를 기다리지 않고 가속화된 Beta 게이트를 실행합니다:
make dogfood-beta이것은 무메모리, Markdown, MemoryGraph에 대해 5개의 격리된 시간 분리 워크스트림을 실행한 다음 기존 공개 검색 및 프로덕션 카오스 스위트를 하나의 지문 인증 통과/실패 보고서로 benchmarks/reports/dogfood-beta.json에 구성합니다. 이는 가속화된 결정론적 증거이지 5명의 지속 사용자에 대한 주장이 아닙니다.
왜 그래프인가?
그래프는 에이전트에게 구성 가능한 구조를 제공합니다: 엔티티는 노드이고 Abrar --works_at--> Stripe와 같은 주장은 타입화된 엣지입니다. MemoryGraph는 엣지를 시대를 초월한 진실로 취급하지 않습니다. 각 주장 버전은 유효 시간, 시스템 시간, 수명 주기, 출처, 정확한 소스 증거를 전달합니다. 이것이 유용한 메모리 그래프와 오래된 사실 저장소의 차이입니다.
개발
uv sync --extra dev
uv run pytest
uv run ruff check .
PYTHONPATH=src:. python examples/run_memoryrotbench_memorygraph.py
PYTHONPATH=src:. python examples/run_memoryrotbench_chaos_memorygraph.py
python examples/run_memoryrotbench_baseline_matrix.py
PYTHONPATH=src:. uv run python examples/run_dogfood_fixture_matrix.py예상 결과: 공개 검색 케이스 12/12, 프로덕션 카오스 케이스 7/7. 매트릭스는 불변의 코퍼스 및 평가자 지문 인증 레코드를 benchmarks/reports/public-baseline-matrix.jsonl에 추가합니다. 정확히 동일한 가시적 코퍼스와 채점 계약에 대해 외부 Graphify 어댑터를 실행하려면 --graphify-command를 제공하십시오.
다음 제품 계층
다음 게이트는 여전히 실제 세계 증명입니다: 라이브 모델 기반 dogfood 세션, 실제 Graphify 맞대결 비교, 실제 코딩 작업에 대한 디자인 파트너 사용. 전체 파이프라인 삭제 잔여물은 감사되고 보고됩니다. 기록을 다시 쓰지 않고 안전하게 지울 수 없는 신원 잔여물은 숨기지 않고 표면화됩니다. 드림 검증기는 모든 공급자와 워커가 통과해야 하는 안전 허리 역할을 유지합니다.
Apache-2.0에 따라 라이선스가 부여됩니다.
Available Tools
5 toolscorrectCorrect claimBDestructive
Supersede or retract a current claim with auditable evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| object | No | ||
| excerpt | No | ||
| claim_id | Yes | ||
| known_at | No | ||
| valid_to | No | ||
| operation | Yes | ||
| rationale | No | ||
| workspace | No | Optional workspace label stored on observations. | |
| valid_from | No | ||
| object_kind | No | ||
| object_type | No | ||
| effective_at | No | ||
| observation_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, which covers the mutation aspect. The description adds 'with auditable evidence,' implying that actions are logged or supported by evidence—information not present in annotations. However, it does not elaborate on the nature of the audit trail or what happens to the superseded/retracted claim, so the added value is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, compact sentence conveys the core purpose without wasted words. The action and key qualifier are front-loaded, making it easy to scan. No redundant phrases or unnecessary detail are present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with 14 parameters, a one-line description is severely insufficient. It omits operational context (e.g., what constitutes a 'current claim', how to specify the target, acceptable evidence types, return behavior, or error conditions). Combined with no output schema and low parameter coverage, the description leaves critical gaps that will impede correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 14% schema description coverage and 14 parameters, the description carries the burden of explaining key parameters. It does not elaborate on claim_id, operation, rationale, valid_from, valid_to, or other fields. The phrase 'auditable evidence' hints at rationale/excerpt but does not map to any parameter, leaving the agent without semantic guidance for required inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Supersede or retract') and the resource ('a current claim'), and includes the qualifier 'with auditable evidence' that signals a specific audit-trail behavior. It implicitly distinguishes itself from siblings like record (creating new claims) and forget (possibly deletion) by focusing on correction of existing claims.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives. The description implies correction of existing claims but does not state conditions, prerequisites, or contrast with siblings. An agent must infer usage from the operation names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explainExplain claimBRead-onlyIdempotent
Show a claim's lifecycle, relations, and exact supporting evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| claim_id | Yes | ||
| workspace | No | Optional workspace label stored on observations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds context about the kind of information returned (lifecycle stages, relations, evidence granularity), which goes beyond bare annotations. However, it doesn't describe output format, pagination, or any side effects beyond what annotations imply, so it adds moderate value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It efficiently conveys the core purpose without redundancy, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description doesn't explain the return structure or how the 'explain' information is presented (e.g., nested JSON, human-readable text). It also doesn't mention any constraints like required permissions or workspace handling. For a tool that likely returns complex claim details, this is a notable gap, though the basic purpose is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: 'bank' and 'workspace' have descriptions, but 'claim_id' does not. The tool description doesn't clarify any parameters further, especially the undocumented claim_id. It adds no meaning beyond what the schema already provides, leaving the unidentified parameter ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'show' and the resource 'claim' with specific aspects: lifecycle, relations, and exact supporting evidence. This distinguishes it from siblings like recall (retrieve), record (create), correct (modify), and forget (delete) by focusing on detailed visualization rather than simple retrieval or mutation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any conditions for exclusion. It doesn't mention whether it's preferred for debugging, auditing, or investigating claim states, leaving the agent to infer from the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forgetForget observationADestructiveIdempotent
Privacy-delete one source observation and propagate direct retractions.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| workspace | No | Optional workspace label stored on observations. | |
| observation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds value by explaining the 'privacy-delete' nature (implying data sanitization) and the propagation of retractions. This goes beyond the bare annotation flags and gives a clearer picture of side effects, though it doesn't detail the propagation mechanism itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the core action ('Privacy-delete') and immediately follows with the key side-effect. There is zero fluff; every word carries functional meaning, making it an exemplary concise definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple deletion tool with 3 parameters and no output schema, the description covers the essential action and side effects. It does not mention return values, error handling, or prerequisites, but given the low complexity and annotations covering idempotency and destructiveness, it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, meaning two of three parameters have descriptions in the schema. The tool description does not add any semantic detail about parameters (e.g., what 'bank' or 'observation_id' specifically mean in this context). Since coverage is not high (>80%) but not low (<50%), the baseline 3 applies, and the description makes no attempt to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Privacy-delete') and resource ('one source observation') and adds a distinguishing side-effect ('propagate direct retractions'). This clearly sets it apart from siblings like 'record' or 'explain', making the tool's purpose instantly recognizable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to use this tool versus alternatives. It does not mention conditions, exclusions, or scenarios where a different sibling (e.g., 'correct') would be more appropriate. The usage context is entirely left to the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallRecall memoryCRead-onlyIdempotent
Retrieve bounded source observations relevant to the current task.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| as_of | No | ||
| limit | No | ||
| query | Yes | ||
| workspace | No | Optional workspace label stored on observations. | |
| max_tokens | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description need not repeat that. It adds the concepts of 'bounded' and relevance to the current task, which are minor behavioral cues, but it does not disclose retrieval mechanism, result format, or error handling. The added value is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words and the primary action is front-loaded. It is efficient, though its brevity may contribute to the lack of parameter and usage clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters (2 required), low schema coverage, and no output schema, the description is insufficient. It does not explain how to construct the query, what 'limit' or 'max_tokens' control, or what the response contains. An agent would need to consult other sources to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only bank and workspace have descriptions). The tool description neither explains the remaining parameters (query, as_of, limit, max_tokens) nor provides any parameter-level guidance. The phrase 'bounded source observations' hints at limits but does not map to specific parameters, failing to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Retrieve') and a resource ('bounded source observations'), which distinguishes it from sibling tools like 'record' and 'forget'. However, it does not explicitly mention the 'bank' parameter or clarify the meaning of 'bounded', leaving some ambiguity about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as 'explain' or 'correct'. The only contextual hint is 'relevant to the current task', which is vague and does not explain prerequisites, exclusions, or when to prefer recall over other memory operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recordRecord observationBIdempotent
Store one user-approved raw observation without inferring claims. Set kind to attempt to record procedural memory; content is the strategy and metadata must include task_key and outcome, with optional failure, applicability, and environment.
| Name | Required | Description | Default |
|---|---|---|---|
| bank | Yes | Bank slug or UUID. | |
| kind | No | ||
| content | Yes | ||
| actor_id | No | ||
| metadata | No | ||
| workspace | No | Optional workspace label stored on observations. | |
| actor_type | No | ||
| source_key | Yes | ||
| observed_at | No | ||
| sensitivity | No | ||
| trust_class | No | ||
| effective_at | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds context about user approval and non-inference of claims, which are beyond the annotations. But it doesn't disclose other behaviors like error handling, rate limits, or side effects beyond the basic write operation, so it adds some value but not a lot.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero fluff. It front-loads the core purpose, then gives a focused, actionable instruction for the most complex parameter combination. Every word earns its place, and the layout makes it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 12 parameters, nested objects, and no output schema, the description is insufficient. It only addresses the 'attempt' kind and does not cover other potential uses or explain most parameters. There is no mention of return values, error cases, or examples. While annotations cover idempotency and destruction, the description leaves too much to inference for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, so the description carries considerable burden. It clarifies kind, content, and metadata specifically for the 'attempt' case, which is valuable. However, it leaves the majority of the 12 parameters (e.g., actor_id, actor_type, sensitivity, trust_class) unexplained, and provides no general semantics for other kinds. It partially compensates for the low coverage but not fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Store') and resource ('raw observation'), with a qualifier ('user-approved') and a constraint ('without inferring claims'). It is unambiguous, though it doesn't explicitly distinguish from sibling tools like 'explain' or 'recall', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance for a specific scenario (setting kind to 'attempt') and outlines required metadata fields. However, it lacks any guidance on when this tool should be used compared to siblings, no exclusions or alternatives are mentioned, so it's partially helpful but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
correct - First observed
explain - First observed
forget - First observed
recall - First observed
record
TDQS
Scored across 5 tools
Each tool targets a distinct operation: explain (query graph), recall (retrieve observations), record (store), correct (update claims), forget (delete). No overlapping purposes, and descriptions clearly separate them.
All tool names are single lowercase verbs, creating a uniform and predictable pattern. This consistency makes it easy to infer the action each tool performs.
Five tools is well-scoped for a memory graph server, covering core operations without redundancy. Each tool addresses a necessary part of the memory lifecycle.
The set covers record, recall, correct, forget, and explain, which covers full CRUD-like operations on claims and observations. Minor gaps like explicit listing or bulk operations exist but are not critical for core usage.
Maintenance
Related MCP Connectors
Evidence-grounded, graph-connected, correctable memory for agents.
Long-term memory for AI agents: bitemporal fact ledger, contradiction detection, explainability.
Long-term memory for AI agents: learns what is true about each person and answers with sources.
Memory for AI agents that knows what is still true. Typed bi-temporal facts, EU-hosted.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to maintain long-term, cross-session memory by extracting facts, reconciling state conflicts, and retrieving relevant memories via vector search.4MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to store and retrieve typed facts with bi-temporal validity, supersede outdated information, and query what was true as of any past date.MIT
- AlicenseNot gradedqualityAmaintenanceProvides AI agents a shared long-term memory layer with evidence-backed, auditable claims, enabling persistent, explainable, and conflict-aware recall across sessions.175 PyPI7MIT
- AlicenseNot gradedqualityBmaintenanceProvides AI agents with long-term memory that tracks temporal validity and corrections, enabling context-aware retrieval of past facts via MCP tools.MIT