Skip to content

Commit 4e70cc1

Browse files
Use a hardcoded mcp hostname in derived resource template URIs and ensure built-in resources work with the VS Code client.
1 parent d5dd345 commit 4e70cc1

3 files changed

Lines changed: 62 additions & 62 deletions

File tree

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));
298+
template.Append("resource://mcp/").Append(Uri.EscapeDataString(name));
299299

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

tests/ModelContextProtocol.Tests/Configuration/McpServerBuilderExtensionsResourcesTests.cs

Lines changed: 6 additions & 6 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://mcp/{nameof(SimpleResources.ThrowsException)}",
224224
cancellationToken: TestContext.Current.CancellationToken));
225225
}
226226

@@ -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://mcp/{nameof(SimpleResources.SomeNeatDirectResource)}");
272+
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResourceTemplate?.UriTemplate == $"resource://mcp/{nameof(SimpleResources.SomeNeatTemplatedResource)}{{?name}}");
273273
}
274274

275275
[Fact]
@@ -282,9 +282,9 @@ public void Register_Resources_From_Multiple_Sources()
282282
.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)}");
285+
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResource?.Uri == $"resource://mcp/{nameof(SimpleResources.SomeNeatDirectResource)}");
286+
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResourceTemplate?.UriTemplate == $"resource://mcp/{nameof(SimpleResources.SomeNeatTemplatedResource)}{{?name}}");
287+
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResourceTemplate?.UriTemplate == $"resource://mcp/{nameof(MoreResources.AnotherNeatDirectResource)}");
288288
Assert.Contains(services.GetServices<McpServerResource>(), t => t.ProtocolResourceTemplate.UriTemplate == "myResources:///returns42/{something}");
289289
}
290290

0 commit comments

Comments
 (0)