MCP Memory Server
MCP (Model Context Protocol) сервер для управления текстовой памятью на Rust.
Этот сервер предоставляет инструменты для взаимодействия с LLM-моделями через Model Context Protocol. Позволяет сохранять, читать и удалять пользовательские записи памяти в файле ~/memories.md.
🎯 Назначение
Интеграция с AI-моделями (через MCP) для:
- Сохранения пользовательских заметок и контекста
- Доступа к сохранённой информации во время диалогов
- Удаления устаревших записей памяти
📦 Возможности
🚀 Быстрый старт
Требования
- Rust 2021 edition ( nightly или stable с поддержкой edition 2021)
- Cargo (включён по умолчанию)
Установка
cargo build --release
Запуск
cargo run
Сервер запустится в режиме stdio:
- Чтение JSON-RPC запросов со
stdin - Запись JSON-RPC ответов на
stdout
📋 Работа с MCP
Примеры использования
Сохранение памяти
Запрос:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "save_memory",
"arguments": {
"memory": "Привет, мир!"
}
}
}
Ответ:
{
"jsonrpc": "2.0",
"id": 1,
"result": {}
}
Чтение всех записей памяти
Запрос:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "read_memories"
}
}
Ответ:
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"memories": [
"Привет, мир!",
"Вторая запись"
]
}
}
Удаление записи
Запрос:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "delete_memory",
"arguments": {
"memory": "Привет, мир!"
}
}
}
Ответ:
{
"jsonrpc": "2.0",
"id": 3,
"result": {}
}
Клиенты MCP
Сервер совместим со всеми MCP-клиентами, использующими stdio transport:
- VS Code — расширение mcp
- Cursor — встроенная поддержка MCP
- Claude Desktop — поддержка MCP в настройках
- Anytype — экспериментальная поддержка MCP
🏗️ Архитектура
src/
├── main.rs # Точка входа, запускает Tokio runtime
├── app/
│ ├── memory_server.rs # Структура McpServer с динамической регистрацией инструментов
│ ├── memory_state.rs # Логика чтения/записи файла ~/memories.md
│ └── tools/ # Инструменты памяти:
│ ├── save_memory.rs
│ ├── read_memories.rs
│ └── delete_memory.rs
└── services/
├── mcp/ # Реализация MCP протокола:
│ ├── server.rs # McpServer с обработкой JSON-RPC
│ ├── io.rs # Абстракция I/O (stdin/stdout)
│ └── ... # Types для JSON-RPC, capabilities, errors
└── tool/ # Traits и схемы инструментов:
├── tool.rs # Trait Tool с description() и execute()
└── schema.rs # JsonSchema для валидации параметров
target/ # Cargo-артефакты (не включается в git)
Ключевые компоненты
McpServer<Io> — основной сервер, обрабатывающий JSON-RPC:
- Регистрация инструментов через
add_tool() - Парсинг и маршрутизация запросов
- Обработка ошибок и ответы
MemoryState — менеджер состояния:
- Хранение пути к файлу памяти
- Асинхронное чтение/запись файла
- Удаление записей из массива строк
Tool trait — контракт для инструментов MCP:
trait Tool: Send + Sync {
async fn description(&self) -> &ToolDescription;
async fn execute(&self, arguments: serde_json::Value) -> Result<Value, Error>;
}
📦 Зависимости
[dependencies]
async-trait = "0.1" # Асинхронные traits
tokio = { version = "1", features = ["full"] } # Async runtime
serde = { version = "1", features = ["derive"] } # Seriazation
serde_json = "1" # JSON парсинг/сериализация
thiserror = "2.0.20" # Typed errors
yaml_serde = "0.10.6" # YAML (возможно, для конфига)
🛠️ Команды разработки
cargo run # Запуск отладочной сборки
cargo build --release # Сборка release-сборки
cargo test # Запуск unit-тестов
cargo fmt # Форматирование кода
cargo clippy # Проверка через clippy
🧪 Тестирование
Все тесты находятся в модулях #[cfg(test)] рядом с реализацией.
Запуск тестов:
cargo test
Тесты покрывают:
- Успешные сценарии выполнения
- Обработку некорректных входных данных
- JSON-RPC ошибок
- Формат сериализации
🔒 Безопасность и конфигурация
- Файл памяти:
~/memories.md(в домашней директории) - Никогда не коммитьте реальные содержимое памяти, пароли или абсолютные пути
- Входные данные считаются потенциально небезопасными (untrusted input)
📜 Лицензия
MIT License
Для дополнительных инструкций см. AGENTS.md.