Skip to main content
Glama

memory-mcp

에이전트의 장기 기억을 관리하는 로컬 메모리 서버. 기억을 "저장했다가 꺼내는 것"이 아니라 태어나고, 회상되고, 증류되고, 가라앉는 라이프사이클로 다룬다.

memory-mcp 시스템 개요

핵심 아이디어

에이전트의 기억은 성격이 다른 두 종류가 섞여 있다. 하나는 사건이다 — "그때 무슨 일이 있었나". 다른 하나는 지식이다 — "지금 무엇이 참인가". 사건은 계속 쌓이고 낡으며 언젠가 증류되어야 하고, 지식은 영구히 남되 개정되고 뒤집힌다. 이 둘을 한 저장소에 밀어 넣으면 둘 다 어중간해진다.

memory-mcp는 이 둘을 분리된 평면으로 다루고, 저장 위치를 정본과 파생물로 다시 나눈다.

episodic (사건)

knowledge (지식)

담는 것

대화·작업 로그·관찰·문서 청크

개체·사실·교훈·관계

수명

유한 — 증류 후 cold로 가라앉음

영구 — 삭제 대신 상태 전이

변경

append-only, 정정은 새 record

비파괴 개정, supersede 체인

파생 인덱스

OpenSearch (nori 한국어 형태소)

Neo4j (그래프 순회)

그리고 정본은 언제나 로컬 JSON 파일이다. OpenSearch와 Neo4j는 볼륨 없는 컨테이너 위에서 돌아가는 파생물이라 언제 죽어도 되고, 죽으면 hot에서 다시 만들어진다. 파생물에만 존재하는 콘텐츠는 없다.

세 가지 원칙이 전부를 관통한다:

  1. 원본이 콘텐츠를 소유한다 — 인덱스는 언제든 폐기하고 재구성할 수 있는 f(원본)이다.

  2. 판정 없는 자동 덮어쓰기는 없다 — 충돌은 감지·표면화까지가 서버의 일이고, 판정은 호출 에이전트의 몫이다. 서버 안에 LLM은 없다.

  3. 자기 한계를 1급으로 보고한다 — 인덱스 신선도, 미통합 건수, 잘린 청크, 드리프트를 응답이 항상 말한다. 보고 없음 ≠ 완전함.

Related MCP server: AI-MemoryHub MCP Server

빠르게 실행하기

Go 1.25+, Docker, 그리고 S3에 접근할 AWS 프로파일이 필요하다.

make start

이 한 줄이 세 가지를 순서대로 한다: 파생 저장소 컨테이너 기동 → 둘 다 healthy가 될 때까지 대기 → 서버 실행. 뜨고 나면:

# 사건 하나 기록
curl -sX POST http://127.0.0.1:8420/v1/vms/platform/memory-mcp/episodes \
  -H 'content-type: application/json' \
  -d '{"kind":"decision","actor":"agent","text":"파생 저장소는 볼륨 없이 띄우고 재수화로 복구하기로 했다","entities":["memory-mcp"]}'

# 조사 변형을 넘어서 검색된다 (nori 형태소)
curl -s 'http://127.0.0.1:8420/v1/vms/platform/memory-mcp/episodes/search?q=재수화하는'

# 시스템이 자기 상태를 정직하게 보고한다
curl -s http://127.0.0.1:8420/v1/status

스펙 문서

설계의 정본은 docs/에 있다. 주제별로 나뉘어 있고, 각 문서는 실제 코드를 기준으로 쓰였다 — 코드와 설계가 어긋나면 코드가 이기고, 그 격차는 각 문서의 "설계 문서와 차이" 절에 기록된다. 읽는 순서와 문서 규약은 스펙 인덱스에 있다.

시작하기

문서

내용

01 · 시스템 개요

이중 평면과 3계층 저장, 요청이 흐르는 경로, 비목표

10 · 운영

make 타깃, 컨테이너 구성, 환경변수, 트러블슈팅

저장과 생명주기

문서

내용

02 · 저장 모델

hot 디렉토리 레이아웃, 레코드 스키마, manifest, S3 키 구조

03 · 메모리 생명주기

상태기계, supersede, hot→cold 에이징 규칙, consolidation

06 · 문서

blob·추출·청킹, PDF 처리, 잘림의 정직한 보고

검색과 그래프

문서

내용

04 · Episodic 검색

OpenSearch 매핑, nori 형태소, 질의 구성, 발췌 응답 계약

05 · Knowledge 그래프

노드·엣지 모델, Cypher 패턴, supersede 체인, provenance

시스템 성질

문서

내용

07 · 재수화와 degraded

드리프트 감지, 부분 재수화, 파생물이 죽었을 때의 동작

08 · HTTP API

전체 엔드포인트, 응답 봉투, Swagger 생성

09 · 코드 구조

패키지 경계, Client 인터페이스 관용구, 2계층 에러 설계

11 · 검증

단위 테스트 전략, 블랙박스 수용 기준 8단계

설계 배경

문서

내용

architecture-v2.md

v2 설계 정본 — 무엇을 만드는가

code-standards.md

코드 규약 정본 — 어떻게 쓰는가

architecture.md

v1 설계 (마크다운 + SQLite). 원칙의 출처

analyze/

세 소스 분석 — codebase-memory-mcp 실측, Codebase-Memory 논문, MemOS 논문

API 표면

모든 응답은 {success, data, error} 봉투를 쓴다. 검색은 경로·발췌·점수 구성요소만 돌려주고 본문은 주입하지 않는다 — 질의당 토큰이 1급 성능 지표다.

그룹

엔드포인트

episodic

POST /v1/{ws}/{team}/{proj}/episodesGET /v1/{ws}/{team}/{proj}/episodes/searchGET /v1/{ws}/{team}/{proj}/episodes/{id}

knowledge

POST .../knowledge/nodes · POST .../knowledge/edgesGET .../knowledge/search · GET .../knowledge/graphPATCH .../knowledge/nodes/{id} · DELETE .../knowledge/nodes/{id}

documents

POST /v1/{ws}/{team}/{proj}/documentsGET /v1/documents/{sha} · GET /v1/documents/{sha}/chunks

운영

POST /v1/consolidate · POST /v1/reindex · GET /v1/status · GET /healthz

상세는 08 · HTTP API 또는 실행 후 Swagger UI에서 볼 수 있다.

설정

환경변수

기본값

역할

DJ_MEMORY_HOME

~/.local/dj-memory

hot 정본 저장소 루트

DJ_MEMORY_USERNAME

OS 사용자

S3 키 프리픽스 (s3://버킷/{username}/)

DJ_MEMORY_S3_BUCKET

vms-memory-mcp

cold 저장소 버킷

DJ_MEMORY_S3_REGION

ap-northeast-2

버킷 리전 — 프로파일 기본 리전을 상속하지 않는다

AWS_PROFILE

vms-holdings

S3 자격증명 프로파일

DJ_MEMORY_OPENSEARCH_URL

http://127.0.0.1:9200

episodic 인덱스

DJ_MEMORY_NEO4J_URL

bolt://127.0.0.1:7687

knowledge 그래프

DJ_MEMORY_EPISODIC_TTL_DAYS

30

통합된 episode가 cold로 내려가는 기한

DJ_MEMORY_LISTEN_ADDR

127.0.0.1:8420

바인드 주소 (루프백 고정)

개발

make help       # 타깃 목록
make test       # 단위 테스트 — 컨테이너도 AWS도 필요 없음 (fake 주입)
make blackbox   # 수용 기준 8단계 — 실제 컨테이너 + 실제 S3
make swagger    # swag 주석으로부터 docs/swagger.json 재생성
make logs       # 파생 저장소 로그
make stop       # 컨테이너 정리

저장소 구조

cmd/memory-mcp/        서버 진입점
internal/
  config/              환경변수 로딩·검증
  hotstore/  blob/     정본 JSON 저장소, 원자 쓰기, manifest / 컨텐츠 주소 캐시
  episodic/  search/   사건 도메인 / OpenSearch 클라이언트
  knowledge/ graph/    지식 도메인·상태기계 / Neo4j 클라이언트
  document/            추출·청킹
  cold/                S3 아카이브
  consolidate/         증류 제안·에이징 파이프라인
  rehydrate/           드리프트 감지·재수화
  server/              go-chi 핸들러 + swagger 주석
deploy/                docker-compose (OpenSearch+nori, Neo4j — 볼륨 없음)
test/blackbox/         수용 기준 시나리오
docs/spec/             주제별 기술 스펙
docs/design/           설계 정본

make test가 컨테이너 없이 도는 이유는 외부 의존이 전부 인터페이스 뒤에 있고 테스트가 같은 인터페이스를 구현한 fake를 주입하기 때문이다. 실제 저장소에 대고 확인해야 하는 것은 블랙박스 수용 기준이 담당한다.

이 프로젝트의 이력

v1은 TypeScript로 마크다운 원본 + SQLite 파생 인덱스 구조였고, 한국어 검색을 prefix·trigram 조합으로 근사했다. v2는 Go로 다시 쓰면서 그 근사를 nori 형태소 분석으로 정면 해결하고, 지식의 관계를 그래프로 옮기고, 저장을 hot/cold 계층으로 나눴다. 바뀐 것은 구현이고, 바뀌지 않은 것은 원칙이다 — 원본이 콘텐츠를 소유하고, 판정은 위임되며, 시스템은 자기 한계를 보고한다.

v1 코드는 src/에 역사적 참조로 남아 있다.

License

MIT

Available Tools

7 tools
memory_forgetForget (state transition, never silent deletion)A

archive: sink from default recall (recoverable). deprecate: judged wrong — requires a reason, preserved for opt-in reads. purge: delete the file — only from archived/deprecated and only with confirm=true; if the store is a git repo, history is the backstop.

NameRequiredDescriptionDefault
idYes
modeNoarchive
storeNoAbsolute path of the memory store directory. Omit for the default store.
reasonNodeprecate: why this memory is wrong (required)
confirmNopurge: must be true

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that archive is recoverable, deprecate preserves the memory for opt-in reads, and purge is the only irreversible deletion (subject to git history as a backstop). It also emphasizes 'never silent deletion,' setting expectations that all state changes are explicit. It does not cover error handling or idempotency, but the key behaviors are disclosed well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence organized by mode with colons and semicolons. Each mode's effect and prerequisites are front-loaded, with no filler. The nuclear phrase 'never silent deletion' in the title signals non-obviousness, and every clause earns its place. It is concise yet fully informative, ideal for quick agent parsing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, an enum, and no output schema, the description covers the mode semantics, prerequisites, and recovery guarantees. It does not detail the return format (irrelevant without an output schema) or mention error conditions, but it fully equips an agent to invoke the tool correctly per the described behavior. Minor gaps like id format or store path patterns are not critical to judging correctness of the call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60% (store, reason, and confirm have descriptions, id and mode do not descriptively). The description adds substantial meaning: it explains what each mode means and the conditional requirements (reason required for deprecate, confirm must be true for purge). This goes beyond the schema, which merely provides enum values and defaults. The id parameter's meaning is left implicit, but since it's the only required field and the tool's purpose centers on existing memories, the omission is minor.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title 'Forget (state transition, never silent deletion)' prefaces the tool as a state transition rather than a deletion, and the description enumerates three distinct modes (archive, deprecate, purge) with clear effects. This precisely distinguishes it from siblings like memory_update (which would modify content) and memory_recall (which reads), so an agent can immediately understand what this tool does and how it differs from other memory operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage scenarios for each mode: archive for recoverable removal from default recall, deprecate for judged-wrong memories with a required reason, and purge as the only true deletion, restricted to archived/deprecated states with confirm=true. It does not explicitly name sibling tools as alternatives, but the mode-specific guidance makes the when-to-use decision clear. Missing an explicit 'do not use for simple edits' pointer, but the context is implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_readRead memoryB

Full content plus provenance: frontmatter, supersede chain in both directions, conflicts, usage.

NameRequiredDescriptionDefault
idNoMemory id (ULID)
pathNoPath of a memory file inside the store (instead of id)
storeNoAbsolute path of the memory store directory. Omit for the default store.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility for disclosing behavior. It does specify what is returned (full content and provenance), which is useful. However, it does not state that the operation is non-destructive or read-only, nor does it note any permission requirements or error conditions. The description adds some behavioral context but omits explicit safety or side-effect disclosures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct: one clause listing key provenance elements. It is front-loaded with 'Full content plus provenance' and avoids redundancy. Though terse, it conveys the essential information efficiently and earns a high score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with three optional parameters and no output schema, the description adequately explains the return value (full content and provenance details). It does not include usage guidance or alternatives, but that is covered under usage guidelines. The tool's functionality is sufficiently described for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover all three parameters (id, path, store) with clear meanings, so baseline is 3. The description does not add parameter-specific semantics beyond what the schema already provides, so it remains at baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Full content plus provenance: frontmatter, supersede chain in both directions, conflicts, usage' clearly indicates the tool returns the full content and metadata of a memory, implying a read operation. It distinguishes from memory_recall by emphasizing provenance details, though it lacks an explicit verb like 'read' or 'retrieve'. This is more than a tautology and conveys the core function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 siblings like memory_recall or memory_status. The description does not state 'use this to read a specific memory by id/path' or mention alternatives for searching. The agent must infer usage from the name and schema alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_recallRecallA

Hybrid lexical search (word/trigram FTS + CJK-aware fallbacks). Returns paths, excerpts, and score components — read the file (or memory_read) for full content; nothing is auto-injected. Ranking: text * trust * state * (1 + freshness + heat); old unused memories sink, never vanish.

NameRequiredDescriptionDefault
limitNo
queryNoFree-text query; Korean particles/endings matched by prefix+trigram
storeNoAbsolute path of the memory store directory. Omit for the default store.
typesNo
entitiesNoFilter/boost by entity keys (any-of)
include_archivedNo
include_deprecatedNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the ranking formula (text * trust * state * (1 + freshness + heat)) and notes that old unused memories sink but never vanish, revealing decay behavior. It also states 'nothing is auto-injected,' implying no side effects on memory content, which adds transparency about its read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, opening with the core search functionality before explaining the ranking details. The two sentences are dense but purposeful, though the ranking formula might be clearer if separated, and no unnecessary words are present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, no output schema, and no annotations, the description is insufficient for an agent to fully understand how to use all parameters. It explains the return type and ranking but omits details on filters like types, include_archived, and include_deprecated, and does not describe output fields or pagination. This is a notable gap for a complex search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 43%, leaving limit, types, include_archived, and include_deprecated undocumented in the schema. The tool description does not clarify these parameters, nor does it explain how the ranking formula maps to specific inputs like entities or types. It adds some context about ranking but fails to compensate for the low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs a hybrid lexical search (word/trigram FTS + CJK-aware fallbacks) and explicitly mentions it returns paths, excerpts, and score components. It differentiates itself from memory_read by noting that full content must be read via that tool, and from other siblings by focusing on search rather than writing or management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear guidance to use memory_read for full content, implying this tool returns only excerpts and paths, and that nothing is auto-injected. It does not explicitly mention when not to use it versus other siblings like memory_reindex or memory_status, but the contrast with memory_read is a useful usage signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_reindexReindexA

rebuild (default): drop all derivatives and reconstruct them from the memory files — originals own the content, so this is disaster recovery (only usage heat is lost). verify: full re-hash audit that ignores the stat gate and reports drift (files whose content no longer matches the index).

NameRequiredDescriptionDefault
storeNoAbsolute path of the memory store directory. Omit for the default store.
verifyNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so thoroughly. It explicitly reveals that rebuild drops all derivatives (destructive) and reconstructs from originals, clarifying that only usage heat is lost. Verify is disclosed as a non-destructive full re-hash audit that ignores the stat gate and reports drift—clear about side effects and behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it opens with the default mode, then succinctly explains the alternative. Each clause earns its place with no filler, and the structure (rebuild vs. verify) aids quick parsing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-param tool with no output schema, the description covers all essential aspects: both modes, their side effects, the source of truth (originals), and what verify reports. It is sufficient for an agent to call the tool correctly without additional external knowledge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (store is described, verify is not), but the description compensates by explaining the verify mode and its behavior. It adds meaning to the verify boolean beyond the schema, while store's description is already provided. The description effectively fills the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies two distinct operations (rebuild and verify) with specific resources (memory files, index/derivatives) and explicit outcomes. It distinguishes itself from siblings by focusing on reindexing and auditing rather than memory operations like remember/recall, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides contextual usage guidance (rebuild for disaster recovery, verify for drift detection) but does not explicitly state when to avoid or prefer other tools. The 'disaster recovery' phrase implies appropriate timing, yet no explicit exclusions or alternative tool mentions exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_rememberRememberA

Create a memory (markdown original + derived index). Returns possible_conflicts with judgment material (shared entities, age gap, latest_wins_eligible) — the caller judges: supersede, keep both, or correct itself. Nothing is ever overwritten automatically. Identical content is idempotent (returns the existing id).

NameRequiredDescriptionDefault
typeNofact
storeNoAbsolute path of the memory store directory. Omit for the default store.
trustNouser-stated > agent-inferred > imported; user corrections outrank inferenceagent-inferred
sourceNoProvenance: where this came from (session, doc, url)
contentYesMarkdown body. First heading (or line) becomes the title.
entitiesNoEntity keys; normalized via dictionary.md when present
supersedesNoIds this memory replaces; they get superseded_by and sink to archived
review_afterNoISO date to resurface this memory for review (not a delete TTL)

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure — and it excels. It reveals three critical behaviors: no automatic overwriting, a conflict-return contract requiring caller judgment, and idempotent behavior for identical content. These are exactly the traits an agent needs to know before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is informative and front-loaded with the core purpose, but it packs several concepts (conflict material, judgment options, idempotency, no-overwrite guarantee) into em-dash clauses. A structured list would improve scanability without lengthening content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters, 88% schema coverage, and no output schema, the description compensates well by explaining the return value (possible_conflicts with judgment material) and the caller-decision workflow. It also covers idempotency and the no-overwrite guarantee, leaving an agent fully equipped to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 88%, so parameters like type, trust, source, and supersedes are already well-documented in the schema. The description adds the 'first heading becomes the title' nuance for content and implies the conflict semantics for supersedes/superseded_by, but doesn't systematically enrich each parameter. Baseline 3 is appropriate given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (create), resource (memory as markdown original + derived index), and the distinctive mechanism (returns possible_conflicts for judgment). Among siblings like memory_read, memory_update, and memory_forget, the creation purpose is unmistakable without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clarifies that nothing is overwritten automatically and that the caller must judge conflicts (supersede, keep both, or correct). Idempotency for identical content is also stated. It doesn't explicitly say when not to use it vs siblings, but the creation role plus the judgment-caller contract provides clear context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_statusStatusB

The honesty surface: counts by state/type/trust, pending conflict judgments, review-due memories, distillation (compaction) candidates, unparseable files, index freshness, dictionary state.

NameRequiredDescriptionDefault
storeNoAbsolute path of the memory store directory. Omit for the default store.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It lists the contents of the status, which implies it is a read-only operation, but does not explicitly state side effects, performance implications, or whether it affects any state. It adds useful information about what the tool reports, but omits details like whether it reads from cached data or performs live aggregation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single but dense sentence, using a colon to separate the metaphor from the list. It is concise, but the metaphor 'honesty surface' is not immediately intuitive and could mislead. The list is long and runs together, making parsing slightly harder. Overall it is compact but not optimally structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a status tool with no output schema, the description provides a useful enumeration of the kinds of information returned. However, it does not clarify the format of the output (e.g., JSON, text) or any specific caveats (e.g., whether counts are live or cached). Given the complexity of the underlying memory system, more detail on how to interpret the status would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single optional parameter 'store' is fully described in the schema (100% coverage), so the description does not need to add anything. It correctly does not repeat schema information. The baseline of 3 is appropriate because the schema already documents the parameter adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly indicates this is a status/overview tool by listing the specific categories of information it exposes (counts by state/type/trust, pending conflict judgments, etc.). The metaphor 'honesty surface' is unusual but the enumerated list makes the purpose evident. It is distinguishable from sibling tools like memory_update or memory_forget, which are clearly mutations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. There is no mention of typical use cases (e.g., checking system health, troubleshooting) or when not to use it. The description simply states what it shows, leaving the agent to infer usage 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.

memory_updateUpdate memoryA

edit: revise wording/metadata in place (state preserved — meaning-changing revisions should use supersede instead). supersede: id wins over other_id (non-destructive version chain). set_state: explicit lifecycle transition. link: relate two memories. resolve_conflict: record a keep-both judgment for a surfaced pair.

NameRequiredDescriptionDefault
idYesSubject memory id
typeNoedit: change type
stateNoset_state: target state
storeNoAbsolute path of the memory store directory. Omit for the default store.
actionYes
reasonNoset_state->deprecated: why it is wrong (required)
sourceNoedit: replace provenance
contentNoedit: new markdown body
entitiesNoedit: replace entity list
other_idNosupersede/link/resolve_conflict: the other memory
link_kindNolink: relation kindrelates
review_afterNoedit: change review date ('' clears)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal key traits: edit preserves state, supersede creates a non-destructive version chain with id winning over other_id, and resolve_conflict records a keep-both judgment. However, it omits any mention of side effects (e.g., whether old versions are hidden, permissions required), return formats, or error behaviors, leaving significant gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise, using a compact list format to convey each action's semantics. It front-loads the key actions and their distinctions. However, it lacks a leading sentence summarizing the tool's overall purpose (e.g., 'Updates an existing memory using one of several actions'), which would improve readability. It is efficient but slightly abrupt.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (12 parameters, 5 actions, no output schema), the description covers the action semantics well but does not describe the expected return value, error handling, or any prerequisites (e.g., store context, id existence). It also doesn't explain the overall update workflow or interaction with sibling tools. For a tool with this scope, more context is needed to call it correctly in varied scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 92%, so the schema documents most parameters. The description adds value by clarifying the meaning of the 'action' parameter and how it relates to other parameters (e.g., 'supersede: id wins over other_id' explains the other_id parameter; 'edit: revise wording/metadata in place' explains content and source). This goes beyond the bare schema enumeration and helps an agent understand parameter usage in context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies that this tool updates memories through five distinct actions (edit, supersede, set_state, link, resolve_conflict), each with a concise semantic definition. It explicitly differentiates edit (preserves state) from supersede (non-destructive version chain), which prevents ambiguity in intent. The purpose is unambiguous and tied to the tool's name and title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers internal guidance (e.g., 'meaning-changing revisions should use supersede instead') but does not state when to use this tool versus its siblings (memory_remember, memory_forget, etc.). It implies it is for modifying existing memories, but the boundary with creation and deletion tools is not explicit. An agent must infer that creating a new memory belongs to memory_remember and that this tool is for updates.

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.

  1. 7 tool updatesv0.1.0
    • First observedmemory_forget
    • First observedmemory_read
    • First observedmemory_recall
    • First observedmemory_reindex
    • First observedmemory_remember
    • First observedmemory_status
    • First observedmemory_update

TDQS

A4/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: reindex for maintenance, remember for creation, recall for search, read for retrieval, update for modifications, forget for deletion/lifecycle changes, and status for system overview. No two tools overlap in function; even update's multiple sub-actions are clearly delineated within a single tool.

Naming Consistency5/5

All tools follow a consistent 'memory_' prefix with a descriptive verb (remember, recall, read, update, forget, status, reindex). The naming pattern is uniform and predictable, making it easy to infer tool behavior from names alone.

Tool Count5/5

Seven tools is an ideal scope for a memory management server. It covers all core CRUD operations, search, maintenance, and status reporting without redundancy or bloat. Each tool occupies a necessary role in the lifecycle.

Completeness5/5

The tool set covers the full memory lifecycle: create (remember), retrieve (recall/read), update (update with edit/supersede/state changes), delete (forget with archive/deprecate/purge), plus maintenance (reindex) and oversight (status). Conflict resolution and linking are also supported, leaving no obvious gaps.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides persistent long-term memory for AI assistants with tag-based retrieval, wiki-style linking, and source references, storing memories as markdown files with SQLite index.
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Provides AI agents with persistent, long-term memory via OKF-formatted markdown and SQLite indexing, enabling stateful storage, retrieval, and search across sessions.
    6
    221
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to maintain a persistent, queryable memory stored as user-owned Markdown files, with dual-channel retrieval (FTS5 and optional semantic search) and an audited write pipeline.
    11
    MIT