[goose2] MCP Apps: translate ACP host capabilities into MCP initialization (#8623)

Signed-off-by: Andrew Harvard <aharvard@squareup.com>
This commit is contained in:
Andrew Harvard
2026-04-28 08:03:44 -04:00
committed by GitHub
parent 52b3f21ef7
commit f908837407
13 changed files with 345 additions and 69 deletions
+17 -6
View File
@@ -1,5 +1,9 @@
import { invoke } from "@tauri-apps/api/core";
import { GooseClient } from "@aaif/goose-sdk";
import {
DEFAULT_GOOSE_MCP_HOST_CAPABILITIES,
GooseClient,
type GooseInitializeRequest,
} from "@aaif/goose-sdk";
import {
PROTOCOL_VERSION,
type Client,
@@ -7,6 +11,7 @@ import {
type RequestPermissionRequest,
type RequestPermissionResponse,
} from "@agentclientprotocol/sdk";
import packageJson from "../../../package.json";
import { createWebSocketStream } from "./createWebSocketStream";
import { perfLog } from "@/shared/lib/perfLog";
@@ -81,12 +86,18 @@ async function initializeConnection(): Promise<GooseClient> {
const tInit = performance.now();
await client.initialize({
protocolVersion: PROTOCOL_VERSION,
clientCapabilities: {},
clientInfo: {
name: "goose2",
version: "0.1.0",
clientCapabilities: {
_meta: {
goose: {
mcpHostCapabilities: DEFAULT_GOOSE_MCP_HOST_CAPABILITIES,
},
},
},
});
clientInfo: {
name: packageJson.name,
version: packageJson.version,
},
} satisfies GooseInitializeRequest);
perfLog(
`[perf:conn] client.initialize in ${(performance.now() - tInit).toFixed(1)}ms (total ${(performance.now() - tStart).toFixed(1)}ms)`,
);
+3
View File
@@ -648,6 +648,9 @@ importers:
sdk:
dependencies:
'@modelcontextprotocol/ext-apps':
specifier: ^0.3.1
version: 0.3.1(@modelcontextprotocol/sdk@1.27.1(zod@3.25.76))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@3.25.76)
zod:
specifier: ^3.25.76
version: 3.25.76
+1
View File
@@ -40,6 +40,7 @@
"format": "prettier --write src/"
},
"dependencies": {
"@modelcontextprotocol/ext-apps": "^0.3.1",
"zod": "^3.25.76"
},
"peerDependencies": {
+1
View File
@@ -2,6 +2,7 @@ export * from "./generated/types.gen.js";
export * from "./generated/zod.gen.js";
export { GooseClient } from "./goose-client.js";
export { createHttpStream } from "./http-stream.js";
export * from "./mcp-apps.js";
export {
ClientSideConnection,
+36
View File
@@ -0,0 +1,36 @@
import type {
Implementation,
InitializeRequest,
} from "@agentclientprotocol/sdk";
import { RESOURCE_MIME_TYPE } from "@modelcontextprotocol/ext-apps";
export const GOOSE_MCP_UI_EXTENSION_ID = "io.modelcontextprotocol/ui" as const;
export interface GooseMcpUiExtensionSettings {
mimeTypes: string[];
}
export interface GooseMcpHostCapabilities {
extensions: Record<string, GooseMcpUiExtensionSettings>;
}
export interface GooseClientMeta {
goose: {
mcpHostCapabilities: GooseMcpHostCapabilities;
};
}
export type GooseInitializeRequest = InitializeRequest & {
clientCapabilities: NonNullable<InitializeRequest["clientCapabilities"]> & {
_meta: GooseClientMeta;
};
clientInfo: Implementation;
};
export const DEFAULT_GOOSE_MCP_HOST_CAPABILITIES: GooseMcpHostCapabilities = {
extensions: {
[GOOSE_MCP_UI_EXTENSION_ID]: {
mimeTypes: [RESOURCE_MIME_TYPE],
},
},
};