Skip to content

Commit df6872b

Browse files
Use dedicated type for resource collections.
1 parent c1f4dcb commit df6872b

5 files changed

Lines changed: 10 additions & 7 deletions

File tree

src/ModelContextProtocol.Core/Protocol/ResourcesCapability.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,5 +103,5 @@ public sealed class ResourcesCapability
103103
/// </para>
104104
/// </remarks>
105105
[JsonIgnore]
106-
public McpServerPrimitiveCollection<McpServerResource>? ResourceCollection { get; set; }
106+
public McpServerResourceCollection? ResourceCollection { get; set; }
107107
}

src/ModelContextProtocol.Core/Server/McpServerPrimitiveCollection.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,9 @@ public class McpServerPrimitiveCollection<T> : ICollection<T>, IReadOnlyCollecti
1515
/// <summary>
1616
/// Initializes a new instance of the <see cref="McpServerPrimitiveCollection{T}"/> class.
1717
/// </summary>
18-
public McpServerPrimitiveCollection()
18+
public McpServerPrimitiveCollection(IEqualityComparer<string>? keyComparer = null)
1919
{
20-
_primitives = typeof(T) == typeof(McpServerResource)
21-
? new(UriTemplate.UriTemplateComparer.Instance)
22-
: new();
20+
_primitives = new(keyComparer);
2321
}
2422

2523
/// <summary>Occurs when the collection is changed.</summary>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
namespace ModelContextProtocol.Server;
2+
3+
/// <summary>Provides a thread-safe collection of <see cref="McpServerResource"/> instances, indexed by their URI templates.</summary>
4+
public sealed class McpServerResourceCollection()
5+
: McpServerPrimitiveCollection<McpServerResource>(UriTemplate.UriTemplateComparer.Instance);

src/ModelContextProtocol/McpServerOptionsSetup.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public void Configure(McpServerOptions options)
6363
// a collection, add to it, otherwise create a new one. We want to maintain the identity
6464
// of an existing collection in case someone has provided their own derived type, wants
6565
// change notifications, etc.
66-
McpServerPrimitiveCollection<McpServerResource> resourceCollection = options.Capabilities?.Resources?.ResourceCollection ?? [];
66+
McpServerResourceCollection resourceCollection = options.Capabilities?.Resources?.ResourceCollection ?? [];
6767
foreach (var resource in serverResources)
6868
{
6969
resourceCollection.TryAdd(resource);

tests/ModelContextProtocol.Tests/Server/McpServerResourceTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ public async Task ResourceCollection_UsesCaseInsensitiveHostLookup()
285285
{
286286
McpServerResource t1 = McpServerResource.Create(() => "resource", new() { UriTemplate = "resource://MyCoolResource" });
287287
McpServerResource t2 = McpServerResource.Create(() => "resource", new() { UriTemplate = "resource://MyCoolResource2" });
288-
McpServerPrimitiveCollection<McpServerResource> collection = new() { t1, t2 };
288+
McpServerResourceCollection collection = new() { t1, t2 };
289289
Assert.True(collection.TryGetPrimitive("resource://mycoolresource", out McpServerResource? result));
290290
Assert.Same(t1, result);
291291
}

0 commit comments

Comments
 (0)