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 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 installed
Maintenance
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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