61 lines
1.5 KiB
Python
61 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
"""Stable launcher for the AbletonMCP-AI FastMCP server."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
def _resolve_code_root() -> Path:
|
|
wrapper_dir = Path(__file__).resolve().parent
|
|
candidates = []
|
|
|
|
for base in (wrapper_dir, wrapper_dir.parent):
|
|
candidates.extend(
|
|
[
|
|
base / "AbletonMCP_AI" / "AbletonMCP_AI",
|
|
base / "AbletonMCP_AI",
|
|
base,
|
|
]
|
|
)
|
|
|
|
seen = set()
|
|
for code_root in candidates:
|
|
key = str(code_root).lower()
|
|
if key in seen:
|
|
continue
|
|
seen.add(key)
|
|
if (code_root / "MCP_Server" / "server.py").exists():
|
|
return code_root
|
|
|
|
raise FileNotFoundError("Could not locate MCP_Server/server.py from wrapper")
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description="Launch AbletonMCP-AI")
|
|
parser.add_argument("--transport", default="stdio", choices=["stdio", "sse"])
|
|
args = parser.parse_args()
|
|
|
|
code_root = _resolve_code_root()
|
|
server_dir = code_root / "MCP_Server"
|
|
|
|
os.environ.setdefault("PYTHONUNBUFFERED", "1")
|
|
os.environ.setdefault("PYTHONIOENCODING", "utf-8")
|
|
os.environ["PYTHONPATH"] = str(code_root)
|
|
|
|
for path in (str(server_dir), str(code_root)):
|
|
if path not in sys.path:
|
|
sys.path.insert(0, path)
|
|
|
|
from MCP_Server.server import mcp
|
|
|
|
mcp.run(transport=args.transport)
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|