Voltar as noticias
Eu dei acesso ao Claude ao Calculadora do Windows via MCP — Depois assisti ele corrigir sua própria alucinação
MCP ProtocolAltaEN

Eu dei acesso ao Claude ao Calculadora do Windows via MCP — Depois assisti ele corrigir sua própria alucinação

Dev.to - MCP·3 de junho de 2026

TL;DR — Eu construí um servidor MCP que permite que Claude controle aplicativos de desktop do Windows (Automação de UI + captura de tela + OCR + depurador do Visual Studio). Em um teste de caixa-preta da Calculadora do Windows, o agente falsamente sinalizou um "bug de exibição" com base na string AccessibleName. Quando eu disse para ele olhar novamente, ele capturou a tela real, comparou sua alegação anterior com os pixels e retraiu sua própria conclusão. A retratação foi o momento em que soube que isso valia a pena ser enviado.

O momento

O agente estava 30 minutos explorando autonomamente a Calculadora do Windows. Ele havia verificado divisão por zero, o antigo bug de precisão √4 − 2, 0^0, estouro, recuperação de erro. Tudo certo.

Então ele parou. Nova mensagem:

"Sensei, o histórico mostra √(4) マイナス ( 2= 0. Há um parêntese de abertura não fechado ( logo após o sinal de menos. O resultado 0 está correto, mas a exibição da expressão parece errada. Possível bug de exibição."

Eu olhei para a minha janela da calculadora real. A linha do histórico dizia √(4) - 2 = 0. Nenhum parêntese solto. Nada errado.

Então eu digitei de volta duas palavras:

"Olhe novamente."

O que aconteceu a seguir é a razão pela qual estou escrevendo este post.

O que é essa coisa

JidoDebugger é um servidor MCP que venho construindo. Ele dá a agentes de IA como Claude Code, Cursor, Codex e Copilot a capacidade de controlar aplicativos de desktop do Windows — não apenas ler sobre eles, mas realmente clicar em botões, digitar em campos, capturar a tela, executar OCR, anexar o depurador do Visual Studio, definir pontos de interrupção, avaliar expressões e escrever os resultados de volta no disco como esqueletos xUnit/NUnit/MSTest.

Dois modos:

  • Caixa-preta — você dá ao agente um título de janela. Ele se conecta via UIA, examina a árvore de elementos e começa a explorar. Nenhum código-fonte necessário. Útil para testar aplicativos de terceiros, verificar regressões do seu produto enviado ou — como neste post — testar a Calculadora do Windows.
  • Caixa-branca — você o aponta para sua solução. Ele faz uma referência cruzada dos elementos da UI com o código-fonte, define pontos de interrupção no callback problemático, passa por ele, despeja locais e escreve um repro.zip.

As cerca de 45 ferramentas MCP se agrupam aproximadamente como: controle de UIA, captura de tela & OCR, encontrar/registrar, monitoramento de falhas, auditoria de acessibilidade, controle do depurador do Visual Studio.

Este post é sobre o modo de caixa-preta e uma sessão específica.

A sessão de caixa-preta, condensada

Vou mostrar as chamadas de ferramenta reais. Elas são verbatim do log da sessão — o agente decidiu o que chamar, eu apenas assisti.

Anexar

start calc.exe
uia_attach_title { windowTitle: "電卓" }
  → sessionId u1
uia_survey { sessionId: "u1", maxResults: 200 }
  → 64 elementos. num0Button..num9Button / squareRootButton /
    powerButton / powerOf10Button / factorialButton /
    CalculatorResults / CalculatorExpression

Dois IDs de automação são importantes:

  • CalculatorResults — a exibição principal
  • CalculatorExpression — a linha de expressão acima dela

Nota: esta sessão foi executada contra o Windows em japonês, então as strings Name da UIA abaixo contêm fragmentos em japonês como 表示は ... です ("a exibição é ...") e マイナス ("menos"). A divergência entre alucinação e pixels é independente de local — acontece apenas que a string da piada nesta execução é em japonês.

Teste 1: Divisão por zero

uia_press_key { sessionId: "u1", keyName: "Escape" }
uia_type_text { sessionId: "u1", text: "1/0" }
uia_press_key { sessionId: "u1", keyName: "Enter" }
uia_find_elements { sessionId: "u1", automationId: "CalculatorResults" }
  → Name: "Não é possível dividir por zero"

✅ Tratado.

Teste 2: O antigo bug de precisão √4 − 2

Há anos, o motor de ponto flutuante da calculadora retornaria algo como -1.068281969439142e-19 em vez de 0 para √4 − 2. A Calculadora moderna usa um motor de precisão arbitrária. Vamos confirmar.

uia_press_key { sessionId: "u1", keyName: "Escape" }
uia_type_text { sessionId: "u1", text: "4" }
uia_invoke    { sessionId: "u1", automationId: "squareRootButton" }
uia_type_text { sessionId: "u1", text: "-2" }
uia_press_key { sessionId: "u1", keyName: "Enter" }
uia_find_elements { sessionId: "u1", automationId: "CalculatorResults" }
  → Name: "A exibição é 0"

✅ Corrigido.

Teste 3: 0^0

uia_type_text { sessionId: "u1", text: "0" }
uia_invoke    { sessionId: "u1", automationId: "powerButton" }
uia_type_text { sessionId: "u1", text: "0" }
uia_press_key { sessionId: "u1", keyName: "Enter" }
  → "A exibição é 1"

✅ Convencional 0^0 = 1.

Testes 4–5: Estouro + recuperação de erro

Ambos se comportaram corretamente. Pulando as listagens por brevidade (10^100000 → "Entrada inválida", e pressionar +5= do estado de erro limpa e redefine para 5).

Até agora, o agente havia executado cinco casos de teste contra uma caixa-preta, escolhido autonomamente as entradas com base em seu conhecimento de bugs históricos da calculadora e não relatou defeitos. Tudo bem. Esta é a parte chata.

Então ele olhou para o painel de histórico.

A alucinação

uia_find_elements { sessionId: "u1", controlType: "ListItem", maxResults: 30 }
  → "√(4) マイナス ( 2= 0"

uia_find_elements { sessionId: "u1", automationId: "CalculatorExpression" }
  → Name: "式は √(4) マイナス ( 2= です"

A razão do raciocínio do agente, parafraseada de sua própria mensagem:

  1. A propriedade Name da expressão contém a substring マイナス ( 2.
  2. Isso é "menos, parêntese aberto, dois" — um parêntese não fechado após um sinal de menos.
  3. A exibição da expressão da calculadora, portanto, está malformada.

Esse tipo de descoberta parece certa. A string literalmente contém ( em um lugar onde a expressão √(4) - 2 = não tem (. Se você confiar na saída da ferramenta, você escreve um relatório de bug.

Eu não confiei na saída da ferramenta. Eu estive olhando para a minha janela da calculadora real o tempo todo. O histórico dizia √(4) - 2 = 0 sem parêntese solto. O que quer que o agente estivesse olhando, não era a mesma coisa que meus olhos estavam vendo.

Então eu disse: "Olhe novamente."

A autocorreção

A resposta do agente, parafraseada:

"Você está certo — eu não deveria ter relatado com base apenas no nome da UIA. As strings de nome da UIA são normalizadas para leitores de tela e podem divergir dos pixels renderizados, especialmente quando símbolos estão envolvidos. Deixe-me verificar contra a tela real."

O que ele fez:

uia_press_key { sessionId: "u1", keyName: "Escape" }
uia_type_text { sessionId: "u1", text: "4" }
uia_invoke    { sessionId: "u1", automationId: "squareRootButton" }
uia_invoke    { sessionId: "u1", automationId: "minusButton" }

# Anexar uma *segunda* sessão, desta vez f
Contexto Triplo Up

O uso de servidores MCP pode revolucionar a forma como as empresas testam e validam seus aplicativos. A capacidade de um agente de IA corrigir suas próprias falhas aumenta a confiabilidade em processos automatizados. Isso pode levar a uma maior eficiência e redução de erros em ambientes corporativos.

Noticias relacionadas

Gostou do conteudo?

Receba toda semana as principais novidades sobre WebMCP.