Interacts with WinForms UI elements and captures screenshots of headlessly rendered forms through an MCP server. Fires when automating or testing C# desktop UI without a visible display.
What's inside
FAQ
winforms-mcp is a Claude Code plugin with hand-picked skills for development work, indexed on Flowy. Install it with the command on its page. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Repo: fnrhombus/winforms-mcp
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!
.claude/
settings.json
.editorconfig
.githooks/
commit-msg
pre-commit
.github/
CONTRIBUTING.md
dependabot.yml
FUNDING.yml
ISSUE_TEMPLATE/
bug_report.yml
feature_request.yml
PULL_REQUEST_TEMPLATE.md
SECURITY.md
workflows/
ci.yml
claude-code-review.yml
claude.yml
release-beta.yml
release-stable.yml
.gitignore
.mcp.json
CHANGELOG.md
CLAUDE.md
Directory.Build.props
global.json
LICENSE
npm/
bin/
winforms-mcp.js
install.js
package.json
README.md
Rhombus.WinFormsMcp.sln
scripts/
merge-to-main.ps1
merge-to-main.sh
setup-branch-protection.ps1
setup-hooks.ps1
setup-hooks.sh
setup.ps1
setup.sh
src/
Rhombus.WinFormsMcp.RendererHost/
Program.cs
Rhombus.WinFormsMcp.RendererHost.csproj
Rhombus.WinFormsMcp.Rendering/
DesignSurfaceFormRenderer.cs
EvaluationSkipped.cs
FormRenderingHelpers.cs
Rhombus.WinFormsMcp.Rendering.csproj
Rhombus.WinFormsMcp.Server/
Automation/
AutomationHelper.cs
IAutomationHelper.cs
NativeMethods.cs
RendererProcessPool.cs
McpServerOptions.cs
McpServerOptionsConfiguration.cs
Program.cs
Rhombus.WinFormsMcp.Server.csproj
Server/
AutomationServer.cs
Session/
ISessionManager.cs
SessionManager.cs
Telemetry/
ITelemetry.cs
NullTelemetry.cs
Telemetry.cs
Rhombus.WinFormsMcp.TestApp/
Form1.cs
Form1.Designer.cs
Program.cs
Rhombus.WinFormsMcp.TestApp.csproj
tests/
Rhombus.WinFormsMcp.Tests/
AutomationHelperTests.Headless.cs
DesignSurfaceFormRendererTests.cs
E2ETests.cs
E2ETests.Headless.cs
ElementTreeTests.cs
FormRenderingHelpersTests.cs
IntegrationTests.cs
IntegrationTests.Headless.cs
McpIntegrationTests.cs
McpServerOptionsTests.cs
ProcessStatusTests.cs
RendererProcessPoolTests.cs
Rhombus.WinFormsMcp.Tests.csproj
TakeScreenshotTests.cs
TestData/
AddressEntryForm.Designer.cs
KitchenSink/
KitchenSink.csproj
KitchenSinkForm.cs
KitchenSinkForm.Designer.cs
MoodRing.cs
Program.cs
StatusDashboard.cs
StatusDashboard.Designer.cs
UnitTest1.cs
smoke-test/
.mcp.json
smoke-test.sh
VERSIONยฉ 2026 Flowy ยท Free and open source
Built for Claude Code ยท Not affiliated with Anthropic