Memlord
официальныйСамостоятельно размещаемый MCP-сервер памяти для личного использования и команд
Что можно делать с Memlord MCP?
- Сохранить память с типом и тегами — Используйте
store_memory, чтобы сохранить факт, предпочтение, инструкцию, отзыв, решение или инсайт, при необходимости установив срок действия. - Искать воспоминания с помощью гибридного поиска — Используйте
retrieve_memory, чтобы найти релевантные воспоминания с помощью комбинированного полнотекстового поиска BM25 и векторного семантического поиска, возвращая компактные фрагменты. - Вспомнить воспоминания по временному выражению — Используйте
recall_memory, чтобы найти воспоминания, соответствующие запросам на естественном языке, таким как «на прошлой неделе» или «вчера». - Просматривать и фильтровать все воспоминания — Вызовите
list_memoriesс фильтрами по типу и тегам для постраничного просмотра сохранённых воспоминаний. - Консолидировать воспоминания через «сновидение» — Запустите промпт
dream, чтобы ассистент просмотрел кандидатыdream_report, объединил почти дублирующиеся в инсайты и неразрушающим образом вывел из обращения устаревшие воспоминания.
Документация
Самодостаточный MCP-сервер памяти для личного использования и команд
Быстрый старт • Как это работает • Инструменты MCP • Конфигурация • Требования • Лицензия
✨ Возможности
- 🔍 Гибридный поиск — BM25 (полнотекстовый) + векторный KNN (pgvector), объединённые через Reciprocal Rank Fusion
- 📂 Многопользовательский — каждый пользователь видит только свои воспоминания; рабочие пространства для общих знаний команды
- 🛠️ 11 инструментов MCP — сохранение, извлечение, вызов, список, поиск по тегу, получение, обновление, удаление, перемещение, список рабочих пространств, отчёт о сне
- 💤 Сон — управляемый проход консолидации (
dreamпромпт MCP +dream_reportинструмент): находит почти дублирующиеся и конфликтующие воспоминания, неразрушающе объединяет их в инсайты, управляемые клиентской LLM - 🌐 Веб-интерфейс — просмотр, поиск, редактирование и удаление воспоминаний в браузере; экспорт/импорт JSON
- 🔒 OAuth 2.1 — полный внутрипроцессный сервер авторизации, всегда включён
- 🐘 PostgreSQL — pgvector для эмбеддингов, tsvector для полнотекстового поиска
- 📊 Прогрессивное раскрытие — поиск по умолчанию возвращает компактные сниппеты; вызывайте
get_memory(name)только для того, что вам нужно, сокращая использование токенов - 🔁 Дедупликация — автоматически обнаруживает почти идентичные воспоминания перед сохранением, предотвращая накопление шума
🆚 Сравнение Memlord с аналогами
| Memlord | OpenMemory | mcp-memory-service | basic-memory | |
|---|---|---|---|---|
| Поиск | BM25 + векторный + RRF | Только векторный (Qdrant) | BM25 + векторный + RRF | BM25 + векторный |
| Эмбеддинги | Локальный ONNX, без настройки | OpenAI по умолчанию; Ollama опционально | Локальный ONNX, без настройки | Локальный FastEmbed |
| Хранилище | PostgreSQL + pgvector | PostgreSQL + Qdrant | SQLite-vec / Cloudflare Vectorize | SQLite + файлы Markdown |
| Многопользовательский | ✅ | ❌ на практике однопользовательский | ⚠️ ограничение по agent-ID, без изоляции | ❌ |
| Рабочие пространства | ✅ общие + личные, ссылки-приглашения | ⚠️ пространство имён "Apps" | ⚠️ теги + conversation_id | ✅ флаг per-project |
| Аутентификация | ✅ OAuth 2.1 | ❌ отсутствует (самодостаточный) | ✅ OAuth 2.0 + PKCE | ❌ |
| Веб-интерфейс | ✅ просмотр, редактирование, экспорт | ✅ панель Next.js | ✅ богатый интерфейс, визуализация графа, оценки качества | ❌ локальный; только облако |
| Инструменты MCP | 11 | 5 | 15+ | ~20 |
| Самодостаточный | ✅ один процесс | ✅ Docker (3 контейнера) | ✅ | ✅ |
| Ввод воспоминаний | Ручной (явное сохранение) | Автоматически извлекается LLM | Ручной | Ручной (заметки Markdown) |
| Типы воспоминаний | факт / предпочтение / инструкция / обратная связь / решение / инсайт | автоматически извлечённые факты | — | наблюдения + wiki-ссылки |
| Поиск с учётом времени | ✅ даты на естественном языке | ⚠️ только REST, не в инструментах MCP | — | ✅ recent_activity |
| Эффективность токенов | ✅ прогрессивное раскрытие | ❌ | — | ✅ обход build_context |
| Импорт / Экспорт | ✅ JSON | ✅ ZIP (JSON + JSONL) | — | ✅ Markdown (удобочитаемый) |
| Лицензия | AGPL-3.0 / Коммерческая | Apache 2.0 | Apache 2.0 | AGPL-3.0 |
Где конкуренты имеют реальное преимущество:
- OpenMemory — автоматически извлекает воспоминания из необработанного текста разговора; не нужно вручную решать, что сохранять; хороший импорт/экспорт
- mcp-memory-service — более богатый веб-интерфейс (визуализация графа, оценка качества, 8 вкладок); более разрешительная лицензия (Apache 2.0); несколько вариантов транспорта (stdio, SSE, HTTP)
- basic-memory — воспоминания представляют собой удобочитаемые файлы Markdown, которые можно редактировать, хранить в системе контроля версий и читать без сервера; wiki-подобные ссылки на сущности формируют локальный граф знаний; ~20 инструментов MCP
Когда выбирать Memlord:
- Вам нужны локальные эмбеддинги без настройки — модель ONNX поставляется с сервером, не требуется Ollama или внешний API
- Вы запускаете многопользовательский командный сервер с надлежащей аутентификацией OAuth 2.1 и рабочими пространствами на основе приглашений
- Вам нужна база данных промышленного уровня (PostgreSQL), которая масштабируется за пределы SQLite на одной машине
- Вы управляете воспоминаниями явно — сохраняете именно то, что важно, с типами и тегами, а не всё, что LLM решит извлечь
- Вам нужен самодостаточный веб-интерфейс с полным CRUD и экспортом JSON, без облачной подписки
🚀 Быстрый старт
🐳 Docker
cp .env.example .env
docker compose up
HTTP-сервер (многопользовательский, веб-интерфейс, OAuth)
# Install dependencies
uv sync --dev
# Download ONNX model (~23 MB)
uv run python scripts/download_model.py
# Run migrations
alembic upgrade head
# Start the server
memlord
Откройте http://localhost:8000 для веб-интерфейса. Конечная точка MCP находится по адресу /mcp.
🔍 Как это работает
Каждый поисковый запрос выполняет BM25 и векторный KNN параллельно, затем объединяет результаты через Reciprocal Rank Fusion:
flowchart TD
Q([query]) --> BM25["BM25\nsearch_vector @@ websearch_to_tsquery"]
Q --> EMB["ONNX embed\nparaphrase-multilingual-MiniLM-L12-v2 · 384d · local"]
EMB --> KNN["KNN\nembedding <=> query_vector\ncosine distance"]
BM25 --> RRF["RRF fusion\nscore = 1/(k+rank_bm25) + 1/(k+rank_vec)\nk=60"]
KNN --> RRF
RRF --> R([top-N results])
⚙️ Конфигурация
Все настройки используют префикс MEMLORD_. См. .env.example для полного списка.
| Переменная | По умолчанию | Описание |
|---|---|---|
MEMLORD_DB_URL | postgresql+asyncpg://postgres:postgres@localhost/memlord | URL подключения к PostgreSQL |
MEMLORD_PORT | 8000 | Порт сервера |
MEMLORD_BASE_URL | http://localhost:8000 | Публичный URL для OAuth (режим HTTP) |
MEMLORD_OAUTH_JWT_SECRET | memlord-dev-secret-please-change | Секрет подписи JWT (режим HTTP) |
Установите MEMLORD_BASE_URL на ваш публичный URL и измените MEMLORD_OAUTH_JWT_SECRET перед развёртыванием.
🛠️ Инструменты MCP
| Инструмент | Описание |
|---|---|
store_memory | Сохранить воспоминание (идемпотентно по содержимому); вызывает ошибку при почти дубликатах; опционально expires_at |
retrieve_memory | Гибридный семантический + полнотекстовый поиск; по умолчанию возвращает сниппеты |
recall_memory | Поиск по временному выражению на естественном языке; по умолчанию возвращает сниппеты |
list_memories | Постраничный список с фильтрами по типу/тегу |
search_by_tag | Поиск по тегам с И/ИЛИ |
get_memory | Получить одно воспоминание по имени с полным содержимым (включая истёкшие) |
update_memory | Обновить содержимое, тип, теги, метаданные или срок действия по имени (и опционально переименовать) |
delete_memory | Удалить по имени |
move_memory | Переместить воспоминание в другое рабочее пространство |
list_workspaces | Список рабочих пространств, в которых вы состоите (включая личные) |
dream_report | Кандидаты на консолидацию только для чтения: пары похожих воспоминаний, истёкшие и скоро истекающие воспоминания |
Промпт MCP dream проводит клиентскую LLM через полный проход консолидации по выводу
dream_report: классифицирует похожие пары (дубликат / дополняющие / конфликт), объединяет
в воспоминания insight, выводит из употребления заменённые через expires_at — никогда неразрушающе.
Управление рабочими пространствами (создание, приглашение, присоединение, выход) осуществляется через веб-интерфейс.
💻 Системные требования
- Python 3.12
- PostgreSQL ≥ 15 с расширением pgvector
- uv — менеджер пакетов Python
👨💻 Разработка
pyright src/ # type check
ruff format . # format
pytest # run tests
alembic-autogen-check # verify migrations are up to date
📄 Лицензия
Memlord имеет двойную лицензию:
- AGPL-3.0 — бесплатно для использования в открытых проектах. Если вы запускаете модифицированную версию как сетевую службу, вы должны опубликовать свой исходный код.
- Коммерческая лицензия — для проприетарных или закрытых развёртываний. Свяжитесь с sergey@memlord.com или dmitry@memlord.com для приобретения.