Skip to content

Commit 609cdc7

Browse files
carlpeasleemattt
andauthored
Add Client.listResourceTemplates method (#125)
* adds listResourceTemplates to client for #124 * add pagination to resources/templates/list from @mattt Co-authored-by: Mattt <[email protected]> * adds cursor functionality to ListResourceTemplates * updates the client method to use the updated signature --------- Co-authored-by: Mattt <[email protected]>
1 parent 14fddc4 commit 609cdc7

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

Sources/MCP/Client/Client.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,20 @@ public actor Client {
578578
_ = try await send(request)
579579
}
580580

581+
public func listResourceTemplates(cursor: String? = nil) async throws -> (
582+
templates: [Resource.Template], nextCursor: String?
583+
) {
584+
try validateServerCapability(\.resources, "Resources")
585+
let request: Request<ListResourceTemplates>
586+
if let cursor = cursor {
587+
request = ListResourceTemplates.request(.init(cursor: cursor))
588+
} else {
589+
request = ListResourceTemplates.request(.init())
590+
}
591+
let result = try await send(request)
592+
return (templates: result.templates, nextCursor: result.nextCursor)
593+
}
594+
581595
// MARK: - Tools
582596

583597
public func listTools(cursor: String? = nil) async throws -> (

Sources/MCP/Server/Resources.swift

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,17 +149,30 @@ public enum ReadResource: Method {
149149
public enum ListResourceTemplates: Method {
150150
public static let name: String = "resources/templates/list"
151151

152-
public typealias Parameters = Empty
152+
public struct Parameters: NotRequired, Hashable, Codable, Sendable {
153+
public let cursor: String?
154+
155+
public init() {
156+
self.cursor = nil
157+
}
158+
159+
public init(cursor: String) {
160+
self.cursor = cursor
161+
}
162+
}
153163

154164
public struct Result: Hashable, Codable, Sendable {
155165
public let templates: [Resource.Template]
166+
public let nextCursor: String?
156167

157-
public init(templates: [Resource.Template]) {
168+
public init(templates: [Resource.Template], nextCursor: String? = nil) {
158169
self.templates = templates
170+
self.nextCursor = nextCursor
159171
}
160172

161173
private enum CodingKeys: String, CodingKey {
162174
case templates = "resourceTemplates"
175+
case nextCursor
163176
}
164177
}
165178
}

0 commit comments

Comments
 (0)