Перейти к содержимому

Memory Server

MCP-сервер для персистентной памяти на основе графа знаний — сохранение информации о пользователе между сессиями

Memory Server реализует персистентную память с помощью локального графа знаний. Позволяет Claude запоминать информацию о пользователе между чатами, создавая долговременные воспоминания.

Сущности — первичные узлы графа знаний. Каждая сущность имеет:

  • name — уникальный идентификатор
  • entityType — тип (person, organization, event и т.д.)
  • observations — список наблюдений
{
"name": "John_Smith",
"entityType": "person",
"observations": ["Говорит по-испански", "Работает в Anthropic"]
}

Отношения определяют направленные связи между сущностями. Всегда хранятся в активном залоге.

{
"from": "John_Smith",
"to": "Anthropic",
"relationType": "works_at"
}

Наблюдения — дискретные факты о сущности:

  • Хранятся как строки
  • Привязаны к конкретным сущностям
  • Могут добавляться и удаляться независимо
  • Должны быть атомарными (один факт на наблюдение)
{
"entityName": "John_Smith",
"observations": [
"Говорит по-испански",
"Закончил университет в 2019",
"Предпочитает утренние встречи"
]
}
Окно терминала
npx -y @modelcontextprotocol/server-memory

Создаёт несколько новых сущностей в графе знаний.

ПараметрТипОписание
entitiesarrayМассив объектов сущностей

Каждый объект содержит:

  • name (string) — идентификатор сущности
  • entityType (string) — тип сущности
  • observations (string[]) — начальные наблюдения

Создаёт отношения между сущностями.

ПараметрТипОписание
relationsarrayМассив объектов отношений

Каждый объект содержит:

  • from (string) — исходная сущность
  • to (string) — целевая сущность
  • relationType (string) — тип отношения (в активном залоге)

Добавляет новые наблюдения к существующим сущностям.

ПараметрТипОписание
observationsarrayМассив объектов наблюдений

Каждый объект содержит:

  • entityName (string) — целевая сущность
  • contents (string[]) — новые наблюдения

Возвращает: добавленные наблюдения по сущностям.

Удаляет сущности и связанные отношения.

ПараметрТипОписание
entityNamesstring[]Имена сущностей для удаления

Удаляет конкретные наблюдения из сущностей.

ПараметрТипОписание
deletionsarrayМассив объектов удаления

Каждый объект содержит:

  • entityName (string) — целевая сущность
  • observations (string[]) — наблюдения для удаления

Удаляет конкретные отношения из графа.

ПараметрТипОписание
relationsarrayМассив объектов отношений

Читает весь граф знаний. Параметров не требует.

Возвращает: полную структуру графа со всеми сущностями и отношениями.

Поиск узлов по запросу.

ПараметрТипОписание
querystringПоисковый запрос

Ищет по:

  • Именам сущностей
  • Типам сущностей
  • Содержимому наблюдений

Возвращает: найденные сущности и их отношения.

Получает конкретные узлы по именам.

ПараметрТипОписание
namesstring[]Массив имён сущностей

Возвращает:

  • Запрошенные сущности
  • Отношения между ними
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
}
}
}
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"],
"env": {
"MEMORY_FILE_PATH": "/path/to/custom/memory.jsonl"
}
}
}
}

По умолчанию файл памяти: memory.jsonl в директории сервера.

{
"servers": {
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
}
}
}

Для эффективного использования памяти добавьте в системный промпт (например, в “Custom Instructions” проекта Claude):

Следуйте этим шагам для каждого взаимодействия:
1. Идентификация пользователя:
- Предполагайте, что вы общаетесь с default_user
- Если пользователь не идентифицирован, попробуйте его определить
2. Извлечение памяти:
- Всегда начинайте чат со слова "Вспоминаю..." и извлекайте
всю релевантную информацию из графа знаний
- Называйте граф знаний "памятью"
3. Память:
- Во время разговора отслеживайте новую информацию в категориях:
a) Базовая идентичность (возраст, пол, локация, работа, образование)
b) Поведение (интересы, привычки)
c) Предпочтения (стиль общения, язык)
d) Цели (цели, стремления)
e) Отношения (личные и профессиональные связи)
4. Обновление памяти:
- Если получена новая информация, обновите память:
a) Создайте сущности для организаций, людей, событий
b) Свяжите их с существующими сущностями
c) Сохраните факты как наблюдения
{
"name": "create_entities",
"arguments": {
"entities": [
{
"name": "Иван_Петров",
"entityType": "person",
"observations": [
"Разработчик Python",
"Живёт в Москве"
]
},
{
"name": "TechCorp",
"entityType": "organization",
"observations": ["IT-компания"]
}
]
}
}
{
"name": "create_relations",
"arguments": {
"relations": [
{
"from": "Иван_Петров",
"to": "TechCorp",
"relationType": "работает_в"
}
]
}
}
{
"name": "search_nodes",
"arguments": {
"query": "разработчик"
}
}
Окно терминала
docker build -t mcp/memory -f src/memory/Dockerfile .