feat(mcp): add streamable http server and fine-grained authorization

This commit is contained in:
二丫讲梵 authored and GitHub committed 2026-08-31 22:56:16 +08:00
1 parent f725c50b2c
commit f075caef21
47 files changed
+4960 -509

No files matched your search

+8
View File
@@ -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,
+20
View File
@@ -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");
}
+58
View File
@@ -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");
}