Rhombus.WinFormsMcp
1.5.9
See the version list below for details.
dotnet add package Rhombus.WinFormsMcp --version 1.5.9
NuGet\Install-Package Rhombus.WinFormsMcp -Version 1.5.9
<PackageReference Include="Rhombus.WinFormsMcp" Version="1.5.9" />
<PackageVersion Include="Rhombus.WinFormsMcp" Version="1.5.9" />
<PackageReference Include="Rhombus.WinFormsMcp" />
paket add Rhombus.WinFormsMcp --version 1.5.9
#r "nuget: Rhombus.WinFormsMcp, 1.5.9"
#:package Rhombus.WinFormsMcp@1.5.9
#addin nuget:?package=Rhombus.WinFormsMcp&version=1.5.9
#tool nuget:?package=Rhombus.WinFormsMcp&version=1.5.9
<p align="center"> <h1 align="center">Rhombus.WinFormsMcp</h1> <p align="center"><strong>Give AI agents eyes and hands for Windows Forms apps</strong></p> </p>
<p align="center"> <a href="https://github.com/fnrhombus/winforms-mcp/actions/workflows/ci.yml"><img src="https://github.com/fnrhombus/winforms-mcp/actions/workflows/ci.yml/badge.svg" alt="CI Status"></a> <a href="https://www.nuget.org/packages/Rhombus.WinFormsMcp"><img src="https://img.shields.io/nuget/v/Rhombus.WinFormsMcp" alt="NuGet Version"></a> <a href="https://www.npmjs.com/package/@fnrhombus/winforms-mcp"><img src="https://img.shields.io/npm/v/@fnrhombus/winforms-mcp" alt="NPM Version"></a> <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a> </p>
<p align="center"> An <a href="https://modelcontextprotocol.io">MCP server</a> that lets Claude (and any MCP-compatible agent) launch, automate, screenshot, and preview WinForms applications — without touching a mouse. </p>
The problem
You're building a WinForms app with an AI coding agent. The agent can read and write your code, but it's blind — it can't see what the form looks like, can't click a button to test a workflow, and can't tell if the UI it just generated actually renders correctly.
The fix
One line in your MCP config. Now the agent can:
| See forms without building | render_form turns any .Designer.cs into a pixel-accurate PNG — the same rendering pipeline Visual Studio uses |
| Drive running apps | Launch processes, find elements by name/type/ID, click, type, drag-drop, take screenshots |
| Work in the background | Headless mode runs apps on a hidden desktop — zero focus stealing, zero disruption |
| Target any framework | .NET Framework 4.x, .NET Core 3.x, .NET 5–9+. Auto-detected from your .csproj |
render_form in action
The agent reads your .Designer.cs, calls render_form, and gets back this — no build, no running app:
<p align="center"> <img src="https://raw.githubusercontent.com/wiki/fnrhombus/winforms-mcp/render-form-demo.png" alt="render_form output — Login Form" width="400"> </p>
It can then edit the layout, re-render, and iterate — a full visual feedback loop with no IDE, no build, and no human in the loop.
Quick start
Add to your MCP config and restart. Nothing else to install.
npx (requires Node.js):
{
"mcpServers": {
"winforms-mcp": {
"command": "npx",
"args": ["-y", "@fnrhombus/winforms-mcp"]
}
}
}
Standalone (no Node required) — download the zip from Releases, extract it, and point to the exe:
{
"mcpServers": {
"winforms-mcp": {
"command": "C:/path/to/winformsmcp/winformsmcp.exe"
}
}
}
Note: Keep the extracted folder structure intact —
render_formneeds therendererhost/subdirectory alongside the exe.
That's it. The agent can now see and interact with any WinForms application on your machine.
Contributing
See CLAUDE.md for development guidelines. Git hooks (commit message validation and code formatting) are automatically configured on the first dotnet build or dotnet test.
Tools
| Category | Tools | Description |
|---|---|---|
| Process | launch_app attach_to_process close_app get_process_status |
Start, attach to, and manage Windows processes |
| Discovery | find_element element_exists wait_for_element get_element_tree |
Locate UI elements by AutomationId, name, class, or control type |
| Interaction | click_element type_text set_value select_item click_menu_item drag_drop send_keys |
Click buttons, fill text boxes, select combo items, navigate menus |
| Visual | take_screenshot render_form |
Capture running apps or render .Designer.cs to PNG |
Cross-framework rendering
render_form detects your project's target framework and dispatches to a matching out-of-process host:
| Your project targets | Renderer host |
|---|---|
| .NET Framework 4.0–4.8.x | net48 |
| .NET Core 3.x | netcoreapp3.1 |
| .NET 5, 6, 7, 8, 9+ | net8.0-windows |
Custom controls, third-party components, and framework-specific APIs all resolve correctly. Override with the TFM environment variable if needed.
Headless mode
Set HEADLESS=true to launch apps on a hidden Windows desktop (CreateDesktop API):
- Zero focus stealing — apps can't steal focus, show TopMost windows, or flash in the taskbar
- Full automation — element discovery, clicking, typing, and screenshots all work through UIA patterns and PrintWindow
- Mixed mode — headless and visible apps in the same session, each automatically routed to its correct desktop
{
"mcpServers": {
"winforms-mcp": {
"command": "npx",
"args": ["-y", "@fnrhombus/winforms-mcp"],
"env": { "HEADLESS": "true" }
}
}
}
Note:
send_keysanddrag_droprequire input simulation and only work on the visible desktop. Usetype_text/set_valueandclick_elementfor headless processes.
Environment variables
| Variable | Default | Description |
|---|---|---|
HEADLESS |
false |
Run launched apps on a hidden desktop |
TFM |
auto |
Lock rendering to a specific framework (net48, netcoreapp3.1, net8.0-windows) |
TELEMETRY_OPTOUT |
false |
Disable all Application Insights telemetry (matches .NET CLI conventions) |
Documentation
- Examples — common workflows and patterns
- Headless Mode — hidden desktop architecture and tool compatibility
Contributing
Contributions welcome! See issues for open items.
Support
If you find this project useful, consider supporting its development:
- GitHub Sponsors — Monthly sponsorship with public recognition
- Buy Me a Coffee — One-time or recurring donations
Your support helps maintain and improve this project!
License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-windows7.0 is compatible. net9.0-windows was computed. net10.0-windows was computed. |
-
net8.0-windows7.0
- FlaUI.Core (>= 4.0.0)
- FlaUI.UIA2 (>= 4.0.0)
- Microsoft.ApplicationInsights (>= 2.22.0)
- Microsoft.Extensions.Caching.Memory (>= 8.0.1)
- Microsoft.Extensions.Configuration (>= 8.0.0)
- Microsoft.Extensions.Configuration.EnvironmentVariables (>= 8.0.0)
- Microsoft.Extensions.Hosting (>= 8.0.1)
- Microsoft.Extensions.Logging.Console (>= 8.0.1)
- Microsoft.Extensions.Options (>= 8.0.2)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 8.0.0)
- Rhombus.WinFormsMcp.Rendering (>= 1.0.0)
- System.Drawing.Common (>= 8.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.5.12 | 106 | 4/13/2026 |
| 1.5.12-beta | 89 | 4/13/2026 |
| 1.5.11 | 91 | 4/13/2026 |
| 1.5.11-beta | 89 | 4/13/2026 |
| 1.5.10-beta | 92 | 4/13/2026 |
| 1.5.9 | 101 | 4/13/2026 |
| 1.5.9-beta | 94 | 4/13/2026 |
| 1.5.8 | 113 | 4/12/2026 |
| 1.5.8-beta | 100 | 4/12/2026 |
| 1.5.7-beta | 93 | 4/12/2026 |
| 1.5.6 | 96 | 4/12/2026 |
| 1.5.6-beta | 95 | 4/12/2026 |
| 1.5.5-beta | 101 | 4/12/2026 |
| 1.5.4-beta | 95 | 4/12/2026 |
| 1.5.3 | 100 | 4/12/2026 |
| 1.5.3-beta | 97 | 4/12/2026 |
| 1.5.2-beta | 91 | 4/12/2026 |
| 1.5.1-beta | 89 | 4/12/2026 |
| 1.5.0 | 104 | 4/12/2026 |
| 1.5.0-beta | 94 | 4/12/2026 |