A reference implementation showing how to build MCP servers in .NET using the ModelContextProtocol SDK. Ships with working examples including weather lookups via wttr.in (get_weather_by_zip_code, get_weather_forecast), random number generation, and simple greeting tools. Demonstrates the full lifecycle from implementing tools in C# to packaging as a NuGet package that can run via dnx. Useful if you're building MCP servers in .NET and want to see how tool registration, stdio transport configuration, and NuGet publishing work in practice. The weather tools make good starting points for API integration patterns.
This project is a sample implementation of a Model Context Protocol (MCP) server in .NET, designed to demonstrate how to build, run, and publish an MCP server using C# and the ModelContextProtocol SDK.
mcp-name: io.github.timheuer/sampledotnetmcpserver
SampleDotnetMcpServer is a reference MCP server for .NET, showing how to:
Tools/RandomNumberTools.cs, Tools/SayHelloName.cs, Tools/WeatherTools.cs)Program.cs)The included tools demonstrate various MCP capabilities:
get_random_number: Generates random numbers within a specified rangesay_hello_name and say_goodbye_name: Simple greeting toolsget_weather_by_zip_code: Gets current weather information for any US zip codeget_weather_forecast: Gets a multi-day weather forecast for any US zip codeget_random_number: Returns a random integer in a specified rangesay_hello_name and say_goodbye_name: Simple greeting toolsget_weather_by_zip_code: Gets current weather for any US zip code using wttr.in APIget_weather_forecast: Gets multi-day weather forecast for any US zip codeYou can run the MCP server directly from source for development and testing:
dotnet run --project .
Or configure your IDE to use the following MCP server definition:
{
"servers": {
"SampleDotnetMcpServer": {
"type": "stdio",
"command": "dotnet",
"args": [
"run",
"--project",
"<PATH TO PROJECT DIRECTORY>"
]
}
}
}
Once running, you can use Copilot Chat or any MCP client to invoke the available tools:
Weather Tools:
Other Tools:
CI handles publishing to NuGet, using NuGet Trusted Publishing for the key and automatic versioning using Nerdbank.GitVersioning.
After publishing, configure your IDE to use the MCP server from NuGet.org. Example configuration (replace package id and version):
{
"servers": {
"SampleDotnetMcpServer": {
"type": "stdio",
"command": "dnx",
"args": [
"TimHeuer.SampleMcpServer",
"--version",
"0.1.0-beta",
"--yes"
]
}
}
}
Program.cs: MCP server entry point and configurationTools/RandomNumberTools.cs: Example MCP tool for generating random numbersTools/SayHelloName.cs: Example MCP tools for greetingsTools/WeatherTools.cs: Weather-related MCP tools for checking weather by zip code.mcp/server.json: MCP server metadata and NuGet package infoSampleDotnetMcpServer.csproj: Project and NuGet packaging configurationThis project is for demonstration and reference purposes only. For feedback or contributions, see the GitHub repository.