Sdílet prostřednictvím


Vytvoření minimálního serveru MCP pomocí C# a publikování na NuGet

V tomto rychlém startu vytvoříte minimální server MCP (Model Context Protocol) pomocí sady C# SDK pro MCP, připojíte se k němu pomocí GitHub Copilotu a publikujete ho na NuGet. Servery MCP jsou služby, které zpřístupňují možnosti klientům prostřednictvím protokolu MCP (Model Context Protocol).

Poznámka:

Prostředí Microsoft.Extensions.AI.Templates je aktuálně ve verzi Preview. Šablona používá knihovnu ModelContextProtocol a schéma registru server.json MCP, které jsou ve verzi Preview.

Požadavky

Vytvoření projektu

  1. V okně terminálu nainstalujte šablonu serveru MCP (verze 9.10.0-preview.3.25513.3 nebo novější):

    dotnet new install Microsoft.Extensions.AI.Templates
    
  2. Pomocí příkazu vytvořte novou serverovou aplikaci dotnet new mcpserver MCP:

    dotnet new mcpserver -n SampleMcpServer
    

    Ve výchozím nastavení tento příkaz vytvoří samostatný balíček nástrojů, který cílí na všechny nejběžnější platformy, na které se podporuje .NET. Pokud chcete zobrazit další možnosti, použijte dotnet new mcpserver --help.

  3. Přejděte do SampleMcpServer adresáře:

    cd SampleMcpServer
    
  4. Sestavení projektu:

    dotnet build
    
  5. <PackageId> Aktualizujte soubor .csproj tak, aby byl jedinečný na NuGet.org, například <NuGet.org username>.SampleMcpServer.

Konfigurace serveru MCP v editoru Visual Studio Code

Nakonfigurujte GitHub Copilot pro Visual Studio Code tak, aby používal váš vlastní server MCP:

  1. Pokud jste to ještě neudělali, otevřete složku projektu v editoru Visual Studio Code.

  2. Vytvořte .vscode složku v kořenovém adresáři projektu.

  3. mcp.json Do složky přidejte soubor .vscode s následujícím obsahem:

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

    Poznámka:

    VS Code spouští servery MCP z kořenového adresáře pracovního prostoru. Zástupný <relative-path-to-project-file> symbol by měl odkazovat na soubor projektu .NET. Například hodnota pro tuto aplikaci SampleMcpServer by byla SampleMcpServer.csproj.

  4. Uložte soubor.

Otestování serveru MCP

Šablona serveru MCP obsahuje nástroj get_random_number, který můžete použít pro testování a jako počáteční bod pro vývoj.

  1. Otevřete GitHub Copilot v editoru Visual Studio Code a přepněte do režimu agenta.

  2. Výběrem ikony Vybrat nástroje ověřte, že je váš SampleMcpServer dostupný s ukázkovým nástrojem uvedeným v seznamu.

    Snímek obrazovky s dostupnými nástroji MCP

  3. Zadejte výzvu ke spuštění nástroje get_random_number :

    Give me a random number between 1 and 100.
    
  4. GitHub Copilot požaduje oprávnění ke spuštění nástroje get_random_number pro vaši výzvu. Vyberte Pokračovat nebo pomocí šipky vyberte konkrétnější chování:

    • Aktuální relace vždy provádí operaci v aktuální relaci režimu GitHub Copilot Agent.
    • Aktuální pracovní prostor vždy spustí příkaz pro současný pracovní prostor ve Visual Studio Code.
    • Vždy povolte nastaví operaci, aby vždy běžela pro libovolnou relaci s režimem agenta GitHub Copilot nebo pro jakýkoli pracovní prostor v editoru Visual Studio Code.
  5. Ověřte, že server reaguje náhodným číslem:

    Your random number is 42.
    

Přidání vstupů a možností konfigurace

V tomto příkladu vylepšíte server MCP tak, aby používal konfigurační hodnotu nastavenou v proměnné prostředí. Tato konfigurace může být nutná pro fungování serveru MCP, jako je klíč rozhraní API, koncový bod pro připojení nebo cesta k místnímu adresáři.

  1. Přidejte další metodu nástroje za metodu GetRandomNumber v souboru Tools/RandomNumberTools.cs. Aktualizujte kód nástroje tak, aby používal proměnnou prostředí.

    [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. Aktualizujte .vscode/mcp.json pro nastavení proměnné prostředí WEATHER_CHOICES pro účely testování.

    {
       "servers": {
         "SampleMcpServer": {
           "type": "stdio",
           "command": "dotnet",
           "args": [
             "run",
             "--project",
             "<relative-path-to-project-file>"
           ],
           "env": {
              "WEATHER_CHOICES": "sunny,humid,freezing"
           }
         }
       }
     }
    
  3. Zkuste v editoru VS Code použít další výzvu s příkazem Copilot, například:

    What is the weather in Redmond, Washington?
    

    VS Code by měl vrátit náhodný popis počasí.

  4. Aktualizujte .mcp/server.json, abyste deklarovali vstup vaší proměnné prostředí. Schéma server.json souborů je definováno projektem registru MCP a používá NuGet.org ke generování konfigurace VS Code MCP.

    • environmentVariables Pomocí vlastnosti deklarujte proměnné prostředí používané vaší aplikací, které klient nastaví pomocí serveru MCP (například VS Code).

    • packageArguments Pomocí vlastnosti definujte argumenty rozhraní příkazového řádku, které se předají vaší aplikaci. Další příklady najdete v projektu registru MCP.

    {
      "$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"
      }
    }
    

    Jedinečná informace používaná NuGet.org je v server.json, a to první položka pole packages, která má hodnotu registryType odpovídající nuget. Ostatní vlastnosti nejvyšší úrovně kromě packages vlastnosti jsou aktuálně nepoužívané a jsou určeny pro nadcházející centrální registr MCP. Zástupné hodnoty můžete ponechat, dokud nebude registr MCP aktivní a připravený přijmout položky serveru MCP.

Server MCP můžete otestovat znovu, než se posunete dál.

Balení a publikování do NuGetu

  1. Zabalte projekt:

    dotnet pack -c Release
    

    Tento příkaz vytvoří jeden balíček nástrojů a několik balíčků specifických pro platformu <RuntimeIdentifiers> na základě seznamu v SampleMcpServer.csproj.

  2. Publikování balíčků do NuGetu:

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

    Nezapomeňte publikovat všechny .nupkg soubory, abyste zajistili, že každá podporovaná platforma může spustit server MCP.

    Pokud chcete otestovat tok publikování před publikováním do NuGet.org, můžete zaregistrovat účet v prostředí integrace galerie NuGet: https://int.nugettest.org. Příkaz push by se změnil na:

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

Další informace najdete v tématu Publikování balíčku.

Zjišťování serverů MCP na NuGet.org

  1. Vyhledejte balíček serveru MCP na NuGet.org (nebo int.nugettest.org , pokud jste publikovali v prostředí integrace) a vyberte ho ze seznamu.

    Snímek obrazovky znázorňující hledání serverů MCP na NuGet.org

  2. Zobrazte podrobnosti balíčku a zkopírujte JSON z karty Server MCP.

    Snímek obrazovky zobrazující konkrétní server MCP zobrazený na NuGet.org

  3. mcp.json Do souboru ve .vscode složce přidejte zkopírovaný JSON, který vypadá takto:

    {
      "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}"
          }
        }
      }
    }
    

    Pokud jste publikovali do integračního prostředí galerie NuGet, musíte na konec pole "--add-source", "https://apiint.nugettest.org/v3/index.json" přidat "args".

  4. Uložte soubor.

  5. V GitHub Copilotu vyberte ikonu Vybrat nástroje a ověřte, že je váš SampleMcpServer dostupný v uvedených nástrojích.

  6. Zadejte výzvu ke spuštění nového nástroje get_city_weather :

    What is the weather in Redmond?
    
  7. Pokud jste přidali vstupy na server MCP (například WEATHER_CHOICES), zobrazí se výzva k zadání hodnot.

  8. Ověřte, že server reaguje náhodným počasím:

    The weather in Redmond is balmy.
    

Běžné problémy

Příkaz dnx potřebný ke spuštění SampleMcpServer nebyl nalezen.

Pokud VS Code při spuštění serveru MCP zobrazí tuto chybu, musíte nainstalovat kompatibilní verzi sady .NET SDK.

Snímek obrazovky znázorňující chybějící příkaz dnx ve VS Code

Příkaz dnx se dodává jako součást sady .NET SDK počínaje verzí 10. Pokud chcete tento problém vyřešit, nainstalujte sadu .NET 10 SDK.

GitHub Copilot váš nástroj nepoužívá (odpověď se zobrazí bez vyvolání vašeho nástroje).

Obecně řečeno, agent AI, jako je GitHub Copilot, je informován, že má k dispozici některé nástroje klientské aplikace, jako je VS Code. Některé nástroje, jako je nástroj pro náhodné číslo vzorku, nemusí agent umělé inteligence využívat, protože má podobnou integrovanou funkci.

Pokud se váš nástroj nepoužívá, zkontrolujte následující:

  1. Ověřte, že se váš nástroj zobrazí v seznamu nástrojů, které nástroj VS Code povolil. Podívejte se na snímek obrazovky v části Test serveru MCP, jak to zkontrolovat.
  2. Explicitně odkazujte na název nástroje ve výzvě. Ve VS Code můžete na nástroj odkazovat podle názvu. Například: Using #get_random_weather, what is the weather in Redmond?.
  3. Ověřte, že se server MCP může spustit. Můžete to zkontrolovat kliknutím na tlačítko Start zobrazené nad konfigurací serveru MCP v nastavení uživatele nebo pracovního prostoru VS Code.

Snímek obrazovky znázorňující server MCP v konfiguraci VS Code, která je spuštěná