From ba1cc593fe00065267805f70cfc7e5fba01571bf Mon Sep 17 00:00:00 2001 From: Andrew Harvard Date: Tue, 3 Feb 2026 15:13:39 -0500 Subject: [PATCH 1/4] feat(mcp): advertise MCP Apps UI extension capability WIP: Depends on rmcp PR #643 being merged and released. This change updates the MCP client to advertise support for the io.modelcontextprotocol/ui extension during capability negotiation, as required by the MCP Apps specification. The client now advertises: { "capabilities": { "extensions": { "io.modelcontextprotocol/ui": { "mimeTypes": ["text/html;profile=mcp-app"] } } } } Blocked by: - https://github.com/modelcontextprotocol/rust-sdk/pull/643 Related: - https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx --- crates/goose/src/agents/mcp_client.rs | 39 ++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/crates/goose/src/agents/mcp_client.rs b/crates/goose/src/agents/mcp_client.rs index 19ec15799277..50fcc9456fc2 100644 --- a/crates/goose/src/agents/mcp_client.rs +++ b/crates/goose/src/agents/mcp_client.rs @@ -3,7 +3,7 @@ use crate::agents::types::SharedProvider; use crate::session_context::{SESSION_ID_HEADER, WORKING_DIR_HEADER}; use rmcp::model::{ Content, CreateElicitationRequestParams, CreateElicitationResult, ElicitationAction, ErrorCode, - Extensions, JsonObject, Meta, + ExtensionCapabilities, Extensions, JsonObject, Meta, }; /// MCP client implementation for Goose use rmcp::{ @@ -315,10 +315,25 @@ impl ClientHandler for GooseClient { } fn get_info(&self) -> ClientInfo { + // Build MCP Apps UI extension capability + // See: https://github.com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx + let mut ui_extension_settings = JsonObject::new(); + ui_extension_settings.insert( + "mimeTypes".to_string(), + serde_json::json!(["text/html;profile=mcp-app"]), + ); + + let mut extensions = ExtensionCapabilities::new(); + extensions.insert( + "io.modelcontextprotocol/ui".to_string(), + ui_extension_settings, + ); + ClientInfo { meta: None, protocol_version: ProtocolVersion::V_2025_03_26, capabilities: ClientCapabilities::builder() + .enable_extensions_with(extensions) .enable_sampling() .enable_elicitation() .build(), @@ -945,4 +960,26 @@ mod tests { assert_eq!(&mcp_meta.0, expected_meta.as_object().unwrap()); } + + #[test] + fn test_client_info_advertises_mcp_apps_ui_extension() { + let client = new_client(); + let info = ClientHandler::get_info(&client); + + // Verify the client advertises the MCP Apps UI extension capability + let extensions = info + .capabilities + .extensions + .expect("capabilities should have extensions"); + + let ui_ext = extensions + .get("io.modelcontextprotocol/ui") + .expect("should have io.modelcontextprotocol/ui extension"); + + let mime_types = ui_ext + .get("mimeTypes") + .expect("ui extension should have mimeTypes"); + + assert_eq!(mime_types, &json!(["text/html;profile=mcp-app"])); + } } From 58c6a2549df7db13d538eb770717251558d28c43 Mon Sep 17 00:00:00 2001 From: Andrew Harvard Date: Tue, 10 Feb 2026 11:58:21 -0500 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20upgrade=20rmcp=200.14.0=20=E2=86=92?= =?UTF-8?q?=200.15.0=20to=20unblock=20extension=20capability=20advertiseme?= =?UTF-8?q?nt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Upgrades rmcp to 0.15.0 which adds the 'extensions' field on ClientCapabilities, enabling goose to advertise io.modelcontextprotocol/ui support during MCP initialize. Breaking changes addressed: - Implementation: added description field - ServerCapabilities: added extensions field - Tool: added execution field - SamplingMessage.content: Content → SamplingContent - SamplingMessage: added meta field (handled by constructor) - CreateElicitationRequestParams: struct → enum (FormElicitationParams/UrlElicitationParams) --- Cargo.lock | 54 +++++++++++++-- Cargo.toml | 2 +- crates/goose-mcp/src/autovisualiser/mod.rs | 1 + .../goose-mcp/src/computercontroller/mod.rs | 1 + .../goose-mcp/src/developer/rmcp_developer.rs | 1 + crates/goose-mcp/src/memory/mod.rs | 1 + crates/goose-mcp/src/tutorial/mod.rs | 1 + crates/goose/src/agents/apps_extension.rs | 2 + .../goose/src/agents/chatrecall_extension.rs | 4 +- .../src/agents/code_execution_extension.rs | 4 +- crates/goose/src/agents/extension_manager.rs | 1 + .../src/agents/extension_manager_extension.rs | 4 +- crates/goose/src/agents/mcp_client.rs | 68 ++++++++++--------- crates/goose/src/agents/skills_extension.rs | 12 +++- crates/goose/src/agents/todo_extension.rs | 4 +- 15 files changed, 116 insertions(+), 44 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2e8b1ce5bb95..706a838339a5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4138,7 +4138,7 @@ dependencies = [ "rand 0.8.5", "regex", "reqwest 0.12.28", - "rmcp 0.14.0", + "rmcp 0.15.0", "rubato", "schemars 1.2.1", "serde", @@ -4194,7 +4194,7 @@ dependencies = [ "goose-mcp", "http-body-util", "regex", - "rmcp 0.14.0", + "rmcp 0.15.0", "sacp", "serde", "serde_json", @@ -4224,7 +4224,7 @@ dependencies = [ "once_cell", "paste", "regex", - "rmcp 0.14.0", + "rmcp 0.15.0", "serde", "serde_json", "tokio", @@ -4260,7 +4260,7 @@ dependencies = [ "open", "rand 0.8.5", "regex", - "rmcp 0.14.0", + "rmcp 0.15.0", "rustyline", "serde", "serde_json", @@ -4302,7 +4302,7 @@ dependencies = [ "rayon", "regex", "reqwest 0.12.28", - "rmcp 0.14.0", + "rmcp 0.15.0", "schemars 1.2.1", "serde", "serde_json", @@ -4351,7 +4351,7 @@ dependencies = [ "once_cell", "rand 0.9.2", "reqwest 0.12.28", - "rmcp 0.14.0", + "rmcp 0.15.0", "rustls 0.23.31", "serde", "serde_json", @@ -8007,6 +8007,33 @@ name = "rmcp" version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a621b37a548ff6ab6292d57841eb25785a7f146d89391a19c9f199414bd13da" +dependencies = [ + "async-trait", + "base64 0.22.1", + "chrono", + "futures", + "http 1.4.0", + "pastey", + "pin-project-lite", + "process-wrap", + "reqwest 0.12.28", + "rmcp-macros 0.14.0", + "schemars 1.2.1", + "serde", + "serde_json", + "sse-stream", + "thiserror 2.0.18", + "tokio", + "tokio-stream", + "tokio-util", + "tracing", +] + +[[package]] +name = "rmcp" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bef41ebc9ebed2c1b1d90203e9d1756091e8a00bbc3107676151f39868ca0ee" dependencies = [ "async-trait", "axum 0.8.8", @@ -8023,7 +8050,7 @@ dependencies = [ "process-wrap", "rand 0.9.2", "reqwest 0.12.28", - "rmcp-macros 0.14.0", + "rmcp-macros 0.15.0", "schemars 1.2.1", "serde", "serde_json", @@ -8064,6 +8091,19 @@ dependencies = [ "syn 2.0.114", ] +[[package]] +name = "rmcp-macros" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e88ad84b8b6237a934534a62b379a5be6388915663c0cc598ceb9b3292bbbfe" +dependencies = [ + "darling 0.23.0", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.114", +] + [[package]] name = "ron" version = "0.12.0" diff --git a/Cargo.toml b/Cargo.toml index 6ee2d01e6ff9..4a8180e68c42 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ uninlined_format_args = "allow" string_slice = "warn" [workspace.dependencies] -rmcp = { version = "0.14.0", features = ["schemars", "auth"] } +rmcp = { version = "0.15.0", features = ["schemars", "auth"] } anyhow = "1.0" futures = "0.3" regex = "1.12" diff --git a/crates/goose-mcp/src/autovisualiser/mod.rs b/crates/goose-mcp/src/autovisualiser/mod.rs index 640ef4eceebc..18e10cb8bbe9 100644 --- a/crates/goose-mcp/src/autovisualiser/mod.rs +++ b/crates/goose-mcp/src/autovisualiser/mod.rs @@ -417,6 +417,7 @@ impl ServerHandler for AutoVisualiserRouter { name: "goose-autovisualiser".to_string(), version: env!("CARGO_PKG_VERSION").to_owned(), title: None, + description: None, icons: None, website_url: None, }, diff --git a/crates/goose-mcp/src/computercontroller/mod.rs b/crates/goose-mcp/src/computercontroller/mod.rs index 297d2524912d..53bdbc624002 100644 --- a/crates/goose-mcp/src/computercontroller/mod.rs +++ b/crates/goose-mcp/src/computercontroller/mod.rs @@ -1299,6 +1299,7 @@ impl ServerHandler for ComputerControllerServer { name: "goose-computercontroller".to_string(), version: env!("CARGO_PKG_VERSION").to_owned(), title: None, + description: None, icons: None, website_url: None, }, diff --git a/crates/goose-mcp/src/developer/rmcp_developer.rs b/crates/goose-mcp/src/developer/rmcp_developer.rs index 0cb224dacd82..e37683d310ba 100644 --- a/crates/goose-mcp/src/developer/rmcp_developer.rs +++ b/crates/goose-mcp/src/developer/rmcp_developer.rs @@ -418,6 +418,7 @@ impl ServerHandler for DeveloperServer { name: "goose-developer".to_string(), version: env!("CARGO_PKG_VERSION").to_owned(), title: None, + description: None, icons: None, website_url: None, }, diff --git a/crates/goose-mcp/src/memory/mod.rs b/crates/goose-mcp/src/memory/mod.rs index 71b1aa58e73a..118c393f60ad 100644 --- a/crates/goose-mcp/src/memory/mod.rs +++ b/crates/goose-mcp/src/memory/mod.rs @@ -522,6 +522,7 @@ impl ServerHandler for MemoryServer { name: "goose-memory".to_string(), version: env!("CARGO_PKG_VERSION").to_owned(), title: None, + description: None, icons: None, website_url: None, }, diff --git a/crates/goose-mcp/src/tutorial/mod.rs b/crates/goose-mcp/src/tutorial/mod.rs index 49e3d93c12c9..2c960e90995b 100644 --- a/crates/goose-mcp/src/tutorial/mod.rs +++ b/crates/goose-mcp/src/tutorial/mod.rs @@ -114,6 +114,7 @@ impl ServerHandler for TutorialServer { name: "goose-tutorial".to_string(), version: env!("CARGO_PKG_VERSION").to_owned(), title: None, + description: None, icons: None, website_url: None, }, diff --git a/crates/goose/src/agents/apps_extension.rs b/crates/goose/src/agents/apps_extension.rs index 69bfa9807a88..37f6c22f26a3 100644 --- a/crates/goose/src/agents/apps_extension.rs +++ b/crates/goose/src/agents/apps_extension.rs @@ -131,11 +131,13 @@ impl AppsManagerClient { experimental: None, tasks: None, logging: None, + extensions: None, }, server_info: Implementation { name: EXTENSION_NAME.to_string(), title: Some("Apps Manager".to_string()), version: "1.0.0".to_string(), + description: None, icons: None, website_url: None, }, diff --git a/crates/goose/src/agents/chatrecall_extension.rs b/crates/goose/src/agents/chatrecall_extension.rs index fb3c895b59fe..1842a89d53d3 100644 --- a/crates/goose/src/agents/chatrecall_extension.rs +++ b/crates/goose/src/agents/chatrecall_extension.rs @@ -43,11 +43,12 @@ impl ChatRecallClient { let info = InitializeResult { protocol_version: ProtocolVersion::V_2025_03_26, capabilities: ServerCapabilities { - tasks: None, tools: Some(ToolsCapability { list_changed: Some(false), }), + tasks: None, resources: None, + extensions: None, prompts: None, completions: None, experimental: None, @@ -55,6 +56,7 @@ impl ChatRecallClient { }, server_info: Implementation { name: EXTENSION_NAME.to_string(), + description: None, title: Some("Chat Recall".to_string()), version: "1.0.0".to_string(), icons: None, diff --git a/crates/goose/src/agents/code_execution_extension.rs b/crates/goose/src/agents/code_execution_extension.rs index 535851d02574..495eb862c1ae 100644 --- a/crates/goose/src/agents/code_execution_extension.rs +++ b/crates/goose/src/agents/code_execution_extension.rs @@ -55,11 +55,12 @@ impl CodeExecutionClient { let info = InitializeResult { protocol_version: ProtocolVersion::V_2025_03_26, capabilities: ServerCapabilities { - tasks: None, tools: Some(ToolsCapability { list_changed: Some(false), }), + tasks: None, resources: None, + extensions: None, prompts: None, completions: None, experimental: None, @@ -67,6 +68,7 @@ impl CodeExecutionClient { }, server_info: Implementation { name: EXTENSION_NAME.to_string(), + description: None, title: Some("Code Mode".to_string()), version: "1.0.0".to_string(), icons: None, diff --git a/crates/goose/src/agents/extension_manager.rs b/crates/goose/src/agents/extension_manager.rs index 9e1c31c30c8c..53180e85e45c 100644 --- a/crates/goose/src/agents/extension_manager.rs +++ b/crates/goose/src/agents/extension_manager.rs @@ -862,6 +862,7 @@ impl ExtensionManager { input_schema: tool.input_schema, annotations: tool.annotations, output_schema: tool.output_schema, + execution: tool.execution, icons: tool.icons, title: tool.title, meta: tool.meta, diff --git a/crates/goose/src/agents/extension_manager_extension.rs b/crates/goose/src/agents/extension_manager_extension.rs index e3bf0e59cd68..03f6e29ccaa4 100644 --- a/crates/goose/src/agents/extension_manager_extension.rs +++ b/crates/goose/src/agents/extension_manager_extension.rs @@ -85,11 +85,12 @@ impl ExtensionManagerClient { let info = InitializeResult { protocol_version: ProtocolVersion::V_2025_03_26, capabilities: ServerCapabilities { - tasks: None, tools: Some(ToolsCapability { list_changed: Some(false), }), + tasks: None, resources: None, + extensions: None, prompts: None, completions: None, experimental: None, @@ -97,6 +98,7 @@ impl ExtensionManagerClient { }, server_info: Implementation { name: EXTENSION_NAME.to_string(), + description: None, title: Some(EXTENSION_NAME.to_string()), version: "1.0.0".to_string(), icons: None, diff --git a/crates/goose/src/agents/mcp_client.rs b/crates/goose/src/agents/mcp_client.rs index 50fcc9456fc2..4c43c531263e 100644 --- a/crates/goose/src/agents/mcp_client.rs +++ b/crates/goose/src/agents/mcp_client.rs @@ -2,8 +2,8 @@ use crate::action_required_manager::ActionRequiredManager; use crate::agents::types::SharedProvider; use crate::session_context::{SESSION_ID_HEADER, WORKING_DIR_HEADER}; use rmcp::model::{ - Content, CreateElicitationRequestParams, CreateElicitationResult, ElicitationAction, ErrorCode, - ExtensionCapabilities, Extensions, JsonObject, Meta, + CreateElicitationRequestParams, CreateElicitationResult, ElicitationAction, ErrorCode, + ExtensionCapabilities, Extensions, JsonObject, Meta, SamplingMessageContent, }; /// MCP client implementation for Goose use rmcp::{ @@ -223,9 +223,9 @@ impl ClientHandler for GooseClient { Role::Assistant => crate::conversation::message::Message::assistant(), }; - match msg.content.as_text() { + match msg.content.first().and_then(|c| c.as_text()) { Some(text) => base.with_text(&text.text), - None => base.with_content(msg.content.clone().into()), + None => base, } }) .collect(); @@ -255,29 +255,26 @@ impl ClientHandler for GooseClient { Ok(CreateMessageResult { model: usage.model, stop_reason: Some(CreateMessageResult::STOP_REASON_END_TURN.to_string()), - message: SamplingMessage { - role: Role::Assistant, - // TODO(alexhancock): MCP sampling currently only supports one content on each SamplingMessage - // https://modelcontextprotocol.io/specification/draft/client/sampling#messages - // This doesn't mesh well with goose's approach which has Vec - // There is a proposal to MCP which is agreed to go in the next version to have SamplingMessages support multiple content parts - // https://github.com/modelcontextprotocol/modelcontextprotocol/pull/198 - // Until that is formalized, we can take the first message content from the provider and use it - content: if let Some(content) = response.content.first() { + message: SamplingMessage::new( + Role::Assistant, + if let Some(content) = response.content.first() { match content { crate::conversation::message::MessageContent::Text(text) => { - Content::text(&text.text) + SamplingMessageContent::text(&text.text) } crate::conversation::message::MessageContent::Image(img) => { - Content::image(&img.data, &img.mime_type) + SamplingMessageContent::Image(rmcp::model::RawImageContent { + data: img.data.clone(), + mime_type: img.mime_type.clone(), + meta: None, + }) } - // TODO(alexhancock) - Content::Audio? goose's messages don't currently have it - _ => Content::text(""), + _ => SamplingMessageContent::text(""), } } else { - Content::text("") + SamplingMessageContent::text("") }, - }, + ), }) } @@ -286,20 +283,28 @@ impl ClientHandler for GooseClient { request: CreateElicitationRequestParams, _context: RequestContext, ) -> Result { - let schema_value = serde_json::to_value(&request.requested_schema).map_err(|e| { - ErrorData::new( - ErrorCode::INTERNAL_ERROR, - format!("Failed to serialize elicitation schema: {}", e), - None, - ) - })?; + let (message, schema_value) = match &request { + CreateElicitationRequestParams::FormElicitationParams { + message, + requested_schema, + .. + } => { + let schema_value = serde_json::to_value(requested_schema).map_err(|e| { + ErrorData::new( + ErrorCode::INTERNAL_ERROR, + format!("Failed to serialize elicitation schema: {}", e), + None, + ) + })?; + (message.clone(), schema_value) + } + CreateElicitationRequestParams::UrlElicitationParams { message, url, .. } => { + (message.clone(), serde_json::json!({ "url": url })) + } + }; ActionRequiredManager::global() - .request_and_wait( - request.message.clone(), - schema_value, - Duration::from_secs(300), - ) + .request_and_wait(message, schema_value, Duration::from_secs(300)) .await .map(|user_data| CreateElicitationResult { action: ElicitationAction::Accept, @@ -343,6 +348,7 @@ impl ClientHandler for GooseClient { .unwrap_or(env!("CARGO_PKG_VERSION").to_owned()), icons: None, title: None, + description: None, website_url: None, }, } diff --git a/crates/goose/src/agents/skills_extension.rs b/crates/goose/src/agents/skills_extension.rs index b882c1bb389f..b1b899d14b1e 100644 --- a/crates/goose/src/agents/skills_extension.rs +++ b/crates/goose/src/agents/skills_extension.rs @@ -46,11 +46,12 @@ impl SkillsClient { let info = InitializeResult { protocol_version: ProtocolVersion::V_2025_03_26, capabilities: ServerCapabilities { - tasks: None, tools: Some(ToolsCapability { list_changed: Some(false), }), + tasks: None, resources: None, + extensions: None, prompts: None, completions: None, experimental: None, @@ -58,6 +59,7 @@ impl SkillsClient { }, server_info: Implementation { name: EXTENSION_NAME.to_string(), + description: None, title: Some("Skills".to_string()), version: "1.0.0".to_string(), icons: None, @@ -568,11 +570,13 @@ Content from dir3 completions: None, experimental: None, logging: None, + extensions: None, }, server_info: Implementation { name: EXTENSION_NAME.to_string(), title: Some("Skills".to_string()), version: "1.0.0".to_string(), + description: None, icons: None, website_url: None, }, @@ -611,11 +615,13 @@ Content from dir3 completions: None, experimental: None, logging: None, + extensions: None, }, server_info: Implementation { name: EXTENSION_NAME.to_string(), title: Some("Skills".to_string()), version: "1.0.0".to_string(), + description: None, icons: None, website_url: None, }, @@ -666,11 +672,13 @@ Content completions: None, experimental: None, logging: None, + extensions: None, }, server_info: Implementation { name: EXTENSION_NAME.to_string(), title: Some("Skills".to_string()), version: "1.0.0".to_string(), + description: None, icons: None, website_url: None, }, @@ -735,11 +743,13 @@ Content completions: None, experimental: None, logging: None, + extensions: None, }, server_info: Implementation { name: EXTENSION_NAME.to_string(), title: Some("Skills".to_string()), version: "1.0.0".to_string(), + description: None, icons: None, website_url: None, }, diff --git a/crates/goose/src/agents/todo_extension.rs b/crates/goose/src/agents/todo_extension.rs index 39df8ab9fc60..780ed86908d0 100644 --- a/crates/goose/src/agents/todo_extension.rs +++ b/crates/goose/src/agents/todo_extension.rs @@ -30,11 +30,12 @@ impl TodoClient { let info = InitializeResult { protocol_version: ProtocolVersion::V_2025_03_26, capabilities: ServerCapabilities { - tasks: None, tools: Some(ToolsCapability { list_changed: Some(false), }), + tasks: None, resources: None, + extensions: None, prompts: None, completions: None, experimental: None, @@ -42,6 +43,7 @@ impl TodoClient { }, server_info: Implementation { name: EXTENSION_NAME.to_string(), + description: None, title: Some("Todo".to_string()), version: "1.0.0".to_string(), icons: None, From 6477a856f3fc2dab380211c6336106c666d6051b Mon Sep 17 00:00:00 2001 From: Andrew Harvard Date: Wed, 11 Feb 2026 08:45:01 -0500 Subject: [PATCH 3/4] Update MCP replay files to include extensions capability in initialize The PR added MCP Apps UI extension capability advertisement in the client's initialize request, but the recorded replay files still had the old initialize message without the extensions field. This caused all 4 replay tests to fail because the playback comparison found a mismatch and closed the connection. Updated all 4 replay files to include: extensions: { io.modelcontextprotocol/ui: { mimeTypes: [text/html;profile=mcp-app] } } in the capabilities of the initialize STDIN line. --- crates/goose/tests/mcp_replays/github-mcp-serverstdio | 2 +- .../npx-y@modelcontextprotocol_server-everything@2026.1.14 | 2 +- ...n--withfastmcp==2.14.4fastmcpruntests_fastmcp_test_server.py | 2 +- crates/goose/tests/mcp_replays/uvxmcp-server-fetch | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/goose/tests/mcp_replays/github-mcp-serverstdio b/crates/goose/tests/mcp_replays/github-mcp-serverstdio index ea13488d7c01..de8866fe8c29 100644 --- a/crates/goose/tests/mcp_replays/github-mcp-serverstdio +++ b/crates/goose/tests/mcp_replays/github-mcp-serverstdio @@ -1,4 +1,4 @@ -STDIN: {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{"sampling":{},"elicitation":{}},"clientInfo":{"name":"goose","version":"0.0.0"}}} +STDIN: {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{"elicitation":{},"extensions":{"io.modelcontextprotocol/ui":{"mimeTypes":["text/html;profile=mcp-app"]}},"sampling":{}},"clientInfo":{"name":"goose","version":"0.0.0"}}} STDERR: time=2025-12-11T17:58:47.636-05:00 level=INFO msg="starting server" version=0.24.1 host="" dynamicToolsets=false readOnly=false lockdownEnabled=false STDERR: GitHub MCP Server running on stdio STDERR: time=2025-12-11T17:58:47.640-05:00 level=INFO msg="server run start" diff --git a/crates/goose/tests/mcp_replays/npx-y@modelcontextprotocol_server-everything@2026.1.14 b/crates/goose/tests/mcp_replays/npx-y@modelcontextprotocol_server-everything@2026.1.14 index 170cad676b57..b5602b4b1ffb 100644 --- a/crates/goose/tests/mcp_replays/npx-y@modelcontextprotocol_server-everything@2026.1.14 +++ b/crates/goose/tests/mcp_replays/npx-y@modelcontextprotocol_server-everything@2026.1.14 @@ -1,4 +1,4 @@ -STDIN: {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{"sampling":{},"elicitation":{}},"clientInfo":{"name":"goose","version":"0.0.0"}}} +STDIN: {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{"elicitation":{},"extensions":{"io.modelcontextprotocol/ui":{"mimeTypes":["text/html;profile=mcp-app"]}},"sampling":{}},"clientInfo":{"name":"goose","version":"0.0.0"}}} STDERR: Starting default (STDIO) server... STDOUT: {"result":{"protocolVersion":"2025-03-26","capabilities":{"tools":{"listChanged":true},"prompts":{"listChanged":true},"resources":{"subscribe":true,"listChanged":true},"logging":{},"completions":{}},"serverInfo":{"name":"mcp-servers/everything","title":"Everything Reference Server","version":"2.0.0"},"instructions":"# Everything Server – Server Instructions\n\nAudience: These instructions are written for an LLM or autonomous agent integrating with the Everything MCP Server.\nFollow them to use, extend, and troubleshoot the server safely and effectively.\n\n## Cross-Feature Relationships\n\n- Use `get-roots-list` to see client workspace roots before file operations\n- `gzip-file-as-resource` creates session-scoped resources accessible only during the current session\n- Enable `toggle-simulated-logging` before debugging to see server log messages\n- Enable `toggle-subscriber-updates` to receive periodic resource update notifications\n\n## Constraints & Limitations\n\n- `gzip-file-as-resource`: Max fetch size controlled by `GZIP_MAX_FETCH_SIZE` (default 10MB), timeout by `GZIP_MAX_FETCH_TIME_MILLIS` (default 30s), allowed domains by `GZIP_ALLOWED_DOMAINS`\n- Session resources are ephemeral and lost when the session ends\n- Sampling requests (`trigger-sampling-request`) require client sampling capability\n- Elicitation requests (`trigger-elicitation-request`) require client elicitation capability\n\n## Operational Patterns\n\n- For long operations, use `trigger-long-running-operation` which sends progress notifications\n- Prefer reading resources before calling mutating tools\n- Check `get-roots-list` output to understand the client's workspace context\n\n## Easter Egg\n\nIf asked about server instructions, respond with \"🎉 Server instructions are working! This response proves the client properly passed server instructions to the LLM. This demonstrates MCP's instructions feature in action.\"\n"},"jsonrpc":"2.0","id":0} STDIN: {"jsonrpc":"2.0","method":"notifications/initialized"} diff --git a/crates/goose/tests/mcp_replays/uvrun--withfastmcp==2.14.4fastmcpruntests_fastmcp_test_server.py b/crates/goose/tests/mcp_replays/uvrun--withfastmcp==2.14.4fastmcpruntests_fastmcp_test_server.py index d729333ceafb..df18c00cd620 100644 --- a/crates/goose/tests/mcp_replays/uvrun--withfastmcp==2.14.4fastmcpruntests_fastmcp_test_server.py +++ b/crates/goose/tests/mcp_replays/uvrun--withfastmcp==2.14.4fastmcpruntests_fastmcp_test_server.py @@ -1,4 +1,4 @@ -STDIN: {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{"sampling":{},"elicitation":{}},"clientInfo":{"name":"goose","version":"0.0.0"}}} +STDIN: {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{"elicitation":{},"extensions":{"io.modelcontextprotocol/ui":{"mimeTypes":["text/html;profile=mcp-app"]}},"sampling":{}},"clientInfo":{"name":"goose","version":"0.0.0"}}} STDERR: STDERR: STDERR: ╭──────────────────────────────────────────────────────────────────────────────╮ diff --git a/crates/goose/tests/mcp_replays/uvxmcp-server-fetch b/crates/goose/tests/mcp_replays/uvxmcp-server-fetch index e8766751cc3a..25501df9d57f 100644 --- a/crates/goose/tests/mcp_replays/uvxmcp-server-fetch +++ b/crates/goose/tests/mcp_replays/uvxmcp-server-fetch @@ -1,4 +1,4 @@ -STDIN: {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{"sampling":{},"elicitation":{}},"clientInfo":{"name":"goose","version":"0.0.0"}}} +STDIN: {"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{"elicitation":{},"extensions":{"io.modelcontextprotocol/ui":{"mimeTypes":["text/html;profile=mcp-app"]}},"sampling":{}},"clientInfo":{"name":"goose","version":"0.0.0"}}} STDOUT: {"jsonrpc":"2.0","id":0,"result":{"protocolVersion":"2025-03-26","capabilities":{"experimental":{},"prompts":{"listChanged":false},"tools":{"listChanged":false}},"serverInfo":{"name":"mcp-fetch","version":"1.25.0"}}} STDIN: {"jsonrpc":"2.0","method":"notifications/initialized"} STDIN: {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"_meta":{"agent-session-id":"test-session-id","progressToken":0},"name":"fetch","arguments":{"url":"https://example.com"}}} From 0f5db0383bbee92e5a92c257840a7a6d8b02b12e Mon Sep 17 00:00:00 2001 From: Andrew Harvard Date: Wed, 11 Feb 2026 09:24:51 -0500 Subject: [PATCH 4/4] fix: add ToolExecution and TaskSupport schemas to OpenAPI spec The rmcp 0.15.0 upgrade added an execution field to Tool that references ToolExecution and TaskSupport types. These were missing from the OpenAPI schema definitions, causing @hey-api/openapi-ts to fail with a missing $ref pointer error. --- crates/goose-server/src/openapi.rs | 6 ++++- ui/desktop/openapi.json | 38 ++++++++++++++++++++++++++++++ ui/desktop/src/api/index.ts | 2 +- ui/desktop/src/api/types.gen.ts | 11 +++++++++ 4 files changed, 55 insertions(+), 2 deletions(-) diff --git a/crates/goose-server/src/openapi.rs b/crates/goose-server/src/openapi.rs index cdee4c738f1e..a7ab06252b86 100644 --- a/crates/goose-server/src/openapi.rs +++ b/crates/goose-server/src/openapi.rs @@ -12,7 +12,7 @@ use goose::session::{Session, SessionInsights, SessionType, SystemInfo}; use rmcp::model::{ Annotations, Content, EmbeddedResource, Icon, ImageContent, JsonObject, RawAudioContent, RawEmbeddedResource, RawImageContent, RawResource, RawTextContent, ResourceContents, Role, - TextContent, Tool, ToolAnnotations, + TaskSupport, TextContent, Tool, ToolAnnotations, ToolExecution, }; use utoipa::{OpenApi, ToSchema}; @@ -319,6 +319,8 @@ derive_utoipa!(RawEmbeddedResource as RawEmbeddedResourceSchema); derive_utoipa!(RawResource as RawResourceSchema); derive_utoipa!(Tool as ToolSchema); derive_utoipa!(ToolAnnotations as ToolAnnotationsSchema); +derive_utoipa!(ToolExecution as ToolExecutionSchema); +derive_utoipa!(TaskSupport as TaskSupportSchema); derive_utoipa!(Annotations as AnnotationsSchema); derive_utoipa!(ResourceContents as ResourceContentsSchema); derive_utoipa!(JsonObject as JsonObjectSchema); @@ -497,6 +499,8 @@ derive_utoipa!(Icon as IconSchema); RecipeManifest, ToolSchema, ToolAnnotationsSchema, + ToolExecutionSchema, + TaskSupportSchema, ToolInfo, PermissionLevel, Permission, diff --git a/ui/desktop/openapi.json b/ui/desktop/openapi.json index 14ef0fb18c7c..d85209fd436a 100644 --- a/ui/desktop/openapi.json +++ b/ui/desktop/openapi.json @@ -6755,6 +6755,19 @@ "inlineMessage" ] }, + "TaskSupport": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "string" + }, + { + "type": "string" + } + ] + }, "TelemetryEventRequest": { "type": "object", "required": [ @@ -6899,6 +6912,16 @@ "description": { "type": "string" }, + "execution": { + "anyOf": [ + { + "$ref": "#/components/schemas/ToolExecution" + }, + { + "type": "object" + } + ] + }, "icons": { "type": "array", "items": { @@ -6964,6 +6987,21 @@ } } }, + "ToolExecution": { + "type": "object", + "properties": { + "taskSupport": { + "anyOf": [ + { + "$ref": "#/components/schemas/TaskSupport" + }, + { + "type": "object" + } + ] + } + } + }, "ToolInfo": { "type": "object", "description": "Information about the tool used for building prompts", diff --git a/ui/desktop/src/api/index.ts b/ui/desktop/src/api/index.ts index 67f79c2af466..70ff840fd033 100644 --- a/ui/desktop/src/api/index.ts +++ b/ui/desktop/src/api/index.ts @@ -1,4 +1,4 @@ // This file is auto-generated by @hey-api/openapi-ts export { addExtension, agentAddExtension, agentRemoveExtension, backupConfig, callTool, cancelDownload, checkProvider, configureProviderOauth, confirmToolAction, createCustomProvider, createRecipe, createSchedule, decodeRecipe, deleteModel, deleteRecipe, deleteSchedule, deleteSession, detectProvider, diagnostics, downloadModel, encodeRecipe, exportApp, exportSession, forkSession, getCustomProvider, getDictationConfig, getDownloadProgress, getExtensions, getPricing, getPrompt, getPrompts, getProviderModels, getSession, getSessionExtensions, getSessionInsights, getSlashCommands, getTools, getTunnelStatus, importApp, importSession, initConfig, inspectRunningJob, killRunningJob, listApps, listModels, listRecipes, listSchedules, listSessions, mcpUiProxy, type Options, parseRecipe, pauseSchedule, providers, readAllConfig, readConfig, readResource, recipeToYaml, recoverConfig, removeConfig, removeCustomProvider, removeExtension, reply, resetPrompt, restartAgent, resumeAgent, runNowHandler, savePrompt, saveRecipe, scanRecipe, scheduleRecipe, searchSessions, sendTelemetryEvent, sessionsHandler, setConfigProvider, setRecipeSlashCommand, startAgent, startOpenrouterSetup, startTetrateSetup, startTunnel, status, stopAgent, stopTunnel, systemInfo, transcribeDictation, unpauseSchedule, updateAgentProvider, updateCustomProvider, updateFromSession, updateSchedule, updateSessionName, updateSessionUserRecipeValues, updateWorkingDir, upsertConfig, upsertPermissions, validateConfig } from './sdk.gen'; -export type { ActionRequired, ActionRequiredData, AddExtensionData, AddExtensionErrors, AddExtensionRequest, AddExtensionResponse, AddExtensionResponses, AgentAddExtensionData, AgentAddExtensionErrors, AgentAddExtensionResponse, AgentAddExtensionResponses, AgentRemoveExtensionData, AgentRemoveExtensionErrors, AgentRemoveExtensionResponse, AgentRemoveExtensionResponses, Annotations, Author, AuthorRequest, BackupConfigData, BackupConfigErrors, BackupConfigResponse, BackupConfigResponses, CallToolData, CallToolErrors, CallToolRequest, CallToolResponse, CallToolResponse2, CallToolResponses, CancelDownloadData, CancelDownloadErrors, CancelDownloadResponses, ChatRequest, CheckProviderData, CheckProviderRequest, ClientOptions, CommandType, ConfigKey, ConfigKeyQuery, ConfigResponse, ConfigureProviderOauthData, ConfigureProviderOauthErrors, ConfigureProviderOauthResponses, ConfirmToolActionData, ConfirmToolActionErrors, ConfirmToolActionRequest, ConfirmToolActionResponses, Content, Conversation, CreateCustomProviderData, CreateCustomProviderErrors, CreateCustomProviderResponse, CreateCustomProviderResponses, CreateRecipeData, CreateRecipeErrors, CreateRecipeRequest, CreateRecipeResponse, CreateRecipeResponse2, CreateRecipeResponses, CreateScheduleData, CreateScheduleErrors, CreateScheduleRequest, CreateScheduleResponse, CreateScheduleResponses, CspMetadata, DeclarativeProviderConfig, DecodeRecipeData, DecodeRecipeErrors, DecodeRecipeRequest, DecodeRecipeResponse, DecodeRecipeResponse2, DecodeRecipeResponses, DeleteModelData, DeleteModelErrors, DeleteModelResponses, DeleteRecipeData, DeleteRecipeErrors, DeleteRecipeRequest, DeleteRecipeResponse, DeleteRecipeResponses, DeleteScheduleData, DeleteScheduleErrors, DeleteScheduleResponse, DeleteScheduleResponses, DeleteSessionData, DeleteSessionErrors, DeleteSessionResponses, DetectProviderData, DetectProviderErrors, DetectProviderRequest, DetectProviderResponse, DetectProviderResponse2, DetectProviderResponses, DiagnosticsData, DiagnosticsErrors, DiagnosticsResponse, DiagnosticsResponses, DictationProvider, DictationProviderStatus, DownloadModelData, DownloadModelErrors, DownloadModelResponses, DownloadProgress, DownloadStatus, EmbeddedResource, EncodeRecipeData, EncodeRecipeErrors, EncodeRecipeRequest, EncodeRecipeResponse, EncodeRecipeResponse2, EncodeRecipeResponses, Envs, ErrorResponse, ExportAppData, ExportAppError, ExportAppErrors, ExportAppResponse, ExportAppResponses, ExportSessionData, ExportSessionErrors, ExportSessionResponse, ExportSessionResponses, ExtensionConfig, ExtensionData, ExtensionEntry, ExtensionLoadResult, ExtensionQuery, ExtensionResponse, ForkRequest, ForkResponse, ForkSessionData, ForkSessionErrors, ForkSessionResponse, ForkSessionResponses, FrontendToolRequest, GetCustomProviderData, GetCustomProviderErrors, GetCustomProviderResponse, GetCustomProviderResponses, GetDictationConfigData, GetDictationConfigResponse, GetDictationConfigResponses, GetDownloadProgressData, GetDownloadProgressErrors, GetDownloadProgressResponse, GetDownloadProgressResponses, GetExtensionsData, GetExtensionsErrors, GetExtensionsResponse, GetExtensionsResponses, GetPricingData, GetPricingResponse, GetPricingResponses, GetPromptData, GetPromptErrors, GetPromptResponse, GetPromptResponses, GetPromptsData, GetPromptsResponse, GetPromptsResponses, GetProviderModelsData, GetProviderModelsErrors, GetProviderModelsResponse, GetProviderModelsResponses, GetSessionData, GetSessionErrors, GetSessionExtensionsData, GetSessionExtensionsErrors, GetSessionExtensionsResponse, GetSessionExtensionsResponses, GetSessionInsightsData, GetSessionInsightsErrors, GetSessionInsightsResponse, GetSessionInsightsResponses, GetSessionResponse, GetSessionResponses, GetSlashCommandsData, GetSlashCommandsResponse, GetSlashCommandsResponses, GetToolsData, GetToolsErrors, GetToolsQuery, GetToolsResponse, GetToolsResponses, GetTunnelStatusData, GetTunnelStatusResponse, GetTunnelStatusResponses, GooseApp, Icon, ImageContent, ImportAppData, ImportAppError, ImportAppErrors, ImportAppRequest, ImportAppResponse, ImportAppResponse2, ImportAppResponses, ImportSessionData, ImportSessionErrors, ImportSessionRequest, ImportSessionResponse, ImportSessionResponses, InitConfigData, InitConfigErrors, InitConfigResponse, InitConfigResponses, InspectJobResponse, InspectRunningJobData, InspectRunningJobErrors, InspectRunningJobResponse, InspectRunningJobResponses, JsonObject, KillJobResponse, KillRunningJobData, KillRunningJobResponses, ListAppsData, ListAppsError, ListAppsErrors, ListAppsRequest, ListAppsResponse, ListAppsResponse2, ListAppsResponses, ListModelsData, ListModelsResponse, ListModelsResponses, ListRecipeResponse, ListRecipesData, ListRecipesErrors, ListRecipesResponse, ListRecipesResponses, ListSchedulesData, ListSchedulesErrors, ListSchedulesResponse, ListSchedulesResponse2, ListSchedulesResponses, ListSessionsData, ListSessionsErrors, ListSessionsResponse, ListSessionsResponses, LoadedProvider, McpAppResource, McpUiProxyData, McpUiProxyErrors, McpUiProxyResponses, Message, MessageContent, MessageEvent, MessageMetadata, ModelConfig, ModelInfo, ParseRecipeData, ParseRecipeError, ParseRecipeErrors, ParseRecipeRequest, ParseRecipeResponse, ParseRecipeResponse2, ParseRecipeResponses, PauseScheduleData, PauseScheduleErrors, PauseScheduleResponse, PauseScheduleResponses, Permission, PermissionLevel, PermissionsMetadata, PricingData, PricingQuery, PricingResponse, PrincipalType, PromptContentResponse, PromptsListResponse, ProviderDetails, ProviderEngine, ProviderMetadata, ProvidersData, ProvidersResponse, ProvidersResponse2, ProvidersResponses, ProviderType, RawAudioContent, RawEmbeddedResource, RawImageContent, RawResource, RawTextContent, ReadAllConfigData, ReadAllConfigResponse, ReadAllConfigResponses, ReadConfigData, ReadConfigErrors, ReadConfigResponses, ReadResourceData, ReadResourceErrors, ReadResourceRequest, ReadResourceResponse, ReadResourceResponse2, ReadResourceResponses, Recipe, RecipeManifest, RecipeParameter, RecipeParameterInputType, RecipeParameterRequirement, RecipeToYamlData, RecipeToYamlError, RecipeToYamlErrors, RecipeToYamlRequest, RecipeToYamlResponse, RecipeToYamlResponse2, RecipeToYamlResponses, RecoverConfigData, RecoverConfigErrors, RecoverConfigResponse, RecoverConfigResponses, RedactedThinkingContent, RemoveConfigData, RemoveConfigErrors, RemoveConfigResponse, RemoveConfigResponses, RemoveCustomProviderData, RemoveCustomProviderErrors, RemoveCustomProviderResponse, RemoveCustomProviderResponses, RemoveExtensionData, RemoveExtensionErrors, RemoveExtensionRequest, RemoveExtensionResponse, RemoveExtensionResponses, ReplyData, ReplyErrors, ReplyResponse, ReplyResponses, ResetPromptData, ResetPromptErrors, ResetPromptResponse, ResetPromptResponses, ResourceContents, ResourceMetadata, Response, RestartAgentData, RestartAgentErrors, RestartAgentRequest, RestartAgentResponse, RestartAgentResponse2, RestartAgentResponses, ResumeAgentData, ResumeAgentErrors, ResumeAgentRequest, ResumeAgentResponse, ResumeAgentResponse2, ResumeAgentResponses, RetryConfig, Role, RunNowHandlerData, RunNowHandlerErrors, RunNowHandlerResponse, RunNowHandlerResponses, RunNowResponse, SavePromptData, SavePromptErrors, SavePromptRequest, SavePromptResponse, SavePromptResponses, SaveRecipeData, SaveRecipeError, SaveRecipeErrors, SaveRecipeRequest, SaveRecipeResponse, SaveRecipeResponse2, SaveRecipeResponses, ScanRecipeData, ScanRecipeRequest, ScanRecipeResponse, ScanRecipeResponse2, ScanRecipeResponses, ScheduledJob, ScheduleRecipeData, ScheduleRecipeErrors, ScheduleRecipeRequest, ScheduleRecipeResponses, SearchSessionsData, SearchSessionsErrors, SearchSessionsResponse, SearchSessionsResponses, SendTelemetryEventData, SendTelemetryEventResponses, Session, SessionDisplayInfo, SessionExtensionsResponse, SessionInsights, SessionListResponse, SessionsHandlerData, SessionsHandlerErrors, SessionsHandlerResponse, SessionsHandlerResponses, SessionsQuery, SessionType, SetConfigProviderData, SetProviderRequest, SetRecipeSlashCommandData, SetRecipeSlashCommandErrors, SetRecipeSlashCommandResponses, SetSlashCommandRequest, Settings, SetupResponse, SlashCommand, SlashCommandsResponse, StartAgentData, StartAgentError, StartAgentErrors, StartAgentRequest, StartAgentResponse, StartAgentResponses, StartOpenrouterSetupData, StartOpenrouterSetupResponse, StartOpenrouterSetupResponses, StartTetrateSetupData, StartTetrateSetupResponse, StartTetrateSetupResponses, StartTunnelData, StartTunnelError, StartTunnelErrors, StartTunnelResponse, StartTunnelResponses, StatusData, StatusResponse, StatusResponses, StopAgentData, StopAgentErrors, StopAgentRequest, StopAgentResponse, StopAgentResponses, StopTunnelData, StopTunnelError, StopTunnelErrors, StopTunnelResponses, SubRecipe, SuccessCheck, SystemInfo, SystemInfoData, SystemInfoResponse, SystemInfoResponses, SystemNotificationContent, SystemNotificationType, TelemetryEventRequest, Template, TextContent, ThinkingContent, TokenState, Tool, ToolAnnotations, ToolConfirmationRequest, ToolInfo, ToolPermission, ToolRequest, ToolResponse, TranscribeDictationData, TranscribeDictationErrors, TranscribeDictationResponse, TranscribeDictationResponses, TranscribeRequest, TranscribeResponse, TunnelInfo, TunnelState, UiMetadata, UnpauseScheduleData, UnpauseScheduleErrors, UnpauseScheduleResponse, UnpauseScheduleResponses, UpdateAgentProviderData, UpdateAgentProviderErrors, UpdateAgentProviderResponses, UpdateCustomProviderData, UpdateCustomProviderErrors, UpdateCustomProviderRequest, UpdateCustomProviderResponse, UpdateCustomProviderResponses, UpdateFromSessionData, UpdateFromSessionErrors, UpdateFromSessionRequest, UpdateFromSessionResponses, UpdateProviderRequest, UpdateScheduleData, UpdateScheduleErrors, UpdateScheduleRequest, UpdateScheduleResponse, UpdateScheduleResponses, UpdateSessionNameData, UpdateSessionNameErrors, UpdateSessionNameRequest, UpdateSessionNameResponses, UpdateSessionUserRecipeValuesData, UpdateSessionUserRecipeValuesError, UpdateSessionUserRecipeValuesErrors, UpdateSessionUserRecipeValuesRequest, UpdateSessionUserRecipeValuesResponse, UpdateSessionUserRecipeValuesResponse2, UpdateSessionUserRecipeValuesResponses, UpdateWorkingDirData, UpdateWorkingDirErrors, UpdateWorkingDirRequest, UpdateWorkingDirResponses, UpsertConfigData, UpsertConfigErrors, UpsertConfigQuery, UpsertConfigResponse, UpsertConfigResponses, UpsertPermissionsData, UpsertPermissionsErrors, UpsertPermissionsQuery, UpsertPermissionsResponse, UpsertPermissionsResponses, ValidateConfigData, ValidateConfigErrors, ValidateConfigResponse, ValidateConfigResponses, WhisperModelResponse, WindowProps } from './types.gen'; +export type { ActionRequired, ActionRequiredData, AddExtensionData, AddExtensionErrors, AddExtensionRequest, AddExtensionResponse, AddExtensionResponses, AgentAddExtensionData, AgentAddExtensionErrors, AgentAddExtensionResponse, AgentAddExtensionResponses, AgentRemoveExtensionData, AgentRemoveExtensionErrors, AgentRemoveExtensionResponse, AgentRemoveExtensionResponses, Annotations, Author, AuthorRequest, BackupConfigData, BackupConfigErrors, BackupConfigResponse, BackupConfigResponses, CallToolData, CallToolErrors, CallToolRequest, CallToolResponse, CallToolResponse2, CallToolResponses, CancelDownloadData, CancelDownloadErrors, CancelDownloadResponses, ChatRequest, CheckProviderData, CheckProviderRequest, ClientOptions, CommandType, ConfigKey, ConfigKeyQuery, ConfigResponse, ConfigureProviderOauthData, ConfigureProviderOauthErrors, ConfigureProviderOauthResponses, ConfirmToolActionData, ConfirmToolActionErrors, ConfirmToolActionRequest, ConfirmToolActionResponses, Content, Conversation, CreateCustomProviderData, CreateCustomProviderErrors, CreateCustomProviderResponse, CreateCustomProviderResponses, CreateRecipeData, CreateRecipeErrors, CreateRecipeRequest, CreateRecipeResponse, CreateRecipeResponse2, CreateRecipeResponses, CreateScheduleData, CreateScheduleErrors, CreateScheduleRequest, CreateScheduleResponse, CreateScheduleResponses, CspMetadata, DeclarativeProviderConfig, DecodeRecipeData, DecodeRecipeErrors, DecodeRecipeRequest, DecodeRecipeResponse, DecodeRecipeResponse2, DecodeRecipeResponses, DeleteModelData, DeleteModelErrors, DeleteModelResponses, DeleteRecipeData, DeleteRecipeErrors, DeleteRecipeRequest, DeleteRecipeResponse, DeleteRecipeResponses, DeleteScheduleData, DeleteScheduleErrors, DeleteScheduleResponse, DeleteScheduleResponses, DeleteSessionData, DeleteSessionErrors, DeleteSessionResponses, DetectProviderData, DetectProviderErrors, DetectProviderRequest, DetectProviderResponse, DetectProviderResponse2, DetectProviderResponses, DiagnosticsData, DiagnosticsErrors, DiagnosticsResponse, DiagnosticsResponses, DictationProvider, DictationProviderStatus, DownloadModelData, DownloadModelErrors, DownloadModelResponses, DownloadProgress, DownloadStatus, EmbeddedResource, EncodeRecipeData, EncodeRecipeErrors, EncodeRecipeRequest, EncodeRecipeResponse, EncodeRecipeResponse2, EncodeRecipeResponses, Envs, ErrorResponse, ExportAppData, ExportAppError, ExportAppErrors, ExportAppResponse, ExportAppResponses, ExportSessionData, ExportSessionErrors, ExportSessionResponse, ExportSessionResponses, ExtensionConfig, ExtensionData, ExtensionEntry, ExtensionLoadResult, ExtensionQuery, ExtensionResponse, ForkRequest, ForkResponse, ForkSessionData, ForkSessionErrors, ForkSessionResponse, ForkSessionResponses, FrontendToolRequest, GetCustomProviderData, GetCustomProviderErrors, GetCustomProviderResponse, GetCustomProviderResponses, GetDictationConfigData, GetDictationConfigResponse, GetDictationConfigResponses, GetDownloadProgressData, GetDownloadProgressErrors, GetDownloadProgressResponse, GetDownloadProgressResponses, GetExtensionsData, GetExtensionsErrors, GetExtensionsResponse, GetExtensionsResponses, GetPricingData, GetPricingResponse, GetPricingResponses, GetPromptData, GetPromptErrors, GetPromptResponse, GetPromptResponses, GetPromptsData, GetPromptsResponse, GetPromptsResponses, GetProviderModelsData, GetProviderModelsErrors, GetProviderModelsResponse, GetProviderModelsResponses, GetSessionData, GetSessionErrors, GetSessionExtensionsData, GetSessionExtensionsErrors, GetSessionExtensionsResponse, GetSessionExtensionsResponses, GetSessionInsightsData, GetSessionInsightsErrors, GetSessionInsightsResponse, GetSessionInsightsResponses, GetSessionResponse, GetSessionResponses, GetSlashCommandsData, GetSlashCommandsResponse, GetSlashCommandsResponses, GetToolsData, GetToolsErrors, GetToolsQuery, GetToolsResponse, GetToolsResponses, GetTunnelStatusData, GetTunnelStatusResponse, GetTunnelStatusResponses, GooseApp, Icon, ImageContent, ImportAppData, ImportAppError, ImportAppErrors, ImportAppRequest, ImportAppResponse, ImportAppResponse2, ImportAppResponses, ImportSessionData, ImportSessionErrors, ImportSessionRequest, ImportSessionResponse, ImportSessionResponses, InitConfigData, InitConfigErrors, InitConfigResponse, InitConfigResponses, InspectJobResponse, InspectRunningJobData, InspectRunningJobErrors, InspectRunningJobResponse, InspectRunningJobResponses, JsonObject, KillJobResponse, KillRunningJobData, KillRunningJobResponses, ListAppsData, ListAppsError, ListAppsErrors, ListAppsRequest, ListAppsResponse, ListAppsResponse2, ListAppsResponses, ListModelsData, ListModelsResponse, ListModelsResponses, ListRecipeResponse, ListRecipesData, ListRecipesErrors, ListRecipesResponse, ListRecipesResponses, ListSchedulesData, ListSchedulesErrors, ListSchedulesResponse, ListSchedulesResponse2, ListSchedulesResponses, ListSessionsData, ListSessionsErrors, ListSessionsResponse, ListSessionsResponses, LoadedProvider, McpAppResource, McpUiProxyData, McpUiProxyErrors, McpUiProxyResponses, Message, MessageContent, MessageEvent, MessageMetadata, ModelConfig, ModelInfo, ParseRecipeData, ParseRecipeError, ParseRecipeErrors, ParseRecipeRequest, ParseRecipeResponse, ParseRecipeResponse2, ParseRecipeResponses, PauseScheduleData, PauseScheduleErrors, PauseScheduleResponse, PauseScheduleResponses, Permission, PermissionLevel, PermissionsMetadata, PricingData, PricingQuery, PricingResponse, PrincipalType, PromptContentResponse, PromptsListResponse, ProviderDetails, ProviderEngine, ProviderMetadata, ProvidersData, ProvidersResponse, ProvidersResponse2, ProvidersResponses, ProviderType, RawAudioContent, RawEmbeddedResource, RawImageContent, RawResource, RawTextContent, ReadAllConfigData, ReadAllConfigResponse, ReadAllConfigResponses, ReadConfigData, ReadConfigErrors, ReadConfigResponses, ReadResourceData, ReadResourceErrors, ReadResourceRequest, ReadResourceResponse, ReadResourceResponse2, ReadResourceResponses, Recipe, RecipeManifest, RecipeParameter, RecipeParameterInputType, RecipeParameterRequirement, RecipeToYamlData, RecipeToYamlError, RecipeToYamlErrors, RecipeToYamlRequest, RecipeToYamlResponse, RecipeToYamlResponse2, RecipeToYamlResponses, RecoverConfigData, RecoverConfigErrors, RecoverConfigResponse, RecoverConfigResponses, RedactedThinkingContent, RemoveConfigData, RemoveConfigErrors, RemoveConfigResponse, RemoveConfigResponses, RemoveCustomProviderData, RemoveCustomProviderErrors, RemoveCustomProviderResponse, RemoveCustomProviderResponses, RemoveExtensionData, RemoveExtensionErrors, RemoveExtensionRequest, RemoveExtensionResponse, RemoveExtensionResponses, ReplyData, ReplyErrors, ReplyResponse, ReplyResponses, ResetPromptData, ResetPromptErrors, ResetPromptResponse, ResetPromptResponses, ResourceContents, ResourceMetadata, Response, RestartAgentData, RestartAgentErrors, RestartAgentRequest, RestartAgentResponse, RestartAgentResponse2, RestartAgentResponses, ResumeAgentData, ResumeAgentErrors, ResumeAgentRequest, ResumeAgentResponse, ResumeAgentResponse2, ResumeAgentResponses, RetryConfig, Role, RunNowHandlerData, RunNowHandlerErrors, RunNowHandlerResponse, RunNowHandlerResponses, RunNowResponse, SavePromptData, SavePromptErrors, SavePromptRequest, SavePromptResponse, SavePromptResponses, SaveRecipeData, SaveRecipeError, SaveRecipeErrors, SaveRecipeRequest, SaveRecipeResponse, SaveRecipeResponse2, SaveRecipeResponses, ScanRecipeData, ScanRecipeRequest, ScanRecipeResponse, ScanRecipeResponse2, ScanRecipeResponses, ScheduledJob, ScheduleRecipeData, ScheduleRecipeErrors, ScheduleRecipeRequest, ScheduleRecipeResponses, SearchSessionsData, SearchSessionsErrors, SearchSessionsResponse, SearchSessionsResponses, SendTelemetryEventData, SendTelemetryEventResponses, Session, SessionDisplayInfo, SessionExtensionsResponse, SessionInsights, SessionListResponse, SessionsHandlerData, SessionsHandlerErrors, SessionsHandlerResponse, SessionsHandlerResponses, SessionsQuery, SessionType, SetConfigProviderData, SetProviderRequest, SetRecipeSlashCommandData, SetRecipeSlashCommandErrors, SetRecipeSlashCommandResponses, SetSlashCommandRequest, Settings, SetupResponse, SlashCommand, SlashCommandsResponse, StartAgentData, StartAgentError, StartAgentErrors, StartAgentRequest, StartAgentResponse, StartAgentResponses, StartOpenrouterSetupData, StartOpenrouterSetupResponse, StartOpenrouterSetupResponses, StartTetrateSetupData, StartTetrateSetupResponse, StartTetrateSetupResponses, StartTunnelData, StartTunnelError, StartTunnelErrors, StartTunnelResponse, StartTunnelResponses, StatusData, StatusResponse, StatusResponses, StopAgentData, StopAgentErrors, StopAgentRequest, StopAgentResponse, StopAgentResponses, StopTunnelData, StopTunnelError, StopTunnelErrors, StopTunnelResponses, SubRecipe, SuccessCheck, SystemInfo, SystemInfoData, SystemInfoResponse, SystemInfoResponses, SystemNotificationContent, SystemNotificationType, TaskSupport, TelemetryEventRequest, Template, TextContent, ThinkingContent, TokenState, Tool, ToolAnnotations, ToolConfirmationRequest, ToolExecution, ToolInfo, ToolPermission, ToolRequest, ToolResponse, TranscribeDictationData, TranscribeDictationErrors, TranscribeDictationResponse, TranscribeDictationResponses, TranscribeRequest, TranscribeResponse, TunnelInfo, TunnelState, UiMetadata, UnpauseScheduleData, UnpauseScheduleErrors, UnpauseScheduleResponse, UnpauseScheduleResponses, UpdateAgentProviderData, UpdateAgentProviderErrors, UpdateAgentProviderResponses, UpdateCustomProviderData, UpdateCustomProviderErrors, UpdateCustomProviderRequest, UpdateCustomProviderResponse, UpdateCustomProviderResponses, UpdateFromSessionData, UpdateFromSessionErrors, UpdateFromSessionRequest, UpdateFromSessionResponses, UpdateProviderRequest, UpdateScheduleData, UpdateScheduleErrors, UpdateScheduleRequest, UpdateScheduleResponse, UpdateScheduleResponses, UpdateSessionNameData, UpdateSessionNameErrors, UpdateSessionNameRequest, UpdateSessionNameResponses, UpdateSessionUserRecipeValuesData, UpdateSessionUserRecipeValuesError, UpdateSessionUserRecipeValuesErrors, UpdateSessionUserRecipeValuesRequest, UpdateSessionUserRecipeValuesResponse, UpdateSessionUserRecipeValuesResponse2, UpdateSessionUserRecipeValuesResponses, UpdateWorkingDirData, UpdateWorkingDirErrors, UpdateWorkingDirRequest, UpdateWorkingDirResponses, UpsertConfigData, UpsertConfigErrors, UpsertConfigQuery, UpsertConfigResponse, UpsertConfigResponses, UpsertPermissionsData, UpsertPermissionsErrors, UpsertPermissionsQuery, UpsertPermissionsResponse, UpsertPermissionsResponses, ValidateConfigData, ValidateConfigErrors, ValidateConfigResponse, ValidateConfigResponses, WhisperModelResponse, WindowProps } from './types.gen'; diff --git a/ui/desktop/src/api/types.gen.ts b/ui/desktop/src/api/types.gen.ts index 87e7696e3aba..b3c40b587edb 100644 --- a/ui/desktop/src/api/types.gen.ts +++ b/ui/desktop/src/api/types.gen.ts @@ -1148,6 +1148,8 @@ export type SystemNotificationContent = { export type SystemNotificationType = 'thinkingMessage' | 'inlineMessage'; +export type TaskSupport = string; + export type TelemetryEventRequest = { event_name: string; properties?: { @@ -1198,6 +1200,9 @@ export type Tool = { [key: string]: unknown; }; description?: string; + execution?: ToolExecution | { + [key: string]: unknown; + }; icons?: Array; inputSchema: { [key: string]: unknown; @@ -1224,6 +1229,12 @@ export type ToolConfirmationRequest = { toolName: string; }; +export type ToolExecution = { + taskSupport?: TaskSupport | { + [key: string]: unknown; + }; +}; + /** * Information about the tool used for building prompts */