Home

Awesome

ModelContextProtocol.NET

NuGet Version

A C# SDK implementation of the Model Context Protocol (MCP), enabling seamless integration between AI models and development environments.

Overview

ModelContextProtocol.NET is a native .NET implementation of the Model Context Protocol, designed to facilitate communication between AI models and development environments. This SDK provides a robust foundation for building AI-powered tools and applications in the .NET ecosystem.

Features

Ready to Use

Under Development

Demo

The repository includes a fully functional calculator demo that showcases the basic capabilities of the MCP implementation. This demo serves as a practical example of how to integrate and use the protocol in your applications.

Technical Details

Architecture

The project is structured into multiple components:

Key Benefits

Getting Started

Install the server package:

dotnet add package ModelContextProtocol.NET.Server

The easiest way to get started is to look at the calculator demo in src/ModelContextProtocol.NET.Demo.Calculator. Here's a quick example of how to set up an MCP server:

// Create server info
var serverInfo = new Implementation { Name = "Calculator Demo Server", Version = "1.0.0" };

// Configure and build server
var server = new McpServerBuilder(serverInfo)
    .AddStdioTransport()
    // see below for logging configuration
    .ConfigureLogging(logging => ...)
    .ConfigureTools(tools => tools.AddHandler<CalculatorToolHandler>())
    .Build();

// Start the server
server.Start();

Logging Configuration

McpServerBuilder uses Microsoft.Extensions.Logging.ILogger as the logging interface. Since stdio transport is used, logs can't be sent to the console. You need to configure a logging provider that can write to a file or other logging destination.

If no logging provider is configured, a null logger will be used, resulting in no logs being written.

// Using Serilog
.ConfigureLogging(logging => logging.AddSerilog(yourSerilogLogger))

// Using NLog
.ConfigureLogging(logging => logging.AddNLog())

Implementing Tools

Tools are implemented as handlers. Here's a simplified example from the calculator demo:

public class CalculatorParameters
{
    public required CalculatorOperation Operation { get; init; }
    public required double A { get; init; }
    public required double B { get; init; }
}

public enum CalculatorOperation { Add, Subtract, Multiply, Divide }

Check out the complete calculator demo for a full working example including:

More documentation and implementation guide coming soon.

Development Status

This project is under active development. While core features like stdio communication and tool integration are complete and usable, some advanced features are still being implemented.

Contributing

Contributions are welcome! Please feel free to submit pull requests or create issues for bugs and feature requests.

License

Apache 2.0