You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implement the MCP Apps capability handshake between Goose2, Goose ACP, and the downstream MCP server.
This work makes Goose2 explicitly opt into MCP Apps support and makes Goose ACP advertise the MCP Apps extension downstream only for clients that actually support it.
Sequence diagram
sequenceDiagram
participant UI as Goose2 UI
participant Tauri as Tauri ACP Manager
participant ACP as Goose ACP Server
participant MCP as MCP Server
UI->>Tauri: initialize
Tauri->>ACP: initialize
ACP->>ACP: Parse Goose2 capability metadata
ACP->>MCP: initialize
MCP-->>ACP: initialize result
ACP-->>Tauri: initialize result
Tauri-->>UI: ACP transport ready
Loading
This issue covers
Goose2 ACP initialize
clientCapabilities.meta["com.block.goose2"]
Goose ACP parsing of that metadata
downstream MCP initialize
conditional advertisement of the MCP Apps extension
Key rules
Goose2 declares the MCP Apps capability
Goose ACP translates it
only then does Goose advertise the MCP Apps extension in its MCP initialize request to the downstream MCP server
text/TUI clients remain on the non-MCP-App path
Open question
clientCapabilities.meta is ACP-defined, but com.block.goose2 is our custom namespaced envelope inside it
we should decide whether com.block.goose2 is the right long-term namespace and payload shape, or whether this should be generalized if multiple desktop clients may eventually declare the same MCP Apps capability
Parent issue
Summary
Implement the MCP Apps capability handshake between Goose2, Goose ACP, and the downstream MCP server.
This work makes Goose2 explicitly opt into MCP Apps support and makes Goose ACP advertise the MCP Apps extension downstream only for clients that actually support it.
Sequence diagram
sequenceDiagram participant UI as Goose2 UI participant Tauri as Tauri ACP Manager participant ACP as Goose ACP Server participant MCP as MCP Server UI->>Tauri: initialize Tauri->>ACP: initialize ACP->>ACP: Parse Goose2 capability metadata ACP->>MCP: initialize MCP-->>ACP: initialize result ACP-->>Tauri: initialize result Tauri-->>UI: ACP transport readyThis issue covers
initializeclientCapabilities.meta["com.block.goose2"]initializeKey rules
Open question
clientCapabilities.metais ACP-defined, butcom.block.goose2is our custom namespaced envelope inside itcom.block.goose2is the right long-term namespace and payload shape, or whether this should be generalized if multiple desktop clients may eventually declare the same MCP Apps capabilityAcceptance criteria
clientCapabilities.meta["com.block.goose2"]initializeincludes the MCP Apps extension only for that session/client path