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)Related MCP server: Bruin
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 UNSORTEDFormas de vencimiento:
hoyesta nochemañanavie3d2s4h8/212026-08-218/21 3pmvie 9am3pm. 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 conlist_messagesy responde consend_message.>prevalece sobre todo, por lo que un mensaje puede contener barras libremente.Comandos de barra. Una línea sin
/que leaquit(oexit) cierra la aplicación — la fila de chips cambia a un único chipQUIT PYREpara que puedas ver lo que hará Enter antes de confirmarlo. Todo lo que contenga una/es siempre una nota, así que/ quitaún archiva una nota.
Acción | Ratón | Teclado (nota enfocada) |
Marcar como hecha (apagar) | pasar el ratón → ✓ |
|
Editar en su lugar | pasar el ratón → ✎ |
|
Posponer 2h / resto del día (aplazar — nunca cambia la fecha de vencimiento) | pasar el ratón → ◐ / |
|
Liberar una nota anclada de vuelta a automático | pasar el ratón → ⇱ |
|
Eliminar | pasar el ratón → ✕ |
|
Mover (anclar) | arrastrarla | — |
Cancelar un arrastre |
| |
Nueva nota desde cualquier lugar |
| |
Archivo de hechas / 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 |
Hablar con el agente | botón | escribe |
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):
Variable de entorno
PYRE_DATA→ esa carpetaMarcador
pyre.portablejunto al ejecutable →.\pyre-data\.\pyre-data\junto al ejecutable ya existe y es escribible → portátil%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 |
Claude Code |
|
Claude Desktop | solo stdio por ahora — usa (b), o puentea con |
(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 |
|
Cursor |
|
Claude Code |
|
¿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. ElPyre.exeportátil de un solo archivo es un lanzador NSIS que extrae e inicia la aplicación real sin pasar stdio, por lo que--mcpno 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=1registra la actividad del almacenamiento/vigilante.PYRE_DEVTOOLS=1abre 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 contrareference/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.
reserveScreenSpaceregistra 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.jsonbajo un arraymessagesopcional, 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.tscongelaba la quema de una nota pospuesta hastabankedUntil(el futuro) y fallaba su propia prueba; el registro ahora llevabankedAty el frente se congela en la quema que tenía cuando comenzó el aplazamiento.
This server cannot be deployed
Maintenance
Related MCP Connectors
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
Shared memory and mail for your AI agents. Verified with Claude Code; other MCP clients in testing.
MCP-native notes and memory for ChatGPT, Claude, and other AI tools.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to create, read, and summarize sticky notes stored in a local text file through MCP tools, resources, and prompts.-
- AlicenseNot gradedqualityCmaintenanceMCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.5 npm2MIT
- AlicenseAqualityDmaintenanceEnables creating, reading, updating, and deleting sticky notes with persistent text file storage through the MCP protocol.4MIT
- AlicenseAqualityBmaintenanceA local MCP server that provides AI agents with persistent sticky-note memory, storing Markdown notes on disk and offering tools for creating, reading, updating, deleting, searching, and listing notes across sessions.13MIT