Skip to main content
Glama

이것은 무엇인가요?

MCP Light Memory는 코딩 에이전트와 MCP 클라이언트(Warp, OpenCode, JetBrains AI Assistant / PyCharm, Claude Code, Cursor)를 위한 가볍고 로컬 우선(local-first)의 영구 메모리 시스템입니다. 체크포인트 + 검색 계층(checkpoint + retrieval layer) 역할을 하며, 모델의 컨텍스트 창에 전체 대화를 유지하지 않고 세션 간 복잡한 작업을 재개하는 데 필요한 최소한의 지속 상태만 저장합니다.

에이전트가 작업을 시작하면 context를 호출하여 관련 과거 결정, 함정(gotcha), 제약 조건, 가설을 순위화·중복 제거·신뢰 범위 제한을 거쳐 돌려받습니다. 작업을 마치면 작업 상태를 체크포인트로 저장합니다. 다음 세션에서는 재시작 후에도 메모리가 그대로 있습니다.

Related MCP server: mcp-chest-memory

왜 사용해야 하나요?

문제

MCP Light Memory의 해결 방법

에이전트가 세션 사이에 모든 것을 잊어버림

Markdown 파일이 디스크에 영구 저장됨; 에이전트는 BM25 + 선택적 임베딩으로 이를 검색

전체 세션 기록이 컨텍스트에 비해 너무 큼

관련 메모리만 검색됨(토큰 예산 제한, MMR 다양화)

클라우드 의존성 / 프라이버시 우려

100% 로컬, 오프라인, 네트워크 호출 0회, 데몬 없음

무거운 설정 / 의존성

필수 런타임 의존성 0개(순수 Python 3.8+ 표준 라이브러리); 더 나은 의미 검색을 위한 선택적 sentence-transformers

저장된 메모리를 통한 프롬프트 인젝션

검색된 모든 메모리는 인젝션 경고 휴리스틱(ADR-015)이 적용된 trust: untrusted 증거로 명시됨

다중 프로젝트 격리

레지스트리 허용 목록, write:false 하드 경계, 호출별 서브프로세스 격리를 갖춘 라우터

MCP 프로토콜 변화

이중 시대 지원: 최신 2026-07-28 + 레거시 2024-11-05…2025-11-25

작동 방식(메커니즘)

  • Markdown이 진실의 원천(source of truth)입니다. 모든 메모리는 YAML frontmatter(id, type, status, tags, sources, links, valid_from, valid_to, supersedes)를 가진 .md 파일입니다. 사람이 읽을 수 있고, diff가 가능하며, 영구적입니다.

  • SQLite는 재구축 가능한 캐시입니다. BM25/FTS5 인덱스 + 선택적 임베딩 벡터 + 사용 추적. 삭제하면 모든 것이 Markdown에서 재구축됩니다.

  • 검색(Retrieval): 순수 Python BM25 + 선택적 밀집 임베딩 → RRF 융합 → MMR 다양화 → 정책 부스트(유형/상태/시간) → 토큰 예산 절감. 적응형 모드: 먼저 희소(sparse) 검색, 결과가 약한 경우에만 밀집(dense) 검색.

  • 수명 주기: remember → update → supersede(양방향 연결, 기록을 삭제하지 않음) → forget(보관, 삭제하지 않음) → timeline(시간별 보기). 과거 시점 조회는 search --at YYYY-MM-DD.

  • 신뢰 경계: 검색된 콘텐츠는 SECURITY NOTICE 헤더와 함께 === BEGIN/END INTERNAL_RAG MEMORY ===로 감싸집니다. 구조화된 JSON/MCP는 trust: untrusted + 선택적 security_flags: ["instruction_like_content"]를 포함합니다.

  • 증거 신선도: 각 결과는 로컬 경로 형태 증거에 대한 evidence_state(present/missing/unverifiable)를 포함합니다. 검색 시점에 산출되며 영구 저장되지 않습니다.

  • 다중 프로젝트 라우터: JSON 레지스트리를 통해 여러 프로젝트 앞에 하나의 MCP stdio 서버를 둡니다. write:false는 하위 프로세스를 생성하기 전에 변경(mutating) 도구를 차단합니다. 호출별 서브프로세스 격리(공유 상태 없음).

설치

사전 요구 사항

  • Python 3.8+ (py 런처, python 또는 python3 사용 — 설치 프로그램이 실제 인터프리터를 자동 감지하고 WindowsApps 스텁을 거부합니다)

  • Git (대상 프로젝트가 git 저장소여야 합니다)

  • 선택 사항: 더 나은 의미 검색을 위한 pip install sentence-transformers numpy

현재 버전은 VERSION 파일로 정의됩니다. 예상 버전 번호를 하드코딩하지 말고 이 파일을 확인하세요(또는 mlm.py --version 실행).

빠른 시작

이 저장소를 한 번 클론한 후 원하는 프로젝트에 설치하세요:

# Windows (PowerShell)
git clone https://github.com/PeterPirog/mcp-light-memory.git ~/mcp-light-memory
python ~/mcp-light-memory/install.py . --client warp
# Linux/macOS
git clone https://github.com/PeterPirog/mcp-light-memory.git ~/mcp-light-memory
python3 ~/mcp-light-memory/install.py . --client warp

설치 프로그램은 다음 작업을 수행합니다:

  • 스킬 파일을 복사하고 INTERNAL_RAG/ 및 AGENTS.md를 생성합니다

  • init + checkpoint + validate를 실행합니다(그래서 guard가 즉시 OK입니다)

  • 안전하게 처리할 수 있으면 클라이언트 구성에 MCP 서버를 자동 등록합니다(또는 MANUAL_REQUIRED 보고 / JetBrains 지침 출력)

  • 검증된 Python 인터프리터의 절대 경로를 기록합니다(Windows PATH 문제에서도 안전)

python .agents\skills\internal-rag\mlm.py --version   # reports the installed version
python .agents\skills\internal-rag\mlm.py status       # expect: INTERNAL_RAG ready
python .agents\skills\internal-rag\mlm.py guard        # expect: GUARD OK

설치 매트릭스

설치 프로그램 하나, 클라이언트 4종, 구성 범위 2가지. 전체 가이드: docs/INSTALLATION.md.

클라이언트

프로젝트 범위

전역 범위

Warp (구성 쓰기 자동, 프로젝트 활성화는 승인이 필요할 수 있음)

install.py . --client warp

install.py . --client warp --global

OpenCode stable (V1) (안전한 JSON 구성 쓰기의 경우 자동)

install.py . --client opencode

install.py . --client opencode --global

OpenCode 2 (V2, beta) (안전한 JSON 구성 쓰기의 경우 자동)

install.py . --client opencode2

install.py . --client opencode2 --global

JetBrains AI / PyCharm (IDE UI에서 수동)

install.py . --client jetbrains

install.py . --client jetbrains --global

  • --global은 클라이언트 구성(CLIENT CONFIG)의 범위를 변경합니다(~/.warp/.mcp.json 대 {repo}/.warp/.mcp.json, ~/.config/opencode/opencode.json 대 프로젝트 opencode.json). 서버는 계속해서 설치한 대상 프로젝트를 가리킵니다.

  • 여러 저장소에 대해 하나의 전역 MCP 엔드포인트가 필요하신가요? 다중 프로젝트 라우터를 사용하세요 — docs/MCP-MULTI-PROJECT.md.

  • JetBrains/PyCharm은 지원 방식이지 완전 자동이 아닙니다: 설치 프로그램이 JSON + 작업 디렉터리(Working Directory)를 준비합니다. 설정(Settings) → 도구(Tools) → AI Assistant → MCP에서 서버를 추가하고 Server level = Project 또는 Global을 선택하세요.

  • 클라이언트별 수동 설정(설치 프로그램 없음): docs/INSTALLATION.md + 클라이언트 페이지(Warp · OpenCode).

제로샷: Warp 및 OpenCode용 복사-붙여넣기 프롬프트

이 중 하나를 클라이언트 에이전트에 직접 붙여넣으면 됩니다. C:\Projects\App을 실제 대상 저장소 경로로 바꾸세요.

Warp — 단일 프로젝트 설치:

Install and configure MCP Light Memory (mcp-light-memory) as an MCP server for project C:\Projects\App in Warp, using project scope. Use the repository https://github.com/PeterPirog/mcp-light-memory. If the tool is not cloned yet, clone it to a stable location outside the project; if it already exists, update it with git pull --ff-only. Apply the canonical installation contract from the repository and run install.py with TARGET_PROJECT=C:\Projects\App and --client warp without --global. Do not force-overwrite an existing configuration. After installation, verify from cwd=C:\Projects\App: mlm.py --version, mlm.py status, and mlm.py guard, and confirm that the Warp configuration contains mcp-light-memory and the C:\Projects\App path. Report success only after MCP REGISTRATION: REGISTERED and successful verification. If Warp requires an additional project activation/toggle/approval, state the exact client-side step and do not claim the server is active before it is completed.

Warp — 단일 프로젝트용 전역 클라이언트 구성:

Install and configure MCP Light Memory (mcp-light-memory) in Warp globally for project C:\Projects\App. Use the repository https://github.com/PeterPirog/mcp-light-memory. If the tool is not cloned yet, clone it to a stable location outside the project; if it already exists, run git pull --ff-only. Apply the canonical installation contract and run install.py with TARGET_PROJECT=C:\Projects\App, --client warp, and --global. Remember: --global means the global Warp client configuration, while the server must still be bound to C:\Projects\App; do not use the multi-project router. After installation, verify from cwd=C:\Projects\App: mlm.py --version, mlm.py status, and mlm.py guard, and confirm that the global Warp configuration contains mcp-light-memory and the C:\Projects\App path. Report success only after MCP REGISTRATION: REGISTERED and successful verification.

OpenCode — 단일 프로젝트 설치(stable/V1):

Install and configure MCP Light Memory (mcp-light-memory) as an MCP server for project C:\Projects\App in OpenCode. By "OpenCode" I mean stable/V1, so use --client opencode, not opencode2. Use the repository https://github.com/PeterPirog/mcp-light-memory. If the tool is not cloned yet, clone it to a stable location outside the project; if it already exists, run git pull --ff-only. Run install.py with TARGET_PROJECT=C:\Projects\App and --client opencode without --global. Do not force-overwrite an existing configuration. If the installer returns MCP REGISTRATION: MANUAL_REQUIRED (for example because opencode.jsonc exists), do not report success: safely edit the JSONC while preserving comments and unrelated settings if you have appropriate file-editing tools; otherwise report the exact manual action required. After real registration, verify from cwd=C:\Projects\App: mlm.py --version, mlm.py status, and mlm.py guard, and confirm that the OpenCode configuration contains mcp-light-memory and C:\Projects\App.

OpenCode — 단일 프로젝트용 전역 클라이언트 구성(stable/V1):

Install and configure MCP Light Memory (mcp-light-memory) globally in OpenCode for project C:\Projects\App. By "OpenCode" I mean stable/V1, so use --client opencode. Use the repository https://github.com/PeterPirog/mcp-light-memory. If the tool is not cloned yet, clone it to a stable location outside the project; if it already exists, run git pull --ff-only. Run install.py with TARGET_PROJECT=C:\Projects\App, --client opencode, and --global. --global means the global OpenCode client configuration, while the server must still be bound only to C:\Projects\App; do not use the multi-project router. If the installer returns MCP REGISTRATION: MANUAL_REQUIRED, do not report success and follow the safe JSONC instructions. After real registration, verify from cwd=C:\Projects\App: mlm.py --version, mlm.py status, and mlm.py guard, and confirm that the global OpenCode configuration contains mcp-light-memory and the C:\Projects\App path.

OpenCode 2 / V2의 경우 동일한 프롬프트를 사용하되 OpenCode 2 / V2라고 명시적으로 말하고 --client opencode2를 요구하세요. 더 많은 변형: docs/ZERO-SHOT-SETUP-PROMPTS.md.


구성 세부 사항

Warp

Warp는 ~/.warp/.mcp.json(전역, 자동 실행) 또는 {repo}/.warp/.mcp.json(프로젝트, Warp 문서에 따라 수동 토글 필요)에서 MCP 서버 구성을 읽습니다. 형태: command, args, working_directory를 갖춘 mcpServers.<name>(working_directory는 항상 설정하세요 — 메모리 저장소가 이 경로에서 결정됩니다). examples/warp.example.json 및 docs/WARP-SETUP.md를 참조하세요.

OpenCode stable (V1)

OpenCode는 프로젝트 루트의 opencode.json/.jsonc 또는 전역의 ~/.config/opencode/opencode.json을 읽습니다. V1 서버는 enabled: true와 배열 형태의 command를 갖는 mcp.<name> 아래 플랫(flat) 구조입니다(servers 하위 키 없음) — examples/opencode-legacy.example.json 및 docs/OPENCODE.md를 참조하세요.

OpenCode 2 (V2, beta)

동일한 구성 파일에 다른 형태입니다: mcp.servers.<name>, 배열 형태의 command, 그리고 enabled 필드 없음(V2는 disabled: true로 비활성화) — examples/opencode-v2.example.jsonc 및 docs/OPENCODE.md를 참조하세요.

JetBrains AI Assistant / PyCharm

PyCharm은 MCP 구성 파일을 자동으로 읽지 않습니다. 설치 프로그램이 바로 붙여넣을 수 있는 JSON + 작업 디렉터리(Working Directory)를 출력합니다. 설정(Settings) → 도구(Tools) → AI Assistant → MCP (STDIO)에서 서버를 추가하고 Server level = Project 또는 Global을 선택하세요. examples/jetbrains.example.json을 참조하세요.


다중 프로젝트 라우터

여러 프로젝트 앞에 하나의 MCP 연결 — 레지스트리 허용 목록, write:false 하드 경계, 호출별 서브프로세스 격리.

레지스트리 파일(projects.json)

{
  "projects": {
    "backend": { "root": "/abs/path/backend", "write": true },
    "shared-lib": { "root": "/abs/path/shared-lib", "write": false }
  }
}

라우터용 Warp 구성

{
  "mcpServers": {
    "mcp-light-memory-router": {
      "command": "python3",
      "args": ["/abs/path/mcp-light-memory/.agents/skills/internal-rag/irag_mcp_router.py", "--registry", "/abs/path/projects.json"],
      "working_directory": "/abs/path/mcp-light-memory"
    }
  }
}

자세한 내용은 docs/MCP-MULTI-PROJECT.md를 참조하세요.


워크플로

context --task "current task"
  ↓
recovery, if required (RECOVERY REQUIRED)
  ↓
checkpoint before first change
  ↓
implementation
  ↓
checkpoint after each milestone
  ↓
guard before finishing

핵심 명령어(CLI 별칭: mlm.py 또는 레거시 irag.py):

mlm.py context --task "..."
mlm.py checkpoint --reason "..."
mlm.py search --query "..." --limit 8
mlm.py remember --type decision --title "..." --body "..."
mlm.py show <ref>
mlm.py update <ref> --status superseded
mlm.py status
mlm.py guard
mlm.py validate
mlm.py doctor

경로 매핑(리브랜딩: internal-rag → MCP Light Memory)

새 이름

레거시 경로(호환성 유지)

MCP Light Memory (제품)

internal-rag (더 이상 사용되지 않는 제품 이름)

mlm / mlm.py (기본 CLI)

irag.py (레거시 별칭, 계속 작동)

mcp-light-memory (MCP 서버 이름)

internal-rag (레거시, 구성에서 계속 작동)

mcp-light-memory-router (라우터 이름)

internal-rag-router (레거시)

INTERNAL_RAG/ (저장 폴더 — 변경 없음)

—

.agents/skills/internal-rag/ (스킬 디렉터리 — 변경 없음)

—

디스크의 INTERNAL_RAG/ 폴더와 .agents/skills/internal-rag/ 스킬 디렉터리는 제로 마이그레이션(zero-migration) 역호환성을 위해 의도적으로 레거시 이름으로 유지됩니다. docs/MIGRATION-TO-MCP-LIGHT-MEMORY.md를 참조하세요.

영구 메모리(CRUD)

remember --type decision --title "..." --body "..." --tags "a,b" --evidence "src/x.py:42" --links "decisions/other.md"
show <path-or-id>
show <ref> --section Knowledge
update <ref> --add-tags "new" --append "New evidence: ..."
supersede <ref> --by <new> --reason "..."
forget <ref>              # archives, does not delete
link --from <ref> --to <ref>
timeline --limit 20
status
history

유형: decision, knowledge, constraint, gotcha, failure, hypothesis, session.

작업 스택(인터럽트)

mlm.py push --task "interrupted work" --reason "user-priority"
mlm.py tasks
mlm.py resume
mlm.py forget-task <id>   # drop a specific task
mlm.py forget-task         # clear the whole stack

구성(.irag.yml, 선택 사항)

retrieval:
  limit: 10
  mmr_lambda: 0.4
  min_score: 0.3
  embeddings: auto        # auto | on | off
  profile: english-fast   # english-fast (default) | multilingual (PL/EN projects)
  embeddings_model: null  # explicit model overrides the profile
tokens:
  context_budget: 5000
checkpoints:
  auto_archive_sessions: true
  max_task_stack: 24

mlm.py config는 적용된 구성을 표시합니다. mlm.py config --init는 템플릿을 작성합니다.

선택적 임베딩(더 나은 검색)

pip install -r requirements-optional.txt

패키지를 사용할 수 있고 .irag.yml에 embeddings: auto(기본값)가 설정되어 있으면 검색은 임베딩을 사용하고 BM25로 폴백합니다. 런타임에 --embeddings on|off|auto로 재정의할 수 있습니다.

두 가지 검색 프로필(docs/EMBEDDINGS.md 참조):

  • english-fast (기본값, all-MiniLM-L6-v2)

  • multilingual (intfloat/multilingual-e5-small) — 폴란드어-영어 프로젝트용

오프라인 / 에어갭

python pack.py --with-embeddings --profile english-fast
# -> internal-rag-offline-1.8.1.zip   (name from pack.py; 1.8.1 = VERSION file)
# On the air-gapped machine:
unzip internal-rag-offline-*.zip -d internal-rag-offline
pip install --no-index --find-links wheels/ -r requirements-optional.txt
python install.py "/path/to/project" --client <warp|opencode|opencode2|jetbrains>

자세한 내용은 docs/OFFLINE.md를 참조하세요.

프라이버시 및 Git

기본 설치 모드는 **로컬 전용(local-only)**입니다. 설치 프로그램은 프로젝트의 .gitignore가 아닌 .git/info/exclude를 사용하므로 로컬 메모리와 통합 파일이 실수로 커밋되지 않습니다.

프로젝트를 게시하기 전에:

python .\privacy_check.py "D:\path\to\project"

예상 결과: RESULT: PASS

프로젝트에서 완전 제거

python .\uninstall.py "D:\path\to\project"

제거 프로그램은 저장소 외부에 백업을 만든 다음 INTERNAL_RAG와 해당 통합을 제거합니다. 메모리 데이터를 보존하려면 --keep-memory를 사용하세요.

문서

대상 프로젝트의 구조

project/
├── AGENTS.md
├── .irag.yml                    # optional config
├── INTERNAL_RAG/
│   ├── WORKING_STATE.md
│   ├── INDEX.md
│   ├── .checkpoint.json
│   ├── decisions/  knowledge/  gotchas/  failures/  hypotheses/  sessions/  archive/
│   └── exports/
├── .agents/skills/internal-rag/
│   ├── SKILL.md
│   ├── mlm.py                   # primary CLI (forwards to irag.py)
│   ├── irag.py                  # core (legacy alias, still the canonical module)
│   ├── irag_embeddings.py       # optional plugin
│   └── irag_hooks.py            # optional git hooks
└── .opencode/                   # OpenCode integration (optional)

진실의 원천

  1. 현재 사용자 지침, 2. 현재 코드/테스트/구성, 3. 사양/ADR, 4. 검증된 메모리, 5. 세션 노트, 6. 가설.

메모리는 오래되었을 수 있습니다. 코드가 우선합니다.

라이선스

MIT.


변경 로그

1.8.0 — JetBrains 수동 설정

  • --client jetbrains는 더 이상 가짜 구성 파일을 작성하지 않습니다(PyCharm은 MCP 구성 파일을 무시합니다). 대신 붙여넣을 수 있는 JSON + IDE 메뉴 지침을 출력합니다.

  • --unregister --client jetbrains는 IDE UI에서 제거하라는 알림을 출력합니다.

1.7.2 — JetBrains cwd + 클라이언트별 메시지

  • JetBrains: working_directory를 힌트로 작성하고 Settings → Tools → AI Assistant → MCP에서 설정할 정확한 경로와 함께 WARNING을 출력합니다.

  • 클라이언트별 재시작 메시지(Restart PyCharm / Restart Warp / Restart OpenCode).

  • 설치 출력에서 즉시 확인할 수 있도록 Memory store: <path>를 출력합니다.

1.7.1 — Windows Python 스텁 수정

  • detect_python()은 WindowsApps 0바이트 스텁을 거부하고 py -0p를 우선 사용하며 각 후보를 --version으로 검증합니다.

  • 등록 후 검증: 구성 파일을 작성한 직후 --version을 실행하고 PASS/FAIL을 보고합니다.

  • --unregister는 빈 구성 파일 + 상위 디렉터리를 삭제합니다(죽은 .warp/.mcp.json 스켈레톤 → GUARD STALE 수정).

1.7.0 — MCP Light Memory로 리브랜딩

  • internal-rag에서 MCP Light Memory(mcp-light-memory)로의 전체 리브랜딩. 새 CLI 별칭 mlm(mlm.py). 로고/아이콘 자산. 마이그레이션 문서. GitHub 리브랜딩 체크리스트.

  • 이전 버전과 호환: irag.py, INTERNAL_RAG/, 이전 MCP 서버 이름은 더 이상 사용되지 않는 별칭으로 유지됩니다.

  • 리브랜딩 일관성 테스트 18개.

1.6.1 — v1.6 이후 강화

  • 변경/수명 주기 벤치마크(11개 시나리오). 신뢰 경계(ADR-015): trust: untrusted + security_flags. 증거 신선도(ADR-016): evidence_state. 규모 벤치마크(100/1k/10k). 라우터 보안 회귀 테스트(+12개 테스트). 문서 일관성 테스트. 249개 테스트 통과.

1.6.0 — 검색 품질 + MCP 2026-07-28

  • 메모리 품질 벤치마크(37개 사례). MCP 2026-07-28 이중 시대(server/discover, _meta, structuredContent, outputSchema). 레지스트리 엄격 write. 청크 접두사에 출처 포함. 적응형 검색. 링크 인식 컨텍스트. consolidate --prepare. 라우터 지연 시간 벤치마크. ADR-010…016.

1.5.0 — 기권 게이트 + 다중 프로젝트 라우터

  • 관련성/기권 게이트(--meta). FTS5 후보 사전 필터. 다중 프로젝트 MCP 라우터. MCP 프로토콜 강화(순수 stdout, SDK로 검증). 168개 테스트.

1.4.0 — 청킹 + 중복 제거 + 시간적 수명 주기

  • 섹션 인식 청킹(스키마 v3). SimHash 중복 제거. 다국어 PL/EN 프로필. 시간적 수명 주기(valid_from/valid_to/supersedes/--at). consolidate --dry-run.

1.3.0 — 영구 임베딩 캐시

  • SQLite의 청크 수준 float32 BLOB. 여러 모델이 공존합니다. index --vacuum/--embed-missing.

1.0.2 — 토큰 예산 + 개인정보 보호

  • 토큰 예산 적용. 오래된 메모리 감지. 중복 감지. 쓰기 시 개인정보 검사. 자동 체크포인트 타이머. 오프라인/에어갭 팩.

1.0.0 — 최초 릴리스

  • BM25 + MMR 검색. 전체 메모리 CRUD. 작업 스택. MCP 서버(JSON-RPC stdio). Git 훅. 진단. 내보내기/가져오기. 토큰 예산.

Available Tools

8 tools
checkpointSave Task CheckpointA

Persist current operational task state so work can be resumed after interruption or context loss. Use at meaningful milestones and before ending a work session; use remember for reusable knowledge. This writes local checkpoint/task state, does not delete durable memories, and performs no network access.

NameRequiredDescriptionDefault
nextNoRecommended next action when work resumes.
phaseNoCurrent task phase or milestone name.
reasonYesWhy this checkpoint is being created.
blockersNoKnown blockers or unresolved issues.
completedNoWork completed since the previous checkpoint.
in_progressNoWork currently underway.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnly=false, destructive=false, openWorld=false), and the description adds the local-write scope, confirms no durable-memory deletion, and states no network access. It does not clarify whether checkpoints overwrite prior state or how the non-idempotent behavior manifests, so it is strong but not fully exhaustive.

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?

Two sentences, front-loaded with the core action, then usage and behavioral caveats. Every clause earns its place with no redundancy.

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?

With no output schema, the description adequately covers when to call it, what state it writes, and what it does not touch, which is sufficient for a checkpoint write. It could be slightly more complete on resume interaction with the sibling 'resume' tool.

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 description coverage is 100%, so all six parameters (reason, next, phase, blockers, completed, in_progress) are already documented in the schema. The description adds no parameter-level detail beyond what the structured fields provide, making the baseline 3 appropriate.

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?

States a specific verb and resource ('Persist current operational task state') with the added purpose of resuming after interruption or context loss. It explicitly distinguishes itself from the sibling 'remember' by noting that tool is for reusable knowledge, so an agent can tell them apart without opening schemas.

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

Usage Guidelines5/5

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

Gives explicit when-to-use guidance ('at meaningful milestones and before ending a work session') and names the alternative ('use remember for reusable knowledge') with the condition that selects it. Nothing is left to inference about timing or routing.

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

contextLoad Task ContextA

Start or resume a task by retrieving relevant durable project memories and current working state. Use before project changes or after a context reset; use search for a focused lookup. This call may update task or usage state, is non-idempotent, does not delete durable memories, and performs no network access.

NameRequiredDescriptionDefault
taskYesShort description of the task being started or resumed; used to retrieve relevant project context.
limitNoMaximum number of relevant memories to include in the context packet.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=false, and destructiveHint=false, so part of the description ('non-idempotent', 'no network access') restates structured data. It does add value beyond them by disclosing what state is touched ('may update task or usage state') and a non-obvious negative guarantee ('does not delete durable memories').

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?

Two sentences, no waste, with the core action front-loaded and usage/behavioral caveats packed into the second sentence. Every clause carries information.

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 2-parameter, non-destructive mutation with full annotation coverage and no output schema, the description covers trigger, alternative, state mutation, idempotency, and network behavior. It stops short of describing what the returned 'context packet' contains, a minor gap given no output schema is declared.

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 description coverage is 100%, so both 'task' and 'limit' are already documented in the schema. The description adds no syntax, format, or defaulting detail beyond that, so the baseline of 3 applies.

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?

States a specific verb ('Start or resume a task') and resource ('durable project memories and current working state'), and explicitly routes the focused-lookup case to the sibling 'search'. An agent can distinguish it from search, resume, and checkpoint without opening any schema.

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

Usage Guidelines5/5

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

Gives concrete triggers ('before project changes or after a context reset') and names the alternative tool and the condition that selects it ('use search for a focused lookup'). Nothing about when-to-use is left to inference.

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

guardCheck Checkpoint FreshnessA
Read-onlyIdempotent

Check whether project state changed since the last checkpoint. Use before finishing a task to detect uncheckpointed work, then checkpoint if stale. This operation is read-only and idempotent, does not modify memory or task state, and performs no network access.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
okYesTrue when project state is consistent with the last checkpoint.
fingerprintNoFingerprint representing the current project state used by the guard check.
changed_filesNoProject files detected as changed since the checkpoint baseline.

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, and the description largely restates these facts ('read-only and idempotent', 'no network access'). It adds only marginal new context via 'does not modify memory or task state', which is implied by readOnlyHint. With annotations carrying the safety profile, this is adequate but adds little.

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?

Three short sentences, with the core purpose and the usage trigger front-loaded before the safety caveat. The final sentence is largely redundant with the annotations, which slightly dilutes the otherwise tight structure.

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 zero-parameter, read-only check with an output schema present, the description covers purpose, when to call it, what to do with the result, and the safety profile. Return-value semantics are left to the output schema, which is appropriate.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. No parameter-related claims are made or needed.

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?

States a specific verb (check) and resource (whether project state changed since the last checkpoint), which is a distinct operation from the sibling 'checkpoint'. The name 'guard' is opaque on its own, but the description resolves it immediately.

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

Usage Guidelines5/5

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

Explicitly names the trigger ('Use before finishing a task to detect uncheckpointed work') and the conditional follow-up action ('then checkpoint if stale'), routing the agent to the sibling tool under a stated condition. Nothing is left to inference.

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

rememberStore Durable MemoryA

Store durable project knowledge that should survive across sessions. Use for stable decisions, constraints, gotchas, failures, hypotheses, or reusable knowledge; use checkpoint for temporary task progress. This writes local durable memory, does not delete existing memories, and performs no network access.

NameRequiredDescriptionDefault
bodyYesDurable content to preserve: a decision, fact, constraint, gotcha, failure, hypothesis, or reusable session knowledge.
tagsNoOptional comma-separated tags used to organize or retrieve the memory.
typeYesMemory category describing the kind of durable knowledge being stored.
scopeNoOptional scope describing where this memory applies.
titleYesShort, specific title for the memory.
statusNoMemory confidence state: active for established knowledge or tentative for information that still needs confirmation.
evidenceNoOptional source or project-relative evidence reference supporting the memory.
consequenceNoOptional impact or consequence of this memory for future work.

TDQS

A4.2/5.0
Behavior3/5

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

The description's behavioral claims ('does not delete existing memories', 'performs no network access') largely restate destructiveHint=false and openWorldHint=false from the annotations, and it adds the useful locality framing of 'local durable memory'. It does not disclose what the annotations cannot: whether repeated calls with identical content create duplicates (idempotentHint=false implies they do) or what the write returns. With annotations already carrying the safety profile, this is adequate but adds limited new context.

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?

Three short sentences, front-loaded with purpose, then usage routing, then behavioral constraints. No filler or repetition; every clause carries information.

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 an 8-parameter write tool with full schema coverage, no output schema, and annotations present, the description covers purpose, usage routing, and side-effect profile. The only gap is duplicate/return behavior on a non-idempotent write, which is minor.

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 description coverage is 100% with per-field descriptions and enum values, so the schema does the heavy lifting. The description's list of knowledge kinds loosely maps to the type enum but adds no format, syntax, or selection guidance beyond it. Baseline 3 is appropriate.

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?

Specific verb+resource (store durable project knowledge that survives across sessions) with the durable/temporary distinction made explicit against the checkpoint sibling. An agent can tell immediately what this tool produces and how it differs from checkpoint without opening either schema.

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

Usage Guidelines5/5

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

States exactly when to use it (stable decisions, constraints, gotchas, failures, hypotheses, reusable knowledge) and names the alternative with its own condition (checkpoint for temporary task progress). Nothing is left to inference.

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

resumeResume Saved TaskA

Resume and remove the top saved task from the task stack. Use after tasks shows resumable work; use tasks when you only need to inspect the stack. This changes local task state, is non-idempotent, does not delete durable memories, and performs no network access.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and idempotentHint=false, but the description adds genuinely new context: it removes an entry from a stack (pop semantics), leaves durable memories intact, and performs no network access. The non-destructive clarification is valuable since 'remove' could otherwise read as data loss, though it restates non-idempotency already in annotations.

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?

Two sentences, both front-loaded: the operation first, then routing guidance and behavioral guarantees. No filler, and every clause carries information an agent needs.

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 zero-param mutation with no output schema, the description covers the operation, the routing decision, state side effects, and network behavior. The only gap is what 'resume' returns (the resumed task content), which an agent might reasonably want to know, but annotations and description together are otherwise sufficient.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No parameter-related claims are needed or missing.

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?

States a precise verb pair and resource: 'Resume and remove the top saved task from the task stack.' This distinguishes it from sibling 'tasks' (inspect) and from 'checkpoint'/'remember' by naming the exact stack operation performed.

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

Usage Guidelines5/5

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

Explicitly names the precondition ('Use after tasks shows resumable work') and the alternative ('use tasks when you only need to inspect the stack'). Both when-to-use and when-not-to-use are covered with the sibling named.

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

statusInspect Memory StatusA
Read-onlyIdempotent

Return memory, checkpoint, index, and recovery status for the current project. Use for diagnostics and health checks. This operation is read-only and idempotent, does not modify memory or task state, and performs no network access.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
memoriesNoTotal number of durable memories in the current project.
checkpointsNoTotal number of checkpoints in the current project.
index_statusNoCurrent retrieval index health or synchronization status.
last_checkpointNoMost recent checkpoint recorded for the current project.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, and the description largely restates these (read-only, idempotent, no state modification, no network access). It adds no information beyond the structured hints, but it also contradicts nothing, so a 3 is appropriate.

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?

Three short sentences, front-loaded with the core action and scope, followed by usage and safety context. No filler and nothing repeated needlessly.

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?

The operation is parameterless, an output schema exists to describe the return shape, and annotations cover the safety profile; nothing an agent needs in order to call this correctly is missing.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; per the rubric, a 0-parameter tool has a 4 baseline. The description correctly avoids inventing inputs.

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?

States a specific verb (Return) and enumerates the exact resources covered (memory, checkpoint, index, recovery status for the current project), which is well beyond a restatement of the name "status". It stops short of explicitly distinguishing itself from the operational siblings like resume or checkpoint, so it lands just under a 5.

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?

"Use for diagnostics and health checks" gives a clear context for invoking it, implicitly steering the agent away from action-oriented siblings such as remember or resume. There are no explicit when-not conditions or named alternatives, which keeps it from a 5.

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

tasksList Pending TasksA
Read-onlyIdempotent

List the current task stack and resumable task state. Use before resume when you need to inspect pending work without changing the stack. This operation is read-only and idempotent, does not modify task state, and performs no network access.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
tasksNoSaved or resumable tasks in the current task stack, in server-defined order.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description's 'read-only and idempotent, does not modify task state' largely restates structured data rather than adding new behavior. 'Performs no network access' is a marginal addition but is already implied by openWorldHint=false.

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?

Front-loads the purpose in the first sentence and stays to three short sentences, though the safety restatement ('read-only and idempotent, does not modify task state') is somewhat redundant with annotations and could be trimmed.

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?

With an output schema present, the description need not explain return values, and it covers purpose, timing, and the safe-read nature adequately for a zero-parameter read tool.

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?

The tool takes zero parameters, so the baseline is 4; there is no parameter semantics to document, and the description correctly says nothing about inputs.

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?

States a specific verb+resource ('List the current task stack and resumable task state') that an agent can distinguish from sibling tools like resume or status without opening a 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?

Gives clear timing guidance ('Use before resume when you need to inspect pending work') and implicitly contrasts with resume by noting it leaves the stack unchanged, but does not explicitly name alternatives or when-not-to-use conditions beyond that.

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. 8 tool updatesv0.1.0
    • First observedcheckpoint
    • First observedcontext
    • First observedguard
    • First observedremember
    • First observedresume
    • First observedsearch
    • First observedstatus
    • First observedtasks

TDQS

A4.2/5.0

Scored across 8 tools

Disambiguation4/5

Descriptions carefully cross-reference each other (checkpoint vs remember, context vs search, resume vs tasks) so boundaries are mostly clear. Minor potential overlap between checkpoint/remember and guard/status, but the descriptions resolve these distinctions well.

Naming Consistency4/5

All names are single lowercase words with no camelCase/snake_case mixing, giving a uniform visual style. However, it mixes verbs (checkpoint, resume, search, guard, remember) with nouns (context, status, tasks), so the convention is not fully predictable.

Tool Count5/5

Eight tools is well-scoped for a lightweight memory server, with each tool mapping to a distinct operation (write memory, write checkpoint, search, inspect, resume, diagnose). No tool feels redundant or bolted on.

Completeness4/5

Covers the core lifecycle: durable memory (remember/search), task state (checkpoint/context/resume/tasks), and diagnostics (status/guard). The one gap is the absence of an update/delete/forget operation for durable memories, which descriptions explicitly note they never remove, limiting correction of stale knowledge.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides a persistent, local-first memory for coding agents over MCP, enabling automatic recall and recording of past work, failures, and decisions to reduce repetition and token usage.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides persistent memory for AI coding agents via MCP, enabling agents to store and semantically recall facts, events, and lessons across sessions, all running locally without cloud dependencies.
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI coding agents to maintain a private, local-first persistent memory by automatically saving, searching, and retrieving structured project memories through MCP, with hybrid keyword and embedding search, feedback-driven ranking, and no cloud dependency.
    2
    MIT