Skip to main content
Glama
MothBlight-Git

Pyre MCP Server

Pyre — brennende Desktop-Notizen

Eine rahmenlose, transparente, immer im Vordergrund liegende Leiste aus quadratischen Papiernotizen am Rand Ihres Monitors. Eine Notiz mit einem Fälligkeitsdatum brennt in den letzten zwei Stunden von unten weg. Ziehen Sie Notizen überall hin; brennende beanspruchen die obere linke Ecke, es sei denn, Sie haben sie selbst verschoben. Alles ist von einem KI-Agenten lesbar und beschreibbar. Ein tragbares Pyre.exe.

Bauvertrag: CLAUDE.md. Designdateien: reference/.


Ausführen

Portabel: Legen Sie Pyre.exe irgendwo hin und doppelklicken Sie darauf. Keine Installation, kein Administrator. Um die Daten neben der EXE zu behalten (USB-Stick, synchronisierter Ordner), erstellen Sie eine leere Datei namens pyre.portable daneben — oder erstellen Sie einfach einen pyre-data/-Ordner daneben.

Installiert: Pyre-Setup-x.y.z.exe fügt einen Startmenüeintrag hinzu. Daten befinden sich in %USERPROFILE%\.stickyburn\.

Aus dem Quellcode:

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)

Verwendung

Geben Sie in das Eingabefeld ein: topic / comment / due dann Enter.

  • winwater / send BEP to Powell / fri 9am

  • / just a thought → wird unter UNSORTED abgelegt

  • Fälligkeitsformate: today tonight tomorrow fri 3d 2w 4h 8/21 2026-08-21 8/21 3pm fri 9am 3pm. Standardzeit 17:00 (Einstellungen).

  • Drei Chips zeigen die Analyse live an. Der Fälligkeits-Chip zeigt immer das aufgelöste Datum, nie das, was Sie eingegeben haben. Wenn das letzte Segment kein Datum ist, bleibt es Teil des Kommentars.

  • Talk-Leiste. Eine Zeile, die mit > beginnt, ist eine Nachricht an den verbundenen Agenten und keine Notiz: > move winwater to friday. Sie erscheint in einer Leiste unter dem Composer, der Agent liest sie mit list_messages und antwortet mit send_message. > hat Vorrang vor allem, sodass eine Nachricht frei Schrägstriche enthalten darf.

  • Befehlszeile. Eine Zeile ohne /, die quit (oder exit) lautet, schließt die App – die Chip-Reihe wechselt zu einem einzelnen QUIT PYRE-Chip, damit Sie sehen, was Enter tun wird, bevor Sie sich festlegen. Alles, was ein / enthält, ist immer eine Notiz, also wird / quit trotzdem als Notiz abgelegt.

Aktion

Maus

Tastatur (Notiz fokussiert)

Als erledigt markieren (snuff)

hover → ✓

Ctrl+Enter

Direkt bearbeiten

hover → ✎

Enter

Zurückstellen 2h / Rest des Tages (Snooze – ändert nie das Fälligkeitsdatum)

hover → ◐ / Shift+click

B / Shift+B (erneut zum Entfernen der Zurückstellung)

Eine gepinnte Notiz wieder auf automatisch setzen

hover → ⇱

R

Löschen

hover → ✕

Delete

Verschieben (anheften)

drag it

Ziehen abbrechen

Esc

Neue Notiz von überall

Ctrl+Alt+N (global)

Erledigt-Archiv / Einstellungen

DONE / SETTINGS unter dem Eingabefeld

Ctrl+, für Einstellungen

Leiste in der Größe ändern (280–420)

drag its inner edge, or the slider in Settings

Fenster verschieben

drag the invisible 28px strip along its top

Beenden

tray icon → Pyre beenden

type quit or exit in the bar → Enter

Mit dem Agenten sprechen

TALK-Schaltfläche öffnet die Leiste

type > your message in the bar → Enter

Platzierungsregel. Automatische Notizen werden nach Hitze sortiert (heißeste oben links), dann datierte über undatierte, dann neueste. Eine Notiz, die Sie gezogen haben, behält ihre Zelle für immer – ein Feuer fließt um sie herum, vertreibt sie nie. Wenn eine gepinnte Notiz unterhalb der Falte Feuer fängt, erscheint unten rechts ein Glutpunkt; klicken Sie darauf, um dorthin zu scrollen.

Zustände. cold · warming (Fälligkeit gesetzt, > 2h entfernt; das Feuerlicht steigt über die letzten 24h) · due · burning · critical · overdue · gone-out (> 7 Tage überfällig) · banked.

Wo die Daten sind

Eine JSON-Datei, die in dieser Reihenfolge aufgelöst wird (erster Treffer gewinnt):

  1. PYRE_DATA-Umgebungsvariable → dieser Ordner

  2. pyre.portable-Markierung neben der EXE → .\pyre-data\

  3. .\pyre-data\ neben der EXE existiert bereits und ist beschreibbar → portabel

  4. %USERPROFILE%\.stickyburn\ → installiert

notes.json und settings.json leben dort zusammen. Settings → Data zeigt den genauen aufgelösten Pfad (und warnt, wenn ein portabler Speicherort nicht beschreibbar war und zurückgefallen wurde). Die Beschreibbarkeit wird mit einem echten Temp-Datei-Schreibvorgang getestet, weil USB-Sticks und gesperrte Unternehmensordner lügen.

Das Dateiformat ist der Vertrag (siehe 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 und state werden nie gespeichert – sie werden aus due und der Uhr bei jedem Takt abgeleitet.

KI-Zugriff

Zwei Wege, eine Datei, ein Beobachter.

1. Einfach die Datei bearbeiten

Richten Sie Claude Code (oder ein beliebiges Skript) auf notes.json. Schreibvorgänge werden innerhalb von ~300 ms erkannt und animieren an die Wand; die eigenen Schreibvorgänge der App sind atomar (.tmp → fsync → umbenennen), sodass eine halb geschriebene Datei nie gelesen wird. Geben Sie dem Agenten src/shared/types.ts als Schema.

2. Integrierter MCP-Server – zwei Transporte, gleiche Werkzeuge

Werkzeuge: list_notes (mit berechnetem burn/state/slot) · add_note · update_note · move_note · release_note · bank_note · snuff_note · restore_note · delete_note · parse_line (Probelauf der Grammatik) · get_grid (Belegungskarte + erste freie Zelle) · list_messages und send_message (die Talk-Leiste).

Die Talk-Leiste ist pull-basiert. Wenn der Benutzer > … eingibt, wird es in die Datei geschrieben und als wartend angezeigt, aber nichts schiebt es zu Ihnen – ein Agent sieht es, wenn er list_messages aufruft. Fragen Sie das zu Beginn einer Sitzung ab, oder immer wenn der Benutzer Pyre erwähnt. Die App und der MCP-Server teilen sich src/shared/heat.ts, sodass der burn eines Agenten genau das ist, was auf dem Bildschirm zu sehen ist.

Settings → KI-Zugriff zeigt beide Konfigurationen mit dem korrekten Pfad/Port und COPY-Schaltflächen.

(a) Lokaler HTTP-Endpunkt – funktioniert aus jedem Build, während die Leiste geöffnet ist, kein Node erforderlich

Die laufende App bietet streamable-HTTP MCP unter http://127.0.0.1:41777/mcp (Port in Settings; 0 = aus; nur Loopback).

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

Client

Wie

Cursor

einfügen in .cursor/mcp.json (Projekt) oder %USERPROFILE%\.cursor\mcp.json (global) — Cursor-Einstellungen → MCP

Claude Code

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

Claude Desktop

stdio nur heute – verwenden Sie (b), oder überbrücken Sie mit npx mcp-remote http://127.0.0.1:41777/mcp, wenn Sie Node haben

(b) stdio — Pyre.exe --mcp, funktioniert auch bei geschlossener Leiste

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

Client

Wo

Claude Desktop

%APPDATA%\Claude\claude_desktop_config.json (Einstellungen → Entwickler → Konfiguration bearbeiten)

Cursor

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

Claude Code

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

Welches Pyre.exe? Die Installations-Build und die Portable-Ordner-Build (Pyre-x.y.z-win.zip, überall entpacken) sind die echte Binärdatei und antworten auf stdio MCP. Das einzelne tragbare Pyre.exe ist ein NSIS-Launcher, der die echte App extrahiert und startet, ohne stdio durchzuleiten, daher kann --mcp nicht darüber funktionieren – Settings erkennt dies und zeigt nur die HTTP-Konfiguration. Ausführung aus dem Quellcode: command = node_modules\electron\dist\electron.exe, args = ["<repo path>", "--mcp"].

Barrierefreiheit

prefers-reduced-motion bietet eine vollständig alternative Darstellung (keine Übergänge, keine Glut, kein Flackern – vordere Position, Leuchten und der Countdown tragen die Lesbarkeit). Jede Notiz ist per Tab erreichbar mit allen Aktionen über Tasten; der zugängliche Name lautet etwa "WINWATER. Send BEP to Powell. Due in 6 minutes. Pinned to column 1, row 3."

Layout des Repositorys

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)

Entwicklerhinweise

  • PYRE_DEBUG=1 protokolliert Store/Watcher-Aktivität. PYRE_DEVTOOLS=1 öffnet DevTools. PYRE_DEBUG_DRIVER=<dir> aktiviert einen dateigesteuerten Debug-Treiber (scripts/drive.mjs), der Screenshots machen und das Live-Fenster skripten kann.

  • Das Ausführen des Renderers außerhalb von Electron (npx vite --config vite.config.mts) installiert eine In-Memory-Mock-Bridge mit Beispielnotizen in jedem Zustand – praktisch für visuelle Überprüfungen mit reference/note-example.html.

  • Entscheidungen zu den offenen Punkten der Spezifikation: 9A gone-out (nicht 9B stalled); 24h ambient warmth beibehalten; eine gepinnte Notiz wird nie automatisch freigegeben; keine Snuff-Bestätigung; einzelne Anzeige über Einstellungen.

  • reserveScreenSpace registriert die Leiste als Windows AppBar (über koffi → SHAppBarMessage), sodass maximierte Fenster an ihrer Kante stoppen. Zwei Dinge machen es knifflig und sind wissenswert, wenn Sie es anfassen: Die Reservierung muss vom Monitor-Rechteck berechnet werden, nicht vom Arbeitsbereich (der Ihre eigene Leiste bereits ausschließt, sodass sie über den Bildschirm wandert), und sie muss in physikalischen Pixeln erfolgen, nicht in Electrons DIPs. Der gesamte Pfad ist umschlossen, sodass ein FFI-Fehler nur bedeutet, dass die Einstellung nichts bewirkt.

  • Talk-Leiste-Nachrichten leben in derselben notes.json unter einem optionalen messages-Array, sodass der eine Watcher beides liefert. Eine Datei ohne den Schlüssel bleibt gültig und erhält ihn nur, wenn die Leiste zum ersten Mal verwendet wird.

  • Eine Korrektur zur ausgelieferten Spezifikation: spec/heat.ts frierte den Burn einer zurückgestellten Notiz ab bankedUntil (der Zukunft) ein und bestand seinen eigenen Test nicht; der Datensatz trägt jetzt bankedAt und die Front friert bei dem Burn ein, den sie beim Beginn der Zurückstellung hatte.

-
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