windmill_mcp.py: ホスト設定をコンストラクタで渡すよう修正

- FastMCP("windmill") でデフォルト host=127.0.0.1 だと DNS rebinding 保護が
  自動有効化されて外部ホスト名からのアクセスが "Invalid Host header" で拒否される
- MCP_HOST/MCP_PORT 環境変数をコンストラクタ時点で渡すことで
  host=0.0.0.0 の場合は保護が無効になり Traefik 経由のアクセスが通る
- ドメイン名を windmill_mcp → windmill-mcp に修正(DNS は hyphen のみ対応)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Akira
2026-03-02 02:06:51 +09:00
parent 2dbe8c8a74
commit 77f3326868

View File

@@ -10,12 +10,14 @@ from mcp.server.fastmcp import FastMCP
WINDMILL_URL = os.environ.get("WINDMILL_URL", "https://windmill.keinafarm.net")
WINDMILL_TOKEN = os.environ.get("WINDMILL_TOKEN", "")
WINDMILL_WORKSPACE = os.environ.get("WINDMILL_WORKSPACE", "admins")
MCP_HOST = os.environ.get("MCP_HOST", "127.0.0.1")
MCP_PORT = int(os.environ.get("MCP_PORT", "8001"))
if not WINDMILL_TOKEN:
print("Error: WINDMILL_TOKEN 環境変数が設定されていません", file=sys.stderr)
sys.exit(1)
mcp = FastMCP("windmill")
mcp = FastMCP("windmill", host=MCP_HOST, port=MCP_PORT)
def _headers() -> dict:
@@ -338,9 +340,4 @@ def windmill_get_script(path: str) -> str:
if __name__ == "__main__":
transport = os.environ.get("MCP_TRANSPORT", "stdio")
if transport == "sse":
host = os.environ.get("MCP_HOST", "0.0.0.0")
port = int(os.environ.get("MCP_PORT", "8001"))
mcp.run(transport="sse", host=host, port=port)
else:
mcp.run(transport="stdio")
mcp.run(transport=transport)