Microsoft Paint MCP Server for Node.js
Interface MCP semântica para o Microsoft Paint usando UI Automation, Win32 e um DSL de desenho.
Documentação
Microsoft Paint MCP Server for Node.js
E se o Paint fosse mais do que o Paint?
O Microsoft Paint é provavelmente um dos softwares menos intimidadores já enviados com o Windows.
Uma tela em branco. Um lápis. Algumas formas. Uma paleta de cores.
Para milhões de pessoas, pode ter sido um dos primeiros lugares onde um computador se tornou algo com o qual você podia experimentar, em vez de simplesmente operar.
Essa simplicidade me deixou curioso.
Não porque o Paint precisasse de automação.
Mas porque eu queria entender uma questão mais interessante:
Até onde um software comum pode ir quando uma IA recebe uma forma significativa de entender e interagir com ele?
Essa pergunta se tornou este projeto.
Começou como um pequeno experimento
A forma óbvia de automatizar o Paint seria mover um mouse para coordenadas de tela conhecidas e clicar em botões.
Isso funciona.
Mas não entende nada.
Mude a posição da janela, a escala de exibição, o layout da barra de ferramentas ou o ambiente, e a automação baseada em coordenadas rapidamente revela o que realmente é: um script que reproduz gestos.
Eu queria abordar o problema de forma diferente.
Antes de ensinar uma IA a desenhar com o Paint, eu queria entender o próprio Paint.
Suas janelas.
Seus controles.
Sua tela.
Seus sistemas de coordenadas.
Sua árvore de acessibilidade.
Seu comportamento.
Então o experimento desceu antes de subir.
Em vez de perguntar:
Como uma IA pode clicar no Paint?
Comecei a perguntar:
O que o Paint expõe sobre si mesmo que o software pode realmente entender?
Isso levou ao Windows UI Automation, à inspeção da árvore de acessibilidade do Paint, à descoberta da tela, ao gerenciamento do ciclo de vida da janela, às transformações de coordenadas, à entrada Win32 e, eventualmente, a uma interface semântica entre uma IA e o aplicativo.
A curiosidade se tornou investigação.
A investigação se tornou estrutura.
E a estrutura eventualmente se tornou um servidor MCP.
O Paint se tornou o renderizador, não a ideia
Uma vez que a camada de interação existia, outra questão apareceu.
Se uma IA não precisasse mais pensar principalmente em coordenadas de mouse, no que ela deveria pensar?
A resposta não foi:
move pointer to x=412, y=287
press mouse button
move pointer to x=650, y=410
release
Foi algo mais próximo de:
{
"kind": "circle",
"cx": 300,
"cy": 220,
"radius": 120
}
Ou:
{
"solid": "tesseract",
"size": 110,
"projection": "perspective"
}
Essa distinção mudou o projeto.
O Paint não era mais a abstração.
Ele se tornou a superfície de renderização sob uma linguagem visual emergente.
O servidor MCP traduz descrições semânticas e matemáticas em geometria, geometria em coordenadas lógicas de tela, e essas coordenadas em interação real de mouse com o Microsoft Paint.
Idea
↓
Semantic description
↓
Geometry
↓
Canvas coordinates
↓
Windows interaction
↓
Microsoft Paint
Essa é a parte do experimento que considero mais interessante.
De círculos a um tesserato
A camada de desenho gradualmente se tornou um pequeno DSL matemático.
Atualmente, ela pode expressar coisas como:
- círculos, elipses e arcos;
- retângulos e retângulos arredondados;
- polígonos regulares e estrelados;
- espirais logarítmicas;
- grades e estruturas repetidas;
- polilinhas arbitrárias;
- sólidos platônicos;
- toros e nós de toro;
- superfícies de revolução;
- malhas wireframe personalizadas;
- e até um tesserato projetado de 4D → 3D → 2D.
As formas não são criadas pelos botões nativos de Formas do Paint.
Elas são geradas matematicamente como pontos e traços e depois fisicamente desenhadas na tela.
Essa restrição é intencional.
Ela mantém o experimento focado no limite entre descrição abstrata e interação real com o aplicativo.
Por que fazer isso com o Paint?
Porque o Paint é deliberadamente comum.
Se este experimento tivesse começado com Blender, AutoCAD, Mathematica ou outro ambiente visual sofisticado, grande parte da capacidade poderia ser atribuída ao próprio aplicativo.
O Paint não nos dá quase nada.
E isso o torna útil.
Ele força a inteligência e a abstração a viverem em outro lugar.
O resultado é um sandbox visual surpreendentemente flexível.
Uma IA pode potencialmente usar a mesma tela primitiva para explicar:
Geometria
Construir polígonos, transformações, projeções e relações geométricas.
Matemática
Transformar equações e estruturas matemáticas em objetos visíveis.
Raciocínio espacial
Explorar objetos tridimensionais por meio de projeções bidimensionais.
Diagramas
Expressar fluxos, relações, linhas do tempo, mapas e modelos conceituais simples.
Educação
Construir explicações visuais passo a passo usando um dos aplicativos mais simples disponíveis no Windows.
A questão interessante, portanto, não é mais:
Uma IA consegue desenhar no Paint?
Claramente, consegue.
A questão mais útil é:
O que uma IA pode explicar quando o desenho se torna parte de sua linguagem?
Um exemplo: um objeto quadridimensional no Paint
Um dos geradores disponíveis é um tesserato.
Um tesserato é o análogo quadridimensional de um cubo.
A implementação começa com os dezesseis vértices do hipercubo, projeta-os de quatro dimensões para três, projeta o resultado novamente para duas dimensões e, finalmente, converte suas trinta e duas arestas em traços que o Paint pode desenhar fisicamente.
Da perspectiva do cliente MCP, a solicitação permanece semântica:
{
"mode": "generator",
"tool": "pencil",
"fit": "contain",
"generators": [
{
"kind": "solid",
"solid": "tesseract",
"size": 110,
"rotX": 15,
"rotY": -30,
"projection": "perspective"
}
]
}
O Paint não sabe nada sobre geometria quadridimensional.
Ele não precisa saber.
Ele é simplesmente a superfície final onde uma ideia abstrata se torna visível.
Essa separação é a arquitetura.
Não é automação cega
IA foi usada extensivamente durante a construção deste projeto.
Mas usar IA nunca foi a parte interessante.
A parte interessante foi decidir o que precisava ser entendido antes que algo fosse automatizado.
Ao longo do experimento, o fluxo de trabalho se repetiu assim:
observe
↓
question
↓
inspect
↓
model
↓
experiment
↓
specify
↓
implement
↓
verify
Por exemplo, o servidor não assume que a tela do Paint vive em uma coordenada de tela permanente.
Ele descobre e resolve o contexto do aplicativo, mantém a sessão do Paint, mapeia coordenadas lógicas de desenho para a tela desenhável real e usa APIs do Windows para executar a interação.
Os resultados do desenho também podem ser verificados após a execução, em vez de assumir que a ausência de uma exceção significa que a tinta realmente apareceu.
O objetivo não é esconder a IA do processo de engenharia.
Nem celebrar a IA por produzir código.
O experimento é sobre outra coisa:
usar IA para explorar um sistema mais profundamente, mantendo compreensão, arquitetura e verificação explícitas.
Como funciona
Em um nível alto:
LLM / MCP Client
│
▼
MCP Server
│
▼
PaintController
│
├── Paint session management
├── UI Automation discovery
├── Semantic canvas resolution
├── Mathematical generators
└── Coordinate transformation
│
▼
Win32 / SendInput adapter
│
▼
Microsoft Paint
O código segue uma estrutura em camadas / hexagonal que mantém o domínio matemático independente da automação específica do Windows.
A camada de geometria pura não sabe nada sobre o Paint.
A camada de orquestração do Paint não sabe nada sobre clientes MCP.
A infraestrutura do Windows implementa a mecânica necessária para tornar a interação final real.
Para a arquitetura técnica mais profunda, consulte a documentação abaixo.
Capacidades do MCP
O servidor atualmente expõe sete ferramentas MCP.
| Ferramenta | Finalidade |
|---|---|
paint_draw | DSL de desenho 2D livre e matemático |
paint_draw_3d | Projetar e desenhar geometria wireframe 3D/4D |
paint_napkin | Primitivas simples de pensamento visual |
paint_edit | Operações de apagar, preencher, texto e recortar |
paint_canvas | Redimensionar e gerenciar a tela |
paint_debug_ui | Inspecionar a árvore de UI Automation do Paint |
paint_debug_canvas | Inspecionar a geometria resolvida da tela |
As APIs de desenho produtivas operam no espaço lógico de desenho, em vez de exigir que o chamador saiba onde o Paint está na tela.
A camada de desenho semântico
O DSL 2D atualmente inclui geradores como:
ellipse
circle
disk
arc
rectangle
roundedRectangle
polyline
logarithmicSpiral
regularPolygon
starPolygon
grid
dotsAlongPath
A camada 3D inclui:
tetrahedron
cube
octahedron
dodecahedron
icosahedron
greatIcosahedron
starOctangula
tesseract
torus
torusKnot
revolution
wireframe
Essas descrições são validadas antes de chegar à camada de desenho e transformadas em geometria pura antes que qualquer interação com o Windows ocorra.
A referência completa do DSL está em:
Por baixo dos panos: entendendo o Paint
O projeto usa Windows UI Automation para descobrir controles do aplicativo, em vez de depender inteiramente de coordenadas fixas da barra de ferramentas.
Essa investigação se tornou útil o suficiente para ser documentada de forma independente.
Se você tem interesse em entender como um aplicativo Windows moderno pode ser inspecionado e automatizado por meio de seu modelo de acessibilidade, consulte:
docs/windows-automation-uia.md
Há também um passo a passo prático em PowerShell:
docs/tutorial-paint-powershell.md
Esses documentos preservam a investigação de engenharia por trás da implementação do MCP, em vez de escondê-la atrás da API final.
Início rápido
Requisitos
- Windows
- Microsoft Paint
- Node.js
- PowerShell
- um cliente compatível com MCP
Clone o repositório:
git clone https://github.com/miguelcespedes/mcp-server-microsoft-paint-nodejs.git
cd mcp-server-microsoft-paint-nodejs
Instale as dependências:
npm install
Compile:
npm run build
Execute o servidor MCP:
npm start
Consulte .mcp.json para um exemplo de configuração do MCP.
Um pequeno experimento que vale a pena preservar
Este repositório é intencionalmente uma tentativa de transformar o Microsoft Paint em software gráfico profissional.
Já existem ferramentas muito melhores para isso.
O Paint é útil aqui precisamente por causa de suas limitações.
Ele fornece um ambiente familiar e restrito no qual várias questões se tornam mais fáceis de enxergar:
Como uma IA deve descrever uma ideia visual?
Onde a semântica deve terminar e a automação específica do aplicativo deve começar?
Quanto entendimento do aplicativo é necessário antes que a automação se torne confiável?
Uma tela simples pode se tornar uma interface útil para raciocínio matemático ou educacional?
E o que acontece quando paramos de tratar software antigo apenas de acordo com o propósito para o qual foi originalmente projetado?
Não sei para onde todas essas perguntas levam.
Isso é parte do motivo pelo qual este repositório existe.
Documentação
| Documento | Finalidade |
|---|---|
docs/dsl-paint-draw.md | Referência do DSL de desenho matemático e geradores |
docs/windows-automation-uia.md | Investigação do Paint por meio do Windows UI Automation |
docs/tutorial-paint-powershell.md | Tutorial prático de automação do Paint usando PowerShell |
Arquitetura adicional, exemplos, notas de teste e detalhes de implementação podem gradualmente migrar para cá conforme o experimento evolui.
Status
Este é um projeto experimental.
Algumas capacidades são intencionalmente exploratórias e algumas partes da interface do Microsoft Paint permanecem menos determinísticas do que outras.
Isso não está escondido.
As limitações fazem parte da investigação.
Se você encontrar um caso extremo, uma abstração semântica melhor, um gerador matemático interessante ou simplesmente outro uso inesperado para a tela, contribuições e experimentos são bem-vindos.
Um último pensamento
A curiosidade é boa em abrir portas.
A disciplina é o que impede que o que encontramos desapareça.
E uma vez que uma descoberta é preservada, outra pessoa pode usá-la para começar outra exploração.
Talvez seja assim que a curiosidade se torna cumulativa.
Licença
Este projeto é distribuído sob a Licença MIT, Copyright (c) 2026 Miguel Cespedes.
Você é livre para usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e/ou vender cópias do software, desde que o aviso de direitos autorais e permissão seja preservado.