Skip to main content
Glama
M4F-S

Mnemosyne

by M4F-S

Mnemosyne 🧠

CI PyPI version Python 3.9+ MCP License: Apache-2.0

자율 AI 에이전트를 위한 프로덕션 등급의 로컬 우선 계층형 메모리 엔진.

Mnemosyne는 AI 에이전트(Hermes, OpenClaw, OpenManus, Claude Desktop, Cursor, Windsurf, CrewAI, LangChain)에게 영구적이고 구조화된 장기 메모리를 제공합니다. 사람이 읽을 수 있는 Obsidian Markdown Vault와 고속 PostgreSQL + pgvector (HNSW) 또는 설정이 필요 없는 SQLite를 연결하여, 하이브리드 Reciprocal Rank Fusion (RRF) 검색, wikilink 지식 그래프, Ebbinghaus 시간 감쇠, 다중 에이전트 플릿 공유, 비동기 Google Drive 클라우드 동기화를 지원합니다.


📑 목차


Related MCP server: Synapto

⚡ 전체 기능 매트릭스

기능

설명

이점

🤖 MCP 네이티브 (v2024-11-05)

표준화된 stdio JSON-RPC 프로토콜 서버

Claude, Cursor, Windsurf, Hermes, OpenClaw에 원활한 드롭인 제공

🔎 고재현율 HNSW 벡터 검색

pgvector HNSW 인덱싱과 vector_cosine_ops (m=16, ef_construction=64)

클러스터 재학습 없이 서브밀리초 벡터 재현

⚖️ 하이브리드 RRF 검색

Dense Embeddings (1.0) + GIN FTS (0.8) + Graph (0.6) + Salience (0.2)의 Reciprocal Rank Fusion

정확한 기술 키워드(CVE, 코드 토큰) 및 퍼지 의미론 모두 포착

🏛️ Wing 및 Room 범위 지정

2단계 분류 체계 (wing = 도메인/프로젝트, room = 채널/토픽)

컨텍스트 창 비대화 및 도메인 간 환각 제거

🌐 에이전트 간 공유 메모리

자격 증명 스크리닝을 갖춘 다중 에이전트 플릿에서 쿼리 가능한 중앙 shared_db

개인 데이터베이스를 손상시키지 않는 집단적 플릿 지능

☁️ 비동기 Google Drive 동기화

MD5 diffing 및 .conflict.md 브랜치 해결을 갖춘 로컬 우선 양방향 동기화 엔진

로컬에서 서브밀리초 에이전트 I/O + 자동 클라우드 백업 및 팀 공유

⏳ Ebbinghaus 시간 감쇠

90일 자동 아카이브와 함께 지수 감쇠 $Salience_t = Salience_0 \times (0.95)^{\Delta t}$

활성 메모리는 선명하게 유지하면서 일시적 노이즈 자동 정리

📌 고정 메모리 면역

pinned=True 또는 #pinned 태그를 통한 감쇠 영구 면역

기본 지침과 핵심 규칙이 절대 사라지지 않음 보장

📖 Obsidian Zettelkasten

YAML frontmatter 및 [[Wiki Links]]가 포함된 사람이 읽을 수 있는 Markdown 노트 작성

Obsidian에서 직접 시각적 검사, 편집 및 그래프 시각화

📜 턴 인지 수집기

턴 경계를 따라 200자 오버랩이 있는 1,500자 슬라이딩 윈도우 청킹

코드 블록을 깨지 않고 전체 대화 기록 보존

🛡️ 프롬프트 인젝션 아머

제어 토큰 (`<

im_start

>, [INST]`)을 산문에서 중화; XML 컨텍스트 태그 이스케이프

메모리 오염 및 컨텍스트 하이재킹 공격 방지

⚡ FastEmbed ONNX 지원

초경량 ONNX 런타임 임베딩 엔진 (~30MB RAM)

무거운 PyTorch sentence-transformers 대비 90% 메모리 절감

🔄 제로 설정 SQLite 폴백

PostgreSQL 오프라인 시 로컬 SQLite로 자동 폴백

독립 개발자 워크스테이션을 위한 100% 기능 동등성


🏗️ 시스템 아키텍처

                                ┌──────────────────────────────────────────────┐
                                │          AI Agents & LLM Frameworks          │
                                │  Hermes • OpenClaw • Claude • Cursor • Manus │
                                └──────────────────────┬───────────────────────┘
                                                       │ JSON-RPC (stdio) / Python SDK
                                                       ▼
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                           Mnemosyne Core (v3.4.0)                                           │
│                                                                                                             │
│  ┌─────────────────────────┐  ┌─────────────────────────┐  ┌─────────────────────────────────────────────┐  │
│  │ Admission & Security    │  │ Multi-Backend Embedder  │  │ Turn-Aware Session Ingestor                 │  │
│  │ - Secret Regex Guard    │  │ - FastEmbed (ONNX 30MB) │  │ - Turn boundary splitting                   │  │
│  │ - Injection Neutralizer │  │ - Remote Microservice   │  │ - 1500-char linear sliding window           │  │
│  │ - Path Traversal Guard  │  │ - SentenceTransformers  │  │ - Sequential [[Wiki Link]] chaining         │  │
│  └─────────────────────────┘  └─────────────────────────┘  └─────────────────────────────────────────────┘  │
│                                                                                                             │
│  ┌───────────────────────────────────────────────────────────────────────────────────────────────────────┐  │
│  │                                 Hybrid RRF Retrieval & Graph Ranker                                   │  │
│  │            RRF Score = 1.0 * Dense(HNSW) + 0.8 * Keyword(FTS) + 0.6 * Graph + 0.2 * Salience          │  │
│  └───────────────────────────────────────────────────────────────────────────────────────────────────────┘  │
└───────────────────────────────────────┬───────────────────────────────────────┬─────────────────────────────┘
                                        │                                       │
                ┌───────────────────────┴───────────────────────┐               │
                ▼                                               ▼               ▼
 ┌─────────────────────────────┐                 ┌─────────────────────────────────────────────┐
 │    PostgreSQL + pgvector    │                 │       Obsidian Markdown Vault (Local)       │
 │ - HNSW vector_cosine_ops    │                 │ - Human-Readable Markdown + YAML Frontmatter │
 │ - GIN tsvector English FTS  │                 │ - [[Wikilink]] Knowledge Graph Visualizer   │
 │ - Self-Healing DB Pool      │                 │ - Atomic Writes with EXDEV Fallback         │
 │ - Private DB + shared_db    │                 └──────────────────────┬──────────────────────┘
 └─────────────────────────────┘                                        │ Async Background Sync
                                                                        ▼
                                                 ┌─────────────────────────────────────────────┐
                                                 │              Google Drive Cloud             │
                                                 │ - Service Account / OAuth2 Authentication    │
                                                 │ - MD5 Checksum Verification                 │
                                                 │ - Sibling .conflict-TIMESTAMP.md Resolution │
                                                 └─────────────────────────────────────────────┘

🧠 핵심 기능 심층 분석

1. 계층형 Wing 및 Room 분류 체계

메모리 교차 오염은 다중 에이전트 플릿의 주요 실패 모드입니다. Mnemosyne는 메모리를 2단계 물리적 궁전으로 구조화합니다:

  • wing (도메인/프로젝트): 최상위 도메인 경계 (예: ecommerce, pentest, devops, shared).

  • room (토픽/채널): 세분화된 토픽 파티션 (예: database, firewall, stripe_api).

쿼리는 특정 wing 또는 room으로 좁게 범위를 지정할 수 있어, 마케팅 프롬프트가 침투 테스트 결과를 회상하는 것을 방지합니다.

2. 하이브리드 Reciprocal Rank Fusion (RRF) 검색

표준 벡터 검색은 정확한 기술 문자열(예: CVE-2024-38077, 0x7fff5fbff8c0)에서 실패하고, 키워드 검색은 의미론적 개념에서 실패합니다. Mnemosyne는 다중 후보 검색을 실행하고 가중 RRF를 사용하여 결과를 병합합니다:

$$\text{RRF Score}(d) = \sum_{m \in \text{modes}} w_m \cdot \frac{1}{k + \text{rank}_m(d)} + 0.2 \cdot \text{Salience}(d)$$

  • Dense HNSW 벡터 검색: 가중치 $1.0$ (384차원 임베딩에 대한 코사인 거리).

  • PostgreSQL 전문 검색: 가중치 $0.8$ (제목을 A로, 내용을 B로 가중치를 둔 tsvector).

  • 재귀 그래프 탐색: 가중치 $0.6$ (1홉 및 2홉 [[Wiki Links]]를 발견하는 재귀 CTE).

  • 메모리 Salience 엔진: 가중치 $0.2$ ($0.0$에서 $1.0$ 사이의 중요도 점수).

3. 에이전트 간 공유 메모리 레이어 (shared_db)

자율 다중 에이전트 환경에서 에이전트는 상태 손상을 방지하기 위해 격리된 개인 데이터베이스(toy_db, old_db, candy_db 등)를 유지합니다. 그러나 집단 지능은 글로벌 정책과 검증된 사실의 공유를 요구합니다.

  • 게시: memory_publish_shared를 사용하여 검증된 노트가 shared_db에 게시됩니다.

  • 자격 증명 스크리닝: 콘텐츠는 Anthropic 키(sk-ant-), Google Gemini 키(AIza...), HuggingFace 토큰(hf_...), OpenAI 키(sk-proj-...), AWS 액세스 키(AKIA...), Slack 토큰(xox-) 및 개인 키에 대한 엄격한 정규식 필터로 검사됩니다.

  • Fail-Soft 회상: 에이전트가 메모리를 쿼리할 때 memory_recall은 개인 저장소와 shared_db를 모두 쿼리합니다. 공유 데이터베이스에 일시적으로 접근할 수 없는 경우, 에이전트를 중단하지 않고 우아하게 성능이 저하됩니다.

4. Ebbinghaus 시간 감쇠 및 고정(Pinned) 면역

메모리는 시간이 지남에 따라 자연스럽게 관련성을 잃습니다. Mnemosyne는 Herman Ebbinghaus의 지수 망각 곡선을 구현합니다:

$$\text{Salience}(t) = \text{Salience}0 \times (0.95)^{\Delta t{\text{days}}}$$

  • 터치 피드백: 메모리에 접근하면 last_accessed_at이 업데이트되어 감쇠가 재설정됩니다.

  • 야간 자동 아카이빙: 통합 프로세스는 $\text{Salience} < 0.05$이고 $>90\text{ 일}$ 동안 접근되지 않은 노트를 자동으로 status = 'archived'로 전환합니다.

  • 고정 면역: 시스템 규칙, 핵심 정책 또는 pinned=True로 표시되거나 #pinned 태그가 지정된 노트는 시간 감쇠로부터 영구 면역($\text{Salience} = 1.0$)을 받습니다.

5. Obsidian Markdown Vault 및 양방향 그래프

에이전트가 생성한 모든 메모리는 Obsidian vault 내부에 사람이 읽을 수 있는 .md 파일로 동시에 작성됩니다:

  • Zettelkasten Frontmatter: title, date, tags, type, salience, wing, room을 포함합니다.

  • 지식 그래프: [[Target Note]]로 언급된 대상 노트는 PostgreSQL에서 양방향 엣지로 자동 파싱됩니다.

  • 실시간 검사: 데스크톱 또는 모바일 장치에서 Obsidian을 열고 Obsidian의 대화형 그래프 뷰에서 에이전트 플릿의 집단 메모리를 탐색하세요.

6. 턴 인지(Turn-Aware) 축어적 세션 수집기

대화 기록에는 손실 압축에서 사라지는 중요한 뉘앙스가 자주 포함됩니다. memory_ingest_session:

  • 원시 대화록을 턴 경계(User:, Assistant:, ### Turn, **Human**:)를 따라 분할합니다.

  • 1,500자를 초과하는 턴에는 선형 슬라이딩 윈도우(200자 오버랩이 있는 1,500자)를 적용합니다.

  • [[Session ... Turn 01 Part 02]] wikilink를 사용하여 순차적 청크를 연결하여 코드 블록, 실행 추적 및 대화 흐름을 보존합니다.

7. 비동기 Google Drive 클라우드 동기화

에이전트 vault를 여러 머신 또는 모바일 장치에서 안전하게 백업하고 동기화하세요:

  • 로컬 우선 속도: 에이전트 도구 호출이 Google Drive 네트워크 지연에 블로킹되지 않고 로컬 SSD 속도(<1ms)로 실행됩니다.

  • 백그라운드 데몬 / Cron 동기화: 볼트 파일을 스캔하고 MD5 체크섬을 계산한 후 Google Drive와 델타를 양방향 동기화합니다.

  • 충돌 해결: Google Drive와 로컬 에이전트 볼트에서 파일이 동시에 수정된 경우, Mnemosyne는 수신 버전을 NoteName.conflict-YYYYMMDD-HHMMSS.md로 저장하여 데이터 손실을 방지합니다.

  • 인증: Google Cloud 서비스 계정 JSON(GOOGLE_APPLICATION_CREDENTIALS, GDRIVE_SERVICE_ACCOUNT_JSON) 및 OAuth2 사용자 토큰(GDRIVE_TOKEN_JSON)을 지원합니다.

8. 유연한 임베딩 백엔드 (FastEmbed / 마이크로서비스 / 로컬)

Mnemosyne는 어떤 배포 리소스 예산에도 적응합니다:

  1. FastEmbed ONNX Runtime (독립형 노드 권장): ONNX Runtime C++ 실행(~30MB RAM)을 사용합니다. PyTorch 오버헤드가 전혀 없습니다.

  2. 중앙 집중식 마이크로서비스 (mnemosyne.embed_service): 단일 전용 컨테이너에서 sentence-transformers를 호스팅하여 HTTP(MEMORY_EMBED_URL)를 통해 여러 에이전트 컨테이너에 서비스를 제공합니다.

  3. 로컬 SentenceTransformers: 독립형 PyTorch 실행(all-MiniLM-L6-v2, 384차원).

  4. 결정적 해시 폴백: 극도로 제약된 환경을 위한 제로-RAM 수학적 벡터 해시.

9. 심층 방어 보안 및 인젝션 아머

  • 경로 탐색 면역: 이중 해석된 정규 경로 검사(is_relative_to)를 통해 파일 작업이 볼트 루트를 벗어날 수 없도록 보장합니다.

  • 원자적 형제 파일 쓰기: 파일은 형제 임시 파일(.note.pid.tmp)에 기록된 후 원자적으로 이름이 변경되며, EXDEV 크로스 디바이스 볼륨 마운트에 대한 자동 폴백을 제공합니다.

  • 제어 토큰 중화: 코드 블록을 그대로 보존하면서 산문에서 LLM 인젝션 토큰(<|im_start|>, <|system|>, [INST], <<SYS>>)을 중화합니다.

  • 구조화된 XML 컨텍스트 캡슐화: 회상된 메모리는 내부 태그 이스케이프와 함께 <recalled_memory_context id="..." title="..." source="..."> 태그로 감싸져, 호스트 LLM이 회상된 메모리를 활성 시스템 지시와 혼동하지 않도록 보장합니다.


🛠️ MCP 도구 참조 (8개 도구)

8개 도구 모두 표준 MCP JSON-RPC stdio를 통해 에이전트에 기본적으로 노출됩니다:

1. memory_remember

볼트에 시맨틱 임베딩, 태그 및 계층적 스코프와 함께 개인 메모리 노트를 저장합니다.

{
  "title": "PostgreSQL HNSW Tuning",
  "content": "For datasets >10,000 vectors, use HNSW with m=16 and ef_construction=64 for optimal recall.",
  "tags": ["database", "pgvector", "performance"],
  "wing": "engineering",
  "room": "databases",
  "salience": 0.8,
  "pinned": true
}

2. memory_publish_shared

정제되고 검증된 발견 사항 또는 정책을 에이전트 간 공유 플릿 메모리(shared_db)에 게시합니다.

{
  "title": "Fleet Security Policy: SSL Verification",
  "content": "All internal agent HTTP requests must enforce SSL certificate validation.",
  "tags": ["security", "policy"],
  "wing": "shared",
  "room": "general"
}

3. memory_recall

하이브리드 RRF, HNSW 벡터, 키워드 또는 그래프를 사용하여 개인 및 공유 플릿 데이터베이스에서 메모리를 검색합니다.

{
  "query": "HNSW index configuration parameters",
  "mode": "hybrid",
  "top_k": 5,
  "scope": {
    "wing": "engineering",
    "room": "databases"
  },
  "include_shared": true
}

4. memory_ingest_session

전체 대화 기록을 턴 경계를 기준으로 원문 그대로 수집하고 청크로 분할합니다.

{
  "transcript": "User: How do we configure pgvector?\nAssistant: Use CREATE EXTENSION vector; then create an HNSW index.",
  "wing": "engineering",
  "room": "sessions"
}

5. memory_timeline

최근 메모리 작업(remember, recall, remind, consolidate)을 시간순으로 검사합니다.

{
  "limit": 20
}

6. memory_history

업데이트 전 특정 메모리 노트의 버전 기록 및 과거 편집 스냅샷을 확인합니다.

{
  "title": "PostgreSQL HNSW Tuning",
  "limit": 5
}

7. memory_remind_me

향후 예정된 알림 또는 반복 작업을 예약합니다.

{
  "title": "Rotate Database Credentials",
  "content": "Verify that all 5 agent connection pools are refreshed with new passwords.",
  "trigger_at": "2026-09-01T00:00:00Z",
  "recurring": "monthly"
}

8. memory_audit

실시간 메모리 상태 메트릭, 저장소 백엔드 상태, 요청 수 및 활성 윙을 확인합니다.

{}

🌐 멀티 에이전트 플릿 프로덕션 아키텍처

멀티 에이전트 프로덕션 환경(예: 5-에이전트 Hermes 플릿)에서 Mnemosyne는 내부 Docker 네트워크에서 에이전트 데이터베이스를 격리하면서 공유 인텔리전스를 제공합니다:

                                  ┌─────────────────────────────────────────┐
                                  │      Production VPS (${VPS_HOST})      │
                                  └────────────────────┬────────────────────┘
                                                       │
         ┌───────────────────┬──────────────────┼───────────────────┬──────────────────┐
         ▼                   ▼                  ▼                   ▼                  ▼
┌──────────────────┐┌──────────────────┐┌──────────────────┐┌──────────────────┐┌──────────────────┐
│   hermes-agent   ││ hermes-assistant ││ hermes-marketing ││  hermes-pentest  ││  hermes-trader   │
│      (Toy)       ││      (Old)       ││     (Candy)      ││     (Pencil)     ││      (Coin)      │
│   Database:      ││   Database:      ││   Database:      ││   Database:      ││   Database:      │
│     toy_db       ││     old_db       ││     candy_db     ││     pencil_db    ││     trader_db    │
└────────┬─────────┘└────────┬─────────┘└────────┬─────────┘└────────┬─────────┘└────────┬─────────┘
         │                   │                  │                   │                  │
         └───────────────────┴──────────────────┼───────────────────┴──────────────────┘
                                                │
                                                ▼
                               ┌───────────────────────────────────┐
                               │   PostgreSQL + pgvector (HNSW)    │
                               │   - Private DBs: toy_db, old_db.. │
                               │   - Shared DB:   shared_db        │
                               └───────────────────────────────────┘

🚀 빠른 시작 및 설치

1. 설치

# Standard installation
pip install mnemosyne-memory

# With Google Drive Cloud Synchronization support
pip install "mnemosyne-memory[gdrive]"

# With lightweight FastEmbed ONNX support (~30MB RAM)
pip install "mnemosyne-memory[fastembed]"

# Full installation (All extras + Dev dependencies)
pip install "mnemosyne-memory[dev,gdrive,fastembed,embed-service]"

2. Docker Compose로 실행

PostgreSQL + pgvector 컨테이너를 시작합니다:

docker compose up -d

3. MCP 서버 시작

# Standalone with local SQLite (Zero configuration)
python -m mnemosyne server

# With PostgreSQL + pgvector
MEMORY_DB_DSN="postgresql://mnemosyne:***@localhost:5432/my_agent_db" python -m mnemosyne server

🤖 에이전트 프레임워크 통합 레시피

1. Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "mnemosyne": {
      "command": "python3",
      "args": ["-m", "mnemosyne", "server"],
      "env": {
        "MEMORY_VAULT_PATH": "/Users/username/Documents/Obsidian/AgentVault",
        "MEMORY_DEFAULT_WING": "claude"
      }
    }
  }
}

2. Cursor IDE (.cursor/mcp.json)

{
  "mcpServers": {
    "mnemosyne": {
      "command": "python3",
      "args": ["-m", "mnemosyne", "server"],
      "env": {
        "MEMORY_VAULT_PATH": "./.vault",
        "MEMORY_DEFAULT_WING": "codebase"
      }
    }
  }
}

3. Hermes 에이전트 (~/.hermes/config.yaml)

mcp_servers:
  obsidian_memory:
    command: python3
    args: ["-m", "mnemosyne", "server"]
    env:
      MEMORY_DB_DSN: "postgresql://mnemosyne:***@${DB_HOST}:5432/toy_db"
      MEMORY_SHARED_DSN: "postgresql://mnemosyne:***@${DB_HOST}:5432/shared_db"
      MEMORY_VAULT_PATH: "/opt/data/vault"

4. OpenClaw (openclaw-config.yaml)

plugins:
  mcp_servers:
    mnemosyne:
      command: "python3"
      args: ["-m", "mnemosyne", "server"]
      env:
        MEMORY_VAULT_PATH: "~/.openclaw/vault"
        MEMORY_DEFAULT_WING: "openclaw"

5. Python SDK 및 자율 에이전트 스크립트

from mnemosyne import UnifiedMemorySystem

mem = UnifiedMemorySystem(
    vault_path="~/.agent/vault",
    dsn="postgresql://mnemosyne:***@localhost:5432/agent_db",
    shared_dsn="postgresql://mnemosyne:***@localhost:5432/shared_db"
)

# Remember fact
mem.remember(
    title="Kubernetes Cluster Policy",
    content="Deployments in staging must specify resource memory limits.",
    wing="infrastructure",
    room="k8s",
    tags=["kubernetes", "policy"],
    pinned=True
)

# Hybrid recall
results = mem.recall(
    query="staging memory limits",
    mode="hybrid",
    scope={"wing": "infrastructure"}
)

for r in results:
    print(r["title"], "->", r["formatted_context"])

💻 전체 CLI 명령어 참조

Mnemosyne는 완전한 기능을 갖춘 관리 CLI를 포함합니다:

# 1. Store a memory note
python -m mnemosyne remember "API Architecture" "Uses Bearer JWT auth." --tags security auth --wing backend --room api --salience 0.8 --pinned

# 2. Publish shared fleet memory
python -m mnemosyne publish-shared "Global Production Policy" "Always check SSL certs." --wing devops

# 3. Search memories
python -m mnemosyne recall "JWT authentication" --mode hybrid --top-k 5 --wing backend

# 4. View activity timeline
python -m mnemosyne timeline --limit 20

# 5. Trigger Ebbinghaus decay & link reconciliation
python -m mnemosyne consolidate --decay-rate 0.95 --archive-threshold 0.05

# 6. Check system statistics & health
python -m mnemosyne stats

# 7. Synchronize with Google Drive (One-off pass)
python -m mnemosyne sync-gdrive --folder "My-Agent-Vault" --credentials service-account.json

# 8. Run Google Drive Sync as a background daemon
python -m mnemosyne sync-gdrive --daemon --interval 60

# 9. Run standalone Centralized Embedding Microservice
python -m mnemosyne embed-service --host 0.0.0.0 --port 8000 --model all-MiniLM-L6-v2

⚙️ 환경 변수 참조

변수

기본값

설명

MEMORY_VAULT_PATH

~/.mnemosyne/vault

로컬 Obsidian Markdown 볼트 디렉토리의 파일시스템 경로입니다.

MEMORY_DB_DSN

(없음)

PostgreSQL DSN(예: postgresql://user:pass@host:5432/db)입니다. 설정되지 않으면 SQLite를 사용합니다.

MEMORY_SHARED_DSN

(없음)

선택적 에이전트 간 공유 플릿 데이터베이스용 PostgreSQL DSN입니다.

MEMORY_AGENT_NAME

local-agent

멀티 에이전트 플릿 배포에서 원본 에이전트의 식별자입니다.

MEMORY_EMBED_URL

(없음)

원격 중앙 집중식 임베딩 마이크로서비스 URL입니다(예: http://localhost:8000).

MEMORY_REQUIRE_POSTGRES

false

PostgreSQL 실패 시 SQLite로 폴백하는 대신 오류를 발생시키려면 true로 설정합니다.

GOOGLE_APPLICATION_CREDENTIALS

(없음)

Google Drive 동기화를 위한 Google Cloud 서비스 계정 JSON 파일 경로입니다.

GDRIVE_SERVICE_ACCOUNT_JSON

(없음)

Google Cloud 서비스 계정 자격 증명의 문자열화된 JSON 콘텐츠입니다.

GDRIVE_TOKEN_JSON

(없음)

승인된 Google OAuth2 사용자 토큰의 문자열화된 JSON 콘텐츠입니다.

TOKENIZERS_PARALLELISM

false

stdio JSON-RPC 스트림 무결성을 유지하기 위해 HuggingFace 토크나이저 포크를 비활성화합니다.

HF_HUB_DISABLE_PROGRESS_BARS

1

MCP 스트림을 깨끗하게 유지하기 위해 stdio에서 진행률 표시줄을 비활성화합니다.

HF_HUB_OFFLINE

0

로컬 캐시를 사용하여 SentenceTransformers를 100% 오프라인으로 실행하려면 1로 설정합니다.

TRANSFORMERS_OFFLINE

0

transformers가 외부 HuggingFace 네트워크 요청을 하지 못하도록 하려면 1로 설정합니다.


🧪 테스트 및 벤치마크

Mnemosyne는 포괄적인 테스트 스위트(단위 테스트, 보안 인젝션 테스트, SQLite 테스트, 라이브 PostgreSQL pgvector 통합 테스트)를 유지합니다:

# Run all unit tests
pytest tests/ -v -m "not integration"

# Run full test suite including live PostgreSQL + pgvector tests
MEMORY_DB_DSN="postgresql://mnemosyne:***@localhost:5432/test_db" pytest tests/ -v

📄 라이선스

Apache-2.0 라이선스. 오픈 자율 에이전트 생태계를 위해 구축되었습니다. 전체 내용은 LICENSE를 참조하세요.

Available Tools

9 tools
memory_assemble_contextA

Retrieve and format high-salience memories into a strict token-budgeted XML prompt block ready for direct agent context injection.

NameRequiredDescriptionDefault
modeNohybrid
queryYesSearch query to retrieve context for
scopeNoOptional wing/room filter scope
max_tokensNoMaximum token budget for the assembled context
include_sharedNoWhether to include shared fleet knowledge

TDQS

A3.7/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses that the tool retrieves rather than mutates, filters for 'high-salience', enforces a 'strict token-budget', and formats into XML. This is useful, though it doesn't explain how salience is determined or how failures/token-truncation are handled.

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, front-loaded sentence with no filler. It names the primary action, the input type, the processing behavior, and the output format in an efficient structure.

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?

The description covers the key output (XML prompt block) but leaves important gaps for a tool with five parameters and no annotations: the meaning of each `mode`, how `scope` is applied, the effect of `include_shared`, and expected behavior when the token budget is exceeded. The schema fills some gaps, but the description alone isn't fully complete for correct invocation.

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 80%, so the schema already documents most parameter meanings. The description adds some context around token budgeting and salience, but it doesn't elaborate on the `mode` enum, `scope` object, or `include_shared` flag beyond what the schema fields already say. This is adequate but not additive.

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 states the action ('Retrieve and format') and resource ('high-salience memories'), and specifies the unique output format: 'strict token-budgeted XML prompt block ready for direct agent context injection.' It doesn't explicitly name sibling alternatives, but the XML formatting and context-injection purpose distinguish it from tools like memory_recall or memory_timeline.

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 intended use is implied: assemble memory context for direct agent injection. It does not name when to use this over alternatives, nor provide any when-not-to-use guidance. The phrase 'ready for direct agent context injection' gives some context, but an agent would need to infer the comparison with memory_recall.

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

memory_auditA

Get memory system statistics, health check, active wings, and version info

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. The verb 'Get' strongly implies a read-only operation, and the listed outputs suggest no mutation. However, it does not explicitly state that no state changes occur, whether permissions are required, or whether the health check performs any active diagnostics.

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?

A single, compact sentence with no filler. The verb is front-loaded and each listed item contributes meaning. Every word earns its place, and the structure is 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.

Completeness4/5

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

With zero parameters and no output schema, the description needs to convey what the tool returns. It does so by listing four output categories: statistics, health check, active wings, and version info. This is adequate for simple invocation, though the term 'active wings' is domain-specific and not expanded.

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 has zero parameters, so the schema provides no parameter documentation. Per the baseline for a zero-parameter tool, the description does not need to compensate for parameter gaps; it simply describes the operation's outputs, which is sufficient.

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 opens with the specific verb 'Get' and names distinct resources: memory system statistics, health check, active wings, and version info. This makes the tool's focus clear and differentiates it from content-oriented siblings like memory_recall or memory_history, though it does not explicitly contrast itself with them.

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?

There is no guidance on when to choose memory_audit over sibling tools. While the system-level subject matter implies a diagnostic use case, the description does not explicitly state when to run an audit versus when to use memory_history, memory_timeline, or memory_assemble_context.

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

memory_historyB

View version history of a specific memory note (previous edits).

NameRequiredDescriptionDefault
limitNo
titleYesThe title of the note to check history for

TDQS

B3.2/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. It only indicates a read-style operation ('View') and says nothing about the shape of the returned history, ordering, pagination, or how 'previous edits' are represented.

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, front-loaded sentence with no filler. It is easy to parse and economical, though it may be too terse to convey all necessary behavioral and parameter guidance.

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 simple read tool, the description names the resource and indicates the action, and the required title parameter is sufficient to invoke it. However, with no output schema and no annotations, the lack of return-format and limit semantics leaves clear gaps for an agent trying to use the results correctly.

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?

The title parameter is already documented in the schema, but the limit parameter has no description and the tool description adds no meaning for it. With 50% schema coverage, the description needed to compensate for the undocumented parameter and did not.

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 states a specific verb ('View') and a precise resource ('version history of a specific memory note'), with the clarifying parenthetical 'previous edits'. It is immediately clear what the tool does, but it does not explicitly contrast with sibling tools such as memory_timeline or memory_audit.

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 conveys a clear use case: checking the previous edits of one specific note. It gives enough context for when an agent should invoke it, though it provides no explicit exclusions or alternative routing to sibling tools.

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

memory_ingest_sessionA

Ingest a full conversation transcript verbatim into memory, split along conversational turn boundaries.

NameRequiredDescriptionDefault
roomNosessions
wingNogeneral
transcriptYesThe full conversation text to ingest

TDQS

A3.7/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 behavioral disclosure burden. It usefully disloses that content is stored verbatim and split by turn boundaries, but it does not explain side effects, storage semantics, deduplication, limits, or whether repeated ingestion creates duplicates. These would be valuable for a memory-mutating tool.

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?

One sentence, no filler, and the most decision-relevant information is front-loaded. The phrase about splitting along turn boundaries is efficiently included without bloating the description.

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 simple ingestion tool, the core invocation path is clear: provide the full transcript. However, no output schema or annotations exist, and the optional room/wing parameters are unexplained, so an agent would need to infer their purpose from names or defaults. This leaves some contextual ambiguity around storage targeting.

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 only 33%, with only 'transcript' having a schema description. The description adds meaning to the requied parameter by specifying 'verbatim' and 'split along conversational turn boundaries', but it does not explain the optional 'room' and 'wing' parameters, which remain defined only by their names and defaults.

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 identifies the action ('Ingest'), the resource ('full conversation transcript'), the destination ('into memory'), and the precise behavior ('verbatim, split along conversational turn boundaries'). This distinguishes it from sibling tools like memory_remember or memory_recall, which likely handle individual memories rather than bulk ingestion.

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 implies this is for full multi-turn conversation transcripts, which suggests a bulk ingest use case distinct from memory_remember or memory_recall. However, it does not explicitly state when not to use it or name alternative tools, leaving any routing decision to inference.

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

memory_publish_sharedA

Publish a sanitized, curated finding or policy to the cross-agent shared fleet memory.

NameRequiredDescriptionDefault
roomNogeneral
tagsNoTags
wingNoshared
titleYesTitle for the shared policy or finding
contentYesThe shared knowledge content in markdown (must not contain private credentials)

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It discloses that this is a write/publish action with cross-agent visibility and imposes a sanitization constraint, which is valuable. However, it does not mention persistence, overwrite/append behavior, permissions, or what the call returns.

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?

A single front-loaded sentence with no filler. The action, object, and destination are stated directly, and every word adds meaning.

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?

For a writing tool with five parameters, no annotations, and no output schema, this description is too thin. It omits expected call semantics such as return value, success/failure behavior, and the meaning of room/wing, leaving an agent to guess at important usage details.

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?

The schema already documents title, content, and tags, but room and wing are undocumented and the description does not clarify them. The general phrase 'finding or policy' adds only minimal semantics to the content parameter and says nothing about how the publish target or routing fields behave.

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 names a specific verb ('Publish'), a concrete object ('a sanitized, curated finding or policy'), and a precise destination ('cross-agent shared fleet memory'). This clearly differentiates it from local memory tools in the sibling set such as memory_remember or memory_recall.

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?

It implies the occasion ('sanitized, curated' material meant for shared use) but never explicitly says when to prefer this over memory_remember or memory_ingest_session, nor does it provide when-not-to-use exclusions. The shared-fleet scope is useful context, but the routing guidance 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.

memory_recallB

Search memory by semantic meaning, keywords, or graph. Retrieves from both private and shared stores.

NameRequiredDescriptionDefault
modeNo
queryYes
scopeNoRestrict search to a wing and/or room
top_kNo
include_sharedNoWhether to include cross-agent shared fleet memory

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 carries the behavioral burden. It discloses that the tool retrieves from both private and shared stores and that search can be semantic, keyword-based, or graph-based. However, it does not mention return format, whether any filtering or ranking applies, or any access caveats.

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 concise sentence with no filler. The primary action and retrieval scope are front-loaded, making it easy to parse quickly.

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 5 parameters, a nested scope object, no output schema, no annotations, and several related sibling tools, this description is too sparse. It leaves important invocation details such as mode defaults, query semantics, shared-memory handling, and result expectations unexplained.

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 40%, and the description compensates poorly. It loosely maps to the mode enum with 'semantic meaning, keywords, or graph' and mentions shared/private stores, but it does not clarify the required query parameter, the meaning of hybrid mode, top_k behavior, or the nested scope object.

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 uses a specific verb and resource: 'Search memory' and lists search methods (semantic, keyword, graph). It is clear about what the tool does, though it does not explicitly differentiate itself from sibling tools like memory_timeline or memory_history.

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 implies the tool is for searching/recalling stored memories, but it gives no explicit guidance on when to prefer memory_recall over alternatives like memory_assemble_context, memory_timeline, or memory_remind_me. Usage context is inferred rather than stated.

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

memory_rememberA

Store a private memory note in the vault with semantic embedding, tags, and hierarchical wing/room scope.

NameRequiredDescriptionDefault
roomNoTopic within the wing (e.g. woocommerce, firewall, docker)general
tagsNoCategorical tags
wingNoProject/domain grouping (e.g. ecommerce, security, devops)general
titleYesShort, unique title for the memory
pinnedNoSet true to make permanently immune to Ebbinghaus temporal decay
contentYesThe memory content in markdown
salienceNoImportance score 0.0-1.0 (default 0.5)

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden and it does add useful behavioral context: 'private,' 'vault,' 'semantic embedding,' and hierarchy. It does not disclose behaviors such as duplicate-title handling, temporal decay, or return value, which leaves some opacity for a state-changing tool.

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?

One sentence, front-loaded with the verb, and every detail—privacy, vault, embedding, tags, scope—earns its place. There is no filler or redundancy.

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?

Schema plus description covers what to pass, but the absence of annotations and output schema, combined with seven sibling tools, leaves gaps: no routing guidance versus ingestion/sharing tools and no statement of what happens on success or when a title already exists. Complete enough for basic invocation but not fully self-sufficient.

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% and each parameter already has meaningful descriptions (e.g., room is 'Topic within the wing'; pinned explains Ebbinghaus decay). The description adds only the notion of hierarchy, not substantive parameter semantics, so the 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?

The description states a specific action ('Store') and a specific resource ('private memory note in the vault') while naming key processing details: semantic embedding, tags, and hierarchical wing/room scope. 'Private' distinguishes it from shared publication, and the write verb separates it from retrieval siblings like memory_recall.

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?

Usage is implied by the store verb: use this when saving a private memory note. However, the description provides no explicit when-to-use or when-not-to-use guidance and names no alternatives, so an agent must infer the boundary against siblings like memory_ingest_session and memory_publish_shared.

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

memory_remind_meB

Schedule a future reminder or recurring task

NameRequiredDescriptionDefault
titleYes
contentNo
recurringNo
trigger_atYes

TDQS

B3.2/5.0
Behavior2/5

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

Because no annotations are provided, the description carries the full burden of behavioral disclosure. It only states the basic scheduling action and omits important traits such as trigger_at format, how recurrence is applied, side effects when the reminder fires, and whether a memory entry is also created.

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 efficient, front-loaded sentence with no wasted words. However, its brevity comes at the cost of necessary parameter and behavior details, so it is concise but not fully appropriately sized.

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?

For a tool with four parameters, no annotations, schema description coverage of 0%, and no output schema, this description is too thin. An agent cannot confidently determine how to provide trigger_at or how recurring should behave, so the definition is materially incomplete.

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 0%, so the description must compensate, but it names no parameters directly. It only hints at 'future' and 'recurring', leaving title, content, trigger_at format, and the relationship between recurring and trigger_at undocumented.

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 uses a specific verb ('Schedule') and identifies the resource ('future reminder or recurring task'). This clearly distinguishes it from retrospective siblings like memory_recall, memory_timeline, and memory_history, and from memory_remember which implies storage rather than scheduling.

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 phrase 'Schedule a future reminder or recurring task' implies the core use case, but no explicit guidance is given about when to choose this over alternatives. There are no prerequisites, no exclusions, and no mention of sibling tools that might be more appropriate.

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

memory_timelineB

View recent memory operations (remember, recall, remind, consolidate) as a chronological timeline.

NameRequiredDescriptionDefault
limitNo

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 bears the burden of behavioral disclosure. 'View' and 'chronological timeline' imply a read-only listing, which is helpful, but no details are given about ordering direction, result format, pagination, or whether any side effects occur.

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?

A single, well-structured sentence that front-loads the main action and resource. Every word contributes value, and it includes useful examples of the operation types shown.

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 simple read-only timeline with one optional parameter, the description is mostly adequate. However, the lack of sibling differentiation, no mention of the `limit` parameter, and no output format details leave clear gaps for an agent deciding how to invoke it.

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?

The single parameter `limit` has zero schema description coverage and the tool description does not mention it at all. While the parameter is somewhat self-explanatory from its name and default value, the description adds no meaning beyond the schema.

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 states a specific verb ('View') and a clear resource ('recent memory operations') with examples of operation types. It is sufficiently clear that this is a timeline of memory operations, though it does not explicitly distinguish itself from the similarly named sibling 'memory_history'.

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?

The description provides no guidance on when to use this tool versus siblings like `memory_recall` or `memory_history`, nor does it mention any alternative conditions. Usage context is only implied by the word 'View'.

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. 9 tool updatesv3.5.0
    • First observedmemory_assemble_context
    • First observedmemory_audit
    • First observedmemory_history
    • First observedmemory_ingest_session
    • First observedmemory_publish_shared
    • First observedmemory_recall
    • First observedmemory_remember
    • First observedmemory_remind_me
    • First observedmemory_timeline

TDQS

A3.6/5.0

Scored across 9 tools

Disambiguation4/5

Most tools target distinct memory operations: storing, retrieving, scheduling, auditing, and publishing. Some overlap exists between memory_recall (search) and memory_assemble_context (curated retrieval), but their descriptions make the intended use clear.

Naming Consistency5/5

All tool names follow a consistent memory_verb_noun pattern using snake_case (e.g., memory_ingest_session, memory_publish_shared). The one slight deviation is memory_remind_me, but it still fits the overall verb-first convention.

Tool Count5/5

Nine tools cover the core memory management lifecycle without feeling bloated. The set is well-scoped for a memory server, with each tool serving a clear and necessary function.

Completeness3/5

The server covers storing, retrieving, scheduling, sharing, and diagnostics, but lacks explicit update or delete/forget tools. Memory_history implies prior edits exist, yet no edit tool is exposed, which is a notable gap for a memory management system.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Gives AI agents persistent memory with semantic search, automatic extraction, and memory decay, accessible via MCP protocol.
    5 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides persistent, searchable memory for MCP-compatible agents, enabling recall by meaning, automatic decay, trust scoring, and cross-agent handoffs.
    21 PyPI
    5
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides persistent memory with semantic search for MCP-based AI agents, enabling them to store and recall information across sessions using vector embeddings.
    4
    1
    MIT