DotnetFastMCP 1.11.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package DotnetFastMCP --version 1.11.0
                    
NuGet\Install-Package DotnetFastMCP -Version 1.11.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DotnetFastMCP" Version="1.11.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DotnetFastMCP" Version="1.11.0" />
                    
Directory.Packages.props
<PackageReference Include="DotnetFastMCP" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DotnetFastMCP --version 1.11.0
                    
#r "nuget: DotnetFastMCP, 1.11.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DotnetFastMCP@1.11.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DotnetFastMCP&version=1.11.0
                    
Install as a Cake Addin
#tool nuget:?package=DotnetFastMCP&version=1.11.0
                    
Install as a Cake Tool

DotnetFastMCP - Enterprise-Grade Model Context Protocol Server Framework

.NET 8.0 License GitHub

A modern, production-ready C#/.NET framework for building secure, scalable Model Context Protocol (MCP) servers with enterprise-grade authentication.

๐ŸŽฏ Overview

DotnetFastMCP provides a clean, attribute-based approach to building MCP servers that implement the JSON-RPC 2.0 protocol. It includes a native .NET Client Library client for consuming MCP servers, making it a complete solution for building both sides of the Model Context Protocol. Built on ASP.NET Core, it leverages modern .NET features for high performance, reliability, and comprehensive OAuth 2.0 / OpenID Connect authentication out of the box.

โญ Key Features

Core Framework
  • โœ… Simple Attribute-Based API - Declare tools and resources with [McpTool] and [McpResource] attributes
  • โœ… First-Class Prompts Support - Define prompts with [McpPrompt] for LLM interaction templates
  • โœ… Automatic Component Discovery - Reflection-based scanning of assemblies
  • โœ… JSON-RPC 2.0 Compliant - Full protocol compliance with proper error handling
  • โœ… Flexible Parameter Binding - Supports both array and named parameters
  • โœ… Built on ASP.NET Core - Leverage the powerful ASP.NET Core hosting model
  • โœ… Production Ready - Comprehensive error handling and logging
  • โœ… Type-Safe - Full C# type system integration
๐Ÿ” Enterprise Authentication
  • โœ… 6 OAuth Providers Supported - Azure AD, Google, GitHub, Auth0, Okta, AWS Cognito
  • โœ… OAuth Proxy Built-In - Automatic Dynamic Client Registration (DCR) for non-DCR providers
  • โœ… JWT Token Verification - Automatic token validation with JWKS caching
  • โœ… Zero Configuration - Set environment variables and go
  • โœ… Sensible Defaults - Pre-configured scopes for common use cases
  • โœ… Fine-Grained Authorization - Protect tools with [Authorize] attribute
  • โœ… Claims-Based Access - Access user information from authenticated requests
๐Ÿ”Œ Native Client Library (NEW!)
  • โœ… McpClient - Type-safe .NET client for consuming any MCP server
  • โœ… Transport Agnostic - Support for both Stdio and SSE connections
  • โœ… Notification Handling - Events for real-time logs and progress
  • โœ… Tool Invocation - Clean CallToolAsync<T> API

๐Ÿš€ Quick Start

Installation

git clone https://github.com/tekspry/.NetFastMCP.git
cd DotnetFastMCP
dotnet build -c Release

Create Your First MCP Server

1. Define Your Tools

Running the Example Server

cd examples/BasicServer
dotnet run

The server will start on http://localhost:5000.

๐Ÿ“š Architecture

Core Components

DotnetFastMCP/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ FastMCP/
โ”‚   โ”‚   โ”œโ”€โ”€ Attributes/          # Component declaration attributes
โ”‚   โ”‚   โ”œโ”€โ”€ Client/              # ๐Ÿ”Œ Client library implementation
โ”‚   โ”‚   โ”œโ”€โ”€ Hosting/             # Server hosting and middleware
โ”‚   โ”‚   โ”œโ”€โ”€ Protocol/            # JSON-RPC protocol implementation
โ”‚   โ”‚   โ”œโ”€โ”€ Server/              # FastMCPServer core class
โ”‚   โ”‚   โ””โ”€โ”€ FastMCP.csproj
โ”‚   โ””โ”€โ”€ FastMCP.CLI/             # Command-line utilities
โ”œโ”€โ”€ examples/
โ”‚   โ””โ”€โ”€ BasicServer/             # Example MCP server implementation
โ”œโ”€โ”€ tests/
โ”‚   โ””โ”€โ”€ McpIntegrationTest/      # Integration tests
โ”œโ”€โ”€ LAUNCH_TESTS.ps1             # PowerShell test suite launcher
โ””โ”€โ”€ RUN_AND_TEST.ps1             # PowerShell integration test script

Project Structure

Project Purpose
FastMCP Core framework library
FastMCP.CLI Command-line interface tools
BasicServer Example MCP server implementation
McpIntegrationTest Integration tests
ClientDemo Example Client consuming BasicServer

๐Ÿ”ง Creating an MCP Server

1. Define Components

For better organization, split your components into multiple files (e.g., Tools.cs, Resources.cs). The framework will discover them automatically.

File: Tools.cs

using FastMCP.Attributes;
using Microsoft.AspNetCore.Authorization;
using System.Security.Claims;

public static class MyTools
{
    /// <summary>
    /// Public tool - no authentication required
    /// </summary>
    [McpTool]
    public static int Add(int a, int b) => a + b;

public static class Resources
{
    /// <summary>
    /// Protected tool - requires authentication
    /// </summary>
    [McpTool]
    [Authorize]
    public static object GetUserProfile(ClaimsPrincipal user)
    {
        return new
        {
            Name = user.Identity?.Name,
            Email = user.FindFirst("email")?.Value,
            IsAuthenticated = user.Identity?.IsAuthenticated
        };
    }
}
2. Configure Server with Authentication
using FastMCP.Hosting;
using FastMCP.Server;
using System.Reflection;

var mcpServer = new FastMCPServer(name: "My Secure MCP Server");
var builder = McpServerBuilder.Create(mcpServer, args);

// Add authentication (choose your provider)
builder.AddAzureAdTokenVerifier();  // or AddGoogleTokenVerifier(), AddGitHubTokenVerifier(), etc.

// Register tools
builder.WithComponentsFrom(Assembly.GetExecutingAssembly());

var app = builder.Build();
app.Urls.Add("http://localhost:5002");
await app.RunAsync();
3. Set Environment Variables
# Windows PowerShell
$env:FASTMCP_SERVER_AUTH_AZUREAD_TENANT_ID="your-tenant-id"
$env:FASTMCP_SERVER_AUTH_AZUREAD_CLIENT_ID="your-client-id"
$env:FASTMCP_SERVER_AUTH_AZUREAD_CLIENT_SECRET="your-client-secret"
# Linux/Mac
export FASTMCP_SERVER_AUTH_AZUREAD_TENANT_ID="your-tenant-id"
export FASTMCP_SERVER_AUTH_AZUREAD_CLIENT_ID="your-client-id"
export FASTMCP_SERVER_AUTH_AZUREAD_CLIENT_SECRET="your-client-secret"
4. Run and Test
dotnet run

Your server is now running with OAuth Proxy endpoints:

  • MCP endpoint: http://localhost:5002/mcp
  • OAuth authorization: http://localhost:5002/oauth/authorize
  • OAuth token: http://localhost:5002/oauth/token
  • Discovery: http://localhost:5002/.well-known/oauth-authorization-server
Stdio Mode

You can also run the server in Stdio mode (for local LLM clients):

dotnet run -- --stdio

Create an MCP Client

Connect to any MCP server using the C# Client Library:

using FastMCP.Client;
using FastMCP.Client.Transports;

// 1. Connect (via Stdio or SSE)
var transport = new StdioClientTransport("dotnet", "run --project examples/BasicServer -- --stdio");
await using var client = new McpClient(transport);
await client.ConnectAsync();

// 2. List & Call Tools
var tools = await client.ListToolsAsync();
var result = await client.CallToolAsync<int>("add_numbers", new { a = 10, b = 20 });

๐Ÿ” Authentication Providers

DotnetFastMCP supports 6 enterprise-grade OAuth providers out of the box:

Provider Method Use Case Default Scopes
Azure AD AddAzureAdTokenVerifier() Enterprise apps, Microsoft 365 openid, profile, email, offline_access
Google AddGoogleTokenVerifier() Consumer apps, Google Workspace openid, profile, email, userinfo.profile
GitHub AddGitHubTokenVerifier() Developer tools, repositories read:user, user:email
Auth0 AddAuth0TokenVerifier() Multi-tenant SaaS, custom identity openid, profile, email, offline_access
Okta AddOktaTokenVerifier() Enterprise SSO, workforce identity openid, profile, email, offline_access
AWS Cognito AddAwsCognitoTokenVerifier() AWS-native apps, user pools openid, profile, email

Quick Setup Examples

<details> <summary><b>Azure AD</b></summary>

builder.AddAzureAdTokenVerifier();

Environment Variables:

FASTMCP_SERVER_AUTH_AZUREAD_TENANT_ID=your-tenant-id
FASTMCP_SERVER_AUTH_AZUREAD_CLIENT_ID=your-client-id
FASTMCP_SERVER_AUTH_AZUREAD_CLIENT_SECRET=your-client-secret

Example: examples/Auth/AzureAdOAuth </details>

<details> <summary><b>Google</b></summary>

builder.AddGoogleTokenVerifier();

Environment Variables:

FASTMCP_SERVER_AUTH_GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
FASTMCP_SERVER_AUTH_GOOGLE_CLIENT_SECRET=your-client-secret

Example: examples/Auth/GoogleOAuth </details>

<details> <summary><b>GitHub</b></summary>

Run Unit & Integration Tests

builder.AddGitHubTokenVerifier();

Environment Variables:

FASTMCP_SERVER_AUTH_GITHUB_CLIENT_ID=your-github-client-id
FASTMCP_SERVER_AUTH_GITHUB_CLIENT_SECRET=your-github-client-secret

Example: examples/Auth/GitHubOAuth </details>

PowerShell Integration Test Suite

The project includes a comprehensive PowerShell-based integration test suite that validates a running server end-to-end.

  1. Publish the server (from the root of the DotnetFastMCP project):

    dotnet publish -c Release -o ..\publish examples\BasicServer
    
  2. Run the tests: Open a PowerShell terminal and run the launcher script from the project root:

    .\LAUNCH_TESTS.ps1
    

This will open a new window, start the BasicServer, and run a series of tests covering all tools and resources, including error handling.

Example Manual Test

<details> <summary><b>Auth0</b></summary>

builder.AddAuth0TokenVerifier();

Environment Variables:

FASTMCP_SERVER_AUTH_AUTH0_DOMAIN=your-tenant.auth0.com
FASTMCP_SERVER_AUTH_AUTH0_AUDIENCE=https://your-api-identifier
FASTMCP_SERVER_AUTH_AUTH0_CLIENT_ID=your-client-id
FASTMCP_SERVER_AUTH_AUTH0_CLIENT_SECRET=your-client-secret

Example: examples/Auth/Auth0OAuth </details>

<details> <summary><b>Okta</b></summary>

builder.AddOktaTokenVerifier();

Environment Variables:

FASTMCP_SERVER_AUTH_OKTA_DOMAIN=dev-123456.okta.com
FASTMCP_SERVER_AUTH_OKTA_AUDIENCE=api://default
FASTMCP_SERVER_AUTH_OKTA_CLIENT_ID=your-client-id
FASTMCP_SERVER_AUTH_OKTA_CLIENT_SECRET=your-client-secret

Example: examples/Auth/OktaOAuth </details>

<details> <summary><b>AWS Cognito</b></summary>

builder.AddAwsCognitoTokenVerifier();

Environment Variables:

FASTMCP_SERVER_AUTH_AWSCOGNITO_USER_POOL_ID=us-east-1_XXXXXXXXX
FASTMCP_SERVER_AUTH_AWSCOGNITO_REGION=us-east-1
FASTMCP_SERVER_AUTH_AWSCOGNITO_CLIENT_ID=your-app-client-id
FASTMCP_SERVER_AUTH_AWSCOGNITO_CLIENT_SECRET=your-app-client-secret
FASTMCP_SERVER_AUTH_AWSCOGNITO_DOMAIN=myapp.auth.us-east-1.amazoncognito.com

Example: examples/Auth/AwsCognitoOAuth </details>

๐Ÿ“š Architecture

Project Structure

DotnetFastMCP/
โ”œโ”€โ”€ src/
โ”‚   โ””โ”€โ”€ FastMCP/
โ”‚       โ”œโ”€โ”€ Attributes/              # Component declaration attributes
โ”‚       โ”œโ”€โ”€ Authentication/          # ๐Ÿ” OAuth providers & token verification
โ”‚       โ”‚   โ”œโ”€โ”€ Providers/          # Azure AD, Google, GitHub, Auth0, Okta, AWS
โ”‚       โ”‚   โ”œโ”€โ”€ Proxy/              # OAuth Proxy for DCR
โ”‚       โ”‚   โ””โ”€โ”€ Verification/       # JWT token validation
โ”‚       โ”œโ”€โ”€ Hosting/                 # Server hosting and middleware
โ”‚       โ”œโ”€โ”€ Protocol/                # JSON-RPC protocol implementation
โ”‚       โ””โ”€โ”€ Server/                  # FastMCPServer core class
โ”œโ”€โ”€ examples/
โ”‚   โ”œโ”€โ”€ BasicServer/                 # Simple MCP server
โ”‚   โ””โ”€โ”€ Auth/                        # ๐Ÿ” Authentication examples
โ”‚       โ”œโ”€โ”€ AzureAdOAuth/           # Azure AD example
โ”‚       โ”œโ”€โ”€ GoogleOAuth/            # Google OAuth example
โ”‚       โ”œโ”€โ”€ GitHubOAuth/            # GitHub OAuth example
โ”‚       โ”œโ”€โ”€ Auth0OAuth/             # Auth0 example
โ”‚       โ”œโ”€โ”€ OktaOAuth/              # Okta example
โ”‚       โ””โ”€โ”€ AwsCognitoOAuth/        # AWS Cognito example
โ””โ”€โ”€ tests/
    โ””โ”€โ”€ McpIntegrationTest/          # Integration tests

Project Structure (Client)

The FastMCP framework now includes a complete client implementation in src/FastMCP/Client.

graph TD
    App[Your App] -->|Uses| Client[McpClient]
    Client -->|IClientTransport| Trans[Transport Layer]
    Trans -->|Stdio| Local[Local Process]
    Trans -->|SSE/HTTP| Remote[Remote Server]

Authentication Flow

sequenceDiagram
    participant Client
    participant MCP Server
    participant OAuth Provider
    
    Client->>MCP Server: Request with Bearer Token
    MCP Server->>Token Verifier: Validate Token
    Token Verifier->>OAuth Provider: Fetch JWKS (if needed)
    OAuth Provider-->>Token Verifier: Public Keys
    Token Verifier-->>MCP Server: Validated Claims
    MCP Server-->>Client: Protected Resource

๐Ÿ”ง Creating an MCP Server

Basic Server (No Authentication)

using FastMCP.Hosting;
using FastMCP.Server;
using System.Reflection;

var mcpServer = new FastMCPServer(name: "My MCP Server");
var builder = McpServerBuilder.Create(mcpServer, args);

builder.WithComponentsFrom(Assembly.GetExecutingAssembly());

var app = builder.Build();
await app.RunAsync();

Secure Server (With Authentication)

using FastMCP.Hosting;
using FastMCP.Server;
using System.Reflection;

var mcpServer = new FastMCPServer(name: "My Secure MCP Server");
var builder = McpServerBuilder.Create(mcpServer, args);

// Add authentication - automatically configures OAuth Proxy
builder.AddAzureAdTokenVerifier();  // or any other provider

builder.WithComponentsFrom(Assembly.GetExecutingAssembly());
Returns server metadata. The example server returns:

var app = builder.Build();
app.Urls.Add("http://localhost:5002");
await app.RunAsync();

Protected Tools

using FastMCP.Attributes;
using Microsoft.AspNetCore.Authorization;
using System.Security.Claims;

public static class SecureTools
{
    /// <summary>
    /// Public tool - anyone can call
    /// </summary>
    [McpTool]
    public static string Echo(string message) => message;

    /// <summary>
    /// Protected tool - requires valid OAuth token
    /// </summary>
    [McpTool]
    [Authorize]
    public static object GetUserInfo(ClaimsPrincipal user)
    {
        return new
        {
            Name = user.Identity?.Name ?? "Unknown",
            Email = user.FindFirst("email")?.Value ?? "Not available",
            IsAuthenticated = user.Identity?.IsAuthenticated ?? false,
            Claims = user.Claims.Select(c => new { c.Type, c.Value }).ToList()
        };
    }

    /// <summary>
    /// Role-based authorization
    /// </summary>
    [McpTool]
    [Authorize(Roles = "Admin")]
    public static string AdminOnly() => "Admin access granted";
}

๐Ÿ“ก JSON-RPC Protocol

Prompts

Prompts allow servers to provide templates that LLMs can use.

using FastMCP.Attributes;
using FastMCP.Protocol;

public static class MyPrompts
{
    [McpPrompt("analyze_code")]
    public static GetPromptResult Analyze(string code)
    {
        return new GetPromptResult
        {
            Description = "Analyze the given code",
            Messages = new List<PromptMessage>
            {
                new PromptMessage 
                { 
                    Role = "user", 
                    Content = new { type = "text", text = $"Please analyze this code:\n{code}" } 
                }
            }
        };
    }
}

Calling Tools

Public Tool (No Auth):

POST /mcp
{
  "jsonrpc": "2.0",
  "method": "Echo",
  "params": ["Hello World"],
  "id": 1
}

Protected Tool (With Auth):

POST /mcp
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGc...

{
  "jsonrpc": "2.0",
  "method": "GetUserInfo",
  "params": [],
  "id": 2
}

๐Ÿงช Testing

Run All Tests

dotnet test

Test Authentication Flow

Each authentication example includes a comprehensive .rest file for testing:

# Open in VS Code with REST Client extension
code examples/Auth/AzureAdOAuth/azure-ad-auth-tests.rest

Test files include:

  • โœ… Discovery endpoints
  • โœ… Public tool tests
  • โœ… Protected tool tests (should fail without auth)
  • โœ… OAuth authorization flow
  • โœ… Token exchange
  • โœ… Provider-specific API calls

๐Ÿ“– Documentation

Complete Authentication Guide

See mcp-authentication-guide.md for:

  • Detailed provider setup instructions
  • OAuth flow walkthrough
  • Troubleshooting guide
  • Best practices
  • Production deployment checklist

Example Projects

Example Description Port
BasicServer Simple MCP server without authentication 5000
AzureAdOAuth Azure AD authentication example 5002
GoogleOAuth Google OAuth example 5000
GitHubOAuth GitHub OAuth example 5001
Auth0OAuth Auth0 authentication example 5005
OktaOAuth Okta authentication example 5007
AwsCognitoOAuth AWS Cognito example 5006

๐Ÿ—๏ธ Advanced Features

Middleware Interception (NEW!)

Middleware allows you to intercept and modify JSON-RPC messages (requests and responses) flowing through the server pipeline. This is useful for logging, validation, modification, or custom monitoring.

  1. Define Middleware: Implement IMcpMiddleware.
  2. Register Middleware: Use builder.AddMcpMiddleware<T>().
public class LoggingMiddleware : IMcpMiddleware
{
    public async Task<JsonRpcResponse> InvokeAsync(McpMiddlewareContext context, McpMiddlewareDelegate next, CancellationToken ct)
    {
        Console.Error.WriteLine($"[LOG] Incoming: {context.Request.Method}");
        
        // Pass to next handler
        var response = await next(context, ct);
        
        Console.Error.WriteLine($"[LOG] Completed. Error: {response.Error != null}");
        return response;
    }
}

// In Program.cs:
builder.AddMcpMiddleware<LoggingMiddleware>();

Server Composition (NEW!)

Mount other MCP servers into your main server instantiation. This supports a "Micro-MCP" architecture where you can compose a robust agent from smaller, focused modules.

// 1. Create Sub-Server (e.g. GitHub Tools)
var githubServer = new FastMCPServer("GitHub");
// ... register tools ...

// 2. Import into Main Server with "gh" prefix
builder.AddServer(githubServer, prefix: "gh");

// Result:
// The client sees tools named: "gh_create_issue", "gh_get_repo", etc.

Storage Abstractions (NEW!)

FastMCP now includes a built-in state persistence layer. Tools can request McpContext to access IMcpStorage.

[McpTool]
public static async Task<string> SetValue(string key, string value, McpContext context)
{
    await context.Storage.SetAsync(key, value);
    return "Saved!";
}

The default implementation is In-Memory, but you can swap it for Redis, SQL, or File storage:

builder.AddMcpStorage<MyRedisStorage>();

Background Tasks (NEW!)

FastMCP allows tools to fire-and-forget long running operations using RunInBackground.

[McpTool]
public static async Task<string> ProcessFile(string file, McpContext context)
{
    await context.RunInBackground(async (ct) => 
    {
        // This runs without blocking the client
        await HeavyProcessing(file, ct);
    });

    return "Processing started!";
}

Icons Support (NEW!)

Enhance the user interface of clients by providing icons for your server and tools.

// Server Icon
server.Icon = "https://myserver.com/logo.png";

// Tool Icon
[McpTool(Icon = "https://myserver.com/tools/calc.png")]
public static int Add(int a, int b) => a + b;

Binary Content Support (NEW!)

Return rich content like Images from your tools and prompts.

[McpTool]
public static CallToolResult GetSnapshot()
{
    return new CallToolResult 
    {
        Content = new List<ContentItem> 
        {
            new ImageContent { Data = "base64...", MimeType = "image/png" }
        }
    };
}

OAuth Proxy

DotnetFastMCP includes a built-in OAuth Proxy that provides:

  • โœ… Dynamic Client Registration (DCR) - Automatic client registration for MCP clients
  • โœ… Authorization Code Flow - Full OAuth 2.0 authorization code flow with PKCE
  • โœ… Token Management - Automatic token exchange, refresh, and revocation
  • โœ… Discovery Endpoints - RFC 8414 compliant OAuth discovery

Automatically Available Endpoints:

  • /.well-known/oauth-authorization-server - OAuth server metadata
  • /oauth/authorize - Authorization endpoint
  • /oauth/token - Token endpoint
  • /oauth/register - Dynamic client registration
  • /oauth/userinfo - User information endpoint

Custom Scopes

Override default scopes for any provider:

builder.AddAzureAdTokenVerifier(new AzureAdAuthOptions
{
    RequiredScopes = new[] { "openid", "profile", "email", "User.Read", "Calendars.Read" }
});

Multiple Authentication Schemes

// Support multiple providers simultaneously
builder.AddAzureAdTokenVerifier();
builder.AddGoogleTokenVerifier();
builder.AddGitHubTokenVerifier();

๐Ÿ” Security Best Practices

Development

  • โœ… Use environment variables for secrets
  • โœ… Never commit credentials to source control
  • โœ… Use .env files for local development
  • โœ… Test with short-lived tokens

Production

  • โœ… Use HTTPS for all communication
  • โœ… Store secrets in Azure Key Vault / AWS Secrets Manager
  • โœ… Enable MFA for OAuth providers
  • โœ… Implement rate limiting
  • โœ… Monitor authentication logs
  • โœ… Use separate app registrations per environment
  • โœ… Validate token scopes match required permissions

๐Ÿ“ฆ NuGet Package

Install from NuGet (when published):

dotnet add package DotnetFastMCP

๐Ÿค Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿ”— Resources

Official Documentation

Framework Documentation

Provider Documentation

๐Ÿ› Issues & Support

For bug reports and feature requests, please use GitHub Issues.

โœจ What's New

v1.11.0 - Binary Content Support (Latest)

  • โœ… Polymorphic Content - Support for mixed Text and Image responses
  • โœ… Image Support - Return Base64 encoded images from tools
  • โœ… Multimodal Prompts - Embbed images in prompts for LLM context

v1.10.0 - Icons Support

  • โœ… Server Icons - Define a brand icon for your MCP server
  • โœ… Tool/Resource Icons - Visually distinguish capabilities
  • โœ… UI/UX Enhancement - Enable richer client experiences

v1.9.0 - Background Tasks

  • โœ… Fire-and-Forget - Offload long-running operations from tools
  • โœ… Non-Blocking - Return immediate responses to clients
  • โœ… Hosted Service - Built-in queuing mechanism using Channels

v1.8.0 - Storage Abstractions

  • โœ… State Persistence - Tools can now persist data via McpContext.Storage
  • โœ… Pluggable Backends - Swap in Redis/SQL/File storage easily
  • โœ… In-Memory Default - Zero-config built-in storage for development

v1.7.0 - Server Composition

  • โœ… Server Composition - Mount other MCP servers as modules (Micro-MCPs)
  • โœ… Namespacing - Automatically prefix imported tools (e.g., github_createIssue)
  • โœ… Zero-Overhead - High-performance internal dictionary routing (O(1))

v1.6.0 - Middleware Interception

  • โœ… Middleware Pipeline - Intercept and modify requests/responses
  • โœ… Critical Fixes - Resolved Stdio transport initialization deadlocks
  • โœ… Builder API - Easy registration with AddMcpMiddleware<T>

v1.5.0 - Native Client Library

  • โœ… McpClient - Type-safe .NET client for consuming MCP servers
  • โœ… Transport Agnostic - Support for both Stdio and SSE connections
  • โœ… Notification Handling - Events for real-time logs and progress

v1.4.0 - Server-Sent Events (SSE)

  • โœ… SSE Transport - Real-time server-to-client streaming transport
  • โœ… Async Notifications - Push logs and progress updates to HTTP clients

v1.3.0 - Context & Interaction

  • โœ… Context System - McpContext injection for logging and progress
  • โœ… IMcpSession - Transport-agnostic interaction abstraction

v1.2.0 - Protocol Discovery

  • โœ… Dynamic Discovery - Auto-discovery of Tools, Resources, and Prompts
  • โœ… Prompts/List - Full support for prompt templates

v1.1.0 - Stdio Transport & Authentication

  • โœ… Stdio Transport - Initial support for stdio communication
  • ๐Ÿ” 6 OAuth Providers - Azure AD, Google, GitHub, Auth0, Okta, AWS Cognito
  • ๐Ÿ” OAuth Proxy - Built-in DCR support

v1.0.0 - Core Framework

  • โœ… Attribute-based API
  • โœ… JSON-RPC 2.0 compliance
  • โœ… ASP.NET Core integration

๐ŸŽฏ Roadmap

Core Functionality

  • Protocol Discovery - Dynamic discovery of Tools, Resources, and Prompts
  • Context & Interaction - Access logging, progress reporting, and client sampling via Context object
  • Stdio Transport - Support for standard input/output transport (essential for Claude Desktop)
  • SSE Transport - Dedicated Server-Sent Events transport
  • Client Library - Native .NET client SDK for building MCP clients

Advanced Features

  • Middleware Interception - Hooks for inspecting/modifying JSON-RPC messages
  • Server Composition - Ability to mount or import other MCP servers
  • Storage Abstractions - Interfaces for state persistence
  • Background Tasks - Patterns for long-running operations

UI & Metadata

  • Icons - Support for tool and server icons
  • Binary Content - Helpers for handling Image and Audio content types
  • Multi-factor authentication (MFA) - For OAuth providers

Made with โค๏ธ by the DotnetFastMCP team

โญ Star this repo if you find it useful!

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.15.0 86 4/18/2026
1.14.0 108 3/4/2026
1.13.0 107 2/17/2026
1.12.0 107 1/24/2026
1.11.0 105 1/23/2026
1.10.0 97 1/23/2026
1.9.0 106 1/18/2026
1.8.0 96 1/17/2026
1.7.0 105 1/17/2026
1.6.0 99 1/17/2026
1.5.0 101 1/17/2026
1.4.0 103 1/16/2026
1.3.0 103 1/11/2026
1.2.0 103 1/11/2026
1.1.0 100 1/10/2026
1.0.0 110 12/31/2025