MCP w .NET (C#)

MCP w .NET (C#) – jak zbudować serwer AI krok po kroku

MCP w .NET (C#) – jak zbudować serwer AI krok po kroku

Chcesz zintegrować AI z backendem w .NET w sposób uporządkowany i skalowalny?
Model Context Protocol (MCP) to nowy standard, który pozwala modelom AI korzystać z Twojej logiki biznesowej jak z API.

W tym artykule pokażę Ci, jak zbudować pierwszy serwer MCP w C#, jak działają tools, resources i prompts oraz gdzie to rozwiązanie ma realny sens produkcyjny.

Bez teorii — konkretny kod i praktyczne podejście.

🔍 Czym jest MCP i dlaczego ma znaczenie?

Model Context Protocol w praktyce

Model Context Protocol (MCP) to standard komunikacji między:

  • modelami AI
  • a Twoją aplikacją backendową

Zamiast pisać dedykowane integracje pod każdy model (OpenAI, Claude itd.), to tworzysz jeden spójny interfejs.

Co udostępnia MCP?

Serwer MCP expose’uje trzy kluczowe elementy:

  • Tools – akcje (np. use case’y, logika biznesowa)
  • Resources – dane (np. pliki, schematy, URI)
  • Prompts – gotowe konteksty dla AI

👉 To coś więcej niż REST API to kontrakt dla AI.


🏗️ Architektura MCP w .NET

Gdzie MCP pasuje w Clean Architecture?

Najlepsze podejście:

  • Domain → bez zmian
  • Application → use case’y (logika)
  • Infrastructure → MCP Server

👉 MCP działa jako adapter (port) dla AI.


⚙️ Tworzenie pierwszego serwera MCP w C#

Krok 1 – utworzenie projektu

dotnet new console -n DevHobby.Mcp

W kroku 2 – instalacja pakietów

dotnet add package ModelContextProtocol
dotnet add package Microsoft.Extensions.Hosting

Następnie krok 3 – konfiguracja serwera MCP

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using ModelContextProtocol.Server;
using System.ComponentModel;

var builder = Host.CreateApplicationBuilder(args);

// Logowanie do STDIO (ważne dla MCP)
builder.Logging.AddConsole(options =>
{
    options.LogToStandardErrorThreshold = LogLevel.Trace;
});

builder.Services
    .AddMcpServer()
    .WithStdioServerTransport()
    .WithToolsFromAssembly();

await builder.Build().RunAsync();

🔍 Co tu się dzieje?

  • Host.CreateApplicationBuilder → DI + konfiguracja
  • AddMcpServer() → rejestracja MCP
  • WithStdioServerTransport() → komunikacja przez STDIO
  • WithToolsFromAssembly() → auto-discovery tooli

👉 MCP skanuje assembly i wystawia metody jako narzędzia dla AI.


🛠️ Tworzenie pierwszego Toola

Tool jako use case

[McpServerToolType]
public static class EchoTool
{
    [McpServerTool, Description("Echoes the message back to the client.")]
    public static string Echo(string message) => $"hello {message}";
}

Dlaczego to dobre podejście?

  • brak logiki w infrastrukturze
  • tool = cienka warstwa nad use case
  • łatwe testowanie

👉 Best practice: mapuj Tool → Application Use Case


🧪 Testowanie MCP (Postman)

Jak sprawdzić działanie?

  1. Zbuduj aplikację
  2. Uruchom Postman
  3. Wybierz typ: MCP
  4. Podłącz plik .exe
  5. Wywołaj tool

🔄 Rozszerzenie: więcej tooli

Przykład z logiką i DI

[McpServerToolType]
public class FirstTools(ILogger<FirstTools> logger)
{
    [McpServerTool, Description("Echoes the message back to the client.")]
    public static string Echo(string message) => $"hello {message}";

    [McpServerTool(Name = "reverse"), Description("Odwraca ciąg wejściowy.")]
    public string ReverseText(string text)
    {
        logger.LogInformation("Odwraca ciąg wejściowy:{text}", text);

        if (string.IsNullOrEmpty(text))
            return text;

        return new string(text.Reverse().ToArray());
    }
}

Wnioski

  • możesz używać DI
  • tool nie musi być statyczny
  • masz pełną kontrolę nad logiką

🔢 Kolejne przykłady

[McpServerTool(Name = "sum"), Description("Oblicza sumę podanych liczb.")]
public int Sum(params int[] numbers) => numbers.Sum();

[McpServerTool(Name = "average"), Description("Oblicza średnią z podanych liczb.")]
public double Average(params int[] numbers)
{
    if (numbers.Length == 0)
        return 0;

    return numbers.Average();
}

🔐 Bezpieczeństwo MCP

Na co uważać?

Największy błąd:

👉 dawanie AI pełnego dostępu do systemu

✔️ Dobre praktyki:

  • whitelist tooli
  • walidacja inputu
  • ograniczenie scope
  • logowanie i audyt

🌍 STDIO vs HTTP

Który transport wybrać?

TrybZastosowanie
STDIOlokalne narzędzia
HTTPprodukcja / integracje

👉 W produkcji używaj ASP.NET Core + OAuth2


🧠 Kiedy MCP ma sens?

Realne use case’y

  • AI agents wykonujące akcje
  • automatyzacja procesów
  • integracja AI z backendem
  • “AI jako użytkownik systemu”

📌 Checklist – czy warto użyć MCP?

✔ masz integrację z AI
✔ chcesz skalować rozwiązanie
✔ masz wiele tooli/use case’ów
✔ zależy Ci na standaryzacji

❌ tylko prosty API → overkill


⚡ Podsumowanie

  • MCP to standard komunikacji AI ↔ backend
  • działa jako adapter w architekturze
  • najlepiej mapować Tool → Use Case
  • ma sens głównie przy AI + integracjach + skali

🔗 Zobacz też


📣 Call To Action

Jeśli chcesz więcej materiałów o:

  • architekturze .NET
  • integracji z AI
  • praktycznych wzorcach

👉 Zostaw komentarz i daj znać, czy chcesz część 2 (HTTP + produkcja)

Zobacz także — powiązane artykuły

👉 Tworzenie klas i obiektów w C# — kompletny przewodnik

👉LINQ w C# — przetwarzanie kolekcji bez pętli – zobacz w kursie LINQ w C# -czytelny kod, wydajne zapytania

👉 Typy wartościowe vs referencyjne w C# — jak działa pamięć – zobacz w kursie C# Podstawy Programowania: Twój Pierwszy Krok w Świat Kodowania

Dołącz do Listy VIP

I otrzymaj roadmapę Junior .NET Developer oraz najlepszą ofertę, gdy tylko ruszą zapisy!!!

Kontakt: mariuszjurczenko@dev-hobby.pl
Zero spamu. Możesz wypisać się w każdej chwili.

Dodaj komentarz