Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
In this quickstart, you build a minimal Model Context Protocol (MCP) client using the C# SDK for MCP. You also learn how to configure the client to connect to an MCP server, such as the one created in the Build a minimal MCP server quickstart.
Prerequisites
Note
The MCP client you build in the sections ahead connects to the sample MCP server from the Build a minimal MCP server quickstart. You can also use your own MCP server if you provide your own connection configuration.
Create the .NET host app
Complete the following steps to create a .NET console app. The app acts as a host for an MCP client that connects to an MCP server.
Create the project
In a terminal window, navigate to the directory where you want to create your app, and create a new console app with the
dotnet new
command:dotnet new console -n MCPHostApp
Navigate into the newly created project folder:
cd MCPHostApp
Run the following commands to add the necessary NuGet packages:
dotnet add package Azure.AI.OpenAI --prerelease dotnet add package Azure.Identity dotnet add package Microsoft.Extensions.AI dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease dotnet add package ModelContextProtocol --prerelease
Open the project folder in your editor of choice, such as Visual Studio Code:
code .
Add the app code
Replace the contents of Program.cs
with the following code:
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Extensions.AI;
using ModelContextProtocol.Client;
// Create an IChatClient using Azure OpenAI.
IChatClient client =
new ChatClientBuilder(
new AzureOpenAIClient(new Uri("<your-azure-openai-endpoint>"),
new DefaultAzureCredential())
.GetChatClient("gpt-4o").AsIChatClient())
.UseFunctionInvocation()
.Build();
// Create the MCP client
// Configure it to start and connect to your MCP server.
IMcpClient mcpClient = await McpClientFactory.CreateAsync(
new StdioClientTransport(new()
{
Command = "dotnet run",
Arguments = ["--project", "<path-to-your-mcp-server-project>"],
Name = "Minimal MCP Server",
}));
// List all available tools from the MCP server.
Console.WriteLine("Available tools:");
IList<McpClientTool> tools = await mcpClient.ListToolsAsync();
foreach (McpClientTool tool in tools)
{
Console.WriteLine($"{tool}");
}
Console.WriteLine();
// Conversational loop that can utilize the tools via prompts.
List<ChatMessage> messages = [];
while (true)
{
Console.Write("Prompt: ");
messages.Add(new(ChatRole.User, Console.ReadLine()));
List<ChatResponseUpdate> updates = [];
await foreach (ChatResponseUpdate update in client
.GetStreamingResponseAsync(messages, new() { Tools = [.. tools] }))
{
Console.Write(update);
updates.Add(update);
}
Console.WriteLine();
messages.AddMessages(updates);
}
The preceding code accomplishes the following tasks:
- Initializes an
IChatClient
abstraction using theMicrosoft.Extensions.AI
libraries. - Creates an MCP client and configures it to connect to your MCP server.
- Retrieves and displays a list of available tools from the MCP server, which is a standard MCP function.
- Implements a conversational loop that processes user prompts and utilizes the tools for responses.
Run and test the app
Complete the following steps to test your .NET host app:
In a terminal window open to the root of your project, run the following command to start the app:
dotnet run
Once the app is running, enter a prompt to run the ReverseEcho tool:
Reverse the following: "Hello, minimal MCP server!"
Verify that the server responds with the echoed message:
!revres PCM laminim ,olleH