Skip to content

Commit 8ac79a9

Browse files
authored
lib: add capabilities & version getters (#24)
* add App{,Bridge}.get{App,Host}{Version,Capabilities}() * Add App.{oncalltool,onlisttools}
1 parent 1311fe8 commit 8ac79a9

File tree

2 files changed

+48
-4
lines changed

2 files changed

+48
-4
lines changed

src/app-bridge.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,13 @@ type HostOptions = ProtocolOptions;
6363

6464
export const SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION];
6565

66-
type RequestExtra = Parameters<
66+
type RequestHandlerExtra = Parameters<
6767
Parameters<AppBridge["setRequestHandler"]>[1]
6868
>[1];
6969

7070
export class AppBridge extends Protocol<Request, Notification, Result> {
7171
private _appCapabilities?: McpUiAppCapabilities;
72+
private _appInfo?: Implementation;
7273

7374
constructor(
7475
private _client: Client,
@@ -88,7 +89,14 @@ export class AppBridge extends Protocol<Request, Notification, Result> {
8889
});
8990
}
9091

91-
onping?: (params: PingRequest["params"], extra: RequestExtra) => void;
92+
getAppCapabilities(): McpUiAppCapabilities | undefined {
93+
return this._appCapabilities;
94+
}
95+
getAppVersion(): Implementation | undefined {
96+
return this._appInfo;
97+
}
98+
99+
onping?: (params: PingRequest["params"], extra: RequestHandlerExtra) => void;
92100

93101
set onsizechange(
94102
callback: (params: McpUiSizeChangeNotification["params"]) => void,
@@ -114,7 +122,7 @@ export class AppBridge extends Protocol<Request, Notification, Result> {
114122
set onmessage(
115123
callback: (
116124
params: McpUiMessageRequest["params"],
117-
extra: RequestExtra,
125+
extra: RequestHandlerExtra,
118126
) => Promise<McpUiMessageResult>,
119127
) {
120128
this.setRequestHandler(
@@ -127,7 +135,7 @@ export class AppBridge extends Protocol<Request, Notification, Result> {
127135
set onopenlink(
128136
callback: (
129137
params: McpUiOpenLinkRequest["params"],
130-
extra: RequestExtra,
138+
extra: RequestHandlerExtra,
131139
) => Promise<McpUiOpenLinkResult>,
132140
) {
133141
this.setRequestHandler(
@@ -168,6 +176,7 @@ export class AppBridge extends Protocol<Request, Notification, Result> {
168176
const requestedVersion = request.params.protocolVersion;
169177

170178
this._appCapabilities = request.params.appCapabilities;
179+
this._appInfo = request.params.appInfo;
171180

172181
const protocolVersion = SUPPORTED_PROTOCOL_VERSIONS.includes(
173182
requestedVersion,

src/app.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ import {
66

77
import {
88
CallToolRequest,
9+
CallToolRequestSchema,
910
CallToolResult,
1011
CallToolResultSchema,
1112
Implementation,
13+
ListToolsRequest,
14+
ListToolsRequestSchema,
1215
LoggingMessageNotification,
1316
Notification,
1417
PingRequestSchema,
@@ -47,6 +50,10 @@ type AppOptions = ProtocolOptions & {
4750
autoResize?: boolean;
4851
};
4952

53+
type RequestHandlerExtra = Parameters<
54+
Parameters<App["setRequestHandler"]>[1]
55+
>[1];
56+
5057
export class App extends Protocol<Request, Notification, Result> {
5158
private _hostCapabilities?: McpUiHostCapabilities;
5259
private _hostInfo?: Implementation;
@@ -64,6 +71,14 @@ export class App extends Protocol<Request, Notification, Result> {
6471
});
6572
}
6673

74+
getHostCapabilities(): McpUiHostCapabilities | undefined {
75+
return this._hostCapabilities;
76+
}
77+
78+
getHostVersion(): Implementation | undefined {
79+
return this._hostInfo;
80+
}
81+
6782
set ontoolinput(
6883
callback: (params: McpUiToolInputNotification["params"]) => void,
6984
) {
@@ -93,6 +108,26 @@ export class App extends Protocol<Request, Notification, Result> {
93108
(n) => callback(n.params),
94109
);
95110
}
111+
set oncalltool(
112+
callback: (
113+
params: CallToolRequest["params"],
114+
extra: RequestHandlerExtra,
115+
) => Promise<CallToolResult>,
116+
) {
117+
this.setRequestHandler(CallToolRequestSchema, (request, extra) =>
118+
callback(request.params, extra),
119+
);
120+
}
121+
set onlisttools(
122+
callback: (
123+
params: ListToolsRequest["params"],
124+
extra: RequestHandlerExtra,
125+
) => Promise<{ tools: string[] }>,
126+
) {
127+
this.setRequestHandler(ListToolsRequestSchema, (request, extra) =>
128+
callback(request.params, extra),
129+
);
130+
}
96131

97132
assertCapabilityForMethod(method: Request["method"]): void {
98133
// TODO

0 commit comments

Comments
 (0)