Skip to main content
Glama

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 разворачивает эту опубликованную ветку, а не неопубликованные локальные файлы.

  1. Внесите изменения в локальной рабочей копии и запустите npm test.

  2. Зафиксируйте изменения и отправьте main в GitHub.

  3. Из PowerShell запустите ./scripts/deploy-alpha.ps1.

Скрипт развертывания отказывается от грязного дерева, ветки не-main или локального коммита, отличающегося от origin/main. На Alpha он выполняет обновление только с перемоткой вперёд, устанавливает заблокированные производственные зависимости, перезапускает службу и проверяет локальную конечную точку здоровья. Состояние выполнения остаётся отдельным: учётные данные находятся в /etc/apocrypha.env, а журнал append-only, дерево сводок и состояние OAuth — в /var/lib/apocrypha; ни одно из них не является частью Git.

Авторизация Google (однократно, на ноутбуке)

  1. В Google Cloud включите Google Docs API и создайте настольный OAuth-клиент.

  2. Настройте экран согласия OAuth и опубликуйте его в Production. Если оставить его в Testing, refresh-токен истекает через семь дней.

  3. Добавьте http://127.0.0.1:53682/oauth2callback, если конфигурация клиента запрашивает авторизованный URI перенаправления.

  4. Запустите:

    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>.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers