
Eu dei acesso ao Claude ao Calculadora do Windows via MCP — Depois assisti ele corrigir sua própria alucinação
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 resultado0está 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
Nameda 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:
- A propriedade
Nameda expressão contém a substringマイナス ( 2. - Isso é "menos, parêntese aberto, dois" — um parêntese não fechado após um sinal de menos.
- 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
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.
