diff --git a/ui/desktop/package-lock.json b/ui/desktop/package-lock.json index d8f6d158d673..11831e9c0494 100644 --- a/ui/desktop/package-lock.json +++ b/ui/desktop/package-lock.json @@ -9,7 +9,7 @@ "version": "1.23.0", "license": "Apache-2.0", "dependencies": { - "@mcp-ui/client": "^6.0.0", + "@mcp-ui/client": "^6.1.0", "@modelcontextprotocol/ext-apps": "^1.0.1", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-avatar": "^1.1.11", @@ -3089,9 +3089,9 @@ } }, "node_modules/@mcp-ui/client": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@mcp-ui/client/-/client-6.0.0.tgz", - "integrity": "sha512-dHIQGjFOoBWBntSRUJH5YFeq7xi2rEPS0EwokeNAnMg6xrjGjvNd6vTWDHFRC04OlO/ogvM1r5+xUoo0OETaaQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@mcp-ui/client/-/client-6.1.0.tgz", + "integrity": "sha512-Wk/9uhu8xdOgHjiaEtAq2RbXn4WGstpFeJ6I71JCP7JC7MtvQB/qnEKDVGSbjwyLnIeZYMSILHf5E+57/YCftQ==", "license": "Apache-2.0", "dependencies": { "@modelcontextprotocol/ext-apps": "^0.3.1", diff --git a/ui/desktop/package.json b/ui/desktop/package.json index 49d7271f4712..04a5e1b10077 100644 --- a/ui/desktop/package.json +++ b/ui/desktop/package.json @@ -39,7 +39,7 @@ "start-alpha-gui": "ALPHA=true npm run start-gui" }, "dependencies": { - "@mcp-ui/client": "^6.0.0", + "@mcp-ui/client": "^6.1.0", "@modelcontextprotocol/ext-apps": "^1.0.1", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-avatar": "^1.1.11", diff --git a/ui/desktop/src/components/McpApps/McpAppRenderer.tsx b/ui/desktop/src/components/McpApps/McpAppRenderer.tsx index 61a6309873a8..5e3a99b23e0e 100644 --- a/ui/desktop/src/components/McpApps/McpAppRenderer.tsx +++ b/ui/desktop/src/components/McpApps/McpAppRenderer.tsx @@ -15,7 +15,7 @@ * - "standalone" — Goose-specific mode for dedicated Electron windows */ -import { AppRenderer } from '@mcp-ui/client'; +import { AppRenderer, type RequestHandlerExtra } from '@mcp-ui/client'; import type { McpUiDisplayMode, McpUiHostContext, @@ -23,7 +23,7 @@ import type { McpUiResourcePermissions, McpUiSizeChangedNotification, } from '@modelcontextprotocol/ext-apps/app-bridge'; -import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js'; +import type { CallToolResult, JSONRPCRequest } from '@modelcontextprotocol/sdk/types.js'; import { useCallback, useEffect, useMemo, useReducer, useState } from 'react'; import { callTool, readResource } from '../../api'; import { AppEvents } from '../../constants/events'; @@ -400,6 +400,20 @@ export default function McpAppRenderer({ [] ); + const handleFallbackRequest = useCallback( + async (request: JSONRPCRequest, _extra: RequestHandlerExtra) => { + // todo: handle `sampling/createMessage` per https://github.com/block/goose/pull/7039 + if (request.method === 'sampling/createMessage') { + return { status: 'success' as const }; + } + return { + status: 'error' as const, + message: `Unhandled JSON-RPC method: ${request.method ?? ''}`, + }; + }, + [] + ); + const handleError = useCallback((err: Error) => { console.error('[MCP App Error]:', err); dispatch({ type: 'ERROR', message: errorMessage(err) }); @@ -516,6 +530,7 @@ export default function McpAppRenderer({ onReadResource={handleReadResource} onLoggingMessage={handleLoggingMessage} onSizeChanged={handleSizeChanged} + onFallbackRequest={handleFallbackRequest} onError={handleError} /> );