This is my first effort at creating a Model Context Protocol (MCP) server in C#. I used the reference as a guide and have documented my steps here.
This is a simple example of how to create a Model Context Protocol (MCP) server in C#. The MCP server allows you to define tools that can be called from the command line or from other applications.
- .NET 9.0 SDK or later
- Visual Studio Code (recommended)
To start, I entered the following command to create a new console application:
dotnet new console -n Mcp.Echo I followed this by adding the following dependencies to my project:
dotnet add package ModelContextProtocol --prerelease
dotnet add package Microsoft.Extensions.HostingI pasted the following code into my Program.cs file, overwriting the existing code:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using ModelContextProtocol.Server;
using System.ComponentModel;
var builder = Host.CreateApplicationBuilder(args);
builder.Logging.AddConsole(consoleLogOptions =>
{
// Configure all logs to go to stderr
consoleLogOptions.LogToStandardErrorThreshold = LogLevel.Trace;
});
builder.Services
.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly();
await builder.Build().RunAsync();I had to add the follow using as it was missing:
using Microsoft.Extensions.Logging;This is the warning I received:
Warning
ILoggingBuilder' does not contain a definition for 'AddConsole' and no accessible extension method 'AddConsole' accepting a first argument of type 'ILoggingBuilder' could be found (are you missing a using directive or an assembly reference?)
I then created a new file called EchoTool.cs and pasted in the following code:
using System.ComponentModel;
using ModelContextProtocol.Server;
[McpServerToolType]
public static class EchoTool
{
[McpServerTool, Description("Echoes the message back to the client.")]
public static string Echo(string message) => $"Hello from C#: {message}";
[McpServerTool, Description("Echoes in reverse the message sent by the client.")]
public static string ReverseEcho(string message) => new string(message.Reverse().ToArray());
}I then added the file `.vscode/mcp.json' with this content:
{
"inputs": [],
"servers": {
"MyFirstMCP": {
"type": "stdio",
"command": "dotnet",
"args": [
"run",
"--project",
"/Users/garrardkitchen/source/mcp/Mcp.Echo/Mcp.Echo.csproj"
]
}
}
}You add the server config to the .vscode folder so that it is not shared with other projects.
I then built it to make sure everything was working:
dotnet buildI then either returned to the mcp.json file and clicked the Start button above MyFirstMCP to start the MCP Server. You can also do this in the Agent view:
The MCP server is now running.
Returning to the Agent view, I entered the following request:
Reacting to what the agent was telling me, I entered:
run #ReverseEcho GarrardAnd that's it, my first MCP server in C#! Spectacular!
Yay me 🤘!
MIT License
- If you see build errors, ensure you have the correct .NET SDK installed.
- If the MCP server does not start, check the path in your
mcp.jsonand ensure all dependencies are installed. - For logging issues, ensure you have the correct
using Microsoft.Extensions.Logging;directive in yourProgram.cs.
- Click here to see the original blog post.


