/ Directorio / Playground / C# SDK
● Oficial modelcontextprotocol ⚡ Instantáneo

C# SDK

por modelcontextprotocol · modelcontextprotocol/csharp-sdk

Crea servidores y clientes MCP en .NET — SDK oficial co-mantenido por el equipo de MCP y Microsoft.

El SDK oficial modelcontextprotocol/csharp-sdk. Escribe servidores MCP con atributos como [McpServerToolType] y [McpServerTool], o crea clientes que se conecten a cualquier servidor MCP. Se integra naturalmente con inyección de dependencias, logging y hosting de .NET.

Por qué usarlo

Características clave

Demo en vivo

Cómo se ve en la práctica

csharp-sdk.replay ▶ listo
0/0

Instalar

Elige tu cliente

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "csharp-sdk": {
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "./MyMcpServer"
      ]
    }
  }
}

Abre Claude Desktop → Settings → Developer → Edit Config. Reinicia después de guardar.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "csharp-sdk": {
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "./MyMcpServer"
      ]
    }
  }
}

Cursor usa el mismo esquema mcpServers que Claude Desktop. La configuración del proyecto prevalece sobre la global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "csharp-sdk": {
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "./MyMcpServer"
      ]
    }
  }
}

Haz clic en el icono MCP Servers de la barra lateral de Cline y luego en "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "csharp-sdk": {
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "./MyMcpServer"
      ]
    }
  }
}

Mismo formato que Claude Desktop. Reinicia Windsurf para aplicar.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "csharp-sdk",
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "./MyMcpServer"
      ]
    }
  ]
}

Continue usa un array de objetos de servidor en lugar de un mapa.

~/.config/zed/settings.json
{
  "context_servers": {
    "csharp-sdk": {
      "command": {
        "path": "dotnet",
        "args": [
          "run",
          "--project",
          "./MyMcpServer"
        ]
      }
    }
  }
}

Añádelo a context_servers. Zed recarga en caliente al guardar.

claude mcp add csharp-sdk -- dotnet run --project ./MyMcpServer

Un solo comando. Verifica con claude mcp list. Quita con claude mcp remove.

Casos de uso

Usos del mundo real: C# SDK

Crea un servidor MCP en .NET que exponga tus servicios existentes

👤 Ingenieros de C#/.NET con APIs internas ⏱ ~45 min intermediate

Cuándo usarlo: Estás en .NET y quieres exponer lógica de negocio a agentes sin reescribir.

Requisitos previos
  • .NET 8+ SDKdotnet --version
Flujo
  1. Crea el proyecto
    Ejecuta dotnet new console -n MyMcpServer. Agrega ModelContextProtocol NuGet. Usa la plantilla de hosting mínimal para MCP.✓ Copiado
    → csproj + Program.cs con servicio MCP hospedado
  2. Añade una herramienta
    Crea una clase estática con [McpServerToolType]. Añade un método GetOrder(string id) decorado con [McpServerTool(Description="...")] que llame a tu OrderService existente mediante DI.✓ Copiado
    → La herramienta se compila, la descripción viene del atributo
  3. Prueba con el inspector
    Ejecuta el servidor como stdio. Lanza el Inspector MCP mediante npx @modelcontextprotocol/inspector dotnet run. Llama a GetOrder.✓ Copiado
    → La invocación de herramienta devuelve JSON de orden

Resultado: Un servidor MCP compilado y tipado que reutiliza tus servicios .NET existentes y contenedor DI.

Errores comunes
  • Los métodos de herramienta que son métodos de instancia en una clase necesitan DI para funcionar — Registra la clase propietaria en ServiceCollection; el SDK se resuelve a través de DI
  • Los métodos async sin tokens de cancelación apropiados se cuelgan al apagar — Acepta CancellationToken ct como último parámetro en cada herramienta — el SDK lo inyecta

Crea una aplicación de consola .NET que use servidores MCP

👤 Desarrolladores de C# que crean automatización interna ⏱ ~30 min intermediate

Cuándo usarlo: Quieres código .NET determinista (no un bucle LLM) que llame a servidores MCP — por ejemplo, una tarea programada que use MCPs de github + filesystem.

Flujo
  1. Agrega el paquete cliente
    Crea una aplicación de consola. Referencia el cliente ModelContextProtocol. Añade una configuración que apunte a un servidor stdio (por ejemplo, npx -y @modelcontextprotocol/server-github).✓ Copiado
    → El cliente se compila
  2. Conecta y llama
    Inicia el cliente, lista herramientas, llama a list_repositories con el nombre de tu organización. Imprime el resultado.✓ Copiado
    → Repos impreso en consola
  3. Envuelve como una tarea programada
    Conviértelo en un Worker Service que se ejecute cada noche. Registra métricas mediante ILogger.✓ Copiado
    → Worker se ejecuta mediante dotnet run y se programa limpiamente

Resultado: MCP como librería, no solo un plugin de chat — funciona dentro de cualquier proceso .NET.

Errores comunes
  • Los servidores stdio tardan en iniciarse, la primera llamada agota el tiempo — Inicializa el cliente al iniciar la aplicación y reutilízalo; no generes uno por cada llamada

Sirve un endpoint MCP desde una aplicación ASP.NET Core

👤 Ingenieros de plataforma .NET ⏱ ~60 min advanced

Cuándo usarlo: Quieres que el servidor MCP sea hospedado dentro de un servicio ASP.NET Core existente, detrás de la misma autenticación e ingress.

Requisitos previos
  • Una aplicación ASP.NET Core existente o disposición para iniciar unadotnet new web
Flujo
  1. Añade servicios MCP + endpoint
    En Program.cs, builder.Services.AddMcpServer().WithToolsFromAssembly(). Luego app.MapMcp('/mcp').✓ Copiado
    → El endpoint /mcp responde al handshake SSE
  2. Comparte autenticación con el resto de la aplicación
    Coloca el endpoint /mcp detrás de tu middleware de autenticación Bearer JWT existente. Verifica que las solicitudes no autenticadas obtengan 401.✓ Copiado
    → 401 no autenticado, 200 autenticado
  3. Despliega y conecta
    Despliega. Conecta el Claude Desktop de un compañero mediante mcp-remote https://myapp.com/mcp con su JWT.✓ Copiado
    → Los miembros del equipo ven herramientas

Resultado: MCP junto con tu API existente en un despliegue con una historia de autenticación.

Errores comunes
  • Kestrel almacena en búfer las respuestas SSE detrás de un proxy inverso — Desactiva el almacenamiento en búfer de respuestas; asegúrate de que IIS/nginx/Cloudflare al frente también deshabilite el almacenamiento en búfer para /mcp
Combinar con: cloud-run

Combinaciones

Combínalo con otros MCPs para multiplicar por 10

csharp-sdk + cloud-run

Despliega servidor MCP .NET en Cloud Run junto a otros microservicios

Containeriza mi servidor MCP .NET (base mcr.microsoft.com/dotnet/aspnet), despliega en Cloud Run con min-instance=1 para mitigación de arranque en frío.✓ Copiado
csharp-sdk + fastmcp

Comparación para tiendas políglatas — diferentes SDKs, mismo protocolo

Nuestro equipo tiene servicios Python y .NET. Usa FastMCP para APIs de Python y csharp-sdk para APIs de .NET — ambos detrás de una puerta de enlace ContextForge.✓ Copiado

Herramientas

Lo que expone este MCP

HerramientaEntradasCuándo llamarCoste
[McpServerToolType] atributo en una clase Marca clases cuyos métodos deben exponerse gratuito
[McpServerTool(Description)] atributo en un método Cada método que quieras que los agentes llamen gratuito
AddMcpServer() / WithToolsFromAssembly() constructor fluido Program.cs al iniciar gratuito
MapMcp('/path') endpoint ASP.NET Solo hosting de ASP.NET gratuito
IMcpClient configuración de transporte stdio o SSE Uso del lado cliente gratuito

Coste y límites

Lo que cuesta ejecutarlo

Cuota de API
Ninguno — este es un SDK
Tokens por llamada
Sin sobrecarga de marco más allá del protocolo MCP
Monetario
Gratuito, licencia MIT
Consejo
Usa el logging integrado de .NET y HealthChecks para detectar problemas antes de que se conviertan en un problema en producción

Seguridad

Permisos, secretos, alcance

Almacenamiento de credenciales: Estándar de .NET: user-secrets para desarrollo, variables de entorno o Key Vault para producción
Salida de datos: Lo que tus herramientas alcancen

Resolución de problemas

Errores comunes y soluciones

Herramienta no aparece en inspector

WithToolsFromAssembly() solo escanea el ensamblado en ejecución. Para herramientas en librerías referenciadas, pasa el Assembly explícitamente: WithTools(typeof(MyTools).Assembly).

DI no puede resolver mi servicio en un método de herramienta

Los tipos de herramienta deben registrarse en el contenedor. Añade builder.Services.AddScoped<OrderService>() antes de AddMcpServer.

ASP.NET MapMcp devuelve 404

Mapeaste después de app.Run() — mueve MapMcp antes de Run. También comprueba que la ruta no entre en conflicto con otros endpoints.

La serialización JSON falla en enums

El SDK usa System.Text.Json; añade [JsonStringEnumConverter] en tus enums o configura globalmente.

Alternativas

C# SDK vs otros

AlternativaCuándo usarlaContrapartida
FastMCP (Python)Estás de acuerdo con aprender Python — ecosistema de ejemplos más ricoIdioma diferente; depende de las habilidades del equipo
TypeScript MCP SDKTienda de Node / TSDX similar, elección de idioma

Más

Recursos

📖 Lee el README oficial en GitHub

🐙 Ver issues abiertas

🔍 Ver todos los 400+ servidores MCP y Skills