import { fetch } from "@/core/api/fetcher"; import { getBackendBaseURL } from "@/core/config"; import type { MCPConfig } from "./types"; export class MCPConfigRequestError extends Error { readonly status: number; constructor(status: number, message: string) { super(message); this.name = "MCPConfigRequestError"; this.status = status; } get isAdminRequired(): boolean { return this.status === 403; } } async function readErrorDetail( response: Response, fallback: string, ): Promise { const error = (await response.json().catch(() => ({}))) as { detail?: unknown; }; return typeof error.detail === "string" ? error.detail : fallback; } export async function loadMCPConfig() { const response = await fetch(`${getBackendBaseURL()}/api/mcp/config`); if (!response.ok) { throw new MCPConfigRequestError( response.status, await readErrorDetail(response, "Failed to load MCP configuration"), ); } return response.json() as Promise; } export async function updateMCPConfig(config: MCPConfig) { const response = await fetch(`${getBackendBaseURL()}/api/mcp/config`, { method: "PUT", headers: { "Content-Type": "application/json", }, body: JSON.stringify(config), }); if (!response.ok) { throw new MCPConfigRequestError( response.status, await readErrorDetail(response, "Failed to update MCP configuration"), ); } return response.json(); }