Skip to main content
Glama
MothBlight-Git

Pyre MCP Server

Pyre — 燃え尽きるデスクトップメモ

モニターの端に表示される、枠なし・透明・常に最前面の正方形の紙メモのレール。期限のあるメモは、残り2時間で下端から燃え尽きていきます。メモはどこにでもドラッグ可能。燃えているメモは、自分で移動しない限り左上に固定されます。すべてのメモはAIエージェントから読み取り・書き込み可能。単一のポータブル Pyre.exe。

ビルド契約: CLAUDE.md。デザインファイル: reference/。


実行方法

ポータブル: Pyre.exe を任意の場所に置いてダブルクリック。インストール不要、管理者権限不要。データをexeの隣に置きたい場合(USBメモリや同期フォルダ)、exeの隣に空のファイル 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)

Related MCP server: Bruin

使い方

入力ボックスに トピック / コメント / 期限 と入力し、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(設定で変更可)。

  • 3つのチップが解析結果をライブプレビューします。期限チップは常に 解決された日付 を表示し、入力した文字列は表示されません。最後のセグメントが日付でない場合は、コメントの一部として残ります。

  • トークレーン。 > で始まる行は、メモではなく接続されたエージェントへのメッセージとして扱われます: > move winwater to friday。これはコンポーザーの下のレーンに表示され、エージェントは list_messages で読み取り、send_message で応答します。> はすべてに優先するため、メッセージにはスラッシュを自由に含めることができます。

  • バーコマンド。 / を含まない行で quit(または exit)と入力するとアプリが閉じます — チップ行が単一の QUIT PYRE チップに変わり、実行前に何が起こるか確認できます。/ を含むものは常にメモとして扱われるため、/ quit でもメモとして保存されます。

アクション

マウス

キーボード(メモにフォーカス時)

完了(消火)

ホバー → ✓

Ctrl+Enter

その場で編集

ホバー → ✎

Enter

2時間/残り時間を保留(スヌーズ — 期限は変更されません)

ホバー → ◐ / Shift+クリック

B / Shift+B(再度押すと解除)

固定されたメモを自動配置に戻す

ホバー → ⇱

R

削除

ホバー → ✕

Delete

移動(固定)

ドラッグ

—

ドラッグキャンセル

Esc

どこからでも新規メモ

Ctrl+Alt+N(グローバル)

完了アーカイブ/設定

入力ボックス下の DONE / SETTINGS

Ctrl+, で設定

レールの幅を変更(280–420)

内側の端をドラッグ、または設定のスライダー

ウィンドウを移動

上部の見えない28pxのストリップをドラッグ

終了

トレイアイコン → Quit Pyre

バーに quit または exit と入力 → Enter

エージェントと会話

TALK ボタンでレーンを開く

バーに > your message と入力 → Enter

配置ルール。 自動メモは熱順(最も熱いものが左上)、次に期限ありが期限なしより上、新しいものが上に並びます。ドラッグしたメモはそのセルに永久に留まり、火はその周りを流れ、追い出すことはありません。固定されたメモが折り返しより下で燃えている場合、右下に炭のピップが表示され、クリックするとそこにスクロールします。

状態。 cold · warming(期限設定済み、残り2時間以上;最後の24時間で火の光が徐々に強まる) · due · burning · critical · overdue · gone-out(期限超過7日以上) · banked。

データの保存場所

1つのJSONファイル。以下の順序で解決されます(最初に見つかったものが優先):

  1. PYRE_DATA 環境変数 → そのフォルダ

  2. exeの隣に pyre.portable マーカー → .\pyre-data\

  3. exeの隣に .\pyre-data\ が既に存在し書き込み可能 → ポータブル

  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 と時計から毎ティック導出されます。

AIアクセス

2つのパス、1つのファイル、1つのウォッチャー。

1. ファイルを直接編集

Claude Code(または任意のスクリプト)で notes.json を指定します。書き込みは約300ms以内に検出され、壁にアニメーション表示されます。アプリ自身の書き込みはアトミック(.tmp → fsync → rename)なので、中途半端なファイルが読み込まれることはありません。エージェントには src/shared/types.ts をスキーマとして渡してください。

2. 組み込みMCPサーバー — 2つのトランスポート、同じツール

ツール: 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(トークレーン)。

トークレーンはプルベースです。 ユーザーが > … と入力するとファイルに書き込まれ、待機中として表示されますが、プッシュはされません — エージェントは list_messages を呼び出したときにそれを確認します。セッションの開始時、またはユーザーがPyreに言及したときにポーリングしてください。アプリとMCPサーバーは src/shared/heat.ts を共有しているため、エージェントの burn は画面上のものと完全に一致します。

設定 → AIアクセス で両方の設定が正しいパス/ポートとコピーボタン付きで表示されます。

(a) ローカルHTTPエンドポイント — レールが開いている間、どのビルドからでも動作、Node不要

実行中のアプリは、http://127.0.0.1:41777/mcp でストリーム可能なHTTP MCPを提供します(ポートは設定で変更可能、0 = オフ、ループバックのみ)。

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

クライアント

方法

Cursor

.cursor/mcp.json(プロジェクト)または %USERPROFILE%\.cursor\mcp.json(グローバル)に貼り付け — Cursor設定 → MCP

Claude Code

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

Claude Desktop

現時点ではstdioのみ — (b)を使用するか、Nodeがある場合は npx mcp-remote http://127.0.0.1:41777/mcp でブリッジ

(b) 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. 期限まで6分. 列1、行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 gone-out(9B stalledではない); 24時間の周囲暖かさを維持; 固定されたメモは自動解放されない; 消火確認なし; 設定による単一ディスプレイ。

  • reserveScreenSpace はレールをWindows AppBarとして登録します(koffi → SHAppBarMessage)。これにより、最大化されたウィンドウがレールの端で停止します。2つの点が扱いを難しくしており、触る場合は知っておく価値があります: 予約はモニター矩形から計算する必要がある(ワークエリアは既に自身のバーを除外しているため、画面を横切って移動する)、そして物理ピクセルで指定する必要がある(ElectronのDIPではない)。パス全体がラップされているため、FFIの失敗は設定が何もしないことを意味するだけです。

  • トークレーンのメッセージは同じ notes.json のオプションの messages 配列に保存されるため、1つのウォッチャーが両方を配信します。キーがないファイルは有効なままで、レーンが最初に使用されたときにのみキーが追加されます。

  • 出荷された仕様に対する1つの修正: spec/heat.ts は、bankedメモのburnを bankedUntil(未来)で固定し、自身のテストに失敗していました。現在はレコードに bankedAt が含まれ、フロントはバンキング開始時のburnで固定されます。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.
    5 npm
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables creating, reading, updating, and deleting sticky notes with persistent text file storage through the MCP protocol.
    4
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    A 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.
    13
    MIT