Skip to main content
Glama
MothBlight-Git

Pyre MCP Server

Pyre — горящие заметки на рабочем столе

Безрамная, прозрачная, всегда поверх окон панель из квадратных бумажных заметок на краю монитора. Заметка с дедлайном сгорает снизу в течение последних двух часов. Перетаскивайте заметки куда угодно; горящие занимают верхний левый угол, если вы не переместили их сами. Всё читаемо и записываемо ИИ-агентом. Один портативный Pyre.exe.

Контракт сборки: CLAUDE.md. Файлы дизайна: reference/.


Запуск

Портативный: поместите Pyre.exe куда угодно и дважды щёлкните. Никакой установки, никаких прав администратора. Чтобы данные хранились рядом с exe (USB-флешка, синхронизированная папка), создайте пустой файл с именем pyre.portable рядом с ним — или просто создайте папку pyre-data/ рядом.

Установленный: Pyre-Setup-x.y.z.exe добавляет запись в меню «Пуск». Данные хранятся в %USERPROFILE%\.stickyburn\.

Из исходников:

npm install
npm test          # 63 tests: burn curve, grid, parser, talk lane, store, MCP stdio + HTTP end-to-end
npm start         # build + launch
npm run dist      # release/Pyre.exe (single-file portable) · Pyre-Setup-*.exe (installer) · Pyre-*-win.zip (portable folder)

Использование

Введите в поле ввода: topic / comment / due затем Enter.

  • winwater / send BEP to Powell / fri 9am

  • / just a thought → сохраняется в UNSORTED

  • Формы срока: today tonight tomorrow fri 3d 2w 4h 8/21 2026-08-21 8/21 3pm fri 9am 3pm. Время по умолчанию 17:00 (настройки).

  • Три чипа показывают разбор в реальном времени. Чип срока всегда показывает разрешённую дату, а не то, что вы ввели. Если последний сегмент не является датой, он остаётся частью комментария.

  • Канал разговора. Строка, начинающаяся с >, является сообщением для подключённого агента, а не заметкой: > move winwater to friday. Она появляется в канале под компоновщиком, агент читает её с помощью list_messages и отвечает с помощью send_message. > переопределяет всё, поэтому сообщение может свободно содержать косые черты.

  • Команды строки. Строка без /, содержащая quit (или exit), закрывает приложение — строка чипов заменяется на единственный чип QUIT PYRE, чтобы вы могли видеть, что сделает Enter, прежде чем подтвердить. Всё, что содержит /, всегда является заметкой, поэтому / quit всё равно создаёт заметку.

Действие

Мышь

Клавиатура (фокус на заметке)

Отметить выполненным (потушить)

наведение → ✓

Ctrl+Enter

Редактировать на месте

наведение → ✎

Enter

Отложить на 2ч / остаток дня (отсрочка — никогда не меняет срок)

наведение → ◐ / Shift+щелчок

B / Shift+B (повторно для отмены отсрочки)

Освободить закреплённую заметку обратно в авто

наведение → ⇱

R

Удалить

наведение → ✕

Delete

Переместить (закрепить)

перетащить

Отменить перетаскивание

Esc

Новая заметка откуда угодно

Ctrl+Alt+N (глобально)

Архив выполненных / Настройки

DONE / SETTINGS под полем ввода

Ctrl+, для настроек

Изменить размер панели (280–420)

перетащите его внутренний край или ползунок в Настройках

Переместить окно

перетащите невидимую полоску 28px вдоль верхнего края

Выход

значок в трее → Выход из Pyre

введите quit или exit в строке → Enter

Разговор с агентом

кнопка TALK открывает канал

введите > ваше сообщение в строке → Enter

Правило размещения. Автоматические заметки сортируются по нагреву (самые горячие сверху слева), затем датированные выше недатированных, затем новые. Заметка, которую вы перетащили, занимает свою ячейку навсегда — огонь будет обтекать её, никогда не вытесняя. Если закреплённая заметка загорится ниже сгиба, в правом нижнем углу появляется точка-уголёк; нажмите на неё, чтобы прокрутить туда.

Состояния. холодная · прогревается (срок установлен, > 2ч; свечение разгорается за последние 24ч) · срок · горит · критическое · просрочено · погасшая (> 7 дней просрочки) · отложенная.

Где находятся данные

Один JSON-файл, разрешаемый в таком порядке (первый совпавший выигрывает):

  1. Переменная окружения PYRE_DATA → эта папка

  2. Маркер pyre.portable рядом с exe → .\pyre-data\

  3. .\pyre-data\ рядом с exe уже существует и доступно для записи → портативный

  4. %USERPROFILE%\.stickyburn\ → установленный

notes.json и settings.json находятся вместе там. Настройки → Данные показывает точный разрешённый путь (и предупреждает, если портативное расположение не было доступно для записи и произошёл откат). Доступность для записи проверяется реальной записью временного файла, потому что USB-флешки и заблокированные корпоративные папки могут врать.

Формат файла — это контракт (см. src/shared/types.ts):

{
  "version": 2,
  "notes": [{
    "id": "n_8f2k4a", "topic": "WINWATER", "comment": "Send BEP to Powell",
    "due": "2026-08-21T22:00:00.000Z",          // ISO UTC or null
    "created": "…", "updated": "…", "done": false, "doneAt": null,
    "bankedUntil": null, "bankedAt": null,      // snooze; never touches due
    "placement": { "mode": "auto" },            // or { "mode":"manual", "col":0, "row":2, "pinnedAt":"…" }
    "source": "user"                            // "agent" draws a 2px tick on the left edge
  }],
  "messages": [{                                // optional; the talk lane
    "id": "m_4k2p9a", "role": "user",           // "user" | "agent"
    "text": "move winwater to friday",
    "created": "…", "read": false               // read = the OTHER side has seen it
  }]
}

burn, warmth и state никогда не сохраняются — они вычисляются из due и часов каждый тик.

Доступ ИИ

Два пути, один файл, один наблюдатель.

1. Просто редактируйте файл

Направьте Claude Code (или любой скрипт) на notes.json. Записи подхватываются в течение ~300 мс и анимируются на стене; собственные записи приложения атомарны (.tmp → fsync → переименование), так что файл, записанный наполовину, никогда не читается. Дайте агенту src/shared/types.ts как схему.

2. Встроенный MCP-сервер — два транспорта, одни и те же инструменты

Инструменты: list_notes (с вычисленными burn/state/slot) · add_note · update_note · move_note · release_note · bank_note · snuff_note · restore_note · delete_note · parse_line (пробный прогон грамматики) · get_grid (карта занятости + первая свободная ячейка) · list_messages и send_message (канал разговора).

Канал разговора работает по принципу pull. Когда пользователь вводит > …, это записывается в файл и отображается как ожидающее, но ничего не отправляется вам — агент видит это, когда вызывает list_messages. Опрашивайте это в начале сеанса или всякий раз, когда пользователь упоминает Pyre. Приложение и MCP-сервер используют общий src/shared/heat.ts, поэтому burn агента в точности соответствует тому, что на экране.

Настройки → Доступ ИИ показывает обе конфигурации с правильным путём/портом и кнопками КОПИРОВАТЬ.

(а) Локальная HTTP-конечная точка — работает из любой сборки, пока панель открыта, Node не требуется

Запущенное приложение предоставляет streamable-HTTP MCP по адресу http://127.0.0.1:41777/mcp (порт в Настройках; 0 = выкл; только loopback).

{ "mcpServers": { "pyre": { "url": "http://127.0.0.1:41777/mcp" } } }

Клиент

Как

Cursor

вставьте в .cursor/mcp.json (проект) или %USERPROFILE%\.cursor\mcp.json (глобально) — Cursor Settings → MCP

Claude Code

claude mcp add --transport http pyre http://127.0.0.1:41777/mcp

Claude Desktop

только stdio на сегодня — используйте (б), или мост с npx mcp-remote http://127.0.0.1:41777/mcp если у вас есть Node

(б) stdio — Pyre.exe --mcp, работает даже когда панель закрыта

{ "mcpServers": { "pyre": { "command": "C:\\path\\to\\Pyre.exe", "args": ["--mcp"] } } }

Клиент

Где

Claude Desktop

%APPDATA%\Claude\claude_desktop_config.json (Настройки → Разработчик → Редактировать конфиг)

Cursor

.cursor/mcp.json / ~/.cursor/mcp.json

Claude Code

claude mcp add pyre -- "C:\path\to\Pyre.exe" --mcp

Какой Pyre.exe? Установочная сборка и сборка портативной папки (Pyre-x.y.z-win.zip, распакуйте куда угодно) являются настоящим бинарным файлом и отвечают на stdio MCP. Однофайловый портативный Pyre.exe — это загрузчик NSIS, который извлекает и запускает настоящее приложение без передачи stdio, поэтому --mcp не может работать через него — Настройки обнаруживают это и показывают только HTTP-конфигурацию. Запуск из исходников: command = node_modules\electron\dist\electron.exe, args = ["<repo path>", "--mcp"].

Доступность

prefers-reduced-motion даёт полную альтернативную презентацию (без переходов, без угольков, без мерцания — переднее положение, свечение и обратный отсчёт несут информацию). Каждая заметка доступна через Tab со всеми действиями на клавишах; доступное имя читается как «WINWATER. Send BEP to Powell. Due in 6 minutes. Pinned to column 1, row 3.»

Структура репозитория

src/main       Electron main: window, tray, hotkey, paths, store (atomic + watcher), IPC, --mcp branch
src/preload    contextBridge → window.pyre
src/renderer   plain TS + CSS: grid, drag, composer, sheets, embers  (styles/burn-system.css is verbatim, do not edit)
src/shared     heat.ts (THE burn curve) · grid.ts (THE placement rule) · parse.ts (THE grammar) · types · migrate
src/mcp        stdio MCP server (imports the shared modules + the store)
test           vitest: pyre (spec), parse, store, mcp
reference/     the approved design files, kept for comparison
scripts/       dev helpers (debug driver client, icon)

Заметки для разработчиков

  • PYRE_DEBUG=1 логирует активность хранилища/наблюдателя. PYRE_DEVTOOLS=1 открывает DevTools. PYRE_DEBUG_DRIVER=<dir> включает файловый отладочный драйвер (scripts/drive.mjs), который может делать снимки экрана и скриптовать активное окно.

  • Запуск рендерера вне Electron (npx vite --config vite.config.mts) устанавливает в памяти мост-заглушку с примерами заметок во всех состояниях — удобно для визуальной проверки по reference/note-example.html.

  • Решения по открытым пунктам спецификации: 9A погасшая (не 9B застопоренная); 24-часовое фоновое тепло сохранено; закреплённая заметка никогда не освобождается автоматически; без подтверждения тушения; один дисплей через настройки.

  • reserveScreenSpace регистрирует панель как Windows AppBar (через koffi → SHAppBarMessage), поэтому развёрнутые окна останавливаются у её края. Две вещи делают это сложным и стоит знать, если вы с этим работаете: резервирование должно вычисляться из прямоугольника монитора, а не рабочей области (которая уже исключает вашу собственную панель, так что она смещается по экрану), и оно должно быть в физических пикселях, а не в DIP-ах Electron. Весь путь обёрнут, так что неудача FFI означает только то, что настройка ничего не делает.

  • Сообщения канала разговора живут в том же notes.json в необязательном массиве messages, поэтому один наблюдатель доставляет оба. Файл без ключа остаётся валидным и получает его только при первом использовании канала.

  • Одно исправление к shipped-спецификации: spec/heat.ts замораживал сгорание отложенной заметки на момент bankedUntil (будущее) и не проходил свой собственный тест; запись теперь содержит bankedAt, и фронт замораживается на уровне сгорания, который был на момент начала отсрочки.

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
2Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.

  • Cross-session, cross-device memory for your agent: remember and recall notes. No key to start.

  • StremAI MCP: shared memory for AI coding agents. Connected agents can recall. OAuth + local stdio.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MothBlight-Git/pyre'

If you have feedback or need assistance with the MCP directory API, please join our Discord server