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];
type RequestExtra = Parameters<
type RequestHandlerExtra = Parameters<
Parameters<AppBridge["setRequestHandler"]>[1]
>[1];
export class AppBridge extends Protocol<Request, Notification, Result> {
private _appCapabilities?: McpUiAppCapabilities;
private _appInfo?: Implementation;
constructor(
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(
callback: (params: McpUiSizeChangeNotification["params"]) => void,
@ -114,7 +122,7 @@ export class AppBridge extends Protocol<Request, Notification, Result> {
set onmessage(
callback: (
params: McpUiMessageRequest["params"],
extra: RequestExtra,
extra: RequestHandlerExtra,
) => Promise<McpUiMessageResult>,
) {
this.setRequestHandler(
@ -127,7 +135,7 @@ export class AppBridge extends Protocol<Request, Notification, Result> {
set onopenlink(
callback: (
params: McpUiOpenLinkRequest["params"],
extra: RequestExtra,
extra: RequestHandlerExtra,
) => Promise<McpUiOpenLinkResult>,
) {
this.setRequestHandler(
@ -168,6 +176,7 @@ export class AppBridge extends Protocol<Request, Notification, Result> {
const requestedVersion = request.params.protocolVersion;
this._appCapabilities = request.params.appCapabilities;
this._appInfo = request.params.appInfo;
const protocolVersion = SUPPORTED_PROTOCOL_VERSIONS.includes(
requestedVersion,

View file

@ -6,9 +6,12 @@ import {
import {
CallToolRequest,
CallToolRequestSchema,
CallToolResult,
CallToolResultSchema,
Implementation,
ListToolsRequest,
ListToolsRequestSchema,
LoggingMessageNotification,
Notification,
PingRequestSchema,
@ -47,6 +50,10 @@ type AppOptions = ProtocolOptions & {
autoResize?: boolean;
};
type RequestHandlerExtra = Parameters<
Parameters<App["setRequestHandler"]>[1]
>[1];
export class App extends Protocol<Request, Notification, Result> {
private _hostCapabilities?: McpUiHostCapabilities;
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(
callback: (params: McpUiToolInputNotification["params"]) => void,
) {
@ -93,6 +108,26 @@ export class App extends Protocol<Request, Notification, Result> {
(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 {
// TODO