From 3d32ce69df98215ca21c080a6693a38a856eb10e Mon Sep 17 00:00:00 2001 From: Justin Spahr-Summers Date: Mon, 4 Nov 2024 22:12:43 +0000 Subject: [PATCH 1/3] Convenience methods for Client --- src/client/index.ts | 89 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/src/client/index.ts b/src/client/index.ts index e4ae4da98..a68f75cc7 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -11,6 +11,24 @@ import { Request, Result, ServerCapabilities, + CompleteRequest, + GetPromptRequest, + ListPromptsRequest, + ListResourcesRequest, + ReadResourceRequest, + SubscribeRequest, + UnsubscribeRequest, + CallToolRequest, + ListToolsRequest, + CompleteResultSchema, + GetPromptResultSchema, + ListPromptsResultSchema, + ListResourcesResultSchema, + ReadResourceResultSchema, + CallToolResultSchema, + ListToolsResultSchema, + EmptyResultSchema, + LoggingLevel, } from "../types.js"; /** @@ -103,4 +121,75 @@ export class Client< getServerVersion(): Implementation | undefined { return this._serverVersion; } + + async ping() { + return this.request({ method: "ping" }, EmptyResultSchema); + } + + async complete(params: CompleteRequest["params"]) { + return this.request( + { method: "completion/complete", params }, + CompleteResultSchema, + ); + } + + async setLoggingLevel(level: LoggingLevel) { + return this.request( + { method: "logging/setLevel", params: { level } }, + EmptyResultSchema, + ); + } + + async getPrompt(params: GetPromptRequest["params"]) { + return this.request( + { method: "prompts/get", params }, + GetPromptResultSchema, + ); + } + + async listPrompts(params?: ListPromptsRequest["params"]) { + return this.request( + { method: "prompts/list", params }, + ListPromptsResultSchema, + ); + } + + async listResources(params?: ListResourcesRequest["params"]) { + return this.request( + { method: "resources/list", params }, + ListResourcesResultSchema, + ); + } + + async readResource(params: ReadResourceRequest["params"]) { + return this.request( + { method: "resources/read", params }, + ReadResourceResultSchema, + ); + } + + async subscribeResource(params: SubscribeRequest["params"]) { + return this.request( + { method: "resources/subscribe", params }, + EmptyResultSchema, + ); + } + + async unsubscribeResource(params: UnsubscribeRequest["params"]) { + return this.request( + { method: "resources/unsubscribe", params }, + EmptyResultSchema, + ); + } + + async callTool(params: CallToolRequest["params"]) { + return this.request({ method: "tools/call", params }, CallToolResultSchema); + } + + async listTools(params?: ListToolsRequest["params"]) { + return this.request( + { method: "tools/list", params }, + ListToolsResultSchema, + ); + } } From a9b6ae667923a181e5036e4864664a5f2285e649 Mon Sep 17 00:00:00 2001 From: Justin Spahr-Summers Date: Mon, 4 Nov 2024 22:15:16 +0000 Subject: [PATCH 2/3] Convenience methods for Server --- src/server/index.ts | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/server/index.ts b/src/server/index.ts index 71c22ccd2..e4b5e1a53 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -18,6 +18,11 @@ import { ListToolsRequestSchema, ListPromptsRequestSchema, SetLevelRequestSchema, + CreateMessageRequest, + CreateMessageResultSchema, + EmptyResultSchema, + LoggingMessageNotification, + ResourceUpdatedNotification, } from "../types.js"; /** @@ -133,4 +138,40 @@ export class Server< : undefined, }; } + + async ping() { + return this.request({ method: "ping" }, EmptyResultSchema); + } + + async createMessage(params: CreateMessageRequest["params"]) { + return this.request( + { method: "sampling/createMessage", params }, + CreateMessageResultSchema, + ); + } + + async sendLoggingMessage(params: LoggingMessageNotification["params"]) { + return this.notification({ method: "notifications/message", params }); + } + + async sendResourceUpdated(params: ResourceUpdatedNotification["params"]) { + return this.notification({ + method: "notifications/resources/updated", + params, + }); + } + + async sendResourceListChanged() { + return this.notification({ + method: "notifications/resources/list_changed", + }); + } + + async sendToolListChanged() { + return this.notification({ method: "notifications/tools/list_changed" }); + } + + async sendPromptListChanged() { + return this.notification({ method: "notifications/prompts/list_changed" }); + } } From 12c92341b44518dea12bd230af3b82a4ce3c3ba8 Mon Sep 17 00:00:00 2001 From: Justin Spahr-Summers Date: Mon, 4 Nov 2024 22:18:46 +0000 Subject: [PATCH 3/3] Support onprogress callbacks --- src/client/index.ts | 49 ++++++++++++++++++++++++++++++++++++--------- src/server/index.ts | 8 ++++++-- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/client/index.ts b/src/client/index.ts index a68f75cc7..a18b45d08 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -1,4 +1,4 @@ -import { Protocol } from "../shared/protocol.js"; +import { ProgressCallback, Protocol } from "../shared/protocol.js"; import { Transport } from "../shared/transport.js"; import { ClientNotification, @@ -126,10 +126,14 @@ export class Client< return this.request({ method: "ping" }, EmptyResultSchema); } - async complete(params: CompleteRequest["params"]) { + async complete( + params: CompleteRequest["params"], + onprogress?: ProgressCallback, + ) { return this.request( { method: "completion/complete", params }, CompleteResultSchema, + onprogress, ); } @@ -140,31 +144,47 @@ export class Client< ); } - async getPrompt(params: GetPromptRequest["params"]) { + async getPrompt( + params: GetPromptRequest["params"], + onprogress?: ProgressCallback, + ) { return this.request( { method: "prompts/get", params }, GetPromptResultSchema, + onprogress, ); } - async listPrompts(params?: ListPromptsRequest["params"]) { + async listPrompts( + params?: ListPromptsRequest["params"], + onprogress?: ProgressCallback, + ) { return this.request( { method: "prompts/list", params }, ListPromptsResultSchema, + onprogress, ); } - async listResources(params?: ListResourcesRequest["params"]) { + async listResources( + params?: ListResourcesRequest["params"], + onprogress?: ProgressCallback, + ) { return this.request( { method: "resources/list", params }, ListResourcesResultSchema, + onprogress, ); } - async readResource(params: ReadResourceRequest["params"]) { + async readResource( + params: ReadResourceRequest["params"], + onprogress?: ProgressCallback, + ) { return this.request( { method: "resources/read", params }, ReadResourceResultSchema, + onprogress, ); } @@ -182,14 +202,25 @@ export class Client< ); } - async callTool(params: CallToolRequest["params"]) { - return this.request({ method: "tools/call", params }, CallToolResultSchema); + async callTool( + params: CallToolRequest["params"], + onprogress?: ProgressCallback, + ) { + return this.request( + { method: "tools/call", params }, + CallToolResultSchema, + onprogress, + ); } - async listTools(params?: ListToolsRequest["params"]) { + async listTools( + params?: ListToolsRequest["params"], + onprogress?: ProgressCallback, + ) { return this.request( { method: "tools/list", params }, ListToolsResultSchema, + onprogress, ); } } diff --git a/src/server/index.ts b/src/server/index.ts index e4b5e1a53..c6350fffe 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -1,4 +1,4 @@ -import { Protocol } from "../shared/protocol.js"; +import { ProgressCallback, Protocol } from "../shared/protocol.js"; import { ClientCapabilities, Implementation, @@ -143,10 +143,14 @@ export class Server< return this.request({ method: "ping" }, EmptyResultSchema); } - async createMessage(params: CreateMessageRequest["params"]) { + async createMessage( + params: CreateMessageRequest["params"], + onprogress?: ProgressCallback, + ) { return this.request( { method: "sampling/createMessage", params }, CreateMessageResultSchema, + onprogress, ); }