Stash MCP
Stash дает агенту долговременную память в PostgreSQL: записи сводятся в факты, связи и закономерности, доступ через MCP, запуск одной командой в Docker
- 770 ★ репозитория
- Последний коммит
- Apache-2.0
Расширенный доступ
Почему такой уровень
- Пишет и удаляет записи в PostgreSQL: инструмент `forget` стирает память, а консолидация сама переписывает факты
- Тексты записей уходят поставщику моделей, который строит из них векторы и сводки
- Слушает порт 8080 без токена, поэтому доступ к памяти получает любой, кто достучится до адреса
Установка
- Работает в
Ручная установка
git clone https://github.com/alash3al/stash.gitЗатем скопируйте `.env.example` в `.env`, впишите ключ и адрес модели и выполните `docker compose up`: поднимутся PostgreSQL с `pgvector`, миграции и сервер MCP с фоновой консолидацией.
Доступ и проверки
Как мы проверяемРасширенный доступИнструмент запускает код или ходит в сеть, а внешние данные только читает.
- Пишет и удаляет записи в PostgreSQL: инструмент `forget` стирает память, а консолидация сама переписывает факты
- Тексты записей уходят поставщику моделей, который строит из них векторы и сводки
- Слушает порт 8080 без токена, поэтому доступ к памяти получает любой, кто достучится до адреса
Это чужой код. Посмотрите файлы в репозитории перед установкой.
Что делает
Stash — самостоятельно размещаемый MCP-сервер на Go, который хранит память агента между сессиями. Агент вызывает инструмент `remember`, чтобы записать эпизод или факт, `recall`, чтобы найти нужное по смыслу, и `forget`, чтобы удалить запись. Тексты превращаются в векторы и лежат в PostgreSQL с расширением `pgvector`. Память делится на пространства имен: `init` создает стартовое пространство `/self` с возможностями, ограничениями и предпочтениями, а `create_namespace` добавляет другие. Фоновая консолидация проходит девять стадий и превращает сырые записи в структурированное знание: факты, связи между ними, причинные цепочки, закономерности, противоречия, цели, шаблоны неудач и проверку гипотез. Каждая стадия обрабатывает только то, что появилось после прошлого запуска. Консолидацию можно запустить инструментом `consolidate` или командой CLI. Для просмотра есть `query_facts`, `query_relationships`, `list_contradictions` и `list_causal_links`, а `resolve_contradiction` помечает спор решенным. Сервер отдает MCP по SSE на `http://localhost:8080/sse`. Репозиторий содержит `docker-compose.yml`, который поднимает PostgreSQL с `pgvector`, применяет миграции и запускает сервер вместе с консолидацией. Векторы и сводки строит модель по OpenAI-совместимому API: нужны модель эмбеддингов и модель-рассуждатель, их задают в `.env`.
Для кого. Для разработчиков, которые хотят, чтобы агент в Cursor, Claude Desktop, Windsurf или OpenCode помнил предпочтения и решения между сессиями и держал память на собственном сервере.
Подходит, если
- Агент в каждой новой сессии спрашивает одно и то же о стеке и привычках, и это нужно один раз записать через `remember`
- Нужна память с общими пространствами имен: отдельные для проектов и для самого агента
- Записи должны сводиться в факты, а противоречия между старыми и новыми решениями замечаться
- Данные должны лежать в вашем PostgreSQL, а модели можно подключить через OpenAI-совместимый адрес, в том числе локальный Ollama
Не подходит, если
- Нет Docker и нельзя поставить PostgreSQL с расширением `pgvector`: сервер без базы не работает
- Нужна память без ключа к модели и без локальных моделей: векторы и консолидацию строит модель по API
- Вы хотите хранить знания в обычных Markdown-файлах, которые правите руками: для этого подойдет Basic Memory
- Нужен хостинг без обслуживания: облачная версия на usestash.io написана отдельно и не делит код с этим репозиторием
Пример запроса к агенту
Запомни в Stash, что этот проект работает на PostgreSQL 16 и ORM у нас нет, и напомни мне об этом в начале следующей сессииMCP
- Транспорт
- sse
- Авторизация
- не нужна
Переменные окружения
STASH_OPENAI_API_KEYобязательная, секрет- Ключ поставщика моделей с OpenAI-совместимым API для эмбеддингов и консолидации, для Ollama подойдет любое значение
STASH_OPENAI_BASE_URLобязательная- Адрес API поставщика моделей
STASH_EMBEDDING_MODELобязательная- Модель эмбеддингов, ее размерность должна совпадать с `STASH_VECTOR_DIM`
STASH_REASONER_MODELобязательная- Модель, которая извлекает связи и пишет сводки при консолидации
STASH_POSTGRES_DSNобязательная, секрет- Строка подключения к PostgreSQL с расширением `pgvector`
Ограничения
- Лицензия Apache-2.0. Последний выпуск в репозитории v0.2.11, версия до 1.0.
- Размерность вектора `STASH_VECTOR_DIM` должна совпадать с моделью эмбеддингов: 1536 для `text-embedding-3-small`, 768 для `nomic-embed-text`. Инструкция для Ollama предупреждает, что значение фиксируется при первом запуске: чтобы сменить его, нужен чистый том или новая база.
- Полностью локальный вариант описан в `docs/LOCAL_OLLAMA.md` (`nomic-embed-text` и `qwen2.5:3b`), его добавил сторонний участник и проверил на Linux. Автор называет небольшие модели годными для разработки.
- Пример `docker-compose.yml` использует пароль базы `stash_dev_password`, а конфигурации клиентов указывают адрес SSE без токена. Для чужой сети пароль и доступ к порту 8080 надо закрывать самостоятельно.
- Облачная версия на usestash.io, по словам автора, написана с нуля, и набор функций у нее отличается в обе стороны. В README также размещена реклама сервиса Atlas Cloud.
Как отключить. Уберите запись `stash` из конфигурации клиента: `~/.cursor/mcp.json` для Cursor, `claude_desktop_config.json` для Claude Desktop, `~/.codeium/windsurf/mcp_config.json` для Windsurf или `~/.config/opencode/config.json` для OpenCode. Затем остановите стек Docker Compose. Память хранится в томе `postgres_data`, его удаление стирает все записи.
Частые вопросы
Какие агенты умеют подключаться к Stash?
Любой клиент с поддержкой MCP по SSE. В репозитории даны готовые фрагменты для Cursor, Claude Desktop, OpenCode и Windsurf, все с адресом `http://localhost:8080/sse`. Для Claude Code отдельной инструкции нет.
Можно ли запустить Stash полностью локально?
Да, по `docs/LOCAL_OLLAMA.md`. Ollama работает на хосте, Stash в Docker обращается к ней по `http://host.docker.internal:11434/v1`. В `.env` задают модели `nomic-embed-text` и `qwen2.5:3b` и размерность `768`. Модели нужно скачать до первого запуска.
Что делает консолидация и когда она запускается?
Она превращает эпизоды в факты, а факты в связи, причинные цепочки и закономерности, ищет противоречия и ведет цели. Стадий девять, каждая берет только новые данные. В Docker Compose сервер стартует с флагом `--with-consolidation`, поэтому консолидация идет в фоне. Вручную ее запускают инструментом `consolidate` или командой `docker compose exec stash /stash consolidate run`.
Зачем нужно пространство имен?
Оно разделяет память по назначению. Инструмент `init` создает пространство `/self` для возможностей и предпочтений агента, `create_namespace` добавляет остальные. Контекстные инструменты `set_context`, `get_context` и `clear_context` требуют указать пространство.
Чем облачная версия отличается от этого репозитория?
Облако на usestash.io пока в бета-версии и бесплатно: вход через Google и один адрес MCP, ставить ничего не нужно. По заявлению автора, оно написано с нуля и не делит код с открытым репозиторием.
Что делать, если `recall` возвращает пустой результат?
По руководству сначала вызывают `init`, затем `remember`, и только потом `recall`. Проверьте также, что в `.env` указан рабочий ключ: без него эмбеддинги не строятся. Журнал смотрят командой `docker compose logs stash`.
Обсуждение
Вопросов и отзывов пока нет.
Похожие
MCP-серверыMCP-сервер долговременной памяти для ИИ-агентов: факты стареют по кривой забывания, связанные записи сжимаются в сводку
Система долговременной памяти для AI-агентов: агент сохраняет опыт и факты, а затем находит их через встроенный MCP-сервер
Открытая инфраструктура для агентов, которые учатся на опыте: записи сессий, база знаний и пакеты навыков через CLI, MCP и API
Самостоятельно размещаемая долговременная память для агентов: семантический поиск, граф знаний и автоконсолидация через MCP и REST API
MCP-сервер долговременной памяти для агентов: один бинарник на Rust, который работает офлайн и не вызывает языковую модель
Самостоятельный MCP-сервер долговременной памяти для агентов: структурированные записи, версии с откатом и визуальная панель
Сравнение с похожими
Записи с тем же главным запросом: чем они отличаются.
| Запись | Официальный | Авторизация | Звезды репозитория | Главное отличие |
|---|---|---|---|---|
| Stash (эта запись) | нет | не нужна | 770 | |
| Basic Memory | нет | не нужна | 4 389 | хранит знания в обычных Markdown-файлах, которые читают и правят и человек, и агент |
| MCP Memory Service | нет | не нужна | 2 054 | память в локальной базе с векторным поиском, доступ через MCP и REST API |
| OKF Agent Memory | нет | не нужна | 844 | память проекта в git-родном формате, один бинарник на Go и поиск BM25 |
Коротко о README
Главная страница репозитория начинается со слогана о памяти агента, быстрого запуска в Docker и ссылок на руководство и инструкцию для локального Ollama. Дальше идут блок о подключении Atlas Cloud, готовые конфигурации MCP для Cursor, Claude Desktop, OpenCode и Windsurf, описание девятистадийной консолидации и заметка об облачной версии. В репозитории есть каталог `docs` с двумя руководствами и страницей проекта, миграции базы, `Dockerfile`, пример `.env.example` и тесты ядра памяти в `internal/brain`.