feat(mcp): add streamable http server and fine-grained authorization
This commit is contained in:
47 files changed
+4960
-509
No files matched your search
@@ -808,6 +808,11 @@ export const deleteHistoryEntry = forward("deleteHistoryEntry");
|
||||
export const checkMcpServerStatus = forward("checkMcpServerStatus");
|
||||
export const installMcpServer = forward("installMcpServer");
|
||||
export const uninstallMcpServer = forward("uninstallMcpServer");
|
||||
export const loadMcpHttpServerSettings = forward("loadMcpHttpServerSettings");
|
||||
export const saveMcpHttpServerSettings = forward("saveMcpHttpServerSettings");
|
||||
export const mcpHttpServerStatus = forward("mcpHttpServerStatus");
|
||||
export const rotateMcpHttpServerToken = forward("rotateMcpHttpServerToken");
|
||||
export const loadWebMcpHttpStatus = forward("loadWebMcpHttpStatus");
|
||||
export const checkForUpdates = forward("checkForUpdates");
|
||||
export const fetchChangelog = forward("fetchChangelog");
|
||||
export const getSystemProxyUrl = forward("getSystemProxyUrl");
|
||||
@@ -867,6 +872,9 @@ export type {
|
||||
SnippetDownloadResult,
|
||||
SnippetTokenStatus,
|
||||
McpServerStatus,
|
||||
McpHttpServerSettings,
|
||||
McpHttpServerStatus,
|
||||
WebMcpHttpStatus,
|
||||
UpdateInfo,
|
||||
RedisBlob,
|
||||
RedisCollectionPage,
|
||||
|
||||
@@ -1808,6 +1808,26 @@ export async function saveMcpGlobalPolicy(policy: Omit<McpGlobalPolicy, "configu
|
||||
if (!res.ok) throw await backendResponseError(res);
|
||||
}
|
||||
|
||||
export async function loadMcpHttpServerSettings(): Promise<import("@/lib/backend/tauri").McpHttpServerSettings> {
|
||||
return { enabled: false, host: "127.0.0.1", port: 5225, path: "/mcp", allowRemote: false, allowedHosts: [], allowedOrigins: [] };
|
||||
}
|
||||
|
||||
export async function saveMcpHttpServerSettings(_settings: import("@/lib/backend/tauri").McpHttpServerSettings): Promise<import("@/lib/backend/tauri").McpHttpServerStatus> {
|
||||
throw new Error("The MCP HTTP server is available only in DBX Desktop");
|
||||
}
|
||||
|
||||
export async function mcpHttpServerStatus(): Promise<import("@/lib/backend/tauri").McpHttpServerStatus> {
|
||||
return { enabled: false, running: false, endpoint: null, accessToken: null, lastError: null, recentLogs: [] };
|
||||
}
|
||||
|
||||
export async function rotateMcpHttpServerToken(): Promise<import("@/lib/backend/tauri").McpHttpServerStatus> {
|
||||
throw new Error("The MCP HTTP server is available only in DBX Desktop");
|
||||
}
|
||||
|
||||
export async function loadWebMcpHttpStatus(): Promise<import("@/lib/backend/tauri").WebMcpHttpStatus> {
|
||||
return get("/api/app-settings/mcp-http-status");
|
||||
}
|
||||
|
||||
export async function loadMaxAgentTurns(): Promise<number> {
|
||||
return get("/api/app-settings/max-agent-turns");
|
||||
}
|
||||
|
||||
@@ -245,10 +245,21 @@ export interface McpGlobalPolicy {
|
||||
readOnly: boolean;
|
||||
allowDangerousSql: boolean;
|
||||
allowedConnectionIds: string[] | null;
|
||||
allowedToolNames: string[] | null;
|
||||
connectionPolicies: McpConnectionPolicy[];
|
||||
configured: boolean;
|
||||
queryTimeoutSecs: number | null;
|
||||
}
|
||||
|
||||
export interface McpConnectionPolicy {
|
||||
connectionId: string;
|
||||
readOnly: boolean;
|
||||
allowDangerousSql: boolean;
|
||||
executionModeConfigured: boolean;
|
||||
databaseScope: "all" | "selected" | "none";
|
||||
allowedDatabases: string[];
|
||||
}
|
||||
|
||||
export interface SavedSqlSyncEntry {
|
||||
folderName?: string;
|
||||
fileName: string;
|
||||
@@ -634,6 +645,53 @@ export async function saveMcpGlobalPolicy(policy: Omit<McpGlobalPolicy, "configu
|
||||
return invoke("save_mcp_global_policy", { policy });
|
||||
}
|
||||
|
||||
export interface McpHttpServerSettings {
|
||||
enabled: boolean;
|
||||
host: string;
|
||||
port: number;
|
||||
path: string;
|
||||
allowRemote: boolean;
|
||||
allowedHosts: string[];
|
||||
allowedOrigins: string[];
|
||||
}
|
||||
|
||||
export interface McpHttpServerStatus {
|
||||
enabled: boolean;
|
||||
running: boolean;
|
||||
endpoint: string | null;
|
||||
accessToken: string | null;
|
||||
lastError: string | null;
|
||||
recentLogs: string[];
|
||||
}
|
||||
|
||||
export interface WebMcpHttpStatus {
|
||||
enabled: boolean;
|
||||
endpointPath: string;
|
||||
tokenSource: "environment" | "file" | null;
|
||||
allowedHosts: string[];
|
||||
allowedOrigins: string[];
|
||||
}
|
||||
|
||||
export async function loadMcpHttpServerSettings(): Promise<McpHttpServerSettings> {
|
||||
return invoke("load_mcp_http_server_settings");
|
||||
}
|
||||
|
||||
export async function saveMcpHttpServerSettings(settings: McpHttpServerSettings): Promise<McpHttpServerStatus> {
|
||||
return invoke("save_mcp_http_server_settings", { settings });
|
||||
}
|
||||
|
||||
export async function mcpHttpServerStatus(): Promise<McpHttpServerStatus> {
|
||||
return invoke("mcp_http_server_status");
|
||||
}
|
||||
|
||||
export async function rotateMcpHttpServerToken(): Promise<McpHttpServerStatus> {
|
||||
return invoke("rotate_mcp_http_server_token");
|
||||
}
|
||||
|
||||
export async function loadWebMcpHttpStatus(): Promise<WebMcpHttpStatus> {
|
||||
return { enabled: false, endpointPath: "/mcp", tokenSource: null, allowedHosts: [], allowedOrigins: [] };
|
||||
}
|
||||
|
||||
export async function loadMaxAgentTurns(): Promise<number> {
|
||||
return invoke("load_max_agent_turns");
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user