# mcp-sd15 ローカルの NVIDIA GPU と Stable Diffusion 1.x 互換 checkpoint を使う、stdio MCP サーバです。Text-to-Image、Depth/Openpose 誘導生成、ControlNet Inpaint を公開します。 ## セットアップ 1. NVIDIA driverがCUDA 13.2対応PyTorchを実行できることを`nvidia-smi`で確認します。 2. `config.example.toml` をコピーし、モデルの root とファイル名を設定します。 3. `uv sync` を実行します。PyTorchは専用indexからCUDA 13.2版が導入されます。 4. `uv run mcp-sd15 --config path/to/config.toml` で起動します。 トランスポートはTOMLの`[server]`で切り替えます。省略時は`stdio`です。 `streamable-http`を使う場合は次のように設定します。 ```toml [server] transport = "streamable-http" host = "127.0.0.1" port = 8000 ``` この場合、MCPクライアントは`http://127.0.0.1:8000/mcp`へ接続します。 全ツールで共通するbase promptを`[prompt]`で指定できます。プロンプトファイルは `/prompts/`に配置し、TOMLにはファイル名だけを記述します。 ```toml [prompt] positive_file = "positive.txt" negative_file = "negative.txt" ``` 起動時にファイルを読み込み、LLMからのプロンプトと結合してpipelineへ渡します。 positiveは`base, user`の順でカンマ区切り、negativeは`base\nuser`の順で改行区切りです。 モデルは `/checkpoints`、`vae`、`lora`、`controlnet` からだけ読み込みます。 VAE componentは生成に常に必要です。`model.vae`を省略した場合はcheckpoint内蔵VAEを使い、 指定した場合だけ外部VAEへ置き換えます。設定されたLoRAは起動時にすべてロードされ、3つの 生成ツールに共通して適用されます。MCP呼び出しごとのLoRA切替には対応しません。 Depth/Openpose の annotator 重みは `controlnet_aux` のローカルキャッシュに事前配置して ください。推論時のダウンロードは行いません。 MCP の `input_image` / `mask_image` は PNG または JPEG の Base64(data URI も可)です。 mask は白い領域が再生成対象です。出力は PNG の画像 content で、seed 等は PNG metadata にも記録されます。 GPU を使わないテストは `uv run pytest`、lint は `uv run ruff check .`、型検査は `uv run pyright` で実行できます。実モデルの smoke test は環境依存のため自動テストには 含めていません。 実GPUとMCP経路を使う`generate_image` smoke testは次のように実行できます。 ```powershell uv run python script\smoke_generate_image.py ` --config data\config.generate-image.toml ` --output data\outputs\generate-image-mcp-512.png ```