Attestor — MCP-сервер для Claude Code: общая память агентов
Самостоятельно размещаемый сервис памяти для команд агентов: роли, права на запись и забывание, история версий и аудит. Нужен, когда несколько агентов пишут в одно хранилище.
claude mcp add --env ATTESTOR_PATH=<ATTESTOR_PATH> --env ATTESTOR_DISABLE_LOCAL_EMBED=<ATTESTOR_DISABLE_LOCAL_EMBED> --env OPENAI_API_KEY=<OPENAI_API_KEY> --env OPENROUTER_API_KEY=<OPENROUTER_API_KEY> --transport stdio attestor -- uvx attestorЧто делает Attestor
Attestor хранит каждую запись один раз в Postgres, а векторы и граф строит в Pinecone и Neo4j. Чтение и запись идут через AgentContext, который несёт идентичность агента, роль, пространство имён и бюджет. Ролей шесть: ORCHESTRATOR умеет читать, писать и забывать, PLANNER, EXECUTOR и RESEARCHER — читать и писать, REVIEWER и MONITOR только читают. Флаг read_only=True снимает запись и забывание независимо от роли, а нарушение прав выбрасывает PermissionError до обращения к хранилищу.
Ранжирование при выдаче детерминированное: вектор, BM25, RRF, граф, MMR и подгонка под бюджет, без языковой модели в оценке. Один и тот же запрос даёт один и тот же порядок, это можно покрыть тестами. Опциональный реранкер (bge, cohere или llm) по умолчанию выключен. Каждый факт несёт время действия и время транзакции, поэтому recall(as_of=...) восстанавливает состояние на прошлый момент. Противоречия не удаляют старые записи, а помечают их вытесненными. Учтите: слой Pinecone параметр as_of игнорирует и пишет предупреждение в лог, так что исторический срез по векторной выдаче не гарантирован.
Запускается тремя способами с одним API: как библиотека Python, как REST-сайдкар и как MCP-сервер. Проверка ролей работает только внутри процесса, а REST и MCP обращаются к хранилищу напрямую и полагаются на собственную аутентификацию. Установка идёт через pip install attestor, для MCP-запуска нужен uvx.
Какие задачи решает
- разграничить, кто из агентов может писать в общую память
- доказать, на чём построен ответ, спустя месяцы
- восстановить состояние памяти на прошлую дату
- удалить данные пользователя с записью в аудит
- изолировать данные разных тенантов в одном хранилище
Примеры запросов агенту
- Добавь в память решение по схеме авторизации от имени агента
reviewer-1 - Покажи, что команда агентов считала верным в прошлую пятницу
- Удали данные пользователя и покажи запись аудита об этом
Как установить Attestor
Командой платформы
claude mcp add --env ATTESTOR_PATH=<ATTESTOR_PATH> --env ATTESTOR_DISABLE_LOCAL_EMBED=<ATTESTOR_DISABLE_LOCAL_EMBED> --env OPENAI_API_KEY=<OPENAI_API_KEY> --env OPENROUTER_API_KEY=<OPENROUTER_API_KEY> --transport stdio attestor -- uvx attestorВместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from attestor <команда>
Командой платформы
codex mcp add attestor --env ATTESTOR_PATH=<ATTESTOR_PATH> --env ATTESTOR_DISABLE_LOCAL_EMBED=<ATTESTOR_DISABLE_LOCAL_EMBED> --env OPENAI_API_KEY=<OPENAI_API_KEY> --env OPENROUTER_API_KEY=<OPENROUTER_API_KEY> -- uvx attestorВместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from attestor <команда>
Файл настроек
{
"mcpServers": {
"attestor": {
"command": "uvx",
"args": [
"attestor"
],
"env": {
"ATTESTOR_PATH": "<ATTESTOR_PATH>",
"ATTESTOR_DISABLE_LOCAL_EMBED": "<ATTESTOR_DISABLE_LOCAL_EMBED>",
"OPENAI_API_KEY": "<OPENAI_API_KEY>",
"OPENROUTER_API_KEY": "<OPENROUTER_API_KEY>"
}
}
}
}Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from attestor <команда>
Файл настроек
{
"servers": {
"attestor": {
"type": "stdio",
"command": "uvx",
"args": [
"attestor"
],
"env": {
"ATTESTOR_PATH": "<ATTESTOR_PATH>",
"ATTESTOR_DISABLE_LOCAL_EMBED": "<ATTESTOR_DISABLE_LOCAL_EMBED>",
"OPENAI_API_KEY": "<OPENAI_API_KEY>",
"OPENROUTER_API_KEY": "<OPENROUTER_API_KEY>"
}
}
}
}Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from attestor <команда>
Командой платформы
gemini mcp add -e ATTESTOR_PATH=<ATTESTOR_PATH> -e ATTESTOR_DISABLE_LOCAL_EMBED=<ATTESTOR_DISABLE_LOCAL_EMBED> -e OPENAI_API_KEY=<OPENAI_API_KEY> -e OPENROUTER_API_KEY=<OPENROUTER_API_KEY> attestor uvx attestorВместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from attestor <команда>
По шагам, с командами для каждой платформы: Как подключить MCP-сервер: Claude Code, Codex, Cursor, VS Code, Gemini CLI и другие
Вопросы о Attestor
Как установить Attestor в Claude Code?
Одной командой: claude mcp add attestor -e OPENAI_API_KEY=<OPENAI_API_KEY> -e OPENROUTER_API_KEY=<OPENROUTER_API_KEY> -- uvx attestor. Второй вариант добавляет переменные ATTESTOR_PATH и ATTESTOR_DISABLE_LOCAL_EMBED и явно указывает транспорт: `claude mcp add --env ATTESTOR_PATH=<ATTESTOR_PATH> --env ATTESTOR_DISABLE_LOCAL_EMBED=<ATTESTOR_DISABLE_LOCAL_EMBED> --env OPENAI_API_KEY=<OPENAI_API_KEY> --env OPENROUTER_API_KEY=<OPENROUTER_API_KEY> --transport stdio attestor -- uvx attestor`.
Что делает Attestor?
Это сервис памяти для нескольких агентов сразу. Он следит за правами на запись и забывание, хранит происхождение каждой записи и позволяет запросить память на любой прошлый момент.
Чем Attestor отличается от обычной памяти кодинг-ассистента?
Здесь на первом месте не поиск, а управление: роли, квоты на запись, подписанное происхождение и аудит удаления. Ранжирование при этом детерминированное, без языковой модели в оценке.