Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 36 additions & 6 deletions docs/0-requirements.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,25 @@ GitHub ──POST──> Cloudflare Tunnel ──> FastAPI :8080 ──persist
| ^
| |
MCP Server (stdio) ──read/write direct trigger queue
Python or Node.js |
^ |
| |
AI Agent (Codex / Claude) optional trigger command
```

二つのプロセスモードを持つ単一エントリポイント:
- `python main.py webhook` — HTTP 受信サーバー
- `python main.py mcp` — MCP ツールサーバー
システムは二つのコンポーネントで構成される:

Webhook モードは、イベント永続化に加えて optional な direct trigger queue を持つ。
trigger command が設定されている場合、保存済みイベントごとに直列実行される。
1. **Webhook 受信サーバー(Python)** — `python main.py webhook`
- HTTP 受信、イベント永続化、optional な direct trigger queue を担当
- trigger command が設定されている場合、保存済みイベントごとに直列実行される

2. **MCP ツールサーバー** — 二つの実装が存在する:
- **Python 実装:** `python main.py mcp`
- **Node.js 実装:** `mcp-server/` ディレクトリ(`npx github-webhook-mcp` または MCPB 経由)

両 MCP 実装は同一の events.json を読み書きし、同一の5ツールを提供する。
Python 実装は webhook 受信サーバーと同一エントリポイントで起動する。
Node.js 実装は独立パッケージとして配布される(MCPB: Claude Desktop 向け、npx: Codex 向け)。

## Functional Requirements

Expand Down Expand Up @@ -99,6 +107,8 @@ trigger command が設定されている場合、保存済みイベントごと

### F4. MCP ツール

Python 実装と Node.js 実装の両方が、以下の同一ツールセットを提供する。

| ID | ツール名 | 引数 | 戻り値 | 要件 |
|----|---------|------|--------|------|
| F4.1 | `get_pending_status` | なし | pending_count, latest_received_at, types | 未処理イベントの軽量スナップショットを返す |
Expand Down Expand Up @@ -191,8 +201,10 @@ trigger command が設定されている場合、保存済みイベントごと
| N2.4 | trigger command | `--trigger-command` / `WEBHOOK_TRIGGER_COMMAND` | なし |
| N2.5 | trigger working directory | `--trigger-cwd` / `WEBHOOK_TRIGGER_CWD` | なし |
| N2.6 | success 時に pending を維持するか | `--keep-pending-on-trigger-success` | false |
| N2.7 | events.json パス(Node.js MCP) | `EVENTS_JSON_PATH` | `mcp-server/../events.json` |

優先順位: CLI 引数 > 環境変数 > デフォルト
Node.js MCP サーバーは環境変数のみで構成する(CLI 引数なし)。

### N3. 制約

Expand All @@ -205,26 +217,44 @@ trigger command が設定されている場合、保存済みイベントごと

## Dependencies

### Python(webhook 受信 + MCP サーバー)

| パッケージ | バージョン | 用途 |
|-----------|-----------|------|
| fastapi | >=0.110.0 | HTTP サーバーフレームワーク |
| uvicorn | >=0.29.0 | ASGI アプリケーションサーバー |
| mcp | >=1.0.0 | Model Context Protocol SDK |
| python-dotenv | >=1.0.0 | 環境変数ロード |

### Node.js(MCP サーバー)

| パッケージ | バージョン | 用途 |
|-----------|-----------|------|
| @modelcontextprotocol/sdk | ^1.0.0 | MCP SDK |
| iconv-lite | ^0.6.3 | レガシーエンコーディング対応 |
| zod | ^3.22.0 | スキーマバリデーション |

Node.js >= 18.0.0 が必要。

## Infrastructure

| コンポーネント | 用途 |
|---------------|------|
| Cloudflare Tunnel | GitHub からのインバウンド HTTPS を localhost に転送 |
| GitHub Webhook | イベント送信元 |
| optional trigger command | 保存済みイベントごとの direct reaction |
| MCPB | Claude Desktop 向け Node.js MCP サーバー配布 |
| npx | Codex 向け Node.js MCP サーバー配布 |

## Files

| パス | 用途 |
|-----|------|
| `events.json` | 永続化された webhook イベント本体 |
| `trigger-events/<event-id>.json` | trigger command に渡す保存済みイベント JSON |
| `main.py` | webhook receiver / MCP server / direct trigger queue |
| `main.py` | webhook receiver / Python MCP server / direct trigger queue |
| `codex_reaction.py` | Codex direct execution / resume / notify-only fallback helper |
| `mcp-server/server/index.js` | Node.js MCP サーバー エントリポイント |
| `mcp-server/server/event-store.js` | Node.js イベントストア(events.json 読み書き) |
| `mcp-server/package.json` | Node.js パッケージ定義(npx 配布用) |
| `mcp-server/manifest.json` | MCPB マニフェスト(Claude Desktop 配布用) |
Loading