Skip to main content
Glama

mnemon-mcp

CI npm version Node.js License: MIT

Постоянная многоуровневая память для ИИ-агентов. Локально в первую очередь. Без облаков. Один SQLite-файл.

Страница проекта · npm · GitHub

Ваш ИИ-агент забывает всё после каждого сеанса. Mnemon это исправляет.

Он даёт любому MCP-совместимому клиенту — OpenClaw, Claude Code, Cursor, Windsurf или вашему собственному — структурированную долговременную память на основе одной SQLite-базы на вашей машине. Никаких API-ключей, никакого облака, никакой телеметрии. Просто npm install — и ваш агент запоминает.


Зачем нужна многоуровневая память?

Плоские хранилища «ключ-значение» ставят в один ряд «что было вчера» и «никогда не коммить без тестов». Это неправильно — разные виды знаний имеют разное время жизни и разные паттерны доступа.

Mnemon организует воспоминания в четыре уровня:

Уровень

Что хранит

Как доступен

Время жизни

Эпизодический

События, сеансы, журнальные записи

По дате или периоду

Затухает (период полураспада 30 дней)

Семантический

Факты, предпочтения, связи

По теме или сущности

Стабильно

Процедурный

Правила, рабочие процессы, соглашения

Загружается при запуске

Редко меняется

Ресурсный

Справочные материалы, заметки о книгах

По требованию

Затухает медленно (90 дней)

Журнальная запись с прошлого вторника и правило кодирования, которое никогда не меняется, живут в разных уровнях — потому что так и должно быть.

Related MCP server: persistent-kb-mcp

Качество поиска

Качество поиска оценивается на золотом наборе из 50 случаев на реальном двуязычном (RU/EN) корпусе из 797 воспоминаний, через реальный MCP-сервер, а не его переработку. Текущие показатели (методология и история):

Метрика

Только FTS

Только векторы

Гибрид (RRF)

Композитный балл

88,9

89,2

91,7

Полнота@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

Диагностика: истёкшие записи, осиротевшие цепочки, устаревшие воспоминания; опционально сборка мусора

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. Многословные запросы используют И; если результатов слишком мало, ИЛИ дополняет с понижением балла. Прогрессивное ослабление И перебирает топ-3 наиболее специфичных термина, прежде чем перейти к полному ИЛИ.

Гибридный режим (по умолчанию при настроенных эмбеддингах) — объединяет FTS5 + векторный поиск через Reciprocal Rank Fusion. Обнаруживает сущности в кавычках в запросах (например, 'Essentialism') и выполняет взвешенные подзапросы для перекрёстного поиска.

Векторный режим — чистый поиск по косинусной близости эмбеддингов.

Точный режим — поиск по подстроке LIKE для точного поиска фраз.

Оценки: bm25 × (0,3 + 0,7 × важность) × затухание(уровень) × недавность

Бонус за недавность: 1 / (1 + днейС / 365) — мягко вознаграждает недавно созданные воспоминания, не наказывая старые.

Стемминг

Стеммер Snowball применяется и при индексации, и при выполнении запроса для английского и русского языков. Это означает, что "running" соответствует "runs", а "книги""книга". Стоп-слова отфильтровываются из запросов для повышения точности.

Версионирование фактов

Знания развиваются. Mnemon не удаляет старые факты — он выстраивает их в цепочку:

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

Поиск возвращает только последнюю версию. memory_inspect с include_history: true показывает всю цепочку. 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 + векторы через Reciprocal Rank Fusion

Требуется 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

Ваше имя — используется для подстановки $owner в entity_name

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 в доверенной сети). Ограничение скорости (100 запросов/мин/IP по умолчанию), опциональный CORS, лимит тела 1 МБ, безопасная по времени аутентификация, корректное завершение работы по SIGTERM.

Справочник по конфигурации

Переменная

По умолчанию

Описание

MNEMON_DB_PATH

~/.mnemon-mcp/memory.db

Путь к базе данных

MNEMON_KB_PATH

.

Корень базы знаний для импорта

MNEMON_CONFIG_PATH

~/.mnemon-mcp/config.json

Путь к конфигурации импорта

MNEMON_AUTH_TOKEN

Bearer-токен для HTTP-транспорта

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

Да

Текст памяти (макс. 100 тыс. символов)

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

Нет

Путь к исходному файлу — запускает автоматическое замещение соответствующих записей

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

Да

Идентификатор памяти

content

string

Нет

Новое содержимое

title

string

Нет

Новый заголовок

confidence

number

Нет

Новая уверенность

importance

number

Нет

Новая важность

supersede

boolean

Нет

true = версионированная замена; false (по умолчанию) = на месте

new_content

string

Нет

Содержимое для замещающей записи

Параметр

Тип

Обязательный

Описание

id

string

Да

Идентификатор памяти. Реактивирует предшественника, если он является частью цепочки замещения

Параметр

Тип

Обязательный

Описание

id

string

Нет

Идентификатор памяти (опустите для агрегированной статистики)

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

Нет

Максимум записей (по умолчанию все, макс. 10 тыс.)

Параметр

Тип

Обязательный

Описание

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

Да

Идентификатор сессии для завершения

summary

string

Нет

Краткое описание того, что было сделано (макс. 10 тыс. символов)

Возвращает: 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 + гибридный RRF

Семантический

Гибридный

FTS5

Точный

Версионирование фактов

Цепочки замещения

Частичное

Нет

Нет

Нет

Стемминг

EN + RU (Snowball)

Только EN

Только EN

Нет

Нет

Эмбеддинги

BYOK (OpenAI / Ollama)

Встроенные

FastEmbed

Нет

Нет

Зависимости

0 обязательных

Qdrant, Neo4j

Python 3.12

Go binary

Нет

Требуется облако

Нет

Да

Нет

Нет

Нет

Стоимость

Бесплатно

$19–249/мес

Бесплатно

Бесплатно

Бесплатно

Установка

npm install -g

Docker + API-ключи

pip + зависимости

Go install

Встроенная

Лицензия

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 (строгий режим), better-sqlite3, @modelcontextprotocol/sdk, Snowball stemmer, Zod, vitest.

См. CONTRIBUTING.md для правил написания кода.

Принципы проектирования

  • Изолирован от сети по умолчанию — нулевая телеметрия, всегда. Из коробки ничего не покидает машину; единственный компонент, который связывается с сетью, — опциональный эмбеддер, и только с провайдером, которого вы настроили (включая локальный 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