Selti
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Seltistore this dialogue about MCP protocol setup"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
selti — Semantic Memory MCP Server
selti — высокопроизводительный MCP-сервер семантической памяти для AI-агентов. Обеспечивает векторное хранение, поиск по семантической близости и интеллектуальную дедупликацию записей на основе протокола MCP (Model Context Protocol) через SSE-транспорт.
Примечание: Данный проект разработан с применением технологий искусственного интеллекта в рамках рабочего процесса Argenta Team. Код прошел рецензирование, тестирование и подготовлен к эксплуатации в production-среде.
Стек технологий
Компонент | Технология |
Язык | Python 3.12 |
Фреймворк | FastAPI + FastMCP |
База данных | PostgreSQL 17 + pgvector (HNSW) |
Кеш | Redis 7 |
Мониторинг | Prometheus + Grafana |
Контейнеризация | Docker + Docker Compose |
Related MCP server: elephantasm-mcp
Архитектура
Система построена по многослойной архитектуре с чётким разделением ответственности:
Client (MCP over SSE)
|
v
FastAPI / FastMCP ─── Auth Middleware (опционально)
|
v
┌─────────────────────────────────────────┐
│ MCP Tools (16) │
│ store / search / get / update / delete │
│ list / forget / ingest / stats / find │
│ recent / archive / link / unlink │
│ get_relations / traverse / graph_stats │
└──────────────────────┬──────────────────┘
│
v
┌─────────────────────────────────────────┐
│ MemoryService │
│ (бизнес-логика) │
└──────┬──────────────────────┬───────────┘
│ │
v v
┌───────────┐ ┌───────────────┐
│ DedupEngine│◄──────►│ Embedding API │
│exact+sem. │ │ + Redis Cache│
└─────┬─────┘ └───────┬───────┘
│ │
v v
┌─────────────────────────────────────────┐
│ MemoryRepository │
│ (SQL via asyncpg) │
└──────────────────┬──────────────────────┘
│
v
┌─────────────────────────────────────────┐
│ PostgreSQL 17 + pgvector (HNSW) │
│ 4096-мерные эмбеддинги │
│ + Relations table (граф) │
└─────────────────────────────────────────┘Слои архитектуры:
MCP Tools — 16 инструментов, декорированных FastMCP. Валидация namespace, трекинг метрик, обработка ошибок. Включают инструменты для графа знаний (link, unlink, get_relations, traverse, graph_stats).
DedupEngine — двухуровневая дедупликация: точная (SHA256) и семантическая (cosine distance). Оптимизирован: кеширует эмбеддинги в DedupDecision.
MemoryService — координатор бизнес-логики: вызов эмбеддингов, дедупликация, взаимодействие с репозиторием. Поддерживает batch-операции и Relations API.
Repository — уровень доступа к данным на asyncpg; сырые SQL-запросы с параметризацией. Включает методы для графа (add_relation, traverse, get_graph_stats) и archive.
PostgreSQL / pgvector — HNSW-индекс для 4096-мерных векторов, B-tree индексы для фильтрации, JSONB для метаданных. Таблица
relationsдля графа знаний.Redis Cache — кеш эмбеддингов (SHA256-ключи, TTL 24 часа); снижает нагрузку на Embedding API.
MCP Tools
Сервер предоставляет 16 инструментов для управления семантической памятью:
Основные инструменты
Tool | Описание | Параметры |
| Сохранить запись с дедупликацией | content, user_id, metadata?, namespace? |
| Векторный поиск по семантической близости | query, user_id, limit?, threshold?, namespace? |
| Получить запись по идентификатору | id |
| Обновить содержимое и/или метаданные записи | id, content?, metadata? |
| Удалить запись по идентификатору | id |
| Список записей с фильтрацией и пагинацией | user_id?, namespace?, limit?, offset? |
| Массовое удаление всех записей пользователя | user_id, namespace? |
| Массовое сохранение набора записей с дедупликацией | entries: list[{content, metadata?, namespace?}], user_id |
| Статистика по неймспейсам: количество записей, дата обновления | user_id |
| Поиск семантически похожих записей без сохранения | content, user_id, limit?, threshold?, namespace? |
| Последние записи по времени создания | namespace?, limit?, since? |
| Мягкое удаление: установить is_archived = true | id |
Инструменты для графа знаний
Tool | Описание | Параметры |
| Добавить связь между гранулами | source_id, target_id, link_type?, description?, weight? |
| Удалить связь между гранулами | source_id, target_id, link_type |
| Получить связи для гранулы | source_id, target_id? |
| Обход графа от стартовой вершины | start_id, depth?, link_types? |
| Статистика графа: количество связей, сирот, средние связи |
Каждый инструмент инструментирован метриками: количество вызовов, длительность выполнения, статус (ok/error).
Namespace-стратегия
Namespace обеспечивают логическую изоляцию данных в рамках одной базы. Передаются опционально (по умолчанию — default). Валидация на уровне tools; неверное значение вызывает ValueError.
Namespace | Назначение |
| Общие записи |
| Факты о пользователе |
| Знания из кодовой базы |
| Инсайты из диалогов |
| Метаданные проектов |
Дедупликация
Ядро системы — DedupEngine, реализующий двухуровневую стратегию предотвращения дубликатов.
Уровень 1: Exact Match
Вычисляется SHA256(content). Выполняется поиск по content_hash в пределах namespace:
user_facts →
UPDATE(перезапись существующей записи)остальные →
SKIP(пропуск, возврат существующей записи)
Уровень 2: Semantic Match
Если точное совпадение не найдено, генерируется эмбеддинг и выполняется векторный поиск. При score >= threshold запись считается дубликатом → SKIP.
Пороги семантической дедупликации (per-namespace)
Namespace | Порог |
| 0.95 |
| 0.90 |
| 0.95 |
| 0.85 |
| 0.90 |
Пороги настраиваются через переменную DEDUP_THRESHOLDS. Полное отключение — DEDUP_ENABLED=false.
Быстрый старт
Предварительные требования
Docker 24+ и Docker Compose v2
Python 3.12 (для миграций вне контейнера)
Запуск
# 1. Клонировать репозиторий
git clone <repository-url>
cd selti
# 2. Скопировать шаблон окружения
cp .env.example .env
# 3. Сгенерировать пароли
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
# 4. Заполнить .env:
# PG_PASSWORD — пароль суперпользователя PostgreSQL
# APP_PASSWORD — пароль пользователя приложения athena_app
# REDIS_PASSWORD — пароль Redis
# 5. Запустить с локальными PostgreSQL и Redis
docker compose --profile local-db up -d
# 6. Проверить здоровье сервера
curl http://localhost:8000/health
# 7. Применить миграции базы данных
python migrations/run.pyДля подключения к внешним PostgreSQL и Redis — запустите без профиля --profile local-db и укажите соответствующие URL в .env.
Celery Setup
Система использует Celery для асинхронной обработки тяжёлых операций: векторного поиска, batch-вставок, дедупликации и работы с эмбеддингами. MCP-сервер только ставит задачи в очередь, а воркеры выполняют всю работу.
Архитектура
MCP Server (FastMCP) ──send_task()──▶ Redis (broker) ──▶ Celery Worker (prefork)
│
┌───────────────────────────────┤
│ │ │
▼ ▼ ▼
PostgreSQL Qdrant Embedding API
(pgvector) (векторы) (эмбеддинги)Почему Celery, а не asyncio в MCP-сервере: вся логика selti — async (asyncpg, httpx), но тяжёлые операции (embedding, векторный поиск) блокируют event loop. Celery prefork воркеры изолируют эти операции в отдельных процессах, не блокируя обработку MCP-запросов.
Очереди
Очередь | Назначение | Таймаут (soft/hard) |
| store, search, get, update, delete, archive, link, unlink | 240s / 300s |
| ingest_batch | 600s / 900s |
| hash_upsert, hash_get, hash_list, hash_delete | 120s / 180s |
Запуск
# Development — всё вместе
docker compose up -d
# С Flower (мониторинг воркеров)
docker compose --profile dev up -d
# Только воркер (вручную, для отладки)
celery -A memory_server.celery_app worker \
-Q memory,batch,hash \
-c 4 \
--without-gossip \
--without-mingle \
--without-heartbeat \
-l INFO
# Только Flower
celery -A memory_server.celery_app flower --port=5555Production-опции воркера
celery -A memory_server.celery_app worker \
-Q memory,batch,hash \
-c 4 \
--without-gossip \
--without-mingle \
--without-heartbeat \
--max-tasks-per-child=1000 \
--max-memory-per-child=200000 \
--logfile=- \
-l INFOФлаг | Зачем |
| Экономит ~10% CPU, ускоряет старт |
| Экономит ~10% CPU, не нужен в single-worker |
| Экономит ~10% network |
| Реклайм памяти, защита от утечек |
| OOM-защита (200 MB на процесс) |
Retry-политика
Задачи автоматически повторяются при ошибках сети или БД:
Максимум попыток: 5
Стратегия: exponential backoff + jitter
Базовая задержка: 30 секунд
Validation-ошибки (ValueError, InvalidNamespace) не ретраятся — это баги данных, а не транзиентные сбои.
Мониторинг
Сервис | URL | Назначение |
Health |
| Статус сервера + Celery worker |
Metrics |
| Prometheus: 8 Celery + Redis + Qdrant метрик |
Tasks API |
| Активные задачи |
Task info |
| Статус конкретной задачи |
Cancel |
| Отмена задачи (revoke) |
Flower |
| Веб-интерфейс мониторинга (dev) |
Troubleshooting
Проблема | Причина | Решение |
| Redis не запущен |
|
| Воркер упал во время задачи | Проверьте логи: |
| OOM — процесс съел >200 MB | Увеличьте |
| Задача выполняется дольше лимита | Увеличьте таймаут или оптимизируйте запрос |
| Транзиентная ошибка не прошла | Проверьте доступность PostgreSQL / Embedding API |
Flower не видит воркеры |
| В dev-режиме уберите флаг; в production используйте |
| Воркер не подключился к broker | Проверьте |
Конфигурация
Переменные окружения
Переменная | Описание | По умолчанию |
| PostgreSQL connection string (asyncpg) |
|
| Redis connection string |
|
| URL API эмбеддингов (OpenAI-совместимый) |
|
| Ключ аутентификации API эмбеддингов | (пусто) |
| Модель эмбеддингов |
|
| Размерность эмбеддинга |
|
| Ключ аутентификации MCP-сервера | (пусто — аутентификация отключена) |
| Уровень логирования |
|
| Включить дедупликацию |
|
| Глобальный порог семантической дедупликации |
|
| Лимит результатов поиска по умолчанию |
|
| Порог релевантности поиска по умолчанию |
|
| Хост сервера |
|
| Порт сервера |
|
| URL брокера сообщений (Redis) |
|
| URL хранилища результатов (Redis) |
|
| Количество воркер-процессов |
|
| OOM-лимит на процесс (KB) |
|
| Маршрутизация задач по очередям (JSON) |
|
| Пользователь PostgreSQL (локальный профиль) |
|
| Пароль PostgreSQL (локальный профиль) | — |
| Пароль Redis (локальный профиль) | — |
PostgreSQL (локальный профиль)
Для локального запуска используется образ pgvector/pgvector:pg17 с предварительно настроенным HNSW-индексом:
Расширение
vectorТаблица
memoriesс колонкойembedding vector(8192)HNSW-индекс с параметрами
m = 16,ef_construction = 200B-tree индексы:
user_id,namespace,created_at DESCТриггер автообновления
updated_atУникальный индекс на
(namespace, content_hash)для точной дедупликации
Аутентификация
Опциональная защита на основе API-ключа. Включается установкой переменной API_KEY в .env.
Механизм:
HTTP-middleware проверяет заголовок
Authorization: Bearer <API_KEY>для всех эндпоинтовASGI-middleware защищает
/mcp(mount-приложение FastMCP)Белый список (доступ без аутентификации):
/health,/metrics
При пустом значении API_KEY доступ открыт.
Мониторинг
Метрики Prometheus
Эндпоинт /metrics предоставляет 13+ метрик:
Метрика | Тип | Описание |
| Counter | Количество HTTP-запросов (method, endpoint, status) |
| Histogram | Длительность HTTP-запросов |
| Gauge | Текущий размер пула соединений |
| Gauge | Доступные соединения в пуле |
| Histogram | Длительность вызова API эмбеддингов |
| Histogram | Количество результатов поиска |
| Gauge | Общее количество записей (по namespace) |
| Counter | Вызовы MCP-инструментов (tool, status) |
| Histogram | Длительность выполнения MCP-инструментов |
| Counter | Попадания в кеш эмбеддингов |
| Counter | Промахи кеша эмбеддингов |
| Counter | Пропуски дедупликации (namespace, reason) |
| Counter | Вставки после проверки дедупликации |
Healthcheck
curl http://localhost:8000/healthОтвет содержит версию сервера и статусы проверок конфигурации.
Grafana Dashboard
Готовый dashboard для PostgreSQL + pgvector — monitoring/dashboards/postgres-pgvector.json.
Экспортёры
Для production-развёртывания предусмотрены экспортёры (включаются через -f monitoring/exporters/docker-compose.exporters.yml):
postgres-exporter (порт 9187) — метрики PostgreSQL
redis-exporter (порт 9121) — метрики Redis
Алерты
Правила алертинга — monitoring/alerts/prometheus-rules.yml:
Доступность PostgreSQL и Redis
Высокая загрузка соединений
Конфликты запросов на реплике
Долгие запросы (> 5 минут)
Отставание WAL-архивации
Отсутствие бэкапов
Отсутствие HNSW-индекса при > 10k записей
Высокое потребление памяти Redis
Высокий процент промахов кеша Redis
Миграции
Управление схемой базы данных — через встроенный migration runner.
# Применить все неприменённые миграции
python migrations/run.py
# Откатить последнюю миграцию
python migrations/run.py --downМиграции находятся в migrations/ — версионированные SQL-файлы с up/down-секциями. Система отслеживает применённые миграции в таблице _migrations.
Доступные миграции:
Файл | Описание |
| Начальная схема: расширение vector, таблица memories, HNSW-индекс, триггеры, функция поиска |
| Дедупликация: content_hash, source_type, source_location, version, is_archived, уникальный индекс |
| Расширение: embedding cache, batch operations |
| Инфраструктурные метрики и мониторинг |
| Таблица relations для графа знаний: связи между гранулами, индексы, каскадное удаление |
Zero-downtime Deploy
Скрипт deploy.sh реализует стратегию rolling-обновления:
Пулл нового образа из GHCR
Запуск нового контейнера на временном порту
Ожидание прохождения healthcheck
Переключение трафика (через reverse proxy или прямой restart)
Остановка и удаление старого контейнера
Тестирование
Проект покрыт модульными и интеграционными тестами (142+ теста).
# Установка зависимостей для тестов
pip install -r requirements.txt
# Запуск тестов
pytest tests/ -v
# С отчётом о покрытии
pytest tests/ --cov=memory_server -vРазработка
Проект разработан в рамках Argenta Team — архитектура, разработка и сопровождение информационных систем.
Разработчик: Dek1m
Argenta Team — архитектура, разработка и сопровождение информационных систем.
Auto-deploy test: 2026-08-01T08:54:55Z
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 gradedqualityCmaintenancePersistent semantic memory server for AI assistants via MCP, enabling long-term context retention and semantic search across conversations.11MIT
- AlicenseAqualityDmaintenanceMCP server for long-term agent memory, providing persistent memory, searchable knowledge, and evolving identity for AI agents.53Apache 2.0
- AlicenseNot gradedqualityCmaintenancePersistent memory infrastructure for AI agents, enabling cross-session recall and autonomous memory evolution via an MCP server.1MIT
- AlicenseNot gradedqualityBmaintenanceA shared memory MCP server for AI agents that provides persistent, semantic memory across sessions and tools, enabling long-term recall and context sharing.011MIT
Related MCP Connectors
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Persistent memory for AI agents — verbatim conversations, searchable by meaning.
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
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/Dek1m/selti'
If you have feedback or need assistance with the MCP directory API, please join our Discord server