Compartir vía


Creación de un servidor MCP mínimo mediante C# y publicación en NuGet

En este inicio rápido, creará un servidor mínimo de Protocolo de contexto de modelo (MCP) mediante el SDK de C# para MCP, lo conectará con GitHub Copilot y lo publicará en NuGet (solo transporte stdio). Los servidores MCP son servicios que exponen funcionalidades a los clientes a través del Protocolo de contexto de modelo (MCP).

Nota:

El Microsoft.McpServer.ProjectTemplates paquete de plantilla está actualmente en versión preliminar.

Prerrequisitos

Creación del proyecto

  1. En una ventana de terminal, instale la plantilla servidor MCP:

    dotnet new install Microsoft.McpServer.ProjectTemplates
    

    Nota:

    Se requiere el SDK de .NET 10.0 o una versión posterior para instalar Microsoft.McpServer.ProjectTemplates.

  2. Abra Visual Studio y seleccione Crear un nuevo proyecto en la ventana de inicio (o seleccione Archivo>nuevo>proyecto o solución desde Visual Studio).

    Ventana de diálogo Crear un nuevo proyecto

  3. En la ventana Crear un nuevo proyecto , seleccione C# en la lista Lenguaje e IA en la lista Todos los tipos de proyecto . Después de aplicar los filtros de idioma y tipo de proyecto, seleccione la plantilla Aplicación de servidor MCP y, a continuación, seleccione Siguiente.

    Crear un nuevo proyecto de aplicación de MCP Server en la ventana del cuadro de diálogo del proyecto

  4. En la ventana Configurar el nuevo proyecto , escriba MyMcpServer en el campo Nombre del proyecto. Después, seleccione Siguiente.

    Asigne un nombre al nuevo proyecto de aplicación MCP Server en la ventana de diálogo Configurar el nuevo proyecto

  5. En la ventana Información adicional , puede configurar las siguientes opciones:

    • Framework: seleccione la plataforma de .NET de destino.
    • Tipo de transporte del servidor MCP: elija entre crear un servidor MCP local (stdio) o un servidor MCP remoto (http).
    • Habilitar la publicación nativa de AOT (Ahead-Of-Time): Habilite el servidor MCP para que esté autocontenido y compilado en código nativo. Para obtener más información, consulte la guía de implementación de AOT nativa.
    • Habilitar publicación independiente: habilite el servidor MCP para que se publique como un ejecutable autocontenido. Para obtener más información, consulte la sección Implementación independiente de la guía de publicación de aplicaciones .NET.

    Elija sus opciones preferidas o mantenga las predeterminadas y, a continuación, seleccione Crear.

    Seleccione opciones adicionales, incluido el marco y el transporte para el servidor MCP.

    Visual Studio abre el nuevo proyecto.

  6. Actualice el archivo <PackageId> en .csproj para que sea único en NuGet.org, por ejemplo <NuGet.org username>.SampleMcpServer.

  1. En una ventana de terminal, instale la plantilla servidor MCP:

    dotnet new install Microsoft.McpServer.ProjectTemplates
    

    Nota:

    Se requiere el SDK de .NET 10.0 o posterior para instalar Microsoft.McpServer.ProjectTemplates.

  2. Abre Visual Studio Code.

  3. Vaya a la vista Explorador y seleccione Crear proyecto de .NET. Como alternativa, puede abrir la paleta de comandos mediante Ctrl+Mayús+P (Comando+Mayús+P en MacOS) y, a continuación, escribir ".NET" para buscar y seleccionar el comando .NET: Nuevo proyecto .

    Esta acción mostrará una lista desplegable de proyectos de .NET.

    Lista desplegable de proyectos de .NET

  4. Después de seleccionar el comando, use la barra de búsqueda en la paleta de comandos o desplácese hacia abajo para buscar la plantilla aplicación de servidor MCP .

    Creación de una plantilla de aplicación de servidor MCP

  5. Seleccione la ubicación en la que desea que se cree el nuevo proyecto.

  6. Asigne un nombre al nuevo proyecto, MyMCPServer. Presione ENTRAR. Asigne un nombre al servidor MCP

  7. Seleccione el formato de archivo de la solución (.sln o .slnx).

  8. Seleccione Opciones de plantilla. Aquí puede configurar las siguientes opciones:

    • Framework: seleccione la plataforma de .NET de destino.
    • Tipo de transporte del servidor MCP: elija entre crear un servidor MCP local (stdio) o un servidor MCP remoto (http).
    • Habilitación de la publicación nativa de AOT (Ahead-Of-Time): habilite su servidor MCP para que sea autocontenido y compilado en código nativo. Para obtener más información, consulte la guía de implementación de AOT nativa.
    • Habilitar publicación independiente: habilitar el servidor MCP para que se publique como un ejecutable autocontenido. Para obtener más información, consulte la sección Implementación independiente de la guía de publicación de aplicaciones .NET.

    Opciones de plantilla de servidor MCP

    Elija sus opciones preferidas o mantenga las predeterminadas y, a continuación, seleccione Crear proyecto.

    VS Code abre el nuevo proyecto.

  9. Actualice el archivo <PackageId> en .csproj para que sea único en NuGet.org, por ejemplo <NuGet.org username>.SampleMcpServer.

  1. Cree una nueva aplicación de servidor MCP con el dotnet new mcpserver comando :

    dotnet new mcpserver -n SampleMcpServer
    

    De forma predeterminada, este comando crea un paquete de herramientas independiente destinado a todas las plataformas más comunes en las que se admite .NET. Para ver más opciones, use dotnet new mcpserver --help.

    El uso del dotnet new mcpserver --help comando proporciona varias opciones de plantilla que puede agregar al crear un nuevo servidor MCP:

    • Framework: seleccione la plataforma de .NET de destino.
    • Tipo de transporte del servidor MCP: elija entre crear un servidor MCP local (stdio) o un servidor MCP remoto (http).
    • Habilitar la publicación nativa de AOT (Ahead-Of-Time): habilite el servidor MCP para que sea autónomo y compilado a código nativo. Para obtener más información, consulte la guía de implementación de AOT nativa.
    • Habilitar publicación independiente: habilite un servidor MCP para publicarlo como un ejecutable autocontenido. Para obtener más información, consulte la sección Implementación independiente de la guía de publicación de aplicaciones .NET.

    Opciones de plantilla para un servidor MCP en la CLI de .NET

  2. Vaya al SampleMcpServer directorio :

    cd SampleMcpServer
    
  3. Compile el proyecto:

    dotnet build
    
  4. Actualice el archivo <PackageId> en .csproj para que sea único en NuGet.org, por ejemplo <NuGet.org username>.SampleMcpServer.

Paseo por el proyecto de servidor MCP

La creación del proyecto de servidor MCP a través de la plantilla proporciona los siguientes archivos principales:

  • Program.cs: un archivo que define la aplicación como un servidor MCP y registra servicios MCP, como el tipo de transporte y las herramientas de MCP.
    • Si elige la opción de transporte stdio (valor predeterminado) en al crear el proyecto, este archivo se configurará para definir el servidor MCP como uno local (es decir, .withStdioServerTransport()).
    • Si elige la opción de transporte http , se configurará este archivo para incluir definiciones específicas del transporte remoto (es decir, .withHttpServerTransport(), MapMcp()).
  • RandomNumberTools.cs: una clase que define una herramienta de servidor MCP de ejemplo que devuelve un número aleatorio entre los valores mínimo y máximo especificados por el usuario.
  • [Solo transporte HTTP][MCPServerName].http: un archivo que define la dirección de host predeterminada para un servidor MCP HTTP y JSON-RPC comunicación.
  • server.json: un archivo que define cómo y dónde se publica el servidor MCP.

Estructura del proyecto de SERVIDOR MCP (stdio)

Estructura del proyecto de SERVIDOR MCP (stdio)

Configuración del servidor MCP

Configure GitHub Copilot para Visual Studio para usar el servidor MCP personalizado.

  1. En Visual Studio, seleccione el icono de GitHub Copilot en la esquina superior derecha y seleccione Abrir ventana de chat.

  2. En la ventana de chat de GitHub Copilot, haga clic en el icono de Seleccionar herramientas seguido del icono de signo más en la esquina superior derecha.

    Seleccione la ventana de herramientas de MCP y el icono de añadir.

  3. En la ventana de diálogo Agregar servidor MCP personalizado , escriba la siguiente información:

    • Destino: elija el ámbito de dónde está configurado el servidor MCP:
      • Solución : el servidor MCP solo está disponible en la solución activa.
      • Global : el servidor MCP está disponible en todas las soluciones.
    • Id. de servidor: el nombre y el identificador únicos del servidor MCP.
    • Tipo: tipo de transporte del servidor MCP (stdio o HTTP).
    • Comando (solo transporte de Stdio): El comando para ejecutar el servidor MCP Stdio (es decir, dotnet run --project [relative path to .csproj file])
    • URL (solo transporte HTTP): la dirección de su servidor HTTP MCP
    • Variables de entorno (opcional)

    Ventana de diálogo de agregar un servidor MCP personalizado

  4. Haga clic en Guardar. Se agregará un .mcp.json archivo al destino especificado.

Stdio Transport .mcp.json

Agregue la ruta de acceso relativa al archivo .csproj en el campo "args".

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

Transporte HTTP .mcp.json

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

Configure GitHub Copilot en Visual Studio Code para utilizar tu servidor MCP personalizado, bien sea mediante la paleta de comandos de VS Code o manualmente.

Configuración de la paleta de comandos

  1. Abra la paleta de comandos con Ctrl+Mayús+P (Comando+Mayús+P en macOS). Busque "mcp" para buscar el MCP: Add Server comando.

  2. Seleccione el tipo de servidor MCP que se va a agregar (normalmente el tipo de transporte seleccionado en la creación del proyecto).

    Seleccione el tipo de servidor MCP que se va a agregar a través de la paleta de comandos.

  3. Si agrega un servidor MCP stdio , escriba un comando y argumentos opcionales. En este ejemplo, use dotnet run --project.

    Si agrega un servidor HTTP MCP, escriba localhost o la dirección web.

  4. Escriba un identificador de servidor único (ejemplo: "MyMCPServer").

  5. Seleccione un destino de configuración:

    • Global: haga que el servidor MCP esté disponible en todas las áreas de trabajo. El archivo generado mcp.json aparecerá en la configuración de usuario global.

    • Área de trabajo: haga que el servidor MCP esté disponible solo desde dentro del área de trabajo actual. El archivo generado mcp.json aparecerá dentro de la carpeta .vscode en su área de trabajo.

    Agregar destino de configuración para el servidor MCP

  6. Después de completar los pasos anteriores, se creará un .mcp.json archivo en la ubicación especificada por el destino de configuración.

Stdio Transport mcp.json

Agregue la ruta de acceso relativa al archivo .csproj en el campo "args".

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

Transporte HTTP mcp.json

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

Configuración manual

  1. Cree una .vscode carpeta en la raíz del proyecto.

  2. Agregue un mcp.json archivo en la .vscode carpeta con el siguiente contenido:

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

    Nota:

    VS Code ejecuta servidores MCP desde la raíz del área de trabajo. El <relative-path-to-project-file> marcador de posición debe apuntar al archivo de proyecto de .NET. Por ejemplo, el valor de esta aplicación SampleMcpServer sería SampleMcpServer.csproj.

  3. Guarde el archivo.

Prueba del servidor MCP

La plantilla de servidor MCP incluye una herramienta denominada get_random_number que puede usar para probar y como punto de partida para el desarrollo.

  1. Abra el chat de GitHub Copilot en Visual Studio y cambie al modo agente .

  2. Seleccione el icono Seleccionar herramientas para comprobar que myMCPServer está disponible con la herramienta de ejemplo que aparece.

    Lista de herramientas de MCP en el chat de GitHub Copilot

  3. Escriba un mensaje para ejecutar la herramienta get_random_number :

    Give me a random number between 1 and 100.
    
  4. GitHub Copilot pide permiso para ejecutar la herramienta get_random_number para la solicitud. Seleccione Continuar o use la flecha para seleccionar un comportamiento más específico:

    • La sesión actual siempre ejecuta la operación en la sesión actual del modo del agente de Copilot de GitHub.
    • La solución actual siempre ejecuta el comando para la solución de Visual Studio en uso.
    • Permitir siempre establece que la operación se ejecute siempre para cualquier sesión del modo del agente de Copilot de GitHub.
  5. Compruebe que el servidor responde con un número aleatorio:

    Your random number is 42.
    

La plantilla de servidor MCP incluye una herramienta denominada get_random_number que puede usar para probar y como punto de partida para el desarrollo.

  1. Abra el chat de GitHub Copilot en VS Code y cambie al modo agente .

  2. Seleccione el icono Seleccionar herramientas para comprobar que myMCPServer está disponible con la herramienta de ejemplo que aparece.

    Lista de herramientas MCP en GitHub Copilot Chat

  3. Escriba un mensaje para ejecutar la herramienta get_random_number :

    Give me a random number between 1 and 100.
    
  4. GitHub Copilot pide permiso para ejecutar la herramienta get_random_number para la solicitud. Seleccione Continuar o use la flecha para seleccionar un comportamiento más específico:

    • La sesión actual siempre ejecuta la operación en la sesión actual del modo del agente de Copilot de GitHub.
    • El área de trabajo actual siempre ejecuta el comando para el área de trabajo actual de VS Code.
    • Permitir siempre establece que la operación se ejecute siempre para cualquier sesión del modo del agente de Copilot de GitHub.
  5. Compruebe que el servidor responde con un número aleatorio:

    Your random number is 42.
    

Agregar entradas y opciones de configuración

En este ejemplo, mejorará el servidor MCP para usar un valor de configuración establecido en una variable de entorno. Esto podría ser necesario para el funcionamiento del servidor MCP, como una clave de API, un punto de conexión al que conectarse o una ruta de acceso de directorio local.

  1. Agregue otro método de herramienta después del método GetRandomNumber en Tools/RandomNumberTools.cs. Actualice el código de la herramienta para usar una variable de entorno.

    [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. Actualice el .vscode/mcp.json para establecer la variable de entorno WEATHER_CHOICES para las pruebas.

    {
       "servers": {
         "SampleMcpServer": {
           "type": "stdio",
           "command": "dotnet",
           "args": [
             "run",
             "--project",
             "<relative-path-to-project-file>"
           ],
           "env": {
              "WEATHER_CHOICES": "sunny,humid,freezing"
           }
         }
       }
     }
    
  3. Pruebe otro mensaje con Copilot en VS Code, como:

    What is the weather in Redmond, Washington?
    

    VS Code debe devolver una descripción meteorológica aleatoria.

  4. Actualice el .mcp/server.json para declarar la entrada de su variable de entorno. El server.json esquema de archivo se define mediante el proyecto del Registro de MCP y lo usa NuGet.org para generar la configuración de MCP de VS Code.

    • Use la environmentVariables propiedad para declarar variables de entorno usadas por la aplicación que establecerá el cliente mediante el servidor MCP (por ejemplo, VS Code).

    • Use la packageArguments propiedad para definir argumentos de la CLI que se pasarán a la aplicación. Para obtener más ejemplos, consulte el proyecto del Registro de 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"
      }
    }
    

    La única información usada por NuGet.org en server.json es el primer elemento del array packages cuyo valor registryType coincide con nuget. Las otras propiedades de nivel superior, además de la propiedad packages, no se usan actualmente y están pensadas para el próximo Registro Central de MCP. Puede dejar los valores de marcador de posición hasta que el Registro MCP esté activo y listo para aceptar entradas del servidor MCP.

Puede volver a probar el servidor MCP antes de avanzar.

Empaquetar y publicar en NuGet

  1. Empaquetar el proyecto:

    dotnet pack -c Release
    

    Este comando genera un paquete de herramientas y varios paquetes específicos de la plataforma en función de la <RuntimeIdentifiers> lista de SampleMcpServer.csproj.

  2. Publique los paquetes en NuGet:

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

    Asegúrese de publicar todos los .nupkg archivos para asegurarse de que todas las plataformas compatibles pueden ejecutar el servidor MCP.

    Si desea probar el flujo de publicación antes de publicar en NuGet.org, puede registrar una cuenta en el entorno de integración de la Galería de NuGet: https://int.nugettest.org. El push comando se modificaría en:

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

Para obtener más información, consulte Publicación de un paquete.

Detección de servidores MCP en NuGet.org

  1. Busque el paquete de servidor MCP en NuGet.org (o int.nugettest.org si publicó en el entorno de integración) y selecciónelo en la lista.

    Captura de pantalla que muestra una búsqueda de servidores MCP en NuGet.org.

  2. Vea los detalles del paquete y copie el JSON desde la pestaña "Servidor MCP".

    Captura de pantalla en la que se muestra un servidor MCP específico en NuGet.org.

  3. En su archivo mcp.json en la carpeta .vscode, agregue el JSON copiado, que tiene el siguiente aspecto:

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

    Si ha publicado en el entorno de integración de la Galería de NuGet, debe agregar "--add-source", "https://apiint.nugettest.org/v3/index.json" al final del arreglo "args".

  4. Guarde el archivo.

  5. En GitHub Copilot, seleccione el icono Seleccionar herramientas para comprobar que SampleMcpServer está disponible con las herramientas enumeradas.

  6. Introduzca una instrucción para ejecutar la nueva herramienta get_city_weather:

    What is the weather in Redmond?
    
  7. Si agregó entradas al servidor MCP (por ejemplo, WEATHER_CHOICES), se le pedirá que proporcione valores.

  8. Compruebe que el servidor responde con el tiempo aleatorio:

    The weather in Redmond is balmy.
    

Problemas comunes

No se encontró el comando "dnx" necesario para ejecutar SampleMcpServer.

Si VS Code muestra este error al iniciar el servidor MCP, debe instalar una versión compatible del SDK de .NET.

Captura de pantalla que muestra el comando dnx que falta en VS Code.

El dnx comando se incluye como parte del SDK de .NET, a partir de la versión 10. Instale el SDK de .NET 10 para resolver este problema.

GitHub Copilot no usa la herramienta (se proporciona una respuesta sin invocar la herramienta).

Por lo general, un agente de IA como GitHub Copilot es informado por parte de la aplicación cliente, como VS Code, de que tiene algunas herramientas disponibles. Es posible que el agente de IA no aproveche algunas herramientas, como la herramienta de número aleatorio de ejemplo, ya que tiene una funcionalidad similar integrada.

Si la herramienta no se usa, compruebe lo siguiente:

  1. Compruebe que la herramienta aparece en la lista de herramientas que VS Code ha habilitado. Consulte la captura de pantalla en Probar el servidor MCP para comprobarlo.
  2. Haga referencia explícita al nombre de la herramienta en su entrada. En VS Code, puede hacer referencia a la herramienta por su nombre. Por ejemplo: Using #get_random_weather, what is the weather in Redmond?.
  3. Compruebe que el servidor MCP puede iniciarse. Para comprobarlo, haga clic en el botón "Iniciar" visible encima de la configuración del servidor MCP en la configuración de usuario o área de trabajo de VS Code.

Captura de pantalla que muestra un servidor MCP en la configuración de VS Code que se inicia.