mcp-memory
Полная документация -- руководства, справочник инструментов, архитектура и обслуживание на cachorro.space
mcp-memory
Прямая замена для сервера MCP Memory от Anthropic — с поддержкой постоянного хранения в SQLite, векторными эмбеддингами, семантическим поиском и Limbic Scoring для динамического ранжирования.
Зачем? Оригинальный сервер записывает весь граф знаний в файл JSONL при каждой операции, без блокировок или атомарных записей. При параллельном доступе (несколько MCP-клиентов) это приводит к повреждению данных. Этот сервер заменяет такой подход полноценной базой данных SQLite.
Возможности
Полная совместимость с 8 инструментами MCP от Anthropic (тот же API, то же поведение)
SQLite + WAL — безопасный параллельный доступ, больше никаких поврежденных JSONL
Семантический поиск через sqlite-vec + ONNX-эмбеддинги (94+ языка)
Гибридный поиск (FTS5 + KNN) — объединяет полнотекстовый поиск BM25 и семантический векторный поиск через Reciprocal Rank Fusion. Находит сущности по точным терминам, семантическому сходству или и по тому, и по другому одновременно.
Limbic Scoring — динамическое переранжирование с учетом значимости, временного затухания, сигналов совместного появления и оценок гибридного поиска. Прозрачно для API.
Семантическая дедупликация — автоматический флаг
similarity_flagдля новых наблюдений при косинусном сходстве >= 0.85 (с учетом оценки вложенности для текстов разной длины)Отчеты о консолидации — отчеты «только для чтения» для поиска кандидатов на разделение, помеченных наблюдений, устаревших сущностей и крупных сущностей
Улучшенное затухание по давности — отслеживание
entity_access_logс сигналом консолидацииALPHA_CONS=0.2за несколько днейИсправление вложенности — корректная обработка текстов разной длины (соотношение >= 2.0) при оценке дедупликации
Типы наблюдений — семантическая классификация наблюдений (hallazgo, decision, estado, spec, metrica, metadata, generic)
Замещение наблюдений — явная цепочка замены: новые наблюдения могут замещать старые, которые помечаются меткой времени как замещенные
Статус сущности — отслеживание жизненного цикла: activo, pausado, completado, archivado (с понижением приоритета при поиске в зависимости от статуса)
Контекст отношений + срок действия — отношения содержат необязательный контекст, поля active/ended_at для временной валидности
Автоматические обратные отношения — пары contains/parte_de создаются автоматически
Размышления (Reflections) — независимый повествовательный слой: свободный текст, привязанный к сущностям/сессиям/отношениям/глобальному уровню, с метаданными автора и настроения, доступный для поиска через гибрид семантического поиска + FTS5
Легковесность — ~500 МБ всего против ~1.4 ГБ у аналогичных решений
Миграция — импорт в один клик из формата JSONL от Anthropic
Нулевая настройка — работает «из коробки», опциональная загрузка модели для семантического поиска
Быстрый старт
1. Добавьте в конфигурацию MCP
{
"mcpServers": {
"memory": {
"command": ["uvx", "--from", "git+https://github.com/Yarlan1503/mcp-memory", "mcp-memory"]
}
}
}Или клонируйте и запустите локально:
{
"mcpServers": {
"memory": {
"command": ["uv", "run", "--directory", "/path/to/mcp-memory", "mcp-memory"]
}
}
}2. Включите семантический поиск (опционально)
cd /path/to/mcp-memory
uv run python scripts/download_model.pyЭто загрузит многоязычную модель предложений (~465 МБ) в ~/.cache/mcp-memory-v2/models/. Без нее все инструменты будут работать нормально — будет недоступен только search_semantic.
3. Миграция существующих данных (опционально)
Если у вас есть файл JSONL от Anthropic MCP Memory, используйте инструмент migrate или вызовите его напрямую:
uv run python -c "
from mcp_memory.storage import MemoryStore
from mcp_memory.migrate import migrate_jsonl
store = MemoryStore()
store.init_db()
result = migrate_jsonl(store, '~/.config/opencode/mcp-memory.jsonl')
print(result)
"Инструменты MCP
Основные (совместимые с Anthropic)
Инструмент | Описание |
| Создание или обновление сущностей (объединяет наблюдения при конфликте). Принимает поле |
| Создание типизированных отношений между сущностями. Принимает |
| Добавление наблюдений к существующей сущности. Принимает параметры |
| Удаление сущностей и всех их отношений/наблюдений |
| Удаление конкретных наблюдений из сущности |
| Удаление конкретных отношений между сущностями |
| Поиск по подстроке (имя, тип, содержание наблюдения) |
| Получение сущностей по имени. Принимает фильтр |
Поиск и анализ
Инструмент | Описание |
| Семантический поиск через векторные эмбеддинги с переранжированием Limbic Scoring |
| Поиск семантически дублирующихся наблюдений внутри сущности (косинус + вложенность) |
| Генерация отчета о консолидации «только для чтения» (кандидаты на разделение, помеченные наблюдения, устаревшие сущности) |
Управление сущностями
Инструмент | Описание |
| Импорт из формата JSONL от Anthropic (идемпотентно) |
| Анализ необходимости разделения сущности (группировка тем TF-IDF) |
| Предложение разделения с рекомендуемыми именами сущностей и отношениями |
| Выполнение одобренного разделения (атомарная транзакция) |
| Поиск всех сущностей, требующих разделения |
Размышления (Reflections)
Инструмент | Описание |
| Добавление повествовательного размышления к любой сущности, сессии, отношению или глобально. Принимает автора, содержание и настроение. |
| Поиск размышлений через гибрид семантического поиска + FTS5 (RRF). Опциональные фильтры: автор, настроение, target_type. |
Типы сущностей
8 канонических типов:
Тип | Назначение |
| Долгосрочные проекты |
| Рабочие сессии |
| Системы и инструменты |
| Архитектурные/технические решения |
| События, привязанные ко времени |
| Люди |
| Внешние ресурсы |
| Резервный тип по умолчанию |
Виды наблюдений
Семантическая классификация для наблюдений:
Вид | Назначение |
| Находки и открытия |
| Принятые решения |
| Снимки состояния/статуса |
| Спецификации и требования |
| Количественные измерения |
| Метаданные, созданные системой |
| По умолчанию (без классификации) |
Типы отношений
4 категории:
Категория | Типы | Пример |
Структурные |
| Проект содержит Сессию |
Производственные |
| Сессия создает Решение |
Зависимости |
| Проект зависит от Системы |
Последовательность |
| Сессия продолжает Сессию |
Обратные отношения создаются автоматически для пар contiene/parte_de.
Архитектура
server.py (FastMCP) <-- storage.py (SQLite + sqlite-vec + FTS5)
|
embeddings.py (ONNX Runtime)
|
sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
(384d, multilingual, cosine similarity)
|
scoring.py (Limbic Scoring + RRF)
salience . temporal decay . co-occurrenceХранилище: SQLite с журналом WAL, 5-секундным таймаутом ожидания, каскадным удалением
Эмбеддинги: Одиночная модель ONNX, загружаемая один раз при запуске, косинусный поиск с L2-нормализацией
Limbic Scoring: Переранжирует гибридных (KNN + FTS5) кандидатов, используя сигналы важности, временное затухание, паттерны совместного появления и оценки RRF — прозрачно для API
Параллелизм: SQLite обрабатывает блокировки внутренне — без fcntl, без конфликтов файловой системы
Размышления: Параллельные индексы FTS5 (
reflection_fts) и векторные (reflection_embeddings) для повествовательного слоя, поиск через тот же гибридный конвейер RRF
Как это работает
Каждая сущность получает вектор эмбеддинга, сгенерированный из ее текста с использованием стратегии выбора Head+Tail+Diversity (бюджет: 480 токенов):
"{name} ({entity_type}) | {obs1} | {obs2} | ... | Rel: type -> target; ..."Когда вы вызываете search_semantic, конвейер работает параллельно:
Семантический (KNN) — запрос кодируется и сравнивается с векторами сущностей через
sqlite-vecПолнотекстовый (FTS5) — запрос ищется по индексу BM25, охватывающему имена, типы и содержание наблюдений
Объединение (RRF) — результаты из обеих ветвей объединяются с использованием Reciprocal Rank Fusion (
score(d) = Sum 1/(k + rank))
Объединенные кандидаты затем переранжируются движком Limbic Scoring, который учитывает:
Значимость — часто используемые и хорошо связанные сущности ранжируются выше
Временное затухание — недавно использованные сущности остаются «свежими»; нетронутые сущности затухают
Совместное появление — сущности, которые часто появляются вместе, усиливают друг друга
Вывод включает limbic_score, scoring (разбивка по важности/времени/совместному появлению) и опционально rrf_score, когда FTS5 вносит результаты.
Для получения полных технических деталей см. DOCUMENTATION.md — включает формулу оценки, константы RRF, DDL схемы и архитектурные диаграммы.
Тестирование
uv run pytest tests/ -vБолее 285 тестов в 15 тестовых файлах, охватывающих все инструменты, эмбеддинги, оценку и граничные случаи. Нулевая регрессия.
Требования
Python >= 3.12
uv (менеджер пакетов)
Зависимости
Пакет | Назначение |
| Фреймворк сервера MCP |
| Валидация запросов/ответов |
| Векторный поиск сходства в SQLite |
| Вывод модели ONNX (CPU) |
| Быстрый токенизатор HuggingFace |
| Векторные операции |
| Загрузка моделей |
Лицензия
MIT
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/Yarlan1503/mcp-memory'
If you have feedback or need assistance with the MCP directory API, please join our Discord server