Delen via


Een minimale MCP-server maken met C# en publiceren naar NuGet

In deze quickstart maakt u een minimale MCP-server (Model Context Protocol) met behulp van de C#SDK voor MCP, maakt u er verbinding mee met gitHub Copilot en publiceert u deze naar NuGet (alleen stdio transport). MCP-servers zijn services die mogelijkheden beschikbaar maken voor clients via het Model Context Protocol (MCP).

Opmerking

Het Microsoft.McpServer.ProjectTemplates sjabloonpakket is momenteel beschikbaar als preview-versie.

Vereiste voorwaarden

Het project maken

  1. Installeer in een terminalvenster de MCP Server-sjabloon:

    dotnet new install Microsoft.McpServer.ProjectTemplates
    

    Opmerking

    .NET 10.0 SDK of een latere versie is vereist om te installeren Microsoft.McpServer.ProjectTemplates.

  2. Open Visual Studio en selecteer Een nieuw project maken in het startvenster (of selecteer Bestand>nieuw>project/oplossing in Visual Studio).

    Een nieuw projectdialoogvenster maken

  3. Selecteer in het venster Een nieuw project makenC# in de lijst Taal en AI in de lijst Alle projecttypen . Nadat u de taal- en projecttypefilters hebt toegepast, selecteert u de sjabloon MCP Server-app en selecteert u vervolgens Volgende.

    Een nieuw MCP Server-app-project maken in het dialoogvenster Project

  4. Voer in het venster Uw nieuwe project configurerenMyMcpServer in het veld Projectnaam in. Klik vervolgens op Volgende.

    Geef uw nieuwe MCP Server-app-project een naam in het dialoogvenster Uw nieuwe project configureren

  5. In het venster Aanvullende informatie kunt u de volgende opties configureren:

    • Framework: Selecteer het doel .NET Framework.
    • MCP-servertransporttype: kies tussen het maken van een lokale (stdio) of een externe (http) MCP-server.
    • Systeemeigen AOT (Ahead-Of-Time) publiceren inschakelen: ervoor zorgen dat uw MCP-server op zichzelf staat en wordt gecompileerd naar systeemeigen code. Zie de native AOT-implementatiehandleiding voor meer informatie.
    • Zelfstandig publiceren inschakelen: ervoor zorgen dat uw MCP-server wordt gepubliceerd als zelfstandig uitvoerbaar bestand. Zie de sectie Zelfstandige implementatie van de publicatiehandleiding voor .NET-toepassingen voor meer informatie.

    Kies de gewenste opties of behoud de standaardopties en selecteer vervolgens Maken.

    Selecteer extra opties, waaronder framework en transport voor uw MCP-server

    Visual Studio opent uw nieuwe project.

  6. Werk het <PackageId> bestand bij zodat het .csproj uniek is op NuGet.org, bijvoorbeeld <NuGet.org username>.SampleMcpServer.

  1. Installeer in een terminalvenster de MCP Server-sjabloon:

    dotnet new install Microsoft.McpServer.ProjectTemplates
    

    Opmerking

    .NET 10.0 SDK of hoger is vereist om te installeren Microsoft.McpServer.ProjectTemplates.

  2. Open Visual Studio Code.

  3. Ga naar de verkennerweergave en selecteer .NET-project maken. U kunt ook het opdrachtenpalet openen met Ctrl+Shift+P (Command+Shift+P in MacOS) en vervolgens '.NET' typen om de opdracht .NET: New Project te zoeken en te selecteren.

    Met deze actie wordt een vervolgkeuzelijst met .NET-projecten weergegeven.

    Dropdownlijst van .NET-projecten

  4. Nadat u de opdracht hebt geselecteerd, gebruikt u de zoekbalk in het opdrachtpalet of schuift u omlaag om de sjabloon van de MCP Server-app te zoeken.

    Een MCP Server-app-sjabloon maken

  5. Selecteer de locatie waar u het nieuwe project wilt maken.

  6. Geef uw nieuwe project een naam, MyMCPServer. Druk op Enter. Geef uw MCP-server een naam

  7. Selecteer de bestandsindeling van uw oplossing (.sln of .slnx).

  8. Selecteer Sjabloonopties. Hier kunt u de volgende opties configureren:

    • Framework: Selecteer het doel .NET Framework.
    • MCP-servertransporttype: kies tussen het maken van een lokale (stdio) of een externe (http) MCP-server.
    • Systeemeigen AOT (Ahead-Of-Time) publiceren inschakelen: ervoor zorgen dat uw MCP-server op zichzelf staat en wordt gecompileerd naar systeemeigen code. Zie de native AOT-implementatiehandleiding voor meer informatie.
    • Zelfstandig publiceren inschakelen: ervoor zorgen dat uw MCP-server wordt gepubliceerd als zelfstandig uitvoerbaar bestand. Zie de sectie Zelfstandige implementatie van de publicatiehandleiding voor .NET-toepassingen voor meer informatie.

    Opties voor MCP-serversjablonen

    Kies de gewenste opties of behoud de standaardopties en selecteer Vervolgens Project maken.

    VS Code opent uw nieuwe project.

  9. Werk het <PackageId> bestand bij zodat het .csproj uniek is op NuGet.org, bijvoorbeeld <NuGet.org username>.SampleMcpServer.

  1. Maak een nieuwe MCP-server-app met de dotnet new mcpserver opdracht:

    dotnet new mcpserver -n SampleMcpServer
    

    Met deze opdracht wordt standaard een zelfstandig hulpprogrammapakket gemaakt dat is gericht op alle meest voorkomende platforms waarop .NET wordt ondersteund. Als u meer opties wilt zien, gebruikt u dotnet new mcpserver --help.

    Met behulp van de dotnet new mcpserver --help opdracht krijgt u verschillende sjabloonopties die u kunt toevoegen bij het maken van een nieuwe MCP-server:

    • Framework: Selecteer het doel .NET Framework.
    • MCP-servertransporttype: kies tussen het maken van een lokale (stdio) of een externe (http) MCP-server.
    • Systeemeigen AOT (Ahead-Of-Time) publiceren inschakelen: ervoor zorgen dat uw MCP-server op zichzelf staat en wordt gecompileerd naar systeemeigen code. Zie de native AOT-implementatiehandleiding voor meer informatie.
    • Zelfstandig publiceren inschakelen: ervoor zorgen dat uw MCP-server wordt gepubliceerd als zelfstandig uitvoerbaar bestand. Zie de sectie Zelfstandige implementatie van de publicatiehandleiding voor .NET-toepassingen voor meer informatie.

    Sjabloonopties voor een MCP-server in .NET CLI

  2. Ga naar de SampleMcpServer directory.

    cd SampleMcpServer
    
  3. Bouw het project:

    dotnet build
    
  4. Werk het <PackageId> bestand bij zodat het .csproj uniek is op NuGet.org, bijvoorbeeld <NuGet.org username>.SampleMcpServer.

Rondleiding door het MCP Server-project

Als u uw MCP-serverproject maakt via de sjabloon, krijgt u de volgende belangrijke bestanden:

  • Program.cs: Een bestand dat de toepassing definieert als een MCP-server en het registreren van MCP-services zoals transporttype en MCP-hulpprogramma's.
    • Als u de (standaard) stdio-transportoptie kiest bij het maken van het project, wordt dit bestand geconfigureerd om de MCP-server te definiëren als een lokale server (dat wil gezegd, .withStdioServerTransport()).
    • Als u de http-transportoptie kiest, wordt dit bestand geconfigureerd voor het opnemen van externe transportspecifieke definities (dat wil gezegd, .withHttpServerTransport(), ). MapMcp()
  • RandomNumberTools.cs: Een klasse die een voorbeeld van een MCP-serverhulpprogramma definieert dat een willekeurig getal retourneert tussen door de gebruiker opgegeven min/max-waarden.
  • [Alleen HTTP-transport][MCPServerName].http: een bestand dat het standaardhostadres definieert voor een HTTP MCP-server en JSON-RPC communicatie.
  • server.json: Een bestand waarin wordt gedefinieerd hoe en waar uw MCP-server wordt gepubliceerd.

MCP Server-projectstructuur (stdio)

MCP Server-projectstructuur (stdio)

De MCP-server configureren

Configureer GitHub Copilot voor Visual Studio om uw aangepaste MCP-server te gebruiken.

  1. Selecteer in Visual Studio het GitHub Copilot-pictogram in de rechterbovenhoek en selecteer Chatvenster openen.

  2. Klik in het GitHub Copilot Chat-venster op het Selecteer Tools moersleutelpictogram, gevolgd door het pluspictogram in de rechterbovenhoek.

    Het venster MCP Tools en het pluspictogram selecteren

  3. Voer in het dialoogvenster Aangepaste MCP-server toevoegen de volgende gegevens in:

    • Bestemming: kies het bereik van waar uw MCP-server is geconfigureerd:
      • Oplossing : de MCP-server is alleen beschikbaar in de actieve oplossing.
      • Globaal : de MCP-server is beschikbaar voor alle oplossingen.
    • Server-id: de unieke naam/id voor uw MCP-server.
    • Type: Het transporttype van uw MCP-server (stdio of HTTP).
    • Opdracht (alleen stdio-transport): de opdracht voor het uitvoeren van uw stdio MCP-server (dat wil zeggen, dotnet run --project [relative path to .csproj file])
    • URL (alleen HTTP-transport): het adres van uw HTTP MCP-server
    • Omgevingsvariabelen (optioneel)

    Dialoogvenster Aangepaste MCP-server toevoegen

  4. Selecteer Opslaan. Er wordt een .mcp.json bestand toegevoegd aan de opgegeven bestemming.

Stdio Transport .mcp.json

Voeg het relatieve pad toe aan uw .csproj-bestand onder het veld "args".

{
  "inputs": [],
  "servers": {
    "MyMcpServer": {
      "type": "stdio",
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "<relative-path-to-project-file>"
      ]
    }
  }
}

HTTP-transport .mcp.json

{
 "inputs": [],
  "servers": {
    "MyMCPServer": {
      "url": "http://localhost:6278",
      "type": "http",
      "headers": {}
    }
  }
}

Configureer GitHub Copilot voor Visual Studio Code om uw aangepaste MCP-server te gebruiken, via het OPDRACHTENpalet van VS Code of handmatig.

Configuratie van opdrachtpalet

  1. Open het opdrachtenpalet met Ctrl+Shift+P (Command+Shift+P in macOS). Zoek 'mcp' om de MCP: Add Server opdracht te vinden.

  2. Selecteer het type MCP-server dat u wilt toevoegen (meestal het transporttype dat u tijdens het maken van het project hebt geselecteerd).

    Selecteer het type MCP-server dat u wilt toevoegen via de commando-palet

  3. Als u een stdio MCP-server toevoegt, voert u een opdracht en optionele argumenten in. Gebruik dotnet run --projectvoor dit voorbeeld .

    Als u een HTTP MCP-server toevoegt, voert u de localhost of het webadres in.

  4. Voer een unieke server-id in (bijvoorbeeld: 'MyMCPServer').

  5. Selecteer een configuratiedoel:

    • Globaal: maak de MCP-server beschikbaar in alle werkruimten. Het gegenereerde mcp.json bestand wordt weergegeven onder de algemene gebruikersconfiguratie.

    • Werkruimte: maak de MCP-server alleen beschikbaar vanuit de huidige werkruimte. Het gegenereerde mcp.json bestand wordt weergegeven onder de .vscode map in uw werkruimte.

    Configuratiedoel voor MCP-server toevoegen

  6. Nadat u de vorige stappen hebt voltooid, wordt er een .mcp.json bestand gemaakt op de locatie die is opgegeven door het configuratiedoel.

Stdio Transport mcp.json

Voeg het relatieve pad toe aan uw .csproj-bestand onder het veld "args".

{
  "servers": {
    "MyMcpServer": {
      "type": "stdio",
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "<relative-path-to-project-file>"
      ]
    }
  }
}

HTTP-transport mcp.json

{
  "servers": {
    "MyMCPServer": {
      "url": "http://localhost:6278",
      "type": "http"
    }
  },
  "inputs": []
}

Handmatige configuratie

  1. Maak een .vscode map in de hoofdmap van uw project.

  2. Voeg een mcp.json bestand toe aan de .vscode map met de volgende inhoud:

    {
      "servers": {
        "SampleMcpServer": {
          "type": "stdio",
          "command": "dotnet",
          "args": [
            "run",
            "--project",
            "<relative-path-to-project-file>"
          ]
        }
      }
    }
    

    Opmerking

    VS Code voert MCP-servers uit vanuit de hoofdmap van de werkruimte. De <relative-path-to-project-file> tijdelijke aanduiding moet verwijzen naar het .NET-projectbestand. De waarde voor deze SampleMcpServer-app zou bijvoorbeeld zijn SampleMcpServer.csproj.

  3. Sla het bestand op.

De MCP-server testen

De MCP-serversjabloon bevat een tool, get_random_number, die u kunt gebruiken voor testen en als beginpunt voor ontwikkeling.

  1. Open GitHub Copilot-chat in Visual Studio en schakel over naar de agentmodus .

  2. Selecteer het pictogram Selecteer hulpprogramma's om te verifiëren dat uw MyMCPServer beschikbaar is, zoals vermeld bij het voorbeeldhulpprogramma.

    Lijst met MCP-hulpprogramma's in GitHub Copilot Chat

  3. Voer een prompt in om het hulpprogramma get_random_number uit te voeren:

    Give me a random number between 1 and 100.
    
  4. GitHub Copilot vraagt toestemming om het hulpprogramma get_random_number uit te voeren voor uw prompt. Selecteer Doorgaan of gebruik de pijl om een specifieker gedrag te selecteren:

    • De huidige sessie voert de bewerking altijd uit in de huidige Sessie van de GitHub Copilot-agentmodus.
    • De huidige oplossing voert altijd de opdracht uit voor de huidige Visual Studio-oplossing.
    • Sta altijd toe dat de bewerking altijd wordt uitgevoerd voor elke GitHub Copilot Agent Mode-sessie.
  5. Controleer of de server reageert met een willekeurig getal:

    Your random number is 42.
    

De MCP-serversjabloon bevat een tool, get_random_number, die u kunt gebruiken voor testen en als beginpunt voor ontwikkeling.

  1. Open GitHub Copilot-chat in VS Code en schakel over naar de agentmodus .

  2. Selecteer het pictogram Hulpprogramma's om te controleren of uw MyMCPServer beschikbaar is met het vermelde voorbeeldhulpprogramma.

    Lijst met MCP-hulpprogramma's in GitHub Copilot Chat

  3. Voer een prompt in om het hulpprogramma get_random_number uit te voeren:

    Give me a random number between 1 and 100.
    
  4. GitHub Copilot vraagt toestemming om het hulpprogramma get_random_number uit te voeren voor uw prompt. Selecteer Doorgaan of gebruik de pijl om een specifieker gedrag te selecteren:

    • De huidige sessie voert de bewerking altijd uit in de huidige Sessie van de GitHub Copilot-agentmodus.
    • De huidige werkruimte voert altijd de opdracht uit voor de huidige VS Code-werkruimte.
    • Sta altijd toe dat de bewerking altijd wordt uitgevoerd voor elke GitHub Copilot Agent Mode-sessie.
  5. Controleer of de server reageert met een willekeurig getal:

    Your random number is 42.
    

Invoer- en configuratieopties toevoegen

In dit voorbeeld verbetert u de MCP-server om een configuratiewaarde te gebruiken die is ingesteld in een omgevingsvariabele. Dit kan een configuratie zijn die nodig is voor het functioneren van uw MCP-server, zoals een API-sleutel, een eindpunt waarmee verbinding moet worden gemaakt of een lokaal mappad.

  1. Voeg een andere toolmethode toe na de GetRandomNumber methode in Tools/RandomNumberTools.cs. Werk de hulpprogrammacode bij om een omgevingsvariabele te gebruiken.

    [McpServerTool]
    [Description("Describes random weather in the provided city.")]
    public string GetCityWeather(
        [Description("Name of the city to return weather for")] string city)
    {
        // Read the environment variable during tool execution.
        // Alternatively, this could be read during startup and passed via IOptions dependency injection
        var weather = Environment.GetEnvironmentVariable("WEATHER_CHOICES");
        if (string.IsNullOrWhiteSpace(weather))
        {
            weather = "balmy,rainy,stormy";
        }
    
        var weatherChoices = weather.Split(",");
        var selectedWeatherIndex =  Random.Shared.Next(0, weatherChoices.Length);
    
        return $"The weather in {city} is {weatherChoices[selectedWeatherIndex]}.";
    }
    
  2. Werk .vscode/mcp.json bij om de WEATHER_CHOICES omgevingsvariabele in te stellen om te testen.

    {
       "servers": {
         "SampleMcpServer": {
           "type": "stdio",
           "command": "dotnet",
           "args": [
             "run",
             "--project",
             "<relative-path-to-project-file>"
           ],
           "env": {
              "WEATHER_CHOICES": "sunny,humid,freezing"
           }
         }
       }
     }
    
  3. Probeer een andere prompt met Copilot in VS Code, zoals:

    What is the weather in Redmond, Washington?
    

    VS Code moet een willekeurige weerbeschrijving retourneren.

  4. Werk het .mcp/server.json bestand bij om de invoer van uw omgevingsvariabele te declareren. Het server.json bestandsschema wordt gedefinieerd door het MCP-registerproject en wordt gebruikt door NuGet.org om DE MCP-configuratie van VS Code te genereren.

    • Gebruik de environmentVariables eigenschap om omgevingsvariabelen te declareren die worden gebruikt door uw app die door de client worden ingesteld met behulp van de MCP-server (bijvoorbeeld VS Code).

    • Gebruik de packageArguments eigenschap om CLI-argumenten te definiëren die worden doorgegeven aan uw app. Zie het MCP-registerproject voor meer voorbeelden.

    {
      "$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
      "description": "<your description here>",
      "name": "io.github.<your GitHub username here>/<your repo name>",
      "version": "<your package version here>",
      "packages": [
        {
          "registryType": "nuget",
          "registryBaseUrl": "https://api.nuget.org",
          "identifier": "<your package ID here>",
          "version": "<your package version here>",
          "transport": {
            "type": "stdio"
          },
          "packageArguments": [],
          "environmentVariables": [
            {
              "name": "WEATHER_CHOICES",
              "value": "{weather_choices}",
              "variables": {
                "weather_choices": {
                  "description": "Comma separated list of weather descriptions to randomly select.",
                  "isRequired": true,
                  "isSecret": false
                }
              }
            }
          ]
        }
      ],
      "repository": {
        "url": "https://github.com/<your GitHub username here>/<your repo name>",
        "source": "github"
      }
    }
    

    De enige informatie die door NuGet.org in het server.json wordt gebruikt, is het eerste packages array-element met de registryType-waarde die overeenkomt met nuget. De andere eigenschappen op het hoogste niveau naast de packages eigenschap zijn momenteel ongebruikt en zijn bedoeld voor het komende centrale MCP-register. U kunt de waarden van de tijdelijke aanduidingen behouden totdat het MCP-register live is en klaar is om MCP-serververmeldingen te accepteren.

U kunt uw MCP-server opnieuw testen voordat u verdergaat.

Inpakken en publiceren naar NuGet

  1. Pak het project in:

    dotnet pack -c Release
    

    Met deze opdracht worden één hulpprogrammapakket en verschillende platformspecifieke pakketten geproduceerd op basis van de <RuntimeIdentifiers> lijst in SampleMcpServer.csproj.

  2. Publiceer de pakketten naar NuGet:

    dotnet nuget push bin/Release/*.nupkg --api-key <your-api-key> --source https://api.nuget.org/v3/index.json
    

    Zorg ervoor dat u alle .nupkg bestanden publiceert om ervoor te zorgen dat elk ondersteund platform de MCP-server kan uitvoeren.

    Als u de publicatiestroom wilt testen voordat u naar NuGet.org publiceert, kunt u een account registreren in de integratieomgeving van de NuGet-galerie: https://int.nugettest.org. De push opdracht wordt gewijzigd in:

    dotnet nuget push bin/Release/*.nupkg --api-key <your-api-key> --source https://apiint.nugettest.org/v3/index.json
    

Zie Een pakket publiceren voor meer informatie.

MCP-servers detecteren op NuGet.org

  1. Zoek uw MCP-serverpakket op NuGet.org (of int.nugettest.org als u naar de integratieomgeving hebt gepubliceerd) en selecteer het in de lijst.

    Een schermopname van een zoekopdracht naar MCP-servers op NuGet.org.

  2. Bekijk de pakketgegevens en kopieer de JSON vanaf het tabblad MCP-server.

    Een schermopname van een specifieke MCP-server die wordt weergegeven op NuGet.org.

  3. Voeg in het mcp.json bestand in de .vscode map de gekopieerde JSON toe, die er als volgt uitziet:

    {
      "inputs": [
        {
          "type": "promptString",
          "id": "weather_choices",
          "description": "Comma separated list of weather descriptions to randomly select.",
          "password": false
        }
      ],
      "servers": {
        "Contoso.SampleMcpServer": {
          "type": "stdio",
          "command": "dnx",
          "args": ["Contoso.SampleMcpServer@0.0.1-beta", "--yes"],
          "env": {
            "WEATHER_CHOICES": "${input:weather_choices}"
          }
        }
      }
    }
    

    Als u hebt gepubliceerd naar de integratieomgeving van de NuGet-galerie, moet u aan het einde van de "--add-source", "https://apiint.nugettest.org/v3/index.json"-array "args" toevoegen.

  4. Sla het bestand op.

  5. Selecteer in GitHub Copilot het pictogram Hulpprogramma's selecteren om te controleren of uw SampleMcpServer beschikbaar is met de vermelde hulpprogramma's.

  6. Voer een prompt in om het nieuwe hulpprogramma get_city_weather uit te voeren:

    What is the weather in Redmond?
    
  7. Als u invoer hebt toegevoegd aan uw MCP-server (bijvoorbeeld WEATHER_CHOICES), wordt u gevraagd waarden op te geven.

  8. Controleer of de server reageert met het willekeurige weer:

    The weather in Redmond is balmy.
    

Veelvoorkomende problemen

De opdracht 'dnx' die nodig is om SampleMcpServer uit te voeren, is niet gevonden

Als in VS Code deze fout wordt weergegeven bij het starten van de MCP-server, moet u een compatibele versie van de .NET SDK installeren.

Een schermopname van de ontbrekende dnx-opdracht in VS Code.

De dnx opdracht wordt geleverd als onderdeel van de .NET SDK, vanaf versie 10. Installeer de .NET 10 SDK om dit probleem op te lossen.

GitHub Copilot gebruikt uw hulpprogramma niet (er wordt een antwoord gegeven zonder uw hulpprogramma aan te roepen)

Over het algemeen wordt een AI-agent zoals GitHub Copilot geïnformeerd dat er enkele hulpprogramma's beschikbaar zijn voor de clienttoepassing, zoals VS Code. Sommige hulpprogramma's, zoals het voorbeeldhulpprogramma voor willekeurige getallen, worden mogelijk niet gebruikt door de AI-agent omdat deze vergelijkbare functionaliteit heeft.

Als uw hulpprogramma niet wordt gebruikt, controleert u het volgende:

  1. Controleer of uw hulpprogramma wordt weergegeven in de lijst met hulpprogramma's die VS Code heeft ingeschakeld. Zie de schermopname in Test the MCP server om dit te controleren.
  2. Vermeld expliciet de naam van het hulpprogramma in uw prompt. In VS Code kunt u naar uw hulpprogramma verwijzen op naam. Bijvoorbeeld: Using #get_random_weather, what is the weather in Redmond?.
  3. Controleer of de MCP-server in staat is te starten. U kunt dit controleren door te klikken op de knop Start die zichtbaar is boven uw MCP-serverconfiguratie in de gebruikers- of werkruimte-instellingen van VS Code.

Een schermopname van een MCP-server in VS Code-configuratie die is gestart.