Skip to content

Commit fee0573

Browse files
Address feedback
1 parent 61d3d9d commit fee0573

5 files changed

Lines changed: 80 additions & 79 deletions

File tree

samples/AspNetCoreSseServer/Program.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
using OpenTelemetry.Metrics;
33
using OpenTelemetry.Trace;
44
using TestServerWithHosting.Tools;
5+
using TestServerWithHosting.Resources;
56

67
var builder = WebApplication.CreateBuilder(args);
78
builder.Services.AddMcpServer()
89
.WithHttpTransport()
910
.WithTools<EchoTool>()
10-
.WithTools<SampleLlmTool>();
11+
.WithTools<SampleLlmTool>()
12+
.WithResources<SimpleResourceType>();
1113

1214
builder.Services.AddOpenTelemetry()
1315
.WithTracing(b => b.AddSource("*")
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using ModelContextProtocol.Protocol;
2+
using ModelContextProtocol.Server;
3+
using System.ComponentModel;
4+
5+
namespace TestServerWithHosting.Resources;
6+
7+
[McpServerResourceType]
8+
public class SimpleResourceType
9+
{
10+
[McpServerResource, Description("A direct text resource")]
11+
public static string DirectTextResource() => "This is a direct resource";
12+
}

src/ModelContextProtocol.Core/Server/AIFunctionMcpServerResource.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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.ToLowerInvariant()));
298+
template.Append("resource:///").Append(Uri.EscapeDataString(name));
299299

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

tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsResourcesTests.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ public async Task Throws_When_Resource_Fails()
220220
await using IMcpClient client = await CreateMcpClientForServer();
221221

222222
await Assert.ThrowsAsync<McpException>(async () => await client.ReadResourceAsync(
223-
$"resource://{nameof(SimpleResources.ThrowsException)}",
223+
$"resource:///{nameof(SimpleResources.ThrowsException)}",
224224
cancellationToken: TestContext.Current.CancellationToken));
225225
}
226226

@@ -230,7 +230,7 @@ public async Task Throws_Exception_On_Unknown_Resource()
230230
await using IMcpClient client = await CreateMcpClientForServer();
231231

232232
var e = await Assert.ThrowsAsync<McpException>(async () => await client.ReadResourceAsync(
233-
"test://NotRegisteredResource",
233+
"test:///NotRegisteredResource",
234234
cancellationToken: TestContext.Current.CancellationToken));
235235

236236
Assert.Contains("Resource not found", e.Message);
@@ -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).ToLowerInvariant()}");
272-
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResourceTemplate?.UriTemplate == $"resource://{nameof(SimpleResources.SomeNeatTemplatedResource).ToLowerInvariant()}{{?name}}");
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}}");
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).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}");
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}");
289289
}
290290

291291
[McpServerResourceType]

0 commit comments

Comments
 (0)