MCP сервер для управления долговременной памятью (Knowledge Graph) и поиска в интернете. Поддерживает SQLite (встроенное хранилище) и PostgreSQL (удалённая БД).
⚡ Используйте MCP инструменты прямо из VS Code: сохраняйте заметки, стройте граф знаний, ищите в интернете — всё без выхода из редактора.
- Сохранение сущностей — люди, концепции, заметки, проекты, статьи
- Связи между сущностями — граф отношений (
A --[related_to]--> B) - Полнотекстовый поиск — по имени, свойствам, тегам (FTS5 / PostgreSQL tsvector)
- Семантический поиск — векторные эмбеддинги через
sentence-transformers - Пространства имён — изолированные области знаний (проекты, темы)
- Теги и категории — гибкая классификация
- Экспорт графа — JSON/Markdown дамп всей базы знаний
- TTL для сущностей — автоматическое "забывание" устаревших данных
- Поиск через DuckDuckGo — без API-ключа, бесплатно
- Скрейпинг страниц — извлечение основного контента по URL
- Сохранение страниц как знаний — с эмбеддингами для поиска
- Кэширование в Redis — повторные запросы без задержек
- Хранение истории — каждая сессия диалога сохраняется
- Извлечение контекста — восстановление предыдущих разговоров
- Очистка сессии — управление памятью
- Health Check — мониторинг БД, Redis, эмбеддингов
- Статистика — количество сущностей, связей, размер БД
- Резервное копирование — SQLite backup / PostgreSQL dump
- Dashboard — статистика, графики, граф знаний (D3.js)
- Entity Browser — поиск и просмотр сущностей
- Timeline — временная шкала изменений
- Graph Visualization — force-directed граф с зумом
┌─────────────────────────────────────────────────────────┐
│ MCP Client (Claude) │
└──────────────────────┬──────────────────────────────────┘
│ MCP Protocol (stdio / SSE)
┌──────────────────────▼──────────────────────────────────┐
│ server.py (FastMCP) │
│ ┌────────────┐ ┌────────────┐ ┌───────────────────┐ │
│ │ Knowledge │ │ Browser │ │ Dialogue Memory │ │
│ │ Graph Tools │ │ Tools │ │ Tools │ │
│ └──────┬──────┘ └──────┬─────┘ └───────┬───────────┘ │
│ │ │ │ │
│ ┌──────▼────────────────▼─────────────────▼──────────┐ │
│ │ KnowledgeGraph (core logic) │ │
│ └──────┬──────────────────────┬──────────────────────┘ │
│ │ │ │
│ ┌──────▼──────┐ ┌──────▼──────┐ │
│ │ SQLite3 / │ │ Redis │ │
│ │ PostgreSQL │ │ (cache) │ │
│ └─────────────┘ └─────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ EmbeddingsEngine (sentence-transformers) │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
| Компонент | Технология | Назначение |
|---|---|---|
| MCP Server | mcp[cli] (FastMCP) |
Протокол взаимодействия |
| Хранилище | SQLite3 / PostgreSQL (asyncpg) | Персистентность данных |
| Кэш | Redis (async) | Кэш запросов, сессии, TTL |
| Эмбеддинги | sentence-transformers / fastembed |
Семантический поиск |
| Поиск | duckduckgo-search |
Бесплатный веб-поиск |
| Скрейпинг | httpx + beautifulsoup4 |
Извлечение контента |
| Web UI | Starlette + D3.js | Визуализация графа |
# Клонировать репозиторий
cd mcp-server
# Установить зависимости (рекомендуется использовать uv)
uv sync
# Или через pip
pip install -e .cp .env.example .env
# Отредактировать .env при необходимостиСервер работает по SSE (Server-Sent Events) и доступен в локальной сети.
# Установить зависимости
pip install -e .
# Запустить MCP сервер (SSE транспорт, порт 8000)
python -m serverСервер будет доступен по адресу: http://127.0.0.1:8000/sse
# Настроить .env
DB_TYPE=postgres
PG_HOST=your-postgres-host
PG_USER=postgres
PG_PASSWORD=your-password
PG_DATABASE=mcp_memory
# Запустить
python -m serverdocker compose up -d
# Сервер: http://SERVER_IP:8000/sse
# Redis: порт 6379cp .env.example .env
# Отредактировать PG_PASSWORD и EMBEDDINGS_MODE
docker compose -f docker-compose.remote.yml up -d
# PostgreSQL: порт 5432 (только localhost)
# Redis: порт 6379 (только localhost)
# Сервер: http://SERVER_IP:8000/sseВ файле .vscode/mcp.json уже прописано подключение по URL:
{
"servers": {
"memory-server": {
"type": "url",
"url": "http://localhost:8000/sse"
}
}
}Замените localhost на IP-адрес сервера в локальной сети, если VS Code запущен на другом компьютере.
Добавьте в глобальный settings.json VS Code (Ctrl+Shift+P → "Preferences: Open User Settings (JSON)"):
{
"mcp": {
"servers": {
"memory-server": {
"type": "url",
"url": "http://192.168.1.100:8000/sse"
}
}
}
}Замените IP на фактический адрес сервера.
Если VS Code запущен на том же компьютере, что и сервер:
{
"mcp": {
"servers": {
"memory-server": {
"type": "url",
"url": "http://localhost:8000/sse"
}
}
}
}- Убедитесь, что сервер запущен (команда
python -m serverилиdocker-compose up -d) - Откройте VS Code
- Если настроено через
.vscode/mcp.json— откройте папку проекта - Используйте
Ctrl+Shift+P→ "MCP: List Tools" чтобы увидеть все доступные инструменты - При успешном подключении вы увидите список из 18 инструментов
Kilo Code поддерживает MCP серверы по протоколу SSE. Добавьте в kilo.json (глобальный ~/.config/kilo/kilo.json или проектный ./kilo.json):
{
"mcp": {
"memory-server": {
"type": "remote",
"url": "http://192.168.1.100:8000/sse",
"headers": {
"Authorization": "Bearer your-secret-api-key"
},
"enabled": true
}
}
}Замените IP и ключ на фактические значения сервера.
Roo Code также поддерживает SSE MCP серверы. Добавьте в mcp_settings.json (или в настройках расширения → MCP → Edit Settings):
{
"mcpServers": {
"memory-server": {
"type": "sse",
"url": "http://192.168.1.100:8000/sse",
"headers": {
"Authorization": "Bearer your-secret-api-key"
}
}
}
}Если авторизация не включена — поле headers можно опустить.
| Инструмент | Описание | Параметры |
|---|---|---|
store_entity |
Сохранить сущность | name, entity_type, properties(JSON), namespace, tags, ttl_seconds |
get_entity |
Получить сущность | entity_id или name + namespace |
search_knowledge |
Поиск по базе знаний | query, namespace, entity_type, tags, use_semantic, limit |
list_entities |
Список сущностей | namespace, entity_type, limit, offset |
delete_entity |
Удалить сущность | entity_id |
add_relation |
Создать связь | source_id, target_id, relation_type, properties |
get_relations |
Связи сущности | entity_id, relation_type |
export_graph |
Экспорт графа | namespace |
| Инструмент | Описание | Параметры |
|---|---|---|
web_search |
Поиск в интернете | query, max_results |
scrape_page |
Извлечь текст страницы | url |
save_webpage_to_knowledge |
Сохранить страницу как знание | url, namespace, tags |
| Инструмент | Описание | Параметры |
|---|---|---|
store_dialogue |
Сохранить реплику | session_id, role, content, namespace |
get_dialogue_history |
История сессии | session_id, limit |
clear_dialogue_history |
Очистить историю | session_id |
| Инструмент | Описание | Параметры |
|---|---|---|
health_check |
Проверка сервисов | — |
get_stats |
Статистика | namespace |
list_namespaces |
Список пространств | — |
🔧 store_entity(
name="Python asyncio",
entity_type="concept",
properties='{"category": "programming", "difficulty": "intermediate"}',
tags="python,async,programming"
)
🔍 search_knowledge(
query="асинхронное программирование",
use_semantic=true,
limit=5
)
🔗 add_relation(
source_id="<entity_id_1>",
target_id="<entity_id_2>",
relation_type="depends_on"
)
🌐 web_search(query="последние новости AI", max_results=5)
📄 scrape_page(url="https://example.com/article")
💾 save_webpage_to_knowledge(
url="https://example.com/article",
tags="AI,research"
)
docker compose up -d# Полный стек (PostgreSQL, Redis, MCP Server)
docker compose -f docker-compose.remote.yml up -d
# Или с внешней PostgreSQL (без локального контейнера PG)
docker compose -f docker-compose.remote.yml --profile external-db up -ddocker build -t mcp-memory-server .
# Запуск с пробросом .env
docker run -it --rm --env-file .env -v mcp-data:/app/data mcp-memory-server# Установить dev-зависимости
pip install -e ".[dev]"
# Запустить тесты
pytest -v
# С覆盖率
pytest --cov=. --cov-report=term-missing| Переменная | По умолчанию | Описание |
|---|---|---|
DB_TYPE |
sqlite |
Тип БД: sqlite или postgres |
SQLITE_DB_PATH |
data/memory.db |
Путь к SQLite (при DB_TYPE=sqlite) |
PG_HOST |
localhost |
Хост PostgreSQL (при DB_TYPE=postgres) |
PG_PORT |
5432 |
Порт PostgreSQL |
PG_USER |
postgres |
Пользователь PostgreSQL |
PG_PASSWORD |
— | Пароль PostgreSQL |
PG_DATABASE |
mcp_memory |
Имя БД PostgreSQL |
PG_POOL_SIZE |
10 |
Размер пула соединений asyncpg |
REDIS_HOST |
localhost |
Хост Redis |
REDIS_PORT |
6379 |
Порт Redis |
REDIS_DB |
0 |
Номер БД Redis |
REDIS_PASSWORD |
— | Пароль Redis |
MCP_HOST |
127.0.0.1 |
Интерфейс для SSE сервера |
MCP_PORT |
8010 |
Порт для SSE сервера |
MCP_TRANSPORT |
sse |
Транспорт: sse (сеть) или stdio (локально) |
EMBEDDINGS_MODE |
local |
Режим эмбеддингов: none, local или fastembed |
EMBEDDINGS_MODEL_NAME |
all-MiniLM-L6-v2 |
Модель эмбеддингов |
DEFAULT_NAMESPACE |
default |
Пространство имён по умолчанию |
ENTITY_TTL_SECONDS |
0 |
TTL для сущностей (0 = без TTL) |
SSE_AUTH_ENABLED |
false |
Включить Bearer token аутентификацию для SSE |
SSE_API_KEY |
— | API-ключ для SSE эндпоинтов |
- Авторизация — Bearer token аутентификация для SSE-эндпоинтов (SSE_AUTH_ENABLED + SSE_API_KEY)
- Мониторинг URL — периодическая проверка страниц на изменения
- OpenTelemetry — метрики и трейсинг
- Партиционирование — шардирование PostgreSQL по namespace
- Бэкап PostgreSQL — автоматический pg_dump по расписанию
- PostgreSQL: новый async-клиент (
storage/postgres_client.py) на asyncpg:- Пул соединений, JSONB, GIN-индексы, FTS через tsvector
- 16 индексов: GIN на JSONB/TEXT[]/tsvector, композитные, покрывающие
- Каскадные внешние ключи (
ON DELETE CASCADE) - Переключение между SQLite/PostgreSQL через
DB_TYPEв .env
- Async dispatch: KnowledgeGraph автоматически определяет sync/async хранилище
- Web UI: Dashboard с D3.js графом, Entity Browser, Timeline, Stats
- Favicon: иконка сервера (
mcp.png) на всех страницах Web UI - Docker Compose:
docker-compose.remote.ymlдля production-развёртывания - Тесты: 176/176, 0 warnings
- Исправлен критический баг:
__version__теперь определён вserver.py, сервер не падает при запуске - Исправлены импорты: относительные импорты (
from ..storage) заменены на абсолютные (from storage) - Починены тесты: 73% тестов (143 из 197) теперь выполняются (раньше падали с ImportError)
- Оптимизация производительности:
- N+1 запросы в
GraphVisualizerзаменены на batch-запросget_relations_for_entities list_namespaces()теперь используетSELECT DISTINCTвместо загрузки всех сущностейexport_graph()использует batch-запрос вместо цикла
- N+1 запросы в
- Безопасность:
- Добавлен
html.escape()для всех пользовательских данных в Web UI (XSS) - Добавлена защита path traversal в
MarkdownImporter MCP_HOSTпо умолчанию изменён на127.0.0.1
- Добавлен
- Улучшения кода:
- Убран мёртвый вызов
search_knowledge()вurl_monitor.py _parse_json()теперь принимаетstr | Nonecosine_similarity()—@staticmethod- Суждены блоки
except Exceptionдо конкретных исключений - Убраны поздние импорты в
server.py - Добавлен
fastembedв optional-dependencies - Устранён дубликат тестового класса
TestSearchEngineWithMockRedis - Модельные тесты вынесены в
test_models.py
- Убран мёртвый вызов
MIT

{ "mcp": { "memory-server": { "type": "remote", "url": "http://192.168.1.100:8000/sse", "enabled": true } } }