mcp-dotnet-diagnostics

Servidor MCP para diagnóstico de runtime .NET — memoria, GC, hilos y más.

Documentación

CI mcp-dotnet-diagnostics MCP server

mcp-dotnet-diagnostics

Dale a tu asistente de IA visibilidad en tiempo real sobre la salud del runtime de tu aplicación .NET.

Conecta este servidor Model Context Protocol a Claude Desktop y haz preguntas simples sobre cualquier proceso .NET en ejecución: fugas de memoria, presión del GC, inanición de hilos, puntos calientes de asignación. Claude llama a las herramientas correctas, lee datos reales del runtime y te dice qué está realmente mal.


Cómo se ve esto en la práctica

Health check demo

Preguntas:

"¿Por qué mi API tiene un uso de memoria alto? El PID es 12345."

Claude llama a get_process_info para confirmar la conectividad, luego a get_memory_stats, luego a get_gc_events — y responde:

"Cada evento de GC en los últimos 5 segundos fue una recolección Gen2 desencadenada por AllocLarge. Algo está asignando continuamente objetos por encima del umbral de 85KB de LOH a ~10.5 MB/s. LOH nunca se compacta por defecto: la fragmentación está al 55% y creciendo. La solución es ArrayPool<byte>.Shared. Alquila un búfer, úsalo, devuélvelo."

No le dices a Claude qué herramientas llamar. Él lo deduce de tu pregunta.


Herramientas

HerramientaQué devuelveÚsala cuando...
get_process_infoNombre, PID, tiempo de actividad, versión de .NET, SOIniciar cualquier investigación: confirma que el proceso es accesible
get_memory_statsMontón del GC, tamaño de LOH, tasa de asignación, conteos Gen0/1/2, fragmentaciónLa memoria está alta o creciendo
get_gc_eventsLínea de tiempo por recolección: generación, razón, marca de tiempoLas pausas del GC están afectando la latencia
get_thread_statsConteo de ThreadPool, profundidad de cola, elementos completados, contención de bloqueosLas solicitudes están lentas o acumulándose
get_event_countersLas 27 métricas de System.Runtime en una sola instantáneaQuieres una visión general amplia de la salud
get_environment_infoConfiguración del runtime, variables de entorno filtradas (sin secretos)Depurar problemas de configuración
list_countersNombres y valores actuales de EventCounter en brutoDescubrir qué está disponible en un proceso desconocido

Instalación

1. Instala la herramienta

dotnet tool install -g mcp-dotnet-diagnostics

Requiere .NET 8 SDK o posterior. Consíguelo aquí si es necesario.

2. Añádelo a Claude Desktop

Abre ~/Library/Application Support/Claude/claude_desktop_config.json mientras Claude Desktop está completamente cerrado (Cmd+Q — no solo la ventana cerrada), luego añade:

{
  "mcpServers": {
    "dotnet-diagnostics": {
      "command": "mcp-dotnet-diagnostics",
      "env": {
        "TMPDIR": "/var/folders/xx/your-tmpdir/T/"
      }
    }
  }
}

3. Vuelve a abrir Claude Desktop

El conector dotnet-diagnostics aparece en el menú de herramientas. Pregúntale sobre cualquier proceso .NET.


macOS: el paso TMPDIR no es opcional.

El protocolo de diagnóstico de .NET encuentra procesos a través de un socket Unix. En macOS, ese socket se encuentra en $TMPDIR — no en /tmp/ donde la biblioteca busca por defecto. Sin esto, cada llamada a herramienta devuelve "proceso no encontrado".

Encuentra el tuyo con: echo $TMPDIR


¿Quieres contribuir o compilar desde el código fuente? Consulta CONTRIBUTING.md para saber cómo clonar, compilar y añadir nuevas herramientas.

Uso

Encuentra el PID de tu proceso objetivo:

dotnet-counters ps

Luego pregunta a Claude de forma natural: "Haz una revisión de salud completa del PID 12345." "¿Por qué la memoria está subiendo en el PID 12345?" "¿Hay inanición de hilos en el PID 12345?" "¿Cuál es la situación del GC en el PID 12345?"


Cómo funciona

El servidor usa Microsoft.Diagnostics.NETCore.Client para adjuntarse a cualquier proceso .NET en ejecución por PID — la misma biblioteca que impulsa dotnet-counters, dotnet-trace y dotnet-dump. Transmite telemetría directamente desde el CLR a través de EventPipe, lo que significa que obtienes los mismos datos que las herramientas oficiales de CLI de .NET, disponibles para Claude como respuestas estructuradas de herramientas.

Las descripciones de las herramientas están escritas para guiar la secuencia de investigación de Claude. Cuando reportas memoria alta, Claude llama primero a get_process_info (conectividad), luego a get_memory_stats (visión general del montón), luego a get_gc_events (detalles de recolección) — porque las descripciones lo indican. El encadenamiento es implícito, no codificado.


Requisitos

  • .NET 8 SDK o posterior para compilar; se recomienda .NET 10
  • Claude Desktop o cualquier cliente compatible con MCP
  • Un proceso .NET en ejecución para inspeccionar (tu aplicación, una API, cualquier cosa)

Pruebas

dotnet test src/McpDotnetDiagnostics.Tests

34 pruebas en las 7 herramientas: pruebas unitarias contra PIDs inválidos, pruebas de integración contra el proceso del ejecutor de pruebas en vivo (Environment.ProcessId). Se ejecuta en ~17 segundos.


Decisiones de diseño

Tres decisiones dieron forma a este proyecto de maneras que no son obvias desde fuera:


Licencia

MIT