Skip to content

Commit 59a4a9d

Browse files
MCP Inspector integration (#625)
* Scaffolding out a MCP Inspector resource This is only designed to work with SSE transport type, as it will configure that through Aspire. If you want to use SSE, you can still launch it, but it will require some manual configuration in the inspector UI once started. Currently it runs the inspector via `npx`, since there's no docker image available. Fixes #622 * Apply suggestions from code review Co-authored-by: David Fowler <davidfowl@gmail.com> * merge main * Initial working integration * Adding mcp inspector to test list * forgot the comma * Adding health checks on the npm resource * Changing how the API surfaces info * Adding README --------- Co-authored-by: David Fowler <davidfowl@gmail.com>
1 parent 0c23ed1 commit 59a4a9d

File tree

20 files changed

+553
-1
lines changed

20 files changed

+553
-1
lines changed

.github/workflows/tests.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ jobs:
3434
Hosting.Java.Tests,
3535
Hosting.LavinMQ.Tests,
3636
Hosting.MailPit.Tests,
37+
Hosting.McpInspector.Tests,
3738
Hosting.Meilisearch.Tests,
3839
Hosting.MongoDB.Extensions.Tests,
3940
Hosting.MySql.Extensions.Tests,
@@ -124,4 +125,3 @@ jobs:
124125
with:
125126
name: testresults-${{ matrix.name }}-${{ matrix.os }}
126127
path: testresults/**
127-

CommunityToolkit.Aspire.slnx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@
7272
<Project Path="examples/masstransit-rabbitmq/CommunityToolkit.Aspire.MassTransit.RabbitMQ.MessageTypes/CommunityToolkit.Aspire.MassTransit.RabbitMQ.MessageTypes.csproj" />
7373
<Project Path="examples/masstransit-rabbitmq/CommunityToolkit.Aspire.MassTransit.RabbitMQ.Publisher/CommunityToolkit.Aspire.MassTransit.RabbitMQ.Publisher.csproj" />
7474
</Folder>
75+
<Folder Name="/examples/mcp-inspector/">
76+
<Project Path="examples/mcp-inspector/CommunityToolkit.Aspire.Hosting.McpInspector.AppHost/CommunityToolkit.Aspire.Hosting.McpInspector.AppHost.csproj" />
77+
<Project Path="examples/mcp-inspector/CommunityToolkit.Aspire.Hosting.McpInspector.McpServer/CommunityToolkit.Aspire.Hosting.McpInspector.McpServer.csproj" />
78+
</Folder>
7579
<Folder Name="/examples/meilisearch/">
7680
<Project Path="examples/meilisearch/CommunityToolkit.Aspire.Hosting.Meilisearch.ApiService/CommunityToolkit.Aspire.Hosting.Meilisearch.ApiService.csproj" />
7781
<Project Path="examples/meilisearch/CommunityToolkit.Aspire.Hosting.Meilisearch.AppHost/CommunityToolkit.Aspire.Hosting.Meilisearch.AppHost.csproj" />
@@ -150,6 +154,7 @@
150154
<Project Path="src/CommunityToolkit.Aspire.Hosting.k6/CommunityToolkit.Aspire.Hosting.k6.csproj" />
151155
<Project Path="src/CommunityToolkit.Aspire.Hosting.LavinMQ/CommunityToolkit.Aspire.Hosting.LavinMQ.csproj" />
152156
<Project Path="src/CommunityToolkit.Aspire.Hosting.MailPit/CommunityToolkit.Aspire.Hosting.MailPit.csproj" />
157+
<Project Path="src/CommunityToolkit.Aspire.Hosting.McpInspector/CommunityToolkit.Aspire.Hosting.McpInspector.csproj" />
153158
<Project Path="src/CommunityToolkit.Aspire.Hosting.Meilisearch/CommunityToolkit.Aspire.Hosting.Meilisearch.csproj" />
154159
<Project Path="src/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions.csproj" />
155160
<Project Path="src/CommunityToolkit.Aspire.Hosting.MySql.Extensions/CommunityToolkit.Aspire.Hosting.MySql.Extensions.csproj" />
@@ -194,6 +199,7 @@
194199
<Project Path="tests/CommunityToolkit.Aspire.Hosting.k6.Tests/CommunityToolkit.Aspire.Hosting.k6.Tests.csproj" />
195200
<Project Path="tests/CommunityToolkit.Aspire.Hosting.LavinMQ.Tests/CommunityToolkit.Aspire.Hosting.LavinMQ.Tests.csproj" />
196201
<Project Path="tests/CommunityToolkit.Aspire.Hosting.MailPit.Tests/CommunityToolkit.Aspire.Hosting.MailPit.Tests.csproj" />
202+
<Project Path="tests/CommunityToolkit.Aspire.Hosting.McpInspector.Tests/CommunityToolkit.Aspire.Hosting.McpInspector.Tests.csproj" />
197203
<Project Path="tests/CommunityToolkit.Aspire.Hosting.Meilisearch.Tests/CommunityToolkit.Aspire.Hosting.Meilisearch.Tests.csproj" />
198204
<Project Path="tests/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions.Tests/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions.Tests.csproj" />
199205
<Project Path="tests/CommunityToolkit.Aspire.Hosting.MySql.Extensions.Tests/CommunityToolkit.Aspire.Hosting.MySql.Extensions.Tests.csproj" />

Directory.Packages.props

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@
8383
<PackageVersion Include="YamlDotNet" Version="16.3.0" />
8484
<PackageVersion Include="Swashbuckle.AspNetCore" Version="7.3.1" />
8585
<PackageVersion Include="Microsoft.PowerShell.SDK" Version="7.4.10" />
86+
<PackageVersion Include="ModelContextProtocol" Version="0.3.0-preview.1" />
87+
<PackageVersion Include="ModelContextProtocol.AspNetCore" Version="0.3.0-preview.1" />
8688
</ItemGroup>
8789
<ItemGroup Label="Testing">
8890
<!-- Testing packages -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<Sdk Name="Aspire.AppHost.Sdk" Version="$(AspireAppHostSdkVersion)" />
4+
5+
<PropertyGroup>
6+
<OutputType>Exe</OutputType>
7+
<ImplicitUsings>enable</ImplicitUsings>
8+
<Nullable>enable</Nullable>
9+
<IsAspireHost>true</IsAspireHost>
10+
<UserSecretsId>985811f2-fd0c-480a-885b-bc6cc0574b62</UserSecretsId>
11+
</PropertyGroup>
12+
13+
<ItemGroup>
14+
<PackageReference Include="Aspire.Hosting.AppHost" />
15+
</ItemGroup>
16+
17+
<ItemGroup>
18+
<ProjectReference Include="../../../src/CommunityToolkit.Aspire.Hosting.McpInspector/CommunityToolkit.Aspire.Hosting.McpInspector.csproj" IsAspireProjectResource="false" />
19+
<ProjectReference Include="../CommunityToolkit.Aspire.Hosting.McpInspector.McpServer/CommunityToolkit.Aspire.Hosting.McpInspector.McpServer.csproj" />
20+
</ItemGroup>
21+
22+
</Project>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
var builder = DistributedApplication.CreateBuilder(args);
2+
3+
var server = builder.AddProject<Projects.CommunityToolkit_Aspire_Hosting_McpInspector_McpServer>("mcp-server");
4+
5+
builder.AddMcpInspector("mcp-inspector")
6+
.WithMcpServer(server)
7+
;
8+
9+
builder.Build().Run();
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"$schema": "https://json.schemastore.org/launchsettings.json",
3+
"profiles": {
4+
"https": {
5+
"commandName": "Project",
6+
"dotnetRunMessages": true,
7+
"launchBrowser": true,
8+
"applicationUrl": "https://localhost:17118;http://localhost:15207",
9+
"environmentVariables": {
10+
"ASPNETCORE_ENVIRONMENT": "Development",
11+
"DOTNET_ENVIRONMENT": "Development",
12+
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21173",
13+
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22290"
14+
}
15+
},
16+
"http": {
17+
"commandName": "Project",
18+
"dotnetRunMessages": true,
19+
"launchBrowser": true,
20+
"applicationUrl": "http://localhost:15207",
21+
"environmentVariables": {
22+
"ASPNETCORE_ENVIRONMENT": "Development",
23+
"DOTNET_ENVIRONMENT": "Development",
24+
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19133",
25+
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20023"
26+
}
27+
}
28+
}
29+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"Logging": {
3+
"LogLevel": {
4+
"Default": "Information",
5+
"Microsoft.AspNetCore": "Warning",
6+
"Aspire.Hosting.Dcp": "Warning"
7+
}
8+
}
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<Project Sdk="Microsoft.NET.Sdk.Web">
2+
<ItemGroup>
3+
<PackageReference Include="ModelContextProtocol" />
4+
<PackageReference Include="ModelContextProtocol.AspNetCore" />
5+
</ItemGroup>
6+
</Project>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using ModelContextProtocol.Server;
2+
using System.ComponentModel;
3+
4+
var builder = WebApplication.CreateBuilder(args);
5+
6+
builder.Services
7+
.AddMcpServer()
8+
.WithHttpTransport()
9+
.WithTools<McpServerTools>();
10+
11+
var app = builder.Build();
12+
13+
app.MapMcp();
14+
15+
app.Run();
16+
17+
[McpServerToolType]
18+
class McpServerTools
19+
{
20+
[McpServerTool, Description("An echo tool")]
21+
public static string Echo(string message) => $"Echo: {message}";
22+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"$schema": "https://json.schemastore.org/launchsettings.json",
3+
"profiles": {
4+
"http": {
5+
"commandName": "Project",
6+
"dotnetRunMessages": true,
7+
"launchBrowser": true,
8+
"applicationUrl": "http://localhost:5230",
9+
"environmentVariables": {
10+
"ASPNETCORE_ENVIRONMENT": "Development"
11+
}
12+
},
13+
"https": {
14+
"commandName": "Project",
15+
"dotnetRunMessages": true,
16+
"launchBrowser": true,
17+
"applicationUrl": "https://localhost:7295;http://localhost:5230",
18+
"environmentVariables": {
19+
"ASPNETCORE_ENVIRONMENT": "Development"
20+
}
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)