From 9726697b6da30ce978b2b9145a85f02d6a3c70b1 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Wed, 26 Mar 2025 11:41:44 +1100 Subject: [PATCH 1/2] Server quickstart docs for C# --- quickstart/server.mdx | 235 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) diff --git a/quickstart/server.mdx b/quickstart/server.mdx index 94f86b9..a2658f3 100644 --- a/quickstart/server.mdx +++ b/quickstart/server.mdx @@ -1406,6 +1406,241 @@ This tells Claude for Desktop: Save the file, and restart **Claude for Desktop**. + + + +Let's get started with building our weather server! [You can find the complete code for what we'll be building here.](https://github.com/modelcontextprotocol/csharp-sdk/tree/main/samples/QuickstartWeatherServer) + +### Prerequisite knowledge +This quickstart assumes you have familiarity with: +- C# +- LLMs like Claude +- .NET 8 or higher + +### System requirements +- [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) or higher installed. + +### Set up your environment +First, let's install `dotnet` if you haven't already. You can download `dotnet` from [official Microsoft .NET website](https://dotnet.microsoft.com/download/). Verify your `dotnet` installation: +```bash +dotnet --version +``` +Now, let's create and set up your project: + +```bash MacOS/Linux +# Create a new directory for our project +mkdir weather +cd weather +# Initialize a new C# project +dotnet new console +``` + +```powershell Windows +# Create a new directory for our project +mkdir weather +cd weather +# Initialize a new C# project +dotnet new console +``` + +After running `dotnet new console`, you will be presented with a new C# project. +You can open the project in your favorite IDE, such as [Visual Studio](https://visualstudio.microsoft.com/) or [Rider](https://www.jetbrains.com/rider/). +Alternatively, you can create a C# application using the [Visual Studio project wizard](https://learn.microsoft.com/en-us/visualstudio/get-started/csharp/tutorial-console?view=vs-2022). +After creating the project, add NuGet package for the Model Context Protocol SDK and hosting: + +```bash +# Add the Model Context Protocol SDK NuGet package +dotnet add package ModelContextProtocol --preview +# Add the .NET Hosting NuGet package +dotnet add package Microsoft.Extensions.Hosting +``` +Now let’s dive into building your server. + +## Building your server + +Open the `Program.cs` file in your project and replace its contents with the following code: + +```csharp +using Microsoft.Extensions.Hosting; +using ModelContextProtocol; + +var builder = Host.CreateEmptyApplicationBuilder(settings: null); +builder.Services.AddMcpServer() + .WithStdioServerTransport() + .WithToolsFromAssembly(); + +var app = builder.Build(); + +await app.RunAsync(); +``` + +When creating the `ApplicationHostBuilder`, ensure you use `CreateEmptyApplicationBuilder` instead of `CreateDefaultBuilder`. This ensures that the server does not write any additional messages to the console. This is only neccessary for servers using STDIO transport. + + +This code sets up a basic console application that uses the Model Context Protocol SDK to create an MCP server with standard I/O transport. + +### Weather API helper functions +Next, define a class with the tool execution handlers for querying and converting responses from the National Weather Service API: + +```csharp +using ModelContextProtocol.Server; +using System.ComponentModel; +using System.Net.Http.Headers; +using System.Text.Json; + +namespace QuickstartWeatherServer.Tools; + +[McpServerToolType] +public static class WeatherTools +{ + [McpServerTool, Description("Get weather alerts for a US state.")] + public static async Task GetAlerts( + [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 alerts = jsonElement.GetProperty("features").EnumerateArray(); + + if (!alerts.Any()) + { + return "No active alerts for this state."; + } + + // Process the alerts and return a formatted string + var alertMessages = new List(); + foreach (var alert in alerts) + { + JsonElement properties = alert.GetProperty("properties"); + alertMessages.Add($""" + 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( + [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 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; + } +} +``` + +### Running the server +Finally, run the server using the following command: + +```bash +dotnet run +``` +This will start the server and listen for incoming requests on standard input/output. + +## Testing your server with Claude for Desktop + +Claude for Desktop is not yet available on Linux. Linux users can proceed to the [Building a client](/quickstart/client) tutorial to build an MCP client that connects to the server we just built. + + +First, make sure you have Claude for Desktop installed. [You can install the latest version +here.](https://claude.ai/download) If you already have Claude for Desktop, **make sure it's updated to the latest version.** +We'll need to configure Claude for Desktop for whichever MCP servers you want to use. To do this, open your Claude for Desktop App configuration at `~/Library/Application Support/Claude/claude_desktop_config.json` in a text editor. Make sure to create the file if it doesn't exist. +For example, if you have [VS Code](https://code.visualstudio.com/) installed: + + +```bash +code ~/Library/Application\ Support/Claude/claude_desktop_config.json +``` + + +```powershell +code $env:AppData\Claude\claude_desktop_config.json +``` + + + +You'll then add your servers in the `mcpServers` key. The MCP UI elements will only show up in Claude for Desktop if at least one server is properly configured. +In this case, we'll add our single weather server like so: + + + +```json +{ + "mcpServers": { + "weather": { + "command": "dotnet", + "args": [ + "run", + "--project", + "/ABSOLUTE/PATH/TO/PROJECT", + "--no-build" + ] + } + } +} +``` + + + + +```json +{ + "mcpServers": { + "weather": { + "command": "dotnet", + "args": [ + "run", + "--project", + "C:\\ABSOLUTE\\PATH\\TO\\PROJECT", + "--no-build" + ] + } + } +} +``` + + + +This tells Claude for Desktop: +1. There's an MCP server named "weather" +2. Launch it by running `dotnet run /ABSOLUTE/PATH/TO/PROJECT` +Save the file, and restart **Claude for Desktop**. + From a95d4843bf8b184902e218b2d83d9be8db530dfa Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Wed, 26 Mar 2025 15:29:11 +1100 Subject: [PATCH 2/2] C# client quickstart --- images/quickstart-dotnet-client.png | Bin 0 -> 83600 bytes quickstart/client.mdx | 178 ++++++++++++++++++++++++++++ 2 files changed, 178 insertions(+) create mode 100644 images/quickstart-dotnet-client.png diff --git a/images/quickstart-dotnet-client.png b/images/quickstart-dotnet-client.png new file mode 100644 index 0000000000000000000000000000000000000000..73b9f9faebe573ef77bb640e29d47ec8b76c67e6 GIT binary patch literal 83600 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 CI>(#< literal 0 HcmV?d00001 diff --git a/quickstart/client.mdx b/quickstart/client.mdx index 281fe1e..8a1629b 100644 --- a/quickstart/client.mdx +++ b/quickstart/client.mdx @@ -1365,6 +1365,184 @@ If you see: + +[You can find the complete code for this tutorial here.](https://github.io/modelcontextprotocol/csharp-sdk/tree/main/samples/QuickstartClient) + +## System Requirements +Before starting, ensure your system meets these requirements: +- .NET 8.0 or higher +- Anthropic API key (Claude) +- Windows, Linux, or MacOS + +## Setting up your environment + +First, create a new .NET project: +```bash +dotnet new console -n QuickstartClient +cd QuickstartClient +``` + +Then, add the required dependencies to your project: +```bash +dotnet add package ModelContextProtocol --preview +dotnet add package Anthropic.SDK +dotnet add package Microsoft.Extensions.Hosting +``` + +## Setting up your API key +You'll need an Anthropic API key from the [Anthropic Console](https://console.anthropic.com/settings/keys). + +```bash +dotnet user-secrets init +dotnet user-secrets set "ANTHROPIC_API_KEY" "" +``` + +## Creating the Client +### Basic Client Structure +First, let's setup the basic client class: +```csharp +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; + +var builder = Host.CreateEmptyApplicationBuilder(settings: null); + +builder.Configuration + .AddUserSecrets(); +``` + +This creates the beginnings of a .NET console application that can read the API key from user secrets. + +Next, we'll setup the MCP Client: + +```csharp +var (command, arguments) = args switch +{ + [var script] when script.EndsWith(".py") => ("python", script), + [var script] when script.EndsWith(".js") => ("node", script), + [var script] when Directory.Exists(script) || (File.Exists(script) && script.EndsWith(".csproj")) => ("dotnet", $"run --project {script} --no-build"), + _ => throw new NotSupportedException("An unsupported server script was provided. Supported scripts are .py, .js, or .csproj") +}; + +var mcpClient = await McpClientFactory.CreateAsync(new() +{ + Id = "demo-client", + Name = "Demo Client", + TransportType = TransportTypes.StdIo, + TransportOptions = new() + { + ["command"] = command, + ["arguments"] = arguments, + } +}); + +var tools = await mcpClient.ListToolsAsync(); +foreach (var tool in tools) +{ + Console.WriteLine($"Connected to server with tools: {tool.Name}"); +} +``` + +Be sure to add the `using` statements for the namespaces: +```csharp +using ModelContextProtocol.Client; +using ModelContextProtocol.Protocol.Transport; +``` + + +This configures a MCP client that will connect to a server that is provided as a command line argument. It then lists the available tools from the connected server. + +### Query processing logic +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"])) + .Messages + .AsBuilder() + .UseFunctionInvocation() + .Build(); + +var options = new ChatOptions +{ + MaxOutputTokens = 1000, + ModelId = "claude-3-5-sonnet-20241022", + Tools = [.. tools.Cast()] +}; + +while (true) +{ + Console.WriteLine("MCP Client Started!"); + Console.WriteLine("Type your queries or 'quit' to exit."); + + string? query = Console.ReadLine(); + + if (string.IsNullOrWhiteSpace(query)) + { + continue; + } + if (string.Equals(query, "quit", StringComparison.OrdinalIgnoreCase)) + { + break; + } + + var response = await anthropicClient.GetResponseAsync(query, options); + + foreach (var message in response.Messages) + { + Console.WriteLine(message.Text); + } +} + +anthropicClient.Dispose(); +await mcpClient.DisposeAsync(); +``` + +## Key Components Explained + +### 1. Client Initialization +* The client is initialized using `McpClientFactory.CreateAsync()`, which sets up the transport type and command to run the server. + +### 2. Server Connection +* Supports Python, Node.js, and .NET servers. +* The server is started using the command specified in the arguments. +* Configures to use stdio for communication with the server. +* Initializes the session and available tools. + +### 3. Query Processing +* Leverages [Microsoft.Extensions.AI](https://learn.microsoft.com/dotnet/ai/ai-extensions) for the chat client. +* Configures the `IChatClient` to use automatic tool (function) invocation. +* The client reads user input and sends it to the server. +* The server processes the query and returns a response. +* The response is displayed to the user. + +### Running the Client +To run your client with any MCP server: +```bash +dotnet run -- path/to/server.csproj # dotnet server +dotnet run -- path/to/server.py # python server +dotnet run -- path/to/server.js # node server +``` + +If you're continuing the weather tutorial from the server quickstart, your command might look something like this: `dotnet run -- path/to/QuickstartWeatherServer`. + + +The client will: + +1. Connect to the specified server +2. List available tools +3. Start an interactive chat session where you can: + - Enter queries + - See tool executions + - Get responses from Claude +4. Exit the session when done + +Here's an example of what it should look like it connected to a weather server quickstart: + + + + + + + ## Next steps