superclaude mcp --servers airis-mcp-gateway 失败: 组合 URL 已过期 (404) + 配置文件缺失
Bug 1 — Stale docker_compose_url returns 404
The hardcoded compose URL points at a filename the upstream gateway repo has since renamed:
superclaude/cli/install_mcp.py
"docker_compose_url": "https://raw.githubusercontent.com/agiletec-inc/airis-mcp-gateway/main/Docker-compose.dist.yml",
agiletec-inc/airis-mcp-gateway renamed Docker-compose.dist.yml → compose.yaml (still on the main branch). The old path now 404s:
Docker-compose.dist.yml -> 404
compose.yaml -> 200
Observed output
Downloading Docker-compose configuration... ❌ Failed to download Docker-compose file: curl: (22) The requested URL returned error: 404 Failed to install AIRIS MCP Gateway
Fix
superclaude/cli/install_mcp.py
"docker_compose_url": "https://raw.githubusercontent.com/agiletec-inc/airis-mcp-gateway/main/compose.yaml",
(The companion mcp_config_url → config/mcp-config.template.json is still valid and needs no change.)
Bug 2 — Installer does not provision the config files the compose file bind-mounts
After fixing Bug 1, the download succeeds but Docker compose up fails at container start:
❌ Failed to start containers:
Error response from daemon: failed to create task for container: ... OCI runtime create failed:
... error mounting ".../config/gateway-config.yaml" to rootfs at "/app/config/gateway-config.yaml":
... not a directory: Are you trying to mount a directory onto a file (or vice-versa)?
Root cause
The installer only writes three files into the install dir: compose.yaml (saved as Docker-compose.yml), mcp-config.json, and .env. But the current compose.yaml bind-mounts several additional host files that the installer never creates:
api service
volumes:
- ./routing-table.json:/app/routing-table.json:ro
- ./config/gateway-config.yaml:/app/config/gateway-config.yaml:ro
- ./profiles:/app/profiles:rw
Docker-mcp-gateway service
command:
- --additional-catalog=/catalogs/airis-catalog.yaml # needs ./catalogs/airis-catalog.yaml
When a bind-mount source path does not exist on the host, the Docker daemon (running as root) auto-creates it — and creates it as a directory. So
config/gateway-config.yamlandrouting-table.jsonget created as empty, root-owned directories, and mounting a directory onto the container's expected file
内容来源: SuperClaude-Org/SuperClaude_Framework