Skip to content

Commit 61d3d9d

Browse files
Use lowercase host in resource URI template derivation.
1 parent 2bcff31 commit 61d3d9d

3 files changed

Lines changed: 81 additions & 60 deletions

File tree

src/ModelContextProtocol.Core/Server/AIFunctionMcpServerResource.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ private static AIFunctionFactoryOptions CreateAIFunctionFactoryOptions(
264264
Name = name,
265265
Title = options?.Title,
266266
Description = options?.Description,
267-
MimeType = options?.MimeType,
267+
MimeType = options?.MimeType ?? "application/octet-stream",
268268
};
269269

270270
return new AIFunctionMcpServerResource(function, resource);
@@ -295,7 +295,7 @@ private static string DeriveUriTemplate(string name, AIFunction function)
295295
{
296296
StringBuilder template = new();
297297

298-
template.Append("resource://").Append(Uri.EscapeDataString(name));
298+
template.Append("resource://").Append(Uri.EscapeDataString(name.ToLowerInvariant()));
299299

300300
if (function.JsonSchema.TryGetProperty("properties", out JsonElement properties))
301301
{

tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsResourcesTests.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -268,8 +268,8 @@ public void Register_Resources_From_Current_Assembly()
268268
sc.AddMcpServer().WithResourcesFromAssembly();
269269
IServiceProvider services = sc.BuildServiceProvider();
270270

271-
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResource?.Uri == $"resource://{nameof(SimpleResources.SomeNeatDirectResource)}");
272-
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResourceTemplate?.UriTemplate == $"resource://{nameof(SimpleResources.SomeNeatTemplatedResource)}{{?name}}");
271+
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResource?.Uri == $"resource://{nameof(SimpleResources.SomeNeatDirectResource).ToLowerInvariant()}");
272+
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResourceTemplate?.UriTemplate == $"resource://{nameof(SimpleResources.SomeNeatTemplatedResource).ToLowerInvariant()}{{?name}}");
273273
}
274274

275275
[Fact]
@@ -279,13 +279,13 @@ public void Register_Resources_From_Multiple_Sources()
279279
sc.AddMcpServer()
280280
.WithResources<SimpleResources>()
281281
.WithResources<MoreResources>()
282-
.WithResources([McpServerResource.Create(() => "42", new() { UriTemplate = "myResources://Returns42/{something}" })]);
282+
.WithResources([McpServerResource.Create(() => "42", new() { UriTemplate = "myResources://returns42/{something}" })]);
283283
IServiceProvider services = sc.BuildServiceProvider();
284284

285-
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResource?.Uri == $"resource://{nameof(SimpleResources.SomeNeatDirectResource)}");
286-
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResourceTemplate?.UriTemplate == $"resource://{nameof(SimpleResources.SomeNeatTemplatedResource)}{{?name}}");
287-
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResourceTemplate?.UriTemplate == $"resource://{nameof(MoreResources.AnotherNeatDirectResource)}");
288-
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResourceTemplate.UriTemplate == "myResources://Returns42/{something}");
285+
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResource?.Uri == $"resource://{nameof(SimpleResources.SomeNeatDirectResource).ToLowerInvariant()}");
286+
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResourceTemplate?.UriTemplate == $"resource://{nameof(SimpleResources.SomeNeatTemplatedResource).ToLowerInvariant()}{{?name}}");
287+
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResourceTemplate?.UriTemplate == $"resource://{nameof(MoreResources.AnotherNeatDirectResource).ToLowerInvariant()}");
288+
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResourceTemplate.UriTemplate == "myResources://returns42/{something}");
289289
}
290290

291291
[McpServerResourceType]

0 commit comments

Comments
 (0)