Rhombus.WinFormsMcp
1.5.12
dotnet add package Rhombus.WinFormsMcp --version 1.5.12
NuGet\Install-Package Rhombus.WinFormsMcp -Version 1.5.12
<PackageReference Include="Rhombus.WinFormsMcp" Version="1.5.12" />
<PackageVersion Include="Rhombus.WinFormsMcp" Version="1.5.12" />
<PackageReference Include="Rhombus.WinFormsMcp" />
paket add Rhombus.WinFormsMcp --version 1.5.12
#r "nuget: Rhombus.WinFormsMcp, 1.5.12"
#:package Rhombus.WinFormsMcp@1.5.12
#addin nuget:?package=Rhombus.WinFormsMcp&version=1.5.12
#tool nuget:?package=Rhombus.WinFormsMcp&version=1.5.12
<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 gives the agent a designer — the exact same rendering pipeline Visual Studio uses. Edit, re-render, iterate with no build and no human in the loop |
| 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 |
Quick start
Claude Code plugin (easiest):
/plugin marketplace add fnrhombus/claude-plugins
/plugin install winforms-mcp@claude-plugins
MCP config with 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.
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 — the same rendering pipeline Visual Studio uses, so custom controls and third-party components resolve correctly.
| 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 |
Framework-specific APIs resolve correctly too. 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. Git hooks for commit validation and code formatting are configured automatically on first build.
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 | 100 | 4/13/2026 |
| 1.5.9-beta | 93 | 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 | 95 | 4/12/2026 |
| 1.5.6-beta | 92 | 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 | 93 | 4/12/2026 |