mcp-dotnet-diagnostics
Servidor MCP para diagnóstico de runtime .NET — memória, GC, threads e mais.
Documentação
mcp-dotnet-diagnostics
Dê ao seu assistente de IA visibilidade em tempo real sobre a saúde do runtime da sua aplicação .NET.
Conecte este servidor Model Context Protocol ao Claude Desktop e faça perguntas simples sobre qualquer processo .NET em execução — vazamentos de memória, pressão do GC, fome de threads, pontos de alocação. O Claude chama as ferramentas certas, lê dados reais do runtime e diz o que realmente está errado.
Como isso funciona na prática

Você pergunta:
"Por que minha API está com uso alto de memória? O PID é 12345."
O Claude chama get_process_info para confirmar a conectividade, depois get_memory_stats, e então
get_gc_events — e responde:
"Cada evento de GC nos últimos 5 segundos foi uma coleta Gen2 acionada por
AllocLarge. Algo está alocando objetos continuamente acima do limite de 85KB do LOH a ~10,5 MB/s. O LOH nunca é compactado por padrão — a fragmentação está em 55% e crescendo. A correção éArrayPool<byte>.Shared. Alugue um buffer, use-o, devolva-o."
Você não diz ao Claude quais ferramentas chamar. Ele descobre isso a partir da sua pergunta.
Ferramentas
| Ferramenta | O que retorna | Use quando... |
|---|---|---|
get_process_info | Nome, PID, tempo de atividade, versão do .NET, SO | Iniciar qualquer investigação — confirma que o processo está acessível |
get_memory_stats | Heap do GC, tamanho do LOH, taxa de alocação, contagens Gen0/1/2, fragmentação | A memória está alta ou crescendo |
get_gc_events | Linha do tempo por coleta — geração, motivo, timestamp | Pausas do GC estão afetando a latência |
get_thread_stats | Contagem do ThreadPool, profundidade da fila, itens concluídos, contenção de bloqueio | Requisições estão lentas ou acumulando |
get_event_counters | Todas as 27 métricas de System.Runtime em um único snapshot | Você quer uma visão geral ampla da saúde |
get_environment_info | Configuração do runtime, variáveis de ambiente filtradas (sem segredos) | Depurando problemas de configuração |
list_counters | Nomes brutos de EventCounter e valores atuais | Descobrindo o que está disponível em um processo desconhecido |
Instalação
1. Instale a ferramenta
dotnet tool install -g mcp-dotnet-diagnostics
Requer .NET 8 SDK ou posterior. Obtenha aqui se necessário.
2. Adicione ao Claude Desktop
Abra ~/Library/Application Support/Claude/claude_desktop_config.json enquanto o Claude Desktop
está totalmente encerrado (Cmd+Q — não apenas com a janela fechada), e então adicione:
{
"mcpServers": {
"dotnet-diagnostics": {
"command": "mcp-dotnet-diagnostics",
"env": {
"TMPDIR": "/var/folders/xx/your-tmpdir/T/"
}
}
}
}
3. Reabra o Claude Desktop
O conector dotnet-diagnostics aparece no menu de ferramentas. Pergunte sobre qualquer processo .NET.
macOS: o passo
TMPDIRnão é opcional.O protocolo de diagnóstico do .NET encontra processos através de um socket Unix. No macOS, esse socket fica em
$TMPDIR— não em/tmp/onde a biblioteca procura por padrão. Sem isso, toda chamada de ferramenta retorna "processo não encontrado."Encontre o seu com:
echo $TMPDIR
Quer contribuir ou compilar a partir do código-fonte? Veja CONTRIBUTING.md para saber como clonar, compilar e adicionar novas ferramentas.
Uso
Encontre o PID do seu processo alvo:
dotnet-counters ps
Depois pergunte ao Claude naturalmente: "Faça uma verificação completa de saúde no PID 12345." "Por que a memória está subindo no PID 12345?" "Há fome de threads no PID 12345?" "Qual é a situação do GC no PID 12345?"
Como funciona
O servidor usa Microsoft.Diagnostics.NETCore.Client para anexar a qualquer processo .NET em execução
por PID — a mesma biblioteca que alimenta dotnet-counters, dotnet-trace e dotnet-dump.
Ele transmite telemetria diretamente do CLR via EventPipe, o que significa que você obtém os mesmos dados
das ferramentas oficiais de CLI do .NET, disponíveis para o Claude como respostas estruturadas de ferramentas.
As descrições das ferramentas são escritas para guiar a sequência de investigação do Claude. Quando você relata
memória alta, o Claude chama get_process_info primeiro (conectividade), depois get_memory_stats
(visão geral do heap), e então get_gc_events (detalhes da coleta) — porque as descrições dizem isso.
O encadeamento é implícito, não codificado.
Requisitos
- .NET 8 SDK ou posterior para compilar; .NET 10 recomendado
- Claude Desktop ou qualquer cliente compatível com MCP
- Um processo .NET em execução para inspecionar (sua aplicação, uma API, qualquer coisa)
Testes
dotnet test src/McpDotnetDiagnostics.Tests
34 testes em todas as 7 ferramentas — testes unitários contra PIDs inválidos, testes de integração contra o
processo do runner de teste ativo (Environment.ProcessId). Executa em ~17 segundos.
Decisões de design
Três decisões moldaram este projeto de maneiras que não são óbvias externamente:
- ADR-001: C# em vez de TypeScript — a biblioteca de diagnóstico é nativa do .NET; um wrapper em TypeScript significaria chamadas externas
- ADR-002: Processo alvo por PID, não por si mesmo — o próprio servidor MCP não é interessante; sua API é onde os dados reais estão
- ADR-003: Extração de payload EventPipe do .NET 10 — mudança não documentada na estrutura do payload no .NET 10, descoberta através de inspeção do runtime
Licença
MIT