## 問題

`openclaw mcp serve` を SSH + `docker exec -i` 経由で呼び出しても、Claude Code から MCP として接続できなかった。
`initialize` リクエストを送っても無応答(ぶら下がったまま)。

## 原因

`openclaw mcp serve` はデフォルトで gateway の WebSocket URL を `config.json` の `gateway.remote.url` から読む。
Docker コンテナ内からローカル起動の gateway に接続するには `--url` を明示する必要がある。

## 解決策

`~/.claude.json` の MCP エントリに `-T` フラグと `--url` を追加する:

```json
"openclaw": {
"type": "stdio",
"command": "ssh",
"args": [
"-T",
"cure",
"sudo docker exec -i openclaw openclaw mcp serve --token --url ws://localhost:18789"
]
}
```

- `-T`: SSH の PTY 割り当てを無効化(stdio が正しくパイプされるように)
- `--url ws://localhost:18789`: OpenClaw gateway の WebSocket URL(cure コンテナ内 localhost)

## 検証方法

```bash
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' \
| ssh -T cure "sudo docker exec -i openclaw openclaw mcp serve --token --url ws://localhost:18789 -v"
# → {"result":{"protocolVersion":"2024-11-05","capabilities":{...}}} が返れば成功
```

## 環境

- cure (100.86.220.63): Docker で openclaw コンテナ起動
- gateway は port 18789 でバインド
- shadow から SSH 経由で MCP serve を呼び出す構成