From 2a8949457b4675527711efc3c5b68d71e6f07477 Mon Sep 17 00:00:00 2001 From: Ryan Ramage Date: Thu, 27 Mar 2025 10:20:42 -0600 Subject: [PATCH 1/5] Add community highlight - breakout room Highlight the exciting example of multi-agent collaboration using the breakout room p2p protocol. --- examples.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/examples.mdx b/examples.mdx index 2969bcc..8cdc694 100644 --- a/examples.mdx +++ b/examples.mdx @@ -60,6 +60,7 @@ A growing ecosystem of community-developed servers extends MCP's capabilities: - **[Docker](https://github.com/ckreiling/mcp-server-docker)** - Manage containers, images, volumes, and networks - **[Kubernetes](https://github.com/Flux159/mcp-server-kubernetes)** - Manage pods, deployments, and services - **[Linear](https://github.com/jerhadf/linear-mcp-server)** - Project management and issue tracking +- **[BreakoutRoom](https://github.com/agree-able/room-mcp)** - Agents accomplishing goals together in p2p rooms - **[Snowflake](https://github.com/datawiz168/mcp-snowflake-service)** - Interact with Snowflake databases - **[Spotify](https://github.com/varunneal/spotify-mcp)** - Control Spotify playback and manage playlists - **[Todoist](https://github.com/abhiz123/todoist-mcp-server)** - Task management integration From 615ddbbc782241434aea574afd60aaa00c0780a3 Mon Sep 17 00:00:00 2001 From: Ryan Ramage Date: Thu, 27 Mar 2025 10:42:14 -0600 Subject: [PATCH 2/5] Update examples.mdx Put in alphabetical order --- examples.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples.mdx b/examples.mdx index 8cdc694..c890b84 100644 --- a/examples.mdx +++ b/examples.mdx @@ -57,10 +57,10 @@ These MCP servers are maintained by companies for their platforms: A growing ecosystem of community-developed servers extends MCP's capabilities: +- **[BreakoutRoom](https://github.com/agree-able/room-mcp)** - Agents accomplishing goals together in p2p rooms - **[Docker](https://github.com/ckreiling/mcp-server-docker)** - Manage containers, images, volumes, and networks - **[Kubernetes](https://github.com/Flux159/mcp-server-kubernetes)** - Manage pods, deployments, and services - **[Linear](https://github.com/jerhadf/linear-mcp-server)** - Project management and issue tracking -- **[BreakoutRoom](https://github.com/agree-able/room-mcp)** - Agents accomplishing goals together in p2p rooms - **[Snowflake](https://github.com/datawiz168/mcp-snowflake-service)** - Interact with Snowflake databases - **[Spotify](https://github.com/varunneal/spotify-mcp)** - Control Spotify playback and manage playlists - **[Todoist](https://github.com/abhiz123/todoist-mcp-server)** - Task management integration From 0e679f9697e131b7b7c0bb75eb2e0ad03c057031 Mon Sep 17 00:00:00 2001 From: Michael Bleigh Date: Thu, 27 Mar 2025 13:12:27 -0700 Subject: [PATCH 3/5] Update name of Genkit (#224) * Update name of Genkit This is the updated official name of the library (no brand prefix). * Update clients.mdx --- clients.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/clients.mdx b/clients.mdx index 37d1a6c..5201b06 100644 --- a/clients.mdx +++ b/clients.mdx @@ -18,7 +18,7 @@ This page provides an overview of applications that support the Model Context Pr | [Cursor][Cursor] | ❌ | ❌ | ✅ | ❌ | ❌ | Supports tools. | | [Emacs Mcp][Mcp.el] | ❌ | ❌ | ✅ | ❌ | ❌ | Supports tools in Emacs. | | [fast-agent][fast-agent] | ✅ | ✅ | ✅ | ✅ | ✅ | Full multimodal MCP support, with end-to-end tests | -| [Firebase Genkit][Genkit] | ⚠️ | ✅ | ✅ | ❌ | ❌ | Supports resource list and lookup through tools. | +| [Genkit][Genkit] | ⚠️ | ✅ | ✅ | ❌ | ❌ | Supports resource list and lookup through tools. | | [GenAIScript][GenAIScript] | ❌ | ❌ | ✅ | ❌ | ❌ | Supports tools. | | [Goose][Goose] | ❌ | ❌ | ✅ | ❌ | ❌ | Supports tools. | | [LibreChat][LibreChat] | ❌ | ❌ | ✅ | ❌ | ❌ | Supports tools for Agents | @@ -149,8 +149,8 @@ Claude Code is an interactive agentic coding tool from Anthropic that helps you - Built in support for "Building Effective Agents" workflows. - Deploy Agents as MCP Servers -### Firebase Genkit -[Genkit](https://github.com/firebase/genkit) is Firebase's SDK for building and integrating GenAI features into applications. The [genkitx-mcp](https://github.com/firebase/genkit/tree/main/js/plugins/mcp) plugin enables consuming MCP servers as a client or creating MCP servers from Genkit tools and prompts. +### Genkit +[Genkit](https://github.com/firebase/genkit) is a cross-language SDK for building and integrating GenAI features into applications. The [genkitx-mcp](https://github.com/firebase/genkit/tree/main/js/plugins/mcp) plugin enables consuming MCP servers as a client or creating MCP servers from Genkit tools and prompts. **Key features:** - Client support for tools and prompts (resources partially supported) From 27c1519f01dbbe0f6939b18a6e232f16c5f10349 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Fri, 28 Mar 2025 07:13:01 +1100 Subject: [PATCH 4/5] Updating to align with quickstart sample (#221) --- quickstart/client.mdx | 22 +++++++------- quickstart/server.mdx | 68 +++++++++++++++++-------------------------- 2 files changed, 36 insertions(+), 54 deletions(-) diff --git a/quickstart/client.mdx b/quickstart/client.mdx index 68e61da..c98984b 100644 --- a/quickstart/client.mdx +++ b/quickstart/client.mdx @@ -1384,7 +1384,7 @@ cd QuickstartClient Then, add the required dependencies to your project: ```bash -dotnet add package ModelContextProtocol --preview +dotnet add package ModelContextProtocol --prerelease dotnet add package Anthropic.SDK dotnet add package Microsoft.Extensions.Hosting ``` @@ -1423,10 +1423,10 @@ var (command, arguments) = args switch _ => throw new NotSupportedException("An unsupported server script was provided. Supported scripts are .py, .js, or .csproj") }; -var mcpClient = await McpClientFactory.CreateAsync(new() +await using var mcpClient = await McpClientFactory.CreateAsync(new() { - Id = "demo-client", - Name = "Demo Client", + Id = "demo-server", + Name = "Demo Server", TransportType = TransportTypes.StdIo, TransportOptions = new() { @@ -1455,7 +1455,7 @@ This configures a MCP client that will connect to a server that is provided as a Now let's add the core functionality for processing queries and handling tool calls: ```csharp -IChatClient anthropicClient = new AnthropicClient(new APIAuthentication(builder.Configuration["ANTHROPIC_API_KEY"])) +using IChatClient anthropicClient = new AnthropicClient(new APIAuthentication(builder.Configuration["ANTHROPIC_API_KEY"])) .Messages .AsBuilder() .UseFunctionInvocation() @@ -1465,7 +1465,7 @@ var options = new ChatOptions { MaxOutputTokens = 1000, ModelId = "claude-3-5-sonnet-20241022", - Tools = [.. tools.Cast()] + Tools = [.. tools] }; while (true) @@ -1484,16 +1484,14 @@ while (true) break; } - var response = await anthropicClient.GetResponseAsync(query, options); + var response = anthropicClient.GetStreamingResponseAsync(query, options); - foreach (var message in response.Messages) + await foreach (var message in response) { - Console.WriteLine(message.Text); + Console.Write(message.Text); } + Console.WriteLine(); } - -anthropicClient.Dispose(); -await mcpClient.DisposeAsync(); ``` ## Key Components Explained diff --git a/quickstart/server.mdx b/quickstart/server.mdx index 57767a5..920cc80 100644 --- a/quickstart/server.mdx +++ b/quickstart/server.mdx @@ -1450,7 +1450,7 @@ After creating the project, add NuGet package for the Model Context Protocol SDK ```bash # Add the Model Context Protocol SDK NuGet package -dotnet add package ModelContextProtocol --preview +dotnet add package ModelContextProtocol --prerelease # Add the .NET Hosting NuGet package dotnet add package Microsoft.Extensions.Hosting ``` @@ -1461,14 +1461,24 @@ Now let’s dive into building your server. Open the `Program.cs` file in your project and replace its contents with the following code: ```csharp +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using ModelContextProtocol; +using System.Net.Http.Headers; var builder = Host.CreateEmptyApplicationBuilder(settings: null); + builder.Services.AddMcpServer() .WithStdioServerTransport() .WithToolsFromAssembly(); +builder.Services.AddSingleton(_ => +{ + var client = new HttpClient() { BaseAddress = new Uri("https://api.weather.gov") }; + client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("weather-tool", "1.0")); + return client; +}); + var app = builder.Build(); await app.RunAsync(); @@ -1485,7 +1495,7 @@ Next, define a class with the tool execution handlers for querying and convertin ```csharp using ModelContextProtocol.Server; using System.ComponentModel; -using System.Net.Http.Headers; +using System.Net.Http.Json; using System.Text.Json; namespace QuickstartWeatherServer.Tools; @@ -1495,14 +1505,10 @@ public static class WeatherTools { [McpServerTool, Description("Get weather alerts for a US state.")] public static async Task GetAlerts( + HttpClient client, [Description("The US state to get alerts for.")] string state) { - using HttpClient client = GetWeatherClient(); - - var response = await client.GetAsync($"/alerts/active/area/{state}"); - - var json = await response.Content.ReadAsStringAsync(); - var jsonElement = JsonSerializer.Deserialize(json); + var jsonElement = await client.GetFromJsonAsync($"/alerts/active/area/{state}"); var alerts = jsonElement.GetProperty("features").EnumerateArray(); if (!alerts.Any()) @@ -1510,56 +1516,34 @@ public static class WeatherTools return "No active alerts for this state."; } - // Process the alerts and return a formatted string - var alertMessages = new List(); - foreach (var alert in alerts) + return string.Join("\n--\n", alerts.Select(alert => { JsonElement properties = alert.GetProperty("properties"); - alertMessages.Add($""" + return $""" Event: {properties.GetProperty("event").GetString()} Area: {properties.GetProperty("areaDesc").GetString()} Severity: {properties.GetProperty("severity").GetString()} Description: {properties.GetProperty("description").GetString()} Instruction: {properties.GetProperty("instruction").GetString()} - """); - } - return string.Join("\n---\n", alertMessages); + """; + })); } [McpServerTool, Description("Get weather forecast for a location.")] public static async Task GetForecast( + HttpClient client, [Description("Latitude of the location.")] double latitude, [Description("Longitude of the location.")] double longitude) { - using HttpClient client = GetWeatherClient(); - var response = await client.GetAsync($"/points/{latitude},{longitude}"); - if (!response.IsSuccessStatusCode) - { - return "Failed to retrieve forecast."; - } - - var json = await response.Content.ReadAsStringAsync(); - var jsonElement = JsonSerializer.Deserialize(json); + var jsonElement = await client.GetFromJsonAsync($"/points/{latitude},{longitude}"); var periods = jsonElement.GetProperty("properties").GetProperty("periods").EnumerateArray(); - // Process the forecast and return a formatted string - var forecastMessages = new List(); - foreach (var period in periods) - { - forecastMessages.Add($""" - {period.GetProperty("name").GetString()} - Temperature: {period.GetProperty("temperature").GetInt32()}°F - Wind: {period.GetProperty("windSpeed").GetString()} {period.GetProperty("windDirection").GetString()} - Forecast: {period.GetProperty("detailedForecast").GetString()} - """); - } - return string.Join("\n---\n", forecastMessages); - } - private static HttpClient GetWeatherClient() - { - var client = new HttpClient() { BaseAddress = new Uri("https://api.weather.gov") }; - client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("weather-tool", "1.0")); - return client; + return string.Join("\n---\n", periods.Select(period => $""" + {period.GetProperty("name").GetString()} + Temperature: {period.GetProperty("temperature").GetInt32()}°F + Wind: {period.GetProperty("windSpeed").GetString()} {period.GetProperty("windDirection").GetString()} + Forecast: {period.GetProperty("detailedForecast").GetString()} + """)); } } ``` From 9573fef09a1ed96f8d2eb44d89484526610a2635 Mon Sep 17 00:00:00 2001 From: valoomba Date: Thu, 27 Mar 2025 13:14:40 -0700 Subject: [PATCH 5/5] Add Copilot-MCP to clients list (#162) * Add Copilot-MCP to clients list This commit adds Copilot-MCP to the clients list * Fix alphabetical ordering of list * Update Copilot-MCP description --------- Co-authored-by: David Soria Parra <167242713+dsp-ant@users.noreply.github.com> --- clients.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/clients.mdx b/clients.mdx index 5201b06..2a45744 100644 --- a/clients.mdx +++ b/clients.mdx @@ -15,6 +15,7 @@ This page provides an overview of applications that support the Model Context Pr | [BeeAI Framework][BeeAI Framework] | ❌ | ❌ | ✅ | ❌ | ❌ | Supports tools in agentic workflows. | | [Cline][Cline] | ✅ | ❌ | ✅ | ❌ | ❌ | Supports tools and resources. | | [Continue][Continue] | ✅ | ✅ | ✅ | ❌ | ❌ | Full support for all MCP features | +| [Copilot-MCP][CopilotMCP] | ✅ | ❌ | ✅ | ❌ | ❌ | Supports tools and resources. | | [Cursor][Cursor] | ❌ | ❌ | ✅ | ❌ | ❌ | Supports tools. | | [Emacs Mcp][Mcp.el] | ❌ | ❌ | ✅ | ❌ | ❌ | Supports tools in Emacs. | | [fast-agent][fast-agent] | ✅ | ✅ | ✅ | ✅ | ✅ | Full multimodal MCP support, with end-to-end tests | @@ -60,6 +61,7 @@ This page provides an overview of applications that support the Model Context Pr [Goose]: https://block.github.io/goose/docs/goose-architecture/#interoperability-with-extensions [Witsy]: https://github.com/nbonamy/witsy [Windsurf]: https://codeium.com/windsurf +[CopilotMCP]: https://github.com/VikashLoomba/copilot-mcp [Daydreams]: https://github.com/daydreamsai/daydreams [SpinAI]: https://spinai.dev [OpenSumi]: https://github.com/opensumi/core