Skip to main content
Glama
MothBlight-Git

Pyre MCP Server

Pyre — notas ardientes de escritorio

Una barra sin marco, transparente y siempre visible, de notas cuadradas de papel en el borde de tu monitor. Una nota con fecha límite se quema por su borde inferior en las últimas dos horas. Arrastra notas a cualquier lugar; las que se están quemando ocupan la esquina superior izquierda a menos que las muevas tú mismo. Todo es legible y escribible por un agente de IA. Un Pyre.exe portátil.

Contrato de compilación: CLAUDE.md. Archivos de diseño: reference/.


Ejecutarlo

Portátil: coloca Pyre.exe en cualquier lugar y haz doble clic. Sin instalación, sin permisos de administrador. Para mantener los datos junto al ejecutable (memoria USB, carpeta sincronizada), crea un archivo vacío llamado pyre.portable a su lado — o simplemente crea una carpeta pyre-data/ a su lado.

Instalado: Pyre-Setup-x.y.z.exe añade una entrada en el Menú Inicio. Los datos residen en %USERPROFILE%\.stickyburn\.

Desde el código fuente:

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)

Usarlo

Escribe en el cuadro de entrada: tema / comentario / vence luego Enter.

  • winwater / enviar BEP a Powell / vie 9am

  • / solo un pensamiento → se archiva bajo UNSORTED

  • Formas de vencimiento: hoy esta noche mañana vie 3d 2s 4h 8/21 2026-08-21 8/21 3pm vie 9am 3pm. Hora predeterminada 17:00 (ajustes).

  • Tres chips muestran en vivo el análisis sintáctico. El chip de vencimiento siempre muestra la fecha resuelta, nunca lo que escribiste. Si el último segmento no es una fecha, sigue siendo parte del comentario.

  • Carril de conversación. Una línea que comienza con > es un mensaje para el agente conectado, no una nota: > mover winwater a viernes. Aparece en un carril debajo del compositor, el agente lo lee con list_messages y responde con send_message. > prevalece sobre todo, por lo que un mensaje puede contener barras libremente.

  • Comandos de barra. Una línea sin / que lea quit (o exit) cierra la aplicación — la fila de chips cambia a un único chip QUIT PYRE para que puedas ver lo que hará Enter antes de confirmarlo. Todo lo que contenga una / es siempre una nota, así que / quit aún archiva una nota.

Acción

Ratón

Teclado (nota enfocada)

Marcar como hecha (apagar)

pasar el ratón → ✓

Ctrl+Enter

Editar en su lugar

pasar el ratón → ✎

Enter

Posponer 2h / resto del día (aplazar — nunca cambia la fecha de vencimiento)

pasar el ratón → ◐ / Shift+clic

B / Shift+B (de nuevo para des-posponer)

Liberar una nota anclada de vuelta a automático

pasar el ratón → ⇱

R

Eliminar

pasar el ratón → ✕

Delete

Mover (anclar)

arrastrarla

Cancelar un arrastre

Esc

Nueva nota desde cualquier lugar

Ctrl+Alt+N (global)

Archivo de hechas / Ajustes

DONE / SETTINGS debajo del cuadro de entrada

Ctrl+, para ajustes

Redimensionar la barra (280–420)

arrastrar su borde interior, o el control deslizante en Ajustes

Mover la ventana

arrastrar la franja invisible de 28px en su parte superior

Salir

icono de bandeja → Quit Pyre

escribe quit o exit en la barra → Enter

Hablar con el agente

botón TALK abre el carril

escribe > tu mensaje en la barra → Enter

Regla de colocación. Las notas automáticas se ordenan por calor (la más caliente arriba a la izquierda), luego las fechadas antes que las sin fecha, luego las más nuevas. Una nota que arrastraste conserva su celda para siempre — un fuego fluirá a su alrededor, nunca la desalojará. Si una nota anclada se incendia por debajo del pliegue, aparece un punto de ascua abajo a la derecha; haz clic en él para desplazarte hasta allí.

Estados. fría · calentándose (fecha límite fijada, > 2h restantes; la luz del fuego aumenta en las últimas 24h) · vencida · ardiendo · crítica · atrasada · apagada (> 7 días de retraso) · pospuesta.

Dónde están los datos

Un archivo JSON, resuelto en este orden (el primero encontrado gana):

  1. Variable de entorno PYRE_DATA → esa carpeta

  2. Marcador pyre.portable junto al ejecutable → .\pyre-data\

  3. .\pyre-data\ junto al ejecutable ya existe y es escribible → portátil

  4. %USERPROFILE%\.stickyburn\ → instalado

notes.json y settings.json viven juntos allí. Ajustes → Datos muestra la ruta exacta resuelta (y advierte si una ubicación portátil no era escribible y se usó la alternativa). La capacidad de escritura se prueba con una escritura real de archivo temporal, porque las memorias USB y las carpetas corporativas bloqueadas mienten.

El formato del archivo es el contrato (ver 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 y state nunca se almacenan — se derivan de due y el reloj en cada tic.

Acceso para IA

Dos caminos, un archivo, un vigilante.

1. Simplemente editar el archivo

Apunta Claude Code (o cualquier script) a notes.json. Las escrituras se detectan en ~300 ms y se animan en la pared; las escrituras propias de la aplicación son atómicas (.tmp → fsync → renombrar), por lo que nunca se lee un archivo a medio escribir. Proporciona al agente src/shared/types.ts como esquema.

2. Servidor MCP integrado — dos transportes, mismas herramientas

Herramientas: list_notes (con quema/estado/casilla calculados) · add_note · update_note · move_note · release_note · bank_note · snuff_note · restore_note · delete_note · parse_line (ejecución en seco de la gramática) · get_grid (mapa de ocupación + primera celda libre) · list_messages y send_message (el carril de conversación).

El carril de conversación es basado en extracción. Cuando el usuario escribe > … se escribe en el archivo y se muestra como en espera, pero nada lo envía a ti — un agente lo ve cuando llama a list_messages. Sondea eso al inicio de una sesión, o cuando el usuario mencione Pyre. La aplicación y el servidor MCP comparten src/shared/heat.ts, por lo que el burn de un agente es exactamente lo que está en la pantalla.

Ajustes → Acceso para IA muestra ambas configuraciones con la ruta/puerto correctos y botones COPIAR.

(a) Endpoint HTTP local — funciona desde cualquier compilación mientras la barra esté abierta, no necesita Node

La aplicación en ejecución sirve MCP HTTP transmisible en http://127.0.0.1:41777/mcp (puerto en Ajustes; 0 = desactivado; solo loopback).

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

Cliente

Cómo

Cursor

pegar en .cursor/mcp.json (proyecto) o %USERPROFILE%\.cursor\mcp.json (global) — Cursor Settings → MCP

Claude Code

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

Claude Desktop

solo stdio por ahora — usa (b), o puentea con npx mcp-remote http://127.0.0.1:41777/mcp si tienes Node

(b) stdio — Pyre.exe --mcp, funciona incluso cuando la barra está cerrada

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

Cliente

Dónde

Claude Desktop

%APPDATA%\Claude\claude_desktop_config.json (Ajustes → Desarrollador → Editar Config)

Cursor

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

Claude Code

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

¿Qué Pyre.exe? La compilación del instalador y la compilación de carpeta portátil (Pyre-x.y.z-win.zip, descomprimir en cualquier lugar) son el binario real y responden a stdio MCP. El Pyre.exe portátil de un solo archivo es un lanzador NSIS que extrae e inicia la aplicación real sin pasar stdio, por lo que --mcp no puede funcionar a través de él — Ajustes lo detecta y muestra solo la configuración HTTP. Ejecutando desde el código fuente: command = node_modules\electron\dist\electron.exe, args = ["<ruta del repo>", "--mcp"].

Accesibilidad

prefers-reduced-motion ofrece una presentación alternativa completa (sin transiciones, sin ascuas, sin parpadeo — la posición frontal, el resplandor y la cuenta regresiva transmiten la lectura). Cada nota es accesible con Tab con todas las acciones en teclas; el nombre accesible suena como "WINWATER. Enviar BEP a Powell. Vence en 6 minutos. Anclada a la columna 1, fila 3."

Estructura del repositorio

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)

Notas de desarrollo

  • PYRE_DEBUG=1 registra la actividad del almacenamiento/vigilante. PYRE_DEVTOOLS=1 abre las herramientas de desarrollo. PYRE_DEBUG_DRIVER=<dir> habilita un controlador de depuración basado en archivos (scripts/drive.mjs) que puede tomar capturas de pantalla y scriptear la ventana en vivo.

  • Ejecutar el renderizador fuera de Electron (npx vite --config vite.config.mts) instala un puente simulado en memoria con notas de muestra en cada estado — útil para comprobaciones visuales contra reference/note-example.html.

  • Decisiones tomadas sobre los puntos abiertos del documento de especificación: 9A apagado (no 9B estancado); se mantiene el calor ambiente de 24h; una nota anclada nunca se libera automáticamente; sin confirmación de apagado; pantalla única mediante ajustes.

  • reserveScreenSpace registra la barra como AppBar de Windows (a través de koffi → SHAppBarMessage), por lo que las ventanas maximizadas se detienen en su borde. Dos cosas lo hacen complicado y vale la pena saberlo si lo tocas: la reserva debe calcularse a partir del rectángulo del monitor, no del área de trabajo (que ya excluye tu propia barra, por lo que se desplaza por la pantalla), y debe estar en píxeles físicos, no los DIP de Electron. Todo el camino está encapsulado para que un fallo de FFI solo signifique que la configuración no hace nada.

  • Los mensajes del carril de conversación viven en el mismo notes.json bajo un array messages opcional, por lo que el único vigilante entrega ambos. Un archivo sin la clave sigue siendo válido y solo la adquiere cuando se usa el carril por primera vez.

  • Una corrección a la especificación enviada: spec/heat.ts congelaba la quema de una nota pospuesta hasta bankedUntil (el futuro) y fallaba su propia prueba; el registro ahora lleva bankedAt y el frente se congela en la quema que tenía cuando comenzó el aplazamiento.

-
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