mcp-dotnet-diagnostics

Servidor MCP para diagnóstico de runtime .NET — memória, GC, threads e mais.

Documentação

CI mcp-dotnet-diagnostics MCP server

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

Health check demo

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

FerramentaO que retornaUse quando...
get_process_infoNome, PID, tempo de atividade, versão do .NET, SOIniciar qualquer investigação — confirma que o processo está acessível
get_memory_statsHeap do GC, tamanho do LOH, taxa de alocação, contagens Gen0/1/2, fragmentaçãoA memória está alta ou crescendo
get_gc_eventsLinha do tempo por coleta — geração, motivo, timestampPausas do GC estão afetando a latência
get_thread_statsContagem do ThreadPool, profundidade da fila, itens concluídos, contenção de bloqueioRequisições estão lentas ou acumulando
get_event_countersTodas as 27 métricas de System.Runtime em um único snapshotVocê quer uma visão geral ampla da saúde
get_environment_infoConfiguração do runtime, variáveis de ambiente filtradas (sem segredos)Depurando problemas de configuração
list_countersNomes brutos de EventCounter e valores atuaisDescobrindo 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 TMPDIR nã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:


Licença

MIT