mcp-dotnet-diagnostics
Servidor MCP para diagnóstico de runtime .NET — memoria, GC, hilos y más.
Documentación
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

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 esArrayPool<byte>.Shared. Alquila un búfer, úsalo, devuélvelo."
No le dices a Claude qué herramientas llamar. Él lo deduce de tu pregunta.
Herramientas
| Herramienta | Qué devuelve | Úsala cuando... |
|---|---|---|
get_process_info | Nombre, PID, tiempo de actividad, versión de .NET, SO | Iniciar cualquier investigación: confirma que el proceso es accesible |
get_memory_stats | Montón del GC, tamaño de LOH, tasa de asignación, conteos Gen0/1/2, fragmentación | La memoria está alta o creciendo |
get_gc_events | Línea de tiempo por recolección: generación, razón, marca de tiempo | Las pausas del GC están afectando la latencia |
get_thread_stats | Conteo de ThreadPool, profundidad de cola, elementos completados, contención de bloqueos | Las solicitudes están lentas o acumulándose |
get_event_counters | Las 27 métricas de System.Runtime en una sola instantánea | Quieres una visión general amplia de la salud |
get_environment_info | Configuración del runtime, variables de entorno filtradas (sin secretos) | Depurar problemas de configuración |
list_counters | Nombres y valores actuales de EventCounter en bruto | Descubrir 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
TMPDIRno 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:
- ADR-001: C# sobre TypeScript — la biblioteca de diagnóstico es nativa de .NET; un envoltorio de TypeScript significaría invocar procesos externos
- ADR-002: Apuntar al proceso por PID, no a sí mismo — el propio servidor MCP no es interesante; tu API es donde viven los datos reales
- ADR-003: Extracción de payload de EventPipe en .NET 10 — cambio no documentado en la estructura del payload en .NET 10, descubierto mediante inspección del runtime
Licencia
MIT