set_default_server
Change the default server to a specified server for routing requests to the scientific agent network.
Instructions
切换默认服务器
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| server | Yes |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- Actual implementation of the set_default_server tool. It validates the server alias exists in config, updates the 'default_server' field, and persists via save_config(). Decorated with @mcp.tool() inside register_tools().
@mcp.tool() def set_default_server(server: str) -> str: """切换默认服务器""" alias = server.strip() if not alias: return "❌ 缺少必填参数: server" config = load_config() if alias not in config.get("servers", {}): available = ", ".join(config.get("servers", {}).keys()) or "无" return f'❌ 服务器别名 "{alias}" 不存在。可用服务器: {available}' config["default_server"] = alias save_config(config) return f"✅ 默认服务器已切换为: {alias}" - register_tools function which contains the @mcp.tool() decorator that registers set_default_server as an MCP tool.
def register_tools(mcp: FastMCP) -> None: """注册所有 OpenAaaS MCP Tools""" - load_config() - reads configuration from ~/.openaaas-mcp-adapter/config.json, handles migration from legacy format, and returns the config dict that set_default_server modifies.
def load_config() -> dict[str, Any]: """加载配置文件,若不存在或格式错误则返回默认配置""" config_path = get_config_path() if not config_path.exists(): return _deep_copy(DEFAULT_CONFIG) try: with open(config_path, "r", encoding="utf-8") as f: raw = f.read() except OSError as e: raise RuntimeError(f"无法读取配置文件: {e}") try: parsed = json.loads(raw) except json.JSONDecodeError: raise RuntimeError("配置文件 JSON 格式错误,请检查 ~/.openaaas-mcp-adapter/config.json") if not isinstance(parsed, dict): raise RuntimeError("配置文件格式错误:期望 JSON 对象") # 兼容旧格式(单服务器) if "servers" not in parsed and "server_url" in parsed: parsed = { "servers": { "default": { "server_url": parsed.get("server_url", "https://api.open-aaas.com"), "api_key": parsed.get("api_key", ""), "client_id": parsed.get("client_id", ""), "name": parsed.get("name", ""), } }, "default_server": parsed.get("default_server", "default"), } save_config(parsed) if "servers" not in parsed: parsed["servers"] = _deep_copy(DEFAULT_CONFIG["servers"]) if "default_server" not in parsed: parsed["default_server"] = "default" return parsed - save_config() - atomically writes the updated config dict to disk, used by set_default_server to persist the new default_server value.
def save_config(config: dict[str, Any]) -> None: """原子写入配置文件""" config_path = get_config_path() config_path.parent.mkdir(parents=True, exist_ok=True) tmp_path = config_path.with_suffix(f".tmp.{os.getpid()}") try: with open(tmp_path, "w", encoding="utf-8") as f: json.dump(config, f, ensure_ascii=False, indent=2) f.flush() os.fsync(f.fileno()) tmp_path.replace(config_path) except OSError as e: try: tmp_path.unlink(missing_ok=True) except OSError: pass raise RuntimeError(f"无法保存配置文件: {e}") - DEFAULT_CONFIG defines the expected config shape including 'servers' dict and 'default_server' key that set_default_server modifies.
DEFAULT_CONFIG: dict[str, Any] = { "servers": { "default": { "server_url": "https://api.open-aaas.com", "api_key": "", "client_id": "", "name": "", } }, "default_server": "default", }