summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authortanaka takashi <isazaka@gmail.com>2026-09-12 20:40:07 +0900
committertanaka takashi <isazaka@gmail.com>2026-09-12 20:40:07 +0900
commit4f3f548b1b55d4c7477250fc3373b3bd6d0d397f (patch)
tree5688ea7fa04af051055323e316e53533b9db6193 /doc
parentcc6165947a82d2182df8accbc7b4adfe2606db9e (diff)
streamable-httpトランスポート対応を追加
MCP SDK 2.xのMCPServer.run(transport="streamable-http")を使い、stdioに 加えてStreamable HTTPトランスポートで起動できるようにする。SSEはMCP仕様で 非推奨のため選択肢から除外し、transport enumはstdioとstreamable-httpの 2種類のみとした。 transportの選択はTOML [server] tableで指定し、CLI引数は追加しない。 仕様の「CLI上書きを行わない」「TOML集約」原則に準拠する。[server]省略時は stdio(後方互換)、streamable-http時はhost=127.0.0.1 port=8000を既定値とする。 変更内容: - config.py: ServerConfig dataclass、VALID_TRANSPORTS定数、AppConfig.server フィールド、load_configの[server]読込・validation追加 - cli.py: main()でconfig.server.transportに応じたrun()引数分岐 - tests/conftest.py: app_config fixtureにserver=ServerConfig()追加 - tests/test_config.py: [server]の正常系・異常系・境界値テスト追加 (省略時stdio既定値、streamable-http読込、sse/http/ws/unknown拒否、 port境界値0/65536/-1/文字列、host空文字拒否) - doc/config.md: [server]セクション追記、設定項目一覧表更新 - config.example.toml: [server]コメント例追記 - doc/Specifications.md: スコープ表にMCPトランスポート行追加 - doc/Design.md: 責務表と起動フロー更新 - doc/mcp.md: 概要のtransport記載更新 - README.md: streamable-http起動例追記 - script/smoke_streamable_http.py: streamable-http経由の検証スクリプト追加 検証: - ruff format/check、pyright 0 errors、pytest 50 passed - 実GPU・実モデルでstreamable-http経由generate_imageの全ルート確認 (HTTP接続→MCP initialize→tools/list→tools/call→PNG生成・返却) - 生成結果: 335KB PNG、512x512、20 steps、CFG 7.0
Diffstat (limited to 'doc')
-rw-r--r--doc/Design.md4
-rw-r--r--doc/Specifications.md1
-rw-r--r--doc/config.md47
-rw-r--r--doc/mcp.md4
4 files changed, 52 insertions, 4 deletions
diff --git a/doc/Design.md b/doc/Design.md
index 96eb505..ede063c 100644
--- a/doc/Design.md
+++ b/doc/Design.md
@@ -89,7 +89,7 @@ mcp-sd15/
| モジュール | 責務 |
|---|---|
-| `cli.py` | `--config`, `--version`の処理 |
+| `cli.py` | `--config`, `--version`の処理、transport起動分岐 |
| `server.py` | MCP server起動、Tool登録 |
| `config.py` | TOML読込、型変換、validation |
| `schema.py` | MCP入力値・内部request型 |
@@ -117,7 +117,7 @@ mcp-sd15/
| 9 | LoRAを順次ロード |
| 10 | GPUへ配置 |
| 11 | MCP Toolを公開 |
-| 12 | リクエスト待受開始 |
+| 12 | `[server].transport`に従いstdioまたはstreamable-httpでリクエスト待受開始 |
モデル構成の初期化に失敗した場合はToolを公開せず、プロセスを異常終了する。
diff --git a/doc/Specifications.md b/doc/Specifications.md
index 1b98f96..db59c28 100644
--- a/doc/Specifications.md
+++ b/doc/Specifications.md
@@ -27,6 +27,7 @@ LLM側には生成意図に必要な最小限の入力のみを公開し、モãƒ
| バッチ生成 | 1枚固定 |
| 同時生成 | 1ジョブのみ |
| 出力形式 | PNG |
+| MCPトランスポート | `stdio`、`streamable-http` |
---
diff --git a/doc/config.md b/doc/config.md
index 804fbf8..48142dc 100644
--- a/doc/config.md
+++ b/doc/config.md
@@ -56,6 +56,9 @@ uv run mcp-sd15 --config C:\path\to\config.toml
| `controlnet.inpaint.model` | string | 有効時 | なし |
| `output.enabled` | boolean | No | `false` |
| `output.directory` | string | No | `./outputs` |
+| `server.transport` | string enum | No | `stdio` |
+| `server.host` | string | No | `127.0.0.1` |
+| `server.port` | integer | No | `8000` |
## 4. `[model]`
@@ -248,6 +251,50 @@ directory = "./outputs"
| `enabled` | `true`で保存、`false`でMCP返却のみ。既定値`false` |
| `directory` | 保存先。既定値`./outputs` |
+## 9. `[server]`
+
+MCPトランスポートとHTTP待受アドレスを指定する。table自体を省略した場合は
+`stdio`トランスポートになる。
+
+```toml
+[server]
+transport = "stdio"
+```
+
+streamable-httpトランスポートを使う場合は次のように指定する。
+
+```toml
+[server]
+transport = "streamable-http"
+host = "127.0.0.1"
+port = 8000
+```
+
+### `transport`
+
+次の値だけを指定できる。
+
+| 値 | 動作 |
+|---|---|
+| `stdio` | 標準入出力でMCPクライアントと通信する。既定値 |
+| `streamable-http` | HTTPでMCPクライアントと通信する。`http://<host>:<port>/mcp`で接続する |
+
+`sse`はMCP仕様で非推奨のため選択できない。
+
+### `host`
+
+- `transport`が`streamable-http`のときに使用する待受アドレス
+- 既定値は`127.0.0.1`(localhostのみ)
+- `0.0.0.0`を指定すると全インターフェースでリッスンする
+- `transport`が`stdio`のときは使用されない
+
+### `port`
+
+- `transport`が`streamable-http`のときに使用する待受ポート
+- `1`以上`65535`以下のinteger
+- 既定値は`8000`
+- `transport`が`stdio`のときは使用されない
+
相対`directory`はconfigファイルのディレクトリを基準に解決する。保存が有効な場合、
ディレクトリは最初の保存時に作成され、ファイル名はランダムUUIDの`<uuid>.png`となる。
diff --git a/doc/mcp.md b/doc/mcp.md
index 0c50f75..32c644d 100644
--- a/doc/mcp.md
+++ b/doc/mcp.md
@@ -2,8 +2,8 @@
## 1. 概要
-`mcp-sd15` はstdio transportで動作し、Stable Diffusion 1.xによる画像生成を行う
-次の3ツールを公開する。
+`mcp-sd15` は`stdio`または`streamable-http`トランスポートで動作し、
+Stable Diffusion 1.xによる画像生成を行う次の3ツールを公開する。
| ツール | 用途 |
|---|---|