Skip to main content
Glama

mnemon-mcp

CI npm version Node.js License: MIT

AI 에이전트를 위한 영구 계층형 메모리. 로컬 우선. 클라우드 제로. 단일 SQLite 파일.

랜딩 페이지 · npm · GitHub

AI 에이전트는 세션이 끝나면 모든 것을 잊어버립니다. Mnemon이 이를 해결합니다.

MCP 호환 클라이언트 — OpenClaw, Claude Code, Cursor, Windsurf, 또는 직접 만든 클라이언트 — 에게 단일 SQLite 데이터베이스로 백업된 구조화된 장기 메모리를 제공합니다. API 키도, 클라우드도, 텔레메트리도 없습니다. 그저 npm install만 하면 에이전트가 기억합니다.


계층형 메모리가 필요한 이유는?

평면적인 키-값 저장소는 "어제 일어난 일"과 "테스트 없이 커밋하지 말 것"을 동일하게 취급합니다. 이는 잘못된 것입니다. 서로 다른 종류의 지식은 서로 다른 수명과 접근 패턴을 갖습니다.

Mnemon은 메모리를 네 가지 계층으로 구성합니다:

계층

저장 내용

접근 방식

수명

에피소드

사건, 세션, 일지 항목

날짜 또는 기간별

감쇠 (30일 반감기)

의미론

사실, 선호도, 관계

주제 또는 개체별

안정적

절차

규칙, 워크플로우, 관례

시작 시 로드

거의 변경되지 않음

리소스

참고 자료, 책 노트

요청 시

느리게 감쇠 (90일)

지난 화요일의 일지 항목과 절대 변하지 않는 코딩 규칙은 서로 다른 계층에 저장됩니다. 그래야 하기 때문입니다.

Related MCP server: persistent-kb-mcp

검색 품질

검색은 실제 MCP 서버를 통해 797개 메모리로 구성된 실제 이중 언어(RU/EN) 코퍼스에서 50개 사례의 골든 세트로 측정됩니다. 재구현이 아닙니다. 현재 수치 (방법론 및 이력):

지표

FTS 전용

벡터 전용

하이브리드 (RRF)

종합 점수

88.9

89.2

91.7

Recall@5

0.907

0.898

0.919

MRR

0.817

0.832

0.878

nDCG@5

0.816

0.828

0.869

부정 정밀도

1.000

1.000

1.000

하이브리드는 개별 다리를 모두 능가합니다. 이것이 융합의 핵심 논거입니다. 어휘 검색은 더 나은 원시 재현율을, 벡터 검색은 더 나은 순위를 제공하며, RRF는 평균화로 잃지 않고 둘 다 유지합니다.

평가 문서는 실패 사례도 추적합니다. 코퍼스 성장에 따른 점수 변동, 평가가 잡아낸 BM25 필드 가중치 버그, 융합이 여전히 순수 어휘 검색에 지는 두 가지 사례, 그리고 골든 세트가 다루지 않는 내용. 감사할 수 없는 숫자는 마케팅일 뿐입니다. 이 숫자가 어떻게 생성되는지 읽어보세요.

아키텍처

flowchart LR
    C["MCP client<br/>Claude Code · Cursor · …"] -- "stdio / HTTP" --> T["10 tools · 4 resources · 3 prompts"]
    T --> R["retrieval pipeline<br/>FTS5 · vector · RRF fusion"]
    T --> M["memories + supersede chains"]
    I["KB import pipeline<br/>markdown → memories"] --> M
    M -- triggers --> F["FTS5 index (stemmed EN+RU)"]
    R --> F
    R --> V["sqlite-vec (optional, BYOK)"]

단일 SQLite 파일이 메모리, FTS5 인덱스, 선택적 벡터 인덱스를 보유합니다. 쓰기는 대체 체인 불변성을 유지하는 트랜잭션을 통해 이루어지며, 읽기는 검색에서 설명하는 단계적 검색 파이프라인을 실행합니다.

전체 그림 — 모듈 경계, 쓰기/읽기 경로, 불변성, 알려진 제한 사항 — 은 docs/ARCHITECTURE.md에 있습니다. 설계 결정은 ADR로 기록됩니다: SQLite+FTS5 코어, 하이브리드 RRF 검색, 동기 드라이버, 계층형 메모리 모델.

빠른 시작

설치

npm install -g mnemon-mcp

또는 소스에서:

git clone https://github.com/nikitacometa/mnemon-memory-mcp.git
cd mnemon-memory-mcp && npm install && npm run build

MCP 클라이언트 구성

openclaw mcp register mnemon-mcp --command="mnemon-mcp"

또는 ~/.openclaw/mcp_config.json에 추가:

{
  "mnemon-mcp": {
    "command": "mnemon-mcp"
  }
}

~/.claude/mcp.json에 추가:

{
  "mcpServers": {
    "mnemon-mcp": {
      "command": "mnemon-mcp"
    }
  }
}

클라이언트의 MCP 구성에 추가:

{
  "mcpServers": {
    "mnemon-mcp": {
      "command": "mnemon-mcp"
    }
  }
}

컴파일된 진입점의 전체 경로를 사용하세요:

{
  "mnemon-mcp": {
    "command": "node",
    "args": ["/absolute/path/to/mnemon-mcp/dist/index.js"]
  }
}

확인

echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | mnemon-mcp

응답에 10개의 도구가 표시되어야 합니다. 데이터베이스(~/.mnemon-mcp/memory.db)는 첫 실행 시 자동으로 생성됩니다.

이제 끝입니다. 에이전트에 영구 메모리가 생겼습니다.

할 수 있는 일

10가지 MCP 도구

도구

기능

memory_add

계층, 개체, 신뢰도, 중요도, 선택적 TTL과 함께 메모리 저장

memory_search

계층, 개체, 날짜, 범위, 신뢰도로 필터링된 전체 텍스트 또는 정확한 검색

memory_update

제자리 업데이트 또는 버전이 지정된 대체(대체 체인) 생성

memory_delete

메모리 삭제; 이전 버전이 있으면 다시 활성화

memory_inspect

계층 통계 가져오기 또는 단일 메모리의 버전 기록 추적

memory_export

필터가 있는 JSON, Markdown 또는 Claude-md 형식으로 내보내기

memory_health

진단 실행: 만료 항목, 고아 체인, 오래된 메모리; 선택적으로 GC

memory_session_start

에이전트 세션 시작 — 메모리 그룹화를 위한 세션 ID 반환

memory_session_end

선택적 요약과 함께 세션 종료; 기간 및 메모리 수 반환

memory_session_list

클라이언트, 프로젝트 또는 활성 상태로 필터링된 세션 목록

MCP 리소스 및 프롬프트

리소스 — 에이전트가 읽을 수 있는 실시간 데이터:

URI

반환

memory://stats

계층별 집계 통계

memory://recent

지난 24시간 동안 생성/업데이트된 메모리

memory://layer/{layer}

계층의 모든 활성 메모리

memory://entity/{name}

개체에 대한 모든 활성 메모리

프롬프트 — 사전 구축된 워크플로우:

프롬프트

목적

recall

"X에 대해 아는 모든 것을 말해줘"

context-load

작업 시작 전 관련 컨텍스트 로드

journal

구조화된 일지 항목 생성

검색

네 가지 모드, 모두 계층 / 개체 / 범위 / 날짜 / 신뢰도 필터 지원:

FTS 모드 (임베딩 없이 기본) — BM25 순위가 있는 토큰화된 전체 텍스트 검색. 다중 단어 쿼리는 AND를 사용합니다. 결과가 너무 적으면 OR이 점수 패널티로 보완합니다. 점진적 AND 완화는 전체 OR로 폴백하기 전에 가장 구체적인 상위 3개 용어를 시도합니다.

하이브리드 모드 (임베딩 구성 시 기본) — 상호 순위 융합을 통해 FTS5 + 벡터 검색 결합. 쿼리에서 따옴표로 묶인 개체(예: 'Essentialism')를 감지하고 교차 참조 검색을 위해 가중치가 적용된 하위 쿼리를 실행합니다.

벡터 모드 — 임베딩에 대한 순수 코사인 유사도 검색.

정확 모드 — 정확한 구문 조회를 위한 LIKE 부분 문자열 일치.

점수: bm25 × (0.3 + 0.7 × importance) × decay(layer) × recency

최신성 부스트: 1 / (1 + daysSince / 365) — 오래된 메모리를 불이익하지 않고 최근 생성된 메모리를 부드럽게 보상합니다.

형태소 분석

Snowball 형태소 분석기가 인덱스 시간쿼리 시간 모두에서 영어와 러시아어에 적용됩니다. 즉, "running""runs"와 일치하고, "книги""книга"와 일치합니다. 정밀도를 높이기 위해 쿼리에서 불용어가 필터링됩니다.

사실 버전 관리

지식은 진화합니다. Mnemon은 오래된 사실을 삭제하지 않고 체인으로 연결합니다:

v1: "Team uses React 17"  →  superseded_by: v2
v2: "Team uses React 19"  →  supersedes: v1 (active)

검색은 최신 버전만 반환합니다. include_history: true가 있는 memory_inspect는 전체 체인을 보여줍니다. memory_delete는 이전 버전을 다시 활성화합니다. 아무것도 손실되지 않습니다.

벡터 검색 (선택 사항, BYOK)

자체 임베딩 API를 제공하여 의미론적 유사도 검색을 활성화하세요:

# OpenAI
MNEMON_EMBEDDING_PROVIDER=openai MNEMON_EMBEDDING_API_KEY=sk-... mnemon-mcp

# Ollama (local, free)
MNEMON_EMBEDDING_PROVIDER=ollama mnemon-mcp

이렇게 하면 두 가지 추가 검색 모드가 열립니다:

  • mode: "vector" — 순수 코사인 유사도 검색

  • mode: "hybrid"상호 순위 융합을 통한 FTS5 + 벡터 결합

sqlite-vec(선택적 종속성으로 설치) 필요. 새 메모리는 추가 시 임베딩되고, 기존 메모리는 백필할 수 있습니다.

변수

기본값

설명

MNEMON_EMBEDDING_PROVIDER

openai 또는 ollama (설정 안 함 = 비활성화)

MNEMON_EMBEDDING_API_KEY

API 키 (OpenAI에 필요)

MNEMON_EMBEDDING_MODEL

text-embedding-3-small / nomic-embed-text

모델 이름

MNEMON_EMBEDDING_DIMENSIONS

1024 / 768

벡터 차원

MNEMON_OLLAMA_URL

http://localhost:11434

Ollama 엔드포인트

지식 베이스 가져오기

Markdown 파일 폴더가 있나요? 일괄 가져오기:

cp config.example.json ~/.mnemon-mcp/config.json   # edit this first
npm run import:kb -- --kb-path /path/to/your/kb     # incremental (skips unchanged files)

구성은 glob 패턴을 메모리 계층에 매핑합니다:

{
  "owner_name": "your-name",
  "extra_stop_words": [],
  "mappings": [
    {
      "glob": "journal/*.md",
      "layer": "episodic",
      "entity_type": "user",
      "entity_name": "$owner",
      "importance": 0.6,
      "split": "h2"
    },
    {
      "glob": "people/*.md",
      "layer": "semantic",
      "entity_type": "person",
      "entity_name": "from-heading",
      "importance": 0.8,
      "split": "h3"
    }
  ]
}

구성 필드

필드

유형

설명

owner_name

string

사용자 이름 — entity_name$owner 대체에 사용

extra_stop_words

string[]

FTS 쿼리에서 필터링할 단어 (예: 이름 형태)

glob

string

일치시킬 파일 패턴

layer

string

대상 메모리 계층

entity_type

string

user / person / project / concept / file / rule / tool

entity_name

string

리터럴 이름, "$owner" 또는 "from-heading" (H2/H3에서 추출)

split

string

"whole" (파일당 하나의 메모리), "h2" 또는 "h3" (제목으로 분할)

importance

number

0.0–1.0, 검색 순위에 영향

confidence

number

0.0–1.0, 검색에서 필터링 가능

scope

string

선택적 네임스페이스

HTTP 전송

원격 또는 다중 클라이언트 설정용:

MNEMON_AUTH_TOKEN=your-secret MNEMON_HOST=0.0.0.0 MNEMON_PORT=3000 npm run start:http

엔드포인트

설명

POST /mcp

MCP JSON-RPC (토큰 설정 시 Bearer 인증)

GET /health

{"status":"ok","version":"..."}

기본적으로 127.0.0.1에 바인딩됩니다. 다른 호스트에 바인딩하려면 MNEMON_AUTH_TOKEN이 필요합니다 — 서버는 인증 없이 메모리 저장소를 네트워크에 노출하지 않습니다(신뢰할 수 있는 네트워크에서 MNEMON_ALLOW_INSECURE_HTTP=1로 재정의 가능). 속도 제한(기본 IP당 분당 100 req), 선택적 CORS, 1MB 본문 제한, 타이밍 안전 인증, SIGTERM 시 정상 종료.

구성 참조

변수

기본값

설명

MNEMON_DB_PATH

~/.mnemon-mcp/memory.db

데이터베이스 경로

MNEMON_KB_PATH

.

가져오기용 지식 베이스 루트

MNEMON_CONFIG_PATH

~/.mnemon-mcp/config.json

가져오기 구성 경로

MNEMON_AUTH_TOKEN

HTTP 전송용 Bearer 토큰

MNEMON_HOST

127.0.0.1

HTTP 전송 바인딩 주소

MNEMON_PORT

3000

HTTP 전송 포트

MNEMON_CORS_ORIGIN

CORS Access-Control-Allow-Origin (설정하지 않으면 CORS 헤더 없음)

MNEMON_RATE_LIMIT

100

IP당 분당 최대 요청 수 (0 = 끔)

도구 참조

파라미터

유형

필수

설명

content

string

메모리 텍스트 (최대 100K 문자)

layer

string

episodic / semantic / procedural / resource

title

string

아니요

짧은 제목 (최대 500자)

entity_type

string

아니요

user / project / person / concept / file / rule / tool

entity_name

string

아니요

필터링용 엔티티 이름

confidence

number

아니요

0.0–1.0 (기본 0.8)

importance

number

아니요

0.0–1.0 (기본 0.5)

scope

string

아니요

네임스페이스 (기본 global)

source_file

string

아니요

소스 파일 경로 — 일치하는 항목의 자동 대체(supersede) 트리거

ttl_days

number

아니요

N일 후 자동 만료

valid_from / valid_until

string

아니요

시간적 사실 창 (ISO 8601)

파라미터

유형

필수

설명

query

string

검색 텍스트

mode

string

아니요

fts (기본), exact, vector, hybrid

layers

string[]

아니요

레이어별 필터

entity_name

string

아니요

엔티티별 필터 (별칭 지원)

scope

string

아니요

범위별 필터

date_from / date_to

string

아니요

날짜 범위 (ISO 8601)

as_of

string

아니요

시간적 사실 필터 — 이 날짜에 유효한 사실

min_confidence

number

아니요

최소 신뢰도

min_importance

number

아니요

최소 중요도

limit

number

아니요

최대 결과 수 (기본 10, 최대 100)

offset

number

아니요

페이지네이션 오프셋

파라미터

유형

필수

설명

id

string

메모리 ID

content

string

아니요

새 내용

title

string

아니요

새 제목

confidence

number

아니요

새 신뢰도

importance

number

아니요

새 중요도

supersede

boolean

아니요

true = 버전 교체; false (기본) = 제자리 수정

new_content

string

아니요

대체 항목용 내용

파라미터

유형

필수

설명

id

string

메모리 ID. 대체 체인의 일부인 경우 이전 항목을 다시 활성화

파라미터

유형

필수

설명

id

string

아니요

메모리 ID (집계 통계는 생략)

layer

string

아니요

레이어별 통계 필터

entity_name

string

아니요

엔티티별 통계 필터

include_history

boolean

아니요

대체 체인 표시

파라미터

유형

필수

설명

format

string

json / markdown / claude-md

layers

string[]

아니요

레이어별 필터

scope

string

아니요

범위 필터

date_from / date_to

string

아니요

날짜 범위

limit

number

아니요

최대 항목 수 (기본 전체, 최대 10K)

파라미터

유형

필수

설명

cleanup

boolean

아니요

true = 만료 항목 가비지 컬렉션 (기본: 보고만)

반환: 상태 (healthy / warning / degraded), 레이어별 통계, 만료 항목, 고아 체인, 오래된/낮은 신뢰도 개수, cleanup=true 시 정리된 개수.

파라미터

유형

필수

설명

client

string

클라이언트 식별자 (예: claude-code, cursor, api)

project

string

아니요

이 세션의 프로젝트 범위

meta

object

아니요

추가 세션 메타데이터

반환: id (세션 UUID), started_at (ISO 8601).

파라미터

유형

필수

설명

id

string

종료할 세션 ID

summary

string

아니요

수행한 작업 요약 (최대 10K 문자)

반환: id, ended_at, duration_minutes, memories_count.

파라미터

유형

필수

설명

limit

number

아니요

최대 세션 수 (기본 20, 최대 100)

client

string

아니요

클라이언트별 필터

project

string

아니요

프로젝트별 필터

active_only

boolean

아니요

종료되지 않은 세션만 반환 (기본 false)

반환: id, client, project, started_at, ended_at, summary, memories_count를 포함한 세션 배열.

다른 도구와의 비교

mnemon-mcp

mem0

basic-memory

Engram

Anthropic KG

아키텍처

SQLite FTS5 + vector

Cloud API + Qdrant

Markdown + vector

SQLite FTS5

JSON file

메모리 구조

4개 유형 레이어

플랫

플랫

플랫 + 세션

그래프

검색

FTS5 + hybrid RRF

시맨틱

하이브리드

FTS5

정확

사실 버전 관리

대체 체인

부분

없음

없음

없음

어간 추출

EN + RU (Snowball)

EN만

EN만

없음

없음

임베딩

BYOK (OpenAI / Ollama)

내장

FastEmbed

없음

없음

의존성

필수 0개

Qdrant, Neo4j

Python 3.12

Go 바이너리

없음

클라우드 필요

아니요

아니요

아니요

아니요

비용

무료

$19–249/월

무료

무료

무료

설정

npm install -g

Docker + API 키

pip + deps

Go 설치

내장

라이선스

MIT

Apache 2.0

AGPL

MIT

MIT

출처가 포함된 확장 경쟁 분석: docs/COMPETITORS.md.

개발

npm run dev        # run via tsx (no build step)
npm run build      # TypeScript → dist/
npm run lint       # eslint (flat config)
npm test           # vitest — unit + integration + MCP dispatch + HTTP transport + hybrid RRF
npm run bench      # performance benchmarks
npm run db:backup  # backup database

CI는 Node 20 및 22에서 빌드 + 린트 + 테스트를 실행한 다음, 실제 JSON-RPC를 통해 컴파일된 서버를 스모크 테스트합니다(tools/list는 정확한 도구 세트와 일치해야 함).

스택: TypeScript 5.9 (strict mode), better-sqlite3, @modelcontextprotocol/sdk, Snowball stemmer, Zod, vitest.

코드 지침은 CONTRIBUTING.md를 참조하세요.

설계 원칙

  • 기본적으로 에어갭(air-gapped) — 텔레메트리는 절대 없습니다. 기본 상태에서는 어떤 것도 머신을 떠나지 않습니다. 네트워크와 통신하는 유일한 구성 요소는 선택적 임베더이며, 설정한 제공자(로컬 Ollama 포함)에게만 통신합니다.

  • 단일 파일 — SQLite 데이터베이스 하나, 운영 부담 없음, 파일 복사로 즉시 백업.

  • 결정적 검색 — 기본값은 임베딩이 아닌 FTS5입니다. 해석 가능하고 재현 가능하며 GPU가 필요 없습니다.

  • 평면보다 구조화 — 레이어는 접근 패턴을 인코딩하고, 대체 체인은 시간을 인코딩합니다.

  • 최소 — 프로덕션 의존성 4개. Node가 실행되는 모든 곳에서 작동합니다.

  • 주장이 아닌 측정 — 검색 변경은 골든 세트로 판단되며, 회귀 포함.

라이선스

MIT

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Person-owned, portable AI memory as a remote MCP server, readable and writable by any MCP client.

  • Cloud-hosted MCP server for durable AI memory

  • Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nikitacometa/mnemon-memory-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server