![]() |
VOOZH | about |
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" />Directory.Packages.props
<PackageReference Include="Rhombus.WinFormsMcp" />Project file
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.12Install as a Cake Addin
#tool nuget:?package=Rhombus.WinFormsMcp&version=1.5.12Install as a Cake Tool
<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>
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.
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 |
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.
| 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 |
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.
Set HEADLESS=true to launch apps on a hidden Windows desktop (CreateDesktop API):
{
"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.
| 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) |
Contributions welcome — see issues for open items. Git hooks for commit validation and code formatting are configured automatically on first build.
If you find this project useful, consider supporting its development:
Your support helps maintain and improve this project!
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-windows7.0 net8.0-windows7.0 is compatible. net9.0-windows net9.0-windows was computed. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.5.12 | 112 | 4/13/2026 |
| 1.5.12-beta | 92 | 4/13/2026 |
| 1.5.11 | 97 | 4/13/2026 |
| 1.5.11-beta | 92 | 4/13/2026 |
| 1.5.10-beta | 96 | 4/13/2026 |
| 1.5.9 | 104 | 4/13/2026 |
| 1.5.9-beta | 97 | 4/13/2026 |
| 1.5.8 | 117 | 4/12/2026 |
| 1.5.8-beta | 102 | 4/12/2026 |
| 1.5.7-beta | 94 | 4/12/2026 |
| 1.5.6 | 99 | 4/12/2026 |
| 1.5.6-beta | 97 | 4/12/2026 |
| 1.5.5-beta | 102 | 4/12/2026 |
| 1.5.4-beta | 97 | 4/12/2026 |
| 1.5.3 | 102 | 4/12/2026 |
| 1.5.3-beta | 98 | 4/12/2026 |
| 1.5.2-beta | 93 | 4/12/2026 |
| 1.5.1-beta | 91 | 4/12/2026 |
| 1.5.0 | 109 | 4/12/2026 |
| 1.5.0-beta | 95 | 4/12/2026 |