import os import sys import importlib from pathlib import Path try: FastAPI = importlib.import_module("fastapi").FastAPI except Exception: FastAPI = None PLUGIN_DIR = Path(__file__).resolve().parent / "climlab" / "mcp_output" / "mcp_plugin" if str(PLUGIN_DIR) not in sys.path: sys.path.insert(0, str(PLUGIN_DIR)) if FastAPI is None: class _FallbackApp: def get(self, _: str): def decorator(func): return func return decorator app = _FallbackApp() else: app = FastAPI(title="climlab MCP info app", version="1.0.0") @app.get("/") def root() -> dict: return { "name": "climlab-mcp", "description": "Supplementary API for local development and tool discovery.", "mcp_http_path": "/mcp", "port": int(os.getenv("PORT", "7860")), } @app.get("/health") def health() -> dict: return {"status": "healthy"} @app.get("/tools") def tools() -> dict: mcp_service = importlib.import_module("mcp_service") create_app = getattr(mcp_service, "create_app") mcp = create_app() tool_entries = [] raw_tools = getattr(mcp, "tools", []) if isinstance(raw_tools, dict): iterable = raw_tools.values() else: iterable = raw_tools for item in iterable: if isinstance(item, dict): name = item.get("name", "unknown") description = item.get("description", "") else: name = getattr(item, "name", "unknown") description = getattr(item, "description", "") tool_entries.append({"name": name, "description": description}) return {"count": len(tool_entries), "tools": tool_entries}