mnemon-mcp
mnemon-mcp
Постоянная многоуровневая память для ИИ-агентов. Локально в первую очередь. Без облаков. Один 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-инструментов
Инструмент | Что делает |
| Сохраняет воспоминание с уровнем, сущностью, уверенностью, важностью и опциональным TTL |
| Полнотекстовый или точный поиск с фильтрами по уровню, сущности, дате, области, уверенности |
| Обновляет на месте или создаёт версионированную замену (цепочка замещения) |
| Удаляет воспоминание; при наличии реактивирует его предшественника |
| Показывает статистику по уровням или историю версий конкретного воспоминания |
| Экспорт в JSON, Markdown или Claude-md с фильтрами |
| Диагностика: истёкшие записи, осиротевшие цепочки, устаревшие воспоминания; опционально сборка мусора |
| Запускает сеанс агента — возвращает ID сеанса для группировки воспоминаний |
| Завершает сеанс с опциональным резюме; возвращает длительность и количество воспоминаний |
| Список сеансов с фильтрами по клиенту, проекту или статусу активности |
MCP-ресурсы и промпты
Ресурсы — живые данные, которые может читать ваш агент:
URI | Возвращает |
| Сводная статистика по уровням |
| Воспоминания, созданные/изменённые за последние 24 часа |
| Все активные воспоминания уровня |
| Все активные воспоминания о сущности |
Промпты — готовые рабочие процессы:
Промпт | Назначение |
| «Расскажи всё, что знаешь об X» |
| Загрузить релевантный контекст перед началом задачи |
| Создать структурированную журнальную запись |
Поиск
Четыре режима, все поддерживают фильтры по уровню / сущности / области / дате / уверенности:
Режим 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 (устанавливается как опциональная зависимость). Новые воспоминания встраиваются при добавлении; существующие можно дополнительно обработать.
Переменная | По умолчанию | Описание |
| — |
|
| — | API-ключ (обязателен для OpenAI) |
|
| Название модели |
|
| Размерность векторов |
|
| Конечная точка 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"
}
]
}Поля конфигурации
Поле | Тип | Описание |
| string | Ваше имя — используется для подстановки |
| string[] | Слова для фильтрации из FTS-запросов (например, формы вашего имени) |
| string | Шаблон файла для сопоставления |
| string | Целевой уровень памяти |
| string |
|
| string | Литеральное имя, |
| string |
|
| number | 0,0–1,0, влияет на ранжирование поиска |
| number | 0,0–1,0, фильтруется при поиске |
| string | Необязательное пространство имён |
HTTP-транспорт
Для удалённых сценариев или нескольких клиентов:
MNEMON_AUTH_TOKEN=your-secret MNEMON_HOST=0.0.0.0 MNEMON_PORT=3000 npm run start:httpКонечная точка | Описание |
| MCP JSON-RPC (Bearer-аутентификация, если задан токен) |
|
|
По умолчанию привязывается к 127.0.0.1. Привязка к любому другому хосту требует MNEMON_AUTH_TOKEN — сервер отказывается предоставлять хранилище памяти в сеть без аутентификации (переопределите с помощью MNEMON_ALLOW_INSECURE_HTTP=1 в доверенной сети). Ограничение скорости (100 запросов/мин/IP по умолчанию), опциональный CORS, лимит тела 1 МБ, безопасная по времени аутентификация, корректное завершение работы по SIGTERM.
Справочник по конфигурации
Переменная | По умолчанию | Описание |
|
| Путь к базе данных |
|
| Корень базы знаний для импорта |
|
| Путь к конфигурации импорта |
| — | Bearer-токен для HTTP-транспорта |
|
| Адрес привязки HTTP-транспорта |
|
| Порт HTTP-транспорта |
| — | CORS |
|
| Максимум запросов в минуту на IP (0 = выключено) |
Справочник инструментов
Параметр | Тип | Обязательный | Описание |
| string | Да | Текст памяти (макс. 100 тыс. символов) |
| string | Да |
|
| string | Нет | Краткий заголовок (макс. 500 символов) |
| string | Нет |
|
| string | Нет | Имя сущности для фильтрации |
| number | Нет | 0.0–1.0 (по умолчанию 0.8) |
| number | Нет | 0.0–1.0 (по умолчанию 0.5) |
| string | Нет | Пространство имён (по умолчанию |
| string | Нет | Путь к исходному файлу — запускает автоматическое замещение соответствующих записей |
| number | Нет | Автоматическое истечение через N дней |
| string | Нет | Временное окно факта (ISO 8601) |
Параметр | Тип | Обязательный | Описание |
| string | Да | Текст поиска |
| string | Нет |
|
| string[] | Нет | Фильтр по слоям |
| string | Нет | Фильтр по сущности (поддерживает псевдонимы) |
| string | Нет | Фильтр по области |
| string | Нет | Диапазон дат (ISO 8601) |
| string | Нет | Фильтр временных фактов — факты, действительные на эту дату |
| number | Нет | Минимальная уверенность |
| number | Нет | Минимальная важность |
| number | Нет | Максимум результатов (по умолчанию 10, макс. 100) |
| number | Нет | Смещение для постраничной навигации |
Параметр | Тип | Обязательный | Описание |
| string | Да | Идентификатор памяти |
| string | Нет | Новое содержимое |
| string | Нет | Новый заголовок |
| number | Нет | Новая уверенность |
| number | Нет | Новая важность |
| boolean | Нет |
|
| string | Нет | Содержимое для замещающей записи |
Параметр | Тип | Обязательный | Описание |
| string | Да | Идентификатор памяти. Реактивирует предшественника, если он является частью цепочки замещения |
Параметр | Тип | Обязательный | Описание |
| string | Нет | Идентификатор памяти (опустите для агрегированной статистики) |
| string | Нет | Фильтровать статистику по слою |
| string | Нет | Фильтровать статистику по сущности |
| boolean | Нет | Показать цепочку замещения |
Параметр | Тип | Обязательный | Описание |
| string | Да |
|
| string[] | Нет | Фильтр по слоям |
| string | Нет | Фильтр по области |
| string | Нет | Диапазон дат |
| number | Нет | Максимум записей (по умолчанию все, макс. 10 тыс.) |
Параметр | Тип | Обязательный | Описание |
| boolean | Нет |
|
Возвращает: статус (healthy / warning / degraded), статистику по слоям, истёкшие записи, осиротевшие цепочки, количество устаревших/низкоуверенных записей, количество очищенных записей при cleanup=true.
Параметр | Тип | Обязательный | Описание |
| string | Да | Идентификатор клиента (например, |
| string | Нет | Область проекта для этой сессии |
| object | Нет | Дополнительные метаданные сессии |
Возвращает: id (UUID сессии), started_at (ISO 8601).
Параметр | Тип | Обязательный | Описание |
| string | Да | Идентификатор сессии для завершения |
| string | Нет | Краткое описание того, что было сделано (макс. 10 тыс. символов) |
Возвращает: id, ended_at, duration_minutes, memories_count.
Параметр | Тип | Обязательный | Описание |
| number | Нет | Максимум сессий (по умолчанию 20, макс. 100) |
| string | Нет | Фильтр по клиенту |
| string | Нет | Фильтр по проекту |
| 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/мес | Бесплатно | Бесплатно | Бесплатно |
Установка |
| 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 databaseCI запускает сборку + линтер + тесты на 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.
Измерено, а не заявлено — изменения поиска оцениваются по золотому набору, включая регрессии.
Лицензия
This server cannot be installed
Maintenance
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
- AlicenseNot gradedqualityCmaintenanceA local-first MCP memory server providing persistent, searchable memory for AI agents, powered by SQLite.51Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA local-first MCP server providing persistent, searchable knowledge base via SQLite, enabling AI agents to save and recall facts across sessions without cloud dependencies.MIT
- AlicenseNot gradedqualityDmaintenanceA local-first long-term memory system for AI coding agents, exposed as an MCP server.131MIT
- AlicenseAqualityCmaintenancePersistent memory MCP server for AI agents, using SQLite with hybrid keyword and semantic search for long-term memory storage.5Do What The F*ck You Want To Public
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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