From abc3764c9f3a9254e5b90c04277016caf0b69bd0 Mon Sep 17 00:00:00 2001 From: Aleksander Grygier Date: Mon, 29 Dec 2025 10:35:46 +0100 Subject: [PATCH] feat: Centralize MCP and Agentic type definitions and constants --- .../server/webui/src/lib/constants/agentic.ts | 8 ++ tools/server/webui/src/lib/constants/mcp.ts | 9 ++ tools/server/webui/src/lib/types/agentic.ts | 9 ++ .../src/lib/{mcp/types.ts => types/mcp.ts} | 105 +++++++----------- 4 files changed, 64 insertions(+), 67 deletions(-) create mode 100644 tools/server/webui/src/lib/constants/agentic.ts create mode 100644 tools/server/webui/src/lib/constants/mcp.ts create mode 100644 tools/server/webui/src/lib/types/agentic.ts rename tools/server/webui/src/lib/{mcp/types.ts => types/mcp.ts} (53%) diff --git a/tools/server/webui/src/lib/constants/agentic.ts b/tools/server/webui/src/lib/constants/agentic.ts new file mode 100644 index 0000000000..453549832a --- /dev/null +++ b/tools/server/webui/src/lib/constants/agentic.ts @@ -0,0 +1,8 @@ +import type { AgenticConfig } from '$lib/types/agentic'; + +export const DEFAULT_AGENTIC_CONFIG: AgenticConfig = { + enabled: true, + maxTurns: 100, + maxToolPreviewLines: 25, + filterReasoningAfterFirstTurn: true +} as const; diff --git a/tools/server/webui/src/lib/constants/mcp.ts b/tools/server/webui/src/lib/constants/mcp.ts new file mode 100644 index 0000000000..b87d0b44af --- /dev/null +++ b/tools/server/webui/src/lib/constants/mcp.ts @@ -0,0 +1,9 @@ +import type { ClientCapabilities, Implementation } from '$lib/types/mcp'; + +export const DEFAULT_MCP_CONFIG = { + protocolVersion: '2025-06-18', + capabilities: { tools: { listChanged: true } } as ClientCapabilities, + clientInfo: { name: 'llama-webui-mcp', version: 'dev' } as Implementation, + requestTimeoutSeconds: 300, // 5 minutes for long-running tools + connectionTimeoutMs: 10_000 // 10 seconds for connection establishment +} as const; diff --git a/tools/server/webui/src/lib/types/agentic.ts b/tools/server/webui/src/lib/types/agentic.ts new file mode 100644 index 0000000000..5f40b29528 --- /dev/null +++ b/tools/server/webui/src/lib/types/agentic.ts @@ -0,0 +1,9 @@ +/** + * Agentic orchestration configuration. + */ +export interface AgenticConfig { + enabled: boolean; + maxTurns: number; + maxToolPreviewLines: number; + filterReasoningAfterFirstTurn: boolean; +} diff --git a/tools/server/webui/src/lib/mcp/types.ts b/tools/server/webui/src/lib/types/mcp.ts similarity index 53% rename from tools/server/webui/src/lib/mcp/types.ts rename to tools/server/webui/src/lib/types/mcp.ts index 41b0c391b9..e812080a09 100644 --- a/tools/server/webui/src/lib/mcp/types.ts +++ b/tools/server/webui/src/lib/types/mcp.ts @@ -1,32 +1,14 @@ -export type JsonRpcId = number | string; +// Re-export SDK types that we use +import type { + ClientCapabilities as SDKClientCapabilities, + Implementation as SDKImplementation, + Tool, + CallToolResult +} from '@modelcontextprotocol/sdk/types.js'; -export type JsonRpcRequest = { - jsonrpc: '2.0'; - id: JsonRpcId; - method: string; - params?: Record; -}; - -export type JsonRpcNotification = { - jsonrpc: '2.0'; - method: string; - params?: Record; -}; - -export type JsonRpcError = { - code: number; - message: string; - data?: unknown; -}; - -export type JsonRpcResponse = { - jsonrpc: '2.0'; - id: JsonRpcId; - result?: Record; - error?: JsonRpcError; -}; - -export type JsonRpcMessage = JsonRpcRequest | JsonRpcResponse | JsonRpcNotification; +export type { Tool, CallToolResult }; +export type ClientCapabilities = SDKClientCapabilities; +export type Implementation = SDKImplementation; export class MCPError extends Error { code: number; @@ -40,18 +22,6 @@ export class MCPError extends Error { } } -export type MCPToolInputSchema = Record; - -export type MCPToolDefinition = { - name: string; - description?: string; - inputSchema?: MCPToolInputSchema; -}; - -export type MCPServerCapabilities = Record; - -export type MCPClientCapabilities = Record; - export type MCPTransportType = 'websocket' | 'streamable_http'; export type MCPServerConfig = { @@ -70,24 +40,19 @@ export type MCPServerConfig = { /** Optional per-server request timeout override (ms). */ requestTimeoutMs?: number; /** Optional per-server capability overrides. */ - capabilities?: MCPClientCapabilities; + capabilities?: ClientCapabilities; /** Optional pre-negotiated session identifier for Streamable HTTP transport. */ sessionId?: string; }; -export type MCPClientInfo = { - name: string; - version?: string; -}; - export type MCPClientConfig = { servers: Record; /** Defaults to `2025-06-18`. */ protocolVersion?: string; /** Default capabilities advertised during initialize. */ - capabilities?: MCPClientCapabilities; + capabilities?: ClientCapabilities; /** Custom client info to advertise. */ - clientInfo?: MCPClientInfo; + clientInfo?: Implementation; /** Request timeout when waiting for MCP responses (ms). Default: 30_000. */ requestTimeoutMs?: number; }; @@ -102,23 +67,29 @@ export type MCPToolCall = { }; }; -export type MCPToolResultContent = - | string - | { - type: 'text'; - text: string; - } - | { - type: 'image'; - data: string; - mimeType?: string; - } - | { - type: 'resource'; - resource: Record; - }; - -export type MCPToolsCallResult = { - content?: MCPToolResultContent | MCPToolResultContent[]; - result?: unknown; +/** + * Raw MCP server configuration entry stored in settings. + */ +export type MCPServerSettingsEntry = { + id: string; + enabled: boolean; + url: string; + requestTimeoutSeconds: number; }; + +/** + * Interface defining the public API for MCP clients. + * Both MCPClient (custom) and MCPClientSDK (official SDK) implement this interface. + */ +export interface IMCPClient { + initialize(): Promise; + shutdown(): Promise; + listTools(): string[]; + getToolsDefinition(): Promise< + { + type: 'function'; + function: { name: string; description?: string; parameters: Record }; + }[] + >; + execute(toolCall: MCPToolCall, abortSignal?: AbortSignal): Promise; +}