apocrypha
Apocrypha
Apocrypha — это однопользовательская, append-only удалённая MCP-память Дженсена для полезного личного контекста, который ассистент считает, что не следует помещать в свою обычную встроенную память. Claude и ChatGPT используют общий стандартный конечный пункт Streamable HTTP по адресу /mcp. Он поддерживает основанный на стандартах OAuth 2.1 для таких клиентов, как Claude, сохраняя при этом отдельный статический bearer-токен для клиентов, которые могут напрямую устанавливать заголовок авторизации.
Область применения: только исключительная память
Apocrypha следует общей семантике памяти и сжатия OptMem с одной специализацией: это не второе хранилище памяти общего назначения. Ассистент должен записывать сюда только тогда, когда личный контекст стоит запомнить, но ассистент считает, что не должен сохранять этот контекст в своём собственном личном банке памяти — например, жильё, доход, финансовый запас, социально-экономические обстоятельства или связанный с рабочим конвейером контекст. Факты, подходящие для обычной встроенной памяти, принадлежат ей и не должны также копироваться в Apocrypha. Такое разделение позволяет избежать избыточных или конфликтующих воспоминаний в разных системах.
LOG.txt является авторитетным источником. Он использует записи OptMem фиксированной ширины 320 байт (одна память на запись, завершающаяся переводом строки), а TREE/<size> использует его записи бинарного слияния фиксированной ширины 288 байт. Исправления — это более поздние записи журнала; исходные воспоминания никогда не редактируются и не удаляются. Google Drive — это только зеркало, читаемое с телефона.
Related MCP server: JauMemory MCP Server
Инструменты
apocrypha_wake: обязательное чтение постоянного контекста, разбитое на страницы ниже лимитов ответа клиента; отказывается, пока ожидается какое-либо сжатие.apocrypha_note: записывает только иначе запрещённый долговременный контекст, схлопывает пробелы, добавляет датированную память, зеркалирует Drive и возвращает следующее новое возможное сжатие.apocrypha_sleep: получает или завершает следующее сжатие дерева слияния.apocrypha_recall: поиск по регулярному выражению без учёта регистра по полному исходному журналу.apocrypha_forget: усекает неправильное резюме и все резюме выше него, не затрагивая журнал.
Wake намеренно возвращает каждую исходную запись, пока журнал укладывается в свой бюджет рендеринга в 96 строк. Как только журнал превышает этот бюджет, он выкладывает полную историю сохранёнными сводками дерева в прошлое и постепенно более детальными к настоящему. Заметка возвращает только первое новое возможное сжатие; каждый ответ sleep возвращает следующую задачу в каскаде. Опустошение этого каскада перед wake является намеренным, потому что wake никогда не рендерит из частично построенного дерева.
Сжатие следует нейтральному к категориям правилу OptMem: сохранять то, что имеет длительный эффект, отбрасывать то, что не имеет, и ничего не выдумывать. Исходный журнал остаётся авторитетным независимо от того, что опускает сводка.
Локальная проверка
npm install
npm testТесты включают стресс-прогон OptMem на 2000 записей, инварианты фиксированных записей и дерева, разбиение на страницы, увеличение детализации к настоящему, байтовую идентичность забывания/пересборки, сохранение после перезапуска, схемы MCP и запрос Drive batchUpdate.
Процесс разработки и развертывания
C:\Users\Jensen\code\apochrypha — это рабочая копия для разработки. Публичная ветка main на GitHub является источником релиза, и Alpha разворачивает эту опубликованную ветку, а не неопубликованные локальные файлы.
Внесите изменения в локальной рабочей копии и запустите
npm test.Зафиксируйте изменения и отправьте
mainв GitHub.Из PowerShell запустите
./scripts/deploy-alpha.ps1.
Скрипт развертывания отказывается от грязного дерева, ветки не-main или локального коммита, отличающегося от origin/main. На Alpha он выполняет обновление только с перемоткой вперёд, устанавливает заблокированные производственные зависимости, перезапускает службу и проверяет локальную конечную точку здоровья. Состояние выполнения остаётся отдельным: учётные данные находятся в /etc/apocrypha.env, а журнал append-only, дерево сводок и состояние OAuth — в /var/lib/apocrypha; ни одно из них не является частью Git.
Авторизация Google (однократно, на ноутбуке)
В Google Cloud включите Google Docs API и создайте настольный OAuth-клиент.
Настройте экран согласия OAuth и опубликуйте его в Production. Если оставить его в Testing, refresh-токен истекает через семь дней.
Добавьте
http://127.0.0.1:53682/oauth2callback, если конфигурация клиента запрашивает авторизованный URI перенаправления.Запустите:
GOOGLE_CLIENT_ID='...' GOOGLE_CLIENT_SECRET='...' npm run oauth:google
Помощник запрашивает access_type=offline, prompt=consent и только https://www.googleapis.com/auth/documents. Поместите напечатанный refresh-токен в /etc/apocrypha.env; не коммитьте его.
Зеркало нацелено на GOOGLE_DOC_ID, а не на название документа. Переименование Google Doc не нарушает синхронизацию и не должно заменяться поиском по названию.
Развертывание на Alpha
Скопируйте этот проект в /srv/apocrypha, затем запустите от имени root:
cd /srv/apocrypha
npm ci --omit=dev
useradd --system --home /var/lib/apocrypha --shell /usr/sbin/nologin apocrypha || true
chown -R apocrypha:apocrypha /var/lib/apocrypha
install -o root -g root -m 600 deploy/apocrypha.env.example /etc/apocrypha.env
install -o root -g root -m 644 deploy/apocrypha.service /etc/systemd/system/apocrypha.service
systemctl daemon-reload
systemctl enable --now apocryphaОтредактируйте /etc/apocrypha.env с реальными, независимыми значениями MCP_BEARER_TOKEN и OAUTH_ACCESS_KEY перед запуском службы. Процесс всегда привязывается к 127.0.0.1; nginx — единственный публичный слушатель.
Подключение Claude
В диалоге настраиваемого коннектора Claude введите https://mcp.jensenabler.com/mcp и оставьте необязательные поля OAuth Client ID и Client Secret пустыми. Claude обнаруживает метаданные OAuth Apocrypha и динамически регистрируется. Когда откроется страница авторизации Apocrypha, вставьте приватный OAUTH_ACCESS_KEY и одобрите доступ. Не используйте здесь учётные данные Google OAuth-клиента.
Ключ одобрения используется только на странице авторизации. Claude получает ограниченный по объёму истекающий токен доступа и вращающийся refresh-токен; он никогда не получает ключ одобрения или статический bearer-токен.
Подключение клиента с bearer-токеном
Для MCP-клиента, поддерживающего пользовательские заголовки, используйте Streamable HTTP по адресу https://mcp.jensenabler.com/mcp с заголовком Authorization: Bearer <MCP_BEARER_TOKEN>. Статический токен не зависит от учётных данных OAuth Claude.
Приемочные вызовы
curl https://mcp.jensenabler.com/healthz
curl -i -X POST https://mcp.jensenabler.com/mcpДля проверки на уровне протокола используйте MCP Inspector с Streamable HTTP, URL https://mcp.jensenabler.com/mcp и либо его поток OAuth, либо заголовок запроса Authorization: Bearer <MCP_BEARER_TOKEN>.
This server cannot be deployed
Maintenance
Related MCP Connectors
Cross-session, cross-device memory for your agent: remember and recall notes. No key to start.
- memoryOAuthcom.leapmemory
Long-term memory for AI assistants. Isolated per-user storage, recall across conversations.
Persistent memory for AI assistants: store, search, and connect knowledge across conversations.
Gives your AI assistant persistent memory and intelligence about your work patterns.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to save and recall information from files or free-form notes using natural language, acting as a long-term memory system.93 PyPIMIT

JauMemory MCP Serverofficial
AlicenseAqualityCmaintenanceProvides persistent memory capabilities for AI assistants, enabling storage, recall, and analysis of information across conversations with intelligent memory management.2533 npmMIT- AlicenseAqualityDmaintenanceGives AI assistants a persistent memory across conversations, allowing them to remember user preferences, notes, and facts between chats.64 npmMIT
- AlicenseAqualityDmaintenanceEnables AI assistants to store, search, and manage memories, chat history, and uploaded files via the MemoryPlugin API.1317 npm1MIT