lib: add capabilities & version getters (#24)

* add App{,Bridge}.get{App,Host}{Version,Capabilities}()

* Add App.{oncalltool,onlisttools}
This commit is contained in:
Olivier Chafik 2025-11-25 04:05:33 +00:00 • committed by GitHub
commit 8ac79a9731
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 48 additions and 4 deletions

View file

@ -63,12 +63,13 @@ type HostOptions = ProtocolOptions;
export const SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION]; export const SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION];
type RequestExtra = Parameters< type RequestHandlerExtra = Parameters<
Parameters<AppBridge["setRequestHandler"]>[1] Parameters<AppBridge["setRequestHandler"]>[1]
>[1]; >[1];
export class AppBridge extends Protocol<Request, Notification, Result> { export class AppBridge extends Protocol<Request, Notification, Result> {
private _appCapabilities?: McpUiAppCapabilities; private _appCapabilities?: McpUiAppCapabilities;
private _appInfo?: Implementation;
constructor( constructor(
private _client: Client, private _client: Client,
@ -88,7 +89,14 @@ export class AppBridge extends Protocol<Request, Notification, Result> {
}); });
} }
onping?: (params: PingRequest["params"], extra: RequestExtra) => void; getAppCapabilities(): McpUiAppCapabilities | undefined {
return this._appCapabilities;
}
getAppVersion(): Implementation | undefined {
return this._appInfo;
}
onping?: (params: PingRequest["params"], extra: RequestHandlerExtra) => void;
set onsizechange( set onsizechange(
callback: (params: McpUiSizeChangeNotification["params"]) => void, callback: (params: McpUiSizeChangeNotification["params"]) => void,
@ -114,7 +122,7 @@ export class AppBridge extends Protocol<Request, Notification, Result> {
set onmessage( set onmessage(
callback: ( callback: (
params: McpUiMessageRequest["params"], params: McpUiMessageRequest["params"],
extra: RequestExtra, extra: RequestHandlerExtra,
) => Promise<McpUiMessageResult>, ) => Promise<McpUiMessageResult>,
) { ) {
this.setRequestHandler( this.setRequestHandler(
@ -127,7 +135,7 @@ export class AppBridge extends Protocol<Request, Notification, Result> {
set onopenlink( set onopenlink(
callback: ( callback: (
params: McpUiOpenLinkRequest["params"], params: McpUiOpenLinkRequest["params"],
extra: RequestExtra, extra: RequestHandlerExtra,
) => Promise<McpUiOpenLinkResult>, ) => Promise<McpUiOpenLinkResult>,
) { ) {
this.setRequestHandler( this.setRequestHandler(
@ -168,6 +176,7 @@ export class AppBridge extends Protocol<Request, Notification, Result> {
const requestedVersion = request.params.protocolVersion; const requestedVersion = request.params.protocolVersion;
this._appCapabilities = request.params.appCapabilities; this._appCapabilities = request.params.appCapabilities;
this._appInfo = request.params.appInfo;
const protocolVersion = SUPPORTED_PROTOCOL_VERSIONS.includes( const protocolVersion = SUPPORTED_PROTOCOL_VERSIONS.includes(
requestedVersion, requestedVersion,

View file

@ -6,9 +6,12 @@ import {
import { import {
CallToolRequest, CallToolRequest,
CallToolRequestSchema,
CallToolResult, CallToolResult,
CallToolResultSchema, CallToolResultSchema,
Implementation, Implementation,
ListToolsRequest,
ListToolsRequestSchema,
LoggingMessageNotification, LoggingMessageNotification,
Notification, Notification,
PingRequestSchema, PingRequestSchema,
@ -47,6 +50,10 @@ type AppOptions = ProtocolOptions & {
autoResize?: boolean; autoResize?: boolean;
}; };
type RequestHandlerExtra = Parameters<
Parameters<App["setRequestHandler"]>[1]
>[1];
export class App extends Protocol<Request, Notification, Result> { export class App extends Protocol<Request, Notification, Result> {
private _hostCapabilities?: McpUiHostCapabilities; private _hostCapabilities?: McpUiHostCapabilities;
private _hostInfo?: Implementation; private _hostInfo?: Implementation;
@ -64,6 +71,14 @@ export class App extends Protocol<Request, Notification, Result> {
}); });
} }
getHostCapabilities(): McpUiHostCapabilities | undefined {
return this._hostCapabilities;
}
getHostVersion(): Implementation | undefined {
return this._hostInfo;
}
set ontoolinput( set ontoolinput(
callback: (params: McpUiToolInputNotification["params"]) => void, callback: (params: McpUiToolInputNotification["params"]) => void,
) { ) {
@ -93,6 +108,26 @@ export class App extends Protocol<Request, Notification, Result> {
(n) => callback(n.params), (n) => callback(n.params),
); );
} }
set oncalltool(
callback: (
params: CallToolRequest["params"],
extra: RequestHandlerExtra,
) => Promise<CallToolResult>,
) {
this.setRequestHandler(CallToolRequestSchema, (request, extra) =>
callback(request.params, extra),
);
}
set onlisttools(
callback: (
params: ListToolsRequest["params"],
extra: RequestHandlerExtra,
) => Promise<{ tools: string[] }>,
) {
this.setRequestHandler(ListToolsRequestSchema, (request, extra) =>
callback(request.params, extra),
);
}
assertCapabilityForMethod(method: Request["method"]): void { assertCapabilityForMethod(method: Request["method"]): void {
// TODO // TODO