[goose2] MCP Apps: translate ACP host capabilities into MCP initialization (#8623)
Signed-off-by: Andrew Harvard <aharvard@squareup.com>
This commit is contained in:
@@ -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)`,
|
||||
);
|
||||
|
||||
Generated
+3
@@ -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
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
"format": "prettier --write src/"
|
||||
},
|
||||
"dependencies": {
|
||||
"@modelcontextprotocol/ext-apps": "^0.3.1",
|
||||
"zod": "^3.25.76"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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],
|
||||
},
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user