WpfVisualTreeMcp
The WpfVisualTreeMcp server lets AI agents inspect, debug, and interact with live WPF applications via the Model Context Protocol — like giving your AI the insider view of Snoop WPF, with no changes required to the target app.
Process Management
List running WPF applications and attach by process ID or name, with optional auto-injection of the inspector DLL (supports cross-architecture x64↔x86).
Visual Tree & Structure
Traverse the full visual and logical tree hierarchies (up to 100 levels deep), read all dependency properties, retrieve layout metrics, and export the tree to XAML or JSON.
Element Search & Discovery
Find elements by type, name, visible text, property values, or visibility — with shallow and deep search modes that include adorner layers and popups.
Bindings & Data Analysis
Inspect data bindings (including MultiBinding, converters, StringFormat), detect and clear binding errors, and examine DataContext type, properties, INPC status, and the inheritance chain.
Resources & Styles
Enumerate resource dictionaries and inspect applied styles and templates at any scope.
Screenshots & Highlighting
Capture screenshots in render mode (off-screen, works even when covered) or screen mode (live pixels including open popups/menus). Visually highlight elements in the running app.
UI Interaction
Click elements via UI Automation or physical mouse (single, double, right-click).
Select items in ComboBox, ListBox, ListView, and TabControl by text or index (virtualized items supported).
Set text in TextBox, ComboBox, or PasswordBox via automation or physical keyboard (full Unicode BMP).
Send keyboard shortcuts (e.g.
Ctrl+S,Alt+F4,F5,Enter) to elements or the focused window.
Monitoring & Waiting
Watch dependency properties for real-time changes and wait for UI conditions (visible, enabled, exists, hidden) with configurable timeouts — no manual sleep-and-retry loops.
Live Editing & Diffing
Set any dependency property at runtime (e.g. Margin, Visibility, Background) and revert changes (restoring prior bindings/values).
Capture named snapshots of element subtree state and diff two snapshots to measure exactly what a change moved or modified.
Dual-Mode Operation
Runs as an MCP stdio server for AI agent use, or as a one-shot CLI for scripting and manual inspection.
Allows AI agents to inspect, debug, and drive running WPF applications, including visual tree navigation, property inspection, binding analysis, screenshots, element search, and UI automation such as clicking, text input, and keyboard shortcuts.
WpfVisualTreeMcp
Let AI agents see, debug and drive running WPF apps. Snoop + Playwright for AI, exposed over the Model Context Protocol — visual tree, data bindings, screenshots, clicks, text input and keyboard, against any running WPF process, no source changes needed.

An AI agent queries controls by visible text, fills the form, selects a list item, clicks Submit — then explains why the Status box stayed empty by pulling the app's binding errors. Every step is one MCP tool call (or CLI command).
Quickstart (60 seconds)
Download and extract the latest release zip (requires the .NET 8 Desktop Runtime).
Register it in your MCP client — for Claude Code, add to
.mcp.json:{ "mcpServers": { "wpf-visual-tree": { "command": "C:/path/to/WpfVisualTreeMcp.Server.exe", "args": [] } } }Ask your agent: "Look at my running WPF app and tell me why the Save button is disabled."
Prefer the terminal? The same exe is a full CLI: WpfVisualTreeMcp.Server.exe help.
Related MCP server: windows-gui-mcp
Overview
WpfVisualTreeMcp is a Model Context Protocol (MCP) server that allows AI coding agents (Claude Code, Cursor, GitHub Copilot) to inspect and interact with running WPF applications. Think of it as giving your AI assistant the same capabilities as tools like Snoop WPF or Visual Studio's Live Visual Tree.
Why This Matters
Debugging WPF UI issues traditionally requires manual inspection with specialized tools. This project bridges that gap by exposing WPF inspection capabilities through MCP, enabling AI agents to:
Understand UI structure during code reviews
Diagnose binding errors automatically
Suggest fixes for layout issues
Assist with UI refactoring tasks
Analyze visual tree hierarchies in real-time
Features
Core Inspection
Process Discovery - List all running WPF applications available for inspection
Visual Tree Navigation - Traverse the complete visual tree hierarchy
Logical Tree Access - Navigate the logical tree structure
Property Inspection - Read all dependency properties of any UI element
Binding & Resources
Binding Analysis - Inspect bindings with converter, StringFormat, FallbackValue, MultiBinding support
DataContext Inspection - View DataContext type, properties, INPC status, and inheritance chain
Binding Error Detection - Automatically capture and report binding errors with classification
Resource Enumeration - Browse resource dictionaries at any scope
Style Inspection - View applied styles and templates
Search & Monitoring
Element Search - Find elements by type, name, or property values
Deep Search - Search entire tree including AdornerLayer and Popup elements
Property Watching - Monitor property changes in real-time
Interaction & Export
Screenshot Capture - Capture window/element screenshots visible to AI agents
Element Highlighting - Visually highlight elements in the running app
Control Click (v0.4.0) - Click elements via UI Automation (
Invoke/Toggle/Select/ExpandCollapse) or a real OS mouse clickSet Text (new in v0.5.0) - Fill a TextBox/ComboBox/PasswordBox via UI Automation
IValueProvider.SetValue, with aTextBox.Text/PasswordBox.Password/ reflected-Textfallback, orphysical=trueto type via OS keyboard input (full Unicode BMP)Send Keys (new in v0.5.0) - Send keyboard shortcuts (
Ctrl+S,Alt+F4,F5,Enter,Ctrl+Shift+F, ...) to an element or the focused window via OS keyboard inputLayout Information - Get detailed layout metrics
Tree Export - Export visual tree to XAML or JSON format
Auto-Injection - Inject Inspector into running WPF processes (no source changes needed); multi-architecture since v0.6.0 — a 64-bit server can inject into 32-bit WPF apps via a bundled
WpfInjectorHelper.exe
Dual-Mode CLI (new in v0.4.0)
The same WpfVisualTreeMcp.Server.exe runs as either an MCP stdio server
(no arguments, default) or as a one-shot CLI (any recognised subcommand).
Useful when the MCP server isn't connected, for scripting, and for verifying
the pipeline manually. Run WpfVisualTreeMcp.Server.exe help for the full
command list. Output is JSON on stdout; diagnostics go to stderr.
How it compares
vs. the general tool categories:
WpfVisualTreeMcp | FlaUI / WinAppDriver | Generic computer-use (screenshot + mouse) | ||
Consumer | AI agents (MCP) + humans (CLI) | Humans (GUI) | Test code (C#) | AI agents |
Visual tree, dependency properties | ✅ | ✅ | ❌ (UIA view only) | ❌ |
Data bindings, binding errors, DataContext | ✅ | ✅ | ❌ | ❌ |
Find controls by visible text / properties | ✅ | manual | partial (UIA) | pixel guessing |
Click / type / select / shortcuts | ✅ | ❌ | ✅ | ✅ (blind) |
Wait for UI conditions (no sleep loops) | ✅ | ❌ | ✅ | ❌ |
Element screenshots + popup-aware screen capture | ✅ | ❌ | partial | full screen only |
Works without target source changes | ✅ (auto-injection) | ✅ | ✅ | ✅ |
vs. other WPF MCP servers. Most WPF MCP servers are built on UI Automation (FlaUI): they read the accessibility tree, and can only reach WPF internals — bindings, DataContext, ViewModel state — if you install their in-process probe into the app you want to inspect. This server takes the Snoop route instead: it injects at runtime, so it reads the real visual tree and diagnoses binding errors and DataContext with zero changes to the target app — nothing to add to your build, nothing to ship into production.
WpfVisualTreeMcp | UIA-based servers (FlaUI) | Other injection-based servers | |
Sees the real visual tree (not just the UIA view) | ✅ injection | ❌ accessibility tree | ✅ |
Binding errors + DataContext without a probe in the target | ✅ | ❌ (needs in-process probe) | partial |
Interaction surface | click (UIA + physical, double/right), set-text w/ read-back, send-keys, select-item (virtualized) | click / type / select | usually invoke-only |
Wait for element conditions | ✅ | ✅ | ❌ |
Popup / dropdown / context-menu screenshots | ✅ screen mode | partial | screenshot only |
Cross-architecture injection (x64 ⇄ x86) | ✅ | n/a | ❌ |
Dual-mode: MCP server and one-shot CLI | ✅ | ❌ | ❌ |
Distribution | NuGet ( | varies | varies |
In short: UIA-based tools see what accessibility exposes, and computer-use agents see pixels. This project gives the agent the same insider view a WPF developer has in Snoop — with no probe to install in the target app — plus the widest set of hands to act on it, over a protocol every AI coding tool speaks.
Installation
Prerequisites
Windows 10/11
.NET 8.0 SDK or later
A WPF application to inspect
Installation
Option 1: .NET tool / NuGet (Recommended)
dotnet tool install -g WpfVisualTreeMcp # installs the `wpfinspect` commandThe package is also published as an MCP server package (PackageType: McpServer),
so MCP clients that support NuGet-hosted servers can launch it directly:
dnx WpfVisualTreeMcp # runs the MCP stdio serverOption 2: Download Release
Download the latest release from GitHub Releases:
Download
WpfVisualTreeMcp-vX.X.X-win-x64.zipExtract to a folder (e.g.,
C:\Tools\WpfVisualTreeMcp)The MCP server executable is
WpfVisualTreeMcp.Server.exe
Option 3: Build from Source
git clone https://github.com/faze79/WpfVisualTreeMcp.git
cd WpfVisualTreeMcp
dotnet build -c ReleaseConfiguration
The server uses the official Microsoft/Anthropic MCP SDK for .NET, providing guaranteed compatibility with Claude Code and other MCP clients.
Claude Code
Option 1: Command Line (Recommended)
Use the claude mcp add command to add the server directly:
# Add to current project only
claude mcp add wpf-visual-tree -- C:/path/to/WpfVisualTreeMcp/publish/WpfVisualTreeMcp.Server.exe
# Add globally (available in all projects)
claude mcp add --scope user wpf-visual-tree -- C:/path/to/WpfVisualTreeMcp/publish/WpfVisualTreeMcp.Server.exeYou can verify the server was added:
claude mcp listOption 2: Project-level JSON Configuration
Create or edit .mcp.json in your project root:
{
"mcpServers": {
"wpf-visual-tree": {
"command": "C:/path/to/WpfVisualTreeMcp/publish/WpfVisualTreeMcp.Server.exe",
"args": []
}
}
}Option 3: Global JSON Configuration
Add to ~/.claude/settings.json:
{
"mcpServers": {
"wpf-visual-tree": {
"command": "C:/path/to/WpfVisualTreeMcp/publish/WpfVisualTreeMcp.Server.exe",
"args": []
}
}
}Important Notes:
Use absolute paths to the built
.exefileUse forward slashes (
/) in paths on WindowsBuild in Release mode for production:
dotnet build -c ReleaseRestart Claude Code after configuration changes
Cursor
Add to your Cursor settings (.cursor/mcp.json):
{
"mcpServers": {
"wpf-visual-tree": {
"command": "C:/path/to/WpfVisualTreeMcp/publish/WpfVisualTreeMcp.Server.exe",
"args": []
}
}
}Self-Hosted Mode (Recommended)
For your WPF application to be inspectable, add a reference to the Inspector DLL and initialize it on startup:
Add a project reference to
WpfVisualTreeMcp.InspectorIn your
App.xaml.cs:
using System.Diagnostics;
using System.Windows;
using WpfVisualTreeMcp.Inspector;
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// Initialize the WPF Visual Tree Inspector
InspectorService.Initialize(Process.GetCurrentProcess().Id);
}
protected override void OnExit(ExitEventArgs e)
{
InspectorService.Instance?.Dispose();
base.OnExit(e);
}
}This enables the MCP server to connect to your application via named pipes for real-time inspection.
Usage Examples
List Running WPF Applications
Use the wpf_list_processes tool to show all running WPF applications.Attach and Inspect Visual Tree
Attach to the MyApp.exe WPF application and show me the visual tree of the main window.Find Binding Errors
Check the attached WPF application for any binding errors and explain what's causing them.Search for Elements
Find all Button elements in the visual tree that have IsEnabled set to false.Export Visual Tree
Export the visual tree of the current window to JSON format so I can analyze the structure.Architecture
┌─────────────────────────────────────────────────────────────┐
│ AI Agent (Claude Code) │
└─────────────────────────┬───────────────────────────────────┘
│ MCP Protocol (stdio)
▼
┌─────────────────────────────────────────────────────────────┐
│ WpfVisualTreeMcp Server │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────┐ │
│ │ MCP Handler │ │ Tree Navigator │ │ Injector │ │
│ │ (Tools/Res.) │ │ & Inspector │ │ Manager │ │
│ └────────┬────────┘ └────────┬────────┘ └──────┬──────┘ │
└───────────┼────────────────────┼───────────────────┼────────┘
│ │ │
└────────────────────┼───────────────────┘
│ Named Pipes / IPC
▼
┌─────────────────────────────────────────────────────────────┐
│ Target WPF Application │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Injected Inspector DLL ││
│ │ • VisualTreeHelper access ││
│ │ • LogicalTreeHelper access ││
│ │ • Property/Binding inspection ││
│ │ • Resource dictionary enumeration ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘For detailed architecture documentation, see docs/ARCHITECTURE.md.
Available Tools
Tool | Description |
| List all running WPF applications |
| Attach to a WPF application (supports |
| Get the visual tree hierarchy (default depth: 25, max: 100) |
| Get all dependency properties of an element |
| Query elements by type, x:Name, visible text, property values and visibility; results include text, automation id, enabled/visible state and screen bounds |
| Same query filters without result limit, across all windows including adorners/popups |
| Capture a screenshot of the window or element (returns image); |
| Get data bindings for an element (includes MultiBinding, converter, StringFormat) |
| List all captured binding errors |
| Clear the captured binding errors list |
| Get DataContext type, properties, INPC status, and inheritance chain |
| Enumerate resource dictionaries |
| Get applied styles and templates |
| Monitor a property for changes |
| Explain why a property has its value — value source, and for bindings a hop-by-hop path resolution pinpointing where a broken binding fails |
| Evaluate Style and ControlTemplate triggers against the current state (condition, current value, active, setters) — 'why doesn't this trigger fire?'; and attribute a property's value to the style setter / active trigger that set it |
| Capture an element subtree's state (layout, visibility, brushes, text) under a label |
| Diff two snapshots — measure exactly what a change moved (property from→to, added/removed) |
| Live-edit a dependency property at runtime (type-converted), to test a change without rebuilding. State-changing, reversible. |
| Undo |
| Visually highlight an element |
| Click a control — UI Automation invoke ( |
| Select an item in a ComboBox/ListBox/ListView/TabControl by visible text or index — works with virtualized items. State-changing. |
| Wait until an element is visible/exists/enabled/hidden, polling in the target app — no sleep-and-retry loops. |
| Set text/value of a TextBox/ComboBox/PasswordBox — UI Automation |
| Send a keyboard shortcut ( |
| Get layout information |
| Export visual tree to XAML or JSON |
For complete tool documentation, see docs/TOOLS_REFERENCE.md.
Roadmap
Phase 1: Core Inspection ✅
Project structure and architecture
Process discovery and enumeration
Basic process attachment
Visual tree navigation
Property inspection
Element search
Phase 2: Advanced Features ✅
IPC communication via named pipes
Binding analysis and error detection
Resource dictionary enumeration
Style and template inspection
Property change monitoring (with notifications)
Phase 3: Interaction & Diagnostics ✅
Element highlighting overlay
XAML/JSON export
Screenshot capture (returns MCP
ImageContentBlock)DLL auto-injection into running WPF processes (x64/x86)
AdornerLayer and Popup visual tree traversal
Phase 4: CLI + Driving the App ✅ (v0.4.0 / v0.5.0)
Dual-mode executable (MCP stdio + one-shot CLI) (v0.4.0)
Control click via UI Automation patterns (v0.4.0)
Physical OS mouse click as opt-in fallback (v0.4.0)
User-level Claude Code skill bundling the CLI (v0.4.0)
Set text/value via UI Automation
IValueProvider+ fallbacks (v0.5.0)Physical keyboard typing with Unicode BMP support (v0.5.0)
Keyboard shortcuts (
Ctrl+S,Alt+F4,F5, ...) via OS input (v0.5.0)
Phase 5: Multi-architecture ✅ (v0.6.0)
Cross-bitness auto-injection (64-bit server → 32-bit target)
Architecture-matching
WpfInjectorHelper.exe(32-bit .NET 8)Removes v0.5.0 known limitation; both x86 and x64 WPF apps drivable
Phase 6: Query engine & full driving ✅ (v0.7.0)
Query elements by visible text, property values, visibility
Enriched results: text, automation id, enabled/visible state, screen bounds
wpf_select_item— select in ComboBox/ListBox/TabControl by text or indexDouble / right click; scroll-into-view before physical input
Screen-mode screenshots (popups, dropdowns, context menus visible)
Set-text read-back verification; weak element-handle cache
Critical IPC serialization fix (request parameters were silently dropped)
Phase 7: Distribution & agent ergonomics ✅ (v0.7.1 / v0.8.0)
NuGet package, installable via
dnx/dotnet tool install(MCP server package type)Published to nuget.org (trusted publishing / OIDC) and the official MCP registry
Binding-error capture fixed (was never wired up), IPC parameter-drop fix
wpf_wait_for— wait for an element/condition, no sleep-and-retry loopsConcurrent IPC connections (a long wait no longer blocks other commands)
Next up
The "change → measure → is it effective?" loop is complete: live-edit a property, then diff a before/after snapshot to see exactly what moved.
wpf_set_property/wpf_revert_property— live-edit a dependency property, then undo (v0.9.0)wpf_snapshot/wpf_diff— before/after snapshot to verify a change's effect (v0.10.0)wpf_evaluate_binding— explain why a property has its value; resolve a binding path hop-by-hop (v0.11.0)wpf_record→wpf_export_test— record a driven workflow, export an xUnit + driver testInspector-only NuGet package for self-hosted mode (reference instead of injection)
Streaming binding-error / property-change notifications to the MCP client
WinUI 3 support
See docs/ROADMAP.md for the full prioritized plan (rationale, design notes, effort, and suggested sequencing).
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Development Setup
Clone the repository:
git clone https://github.com/faze79/WpfVisualTreeMcp.git cd WpfVisualTreeMcpOpen in Visual Studio 2022 or VS Code:
code . # or start WpfVisualTreeMcp.slnBuild and run tests:
dotnet build dotnet testRun the sample WPF app for testing:
dotnet run --project samples/SampleWpfApp
Project Structure
WpfVisualTreeMcp/
├── src/
│ ├── WpfVisualTreeMcp.Server/ # MCP Server (.NET 8) - Uses official MCP SDK
│ │ ├── Program.cs # Server initialization with MCP SDK
│ │ ├── WpfTools.cs # 20 WPF tools (17 inspection + click/set-text/send-keys)
│ │ ├── Cli/CliRunner.cs # One-shot CLI front-end (v0.4.0)
│ │ └── Services/ # Process & IPC management
│ ├── WpfVisualTreeMcp.Inspector/ # Injected DLL (.NET Framework 4.8)
│ ├── WpfVisualTreeMcp.Injector/ # Managed injection logic (CreateRemoteThread; net48 + net8.0)
│ ├── WpfVisualTreeMcp.InjectorHelper/# x86 .NET 8 helper exe for cross-arch injection (v0.6.0)
│ ├── WpfVisualTreeMcp.Bootstrapper/ # Native C++ DLL for CLR hosting
│ └── WpfVisualTreeMcp.Shared/ # Shared models & IPC contracts
├── samples/
│ └── SampleWpfApp/ # Test application
├── tests/
│ └── WpfVisualTreeMcp.Tests/ # Unit tests (48 tests)
├── publish/ # Published server + native DLLs
│ └── native/{x64,x86}/ # Architecture-specific bootstrapper
└── docs/ # DocumentationTechnical Details
MCP SDK: Built with the official C# MCP SDK from Microsoft/Anthropic
Protocol: JSON-RPC 2.0 over stdio transport
Target Framework: .NET 8.0 (Server) / .NET Framework 4.8 + .NET 8.0-windows (Inspector, dual-target)
IPC: Named Pipes for server-to-application communication
Tools: 28 tools auto-discovered via
[McpServerTool]attributes (22 read-only inspection incl.wpf_wait_for,wpf_snapshot,wpf_diff,wpf_evaluate_binding,wpf_explain_triggers+ 6 state-changing:wpf_click_element,wpf_select_item,wpf_set_text,wpf_send_keys,wpf_set_property,wpf_revert_property)CLI: same executable runs as one-shot CLI when given a subcommand (
Program.csroutes viaCliRunner.IsCliCommand)
Acknowledgments
Inspired by Snoop WPF - the original WPF spy utility
Built on the Model Context Protocol by Anthropic
Thanks to the .NET and WPF community
License
This project is licensed under the MIT License - see the LICENSE file for details.
Available Tools
28 toolswpf_attachA
Attach to a WPF application by process ID or name. Set auto_inject=true to automatically inject the Inspector into processes that don't have it pre-loaded.
| Name | Required | Description | Default |
|---|---|---|---|
| process_id | No | ||
| auto_inject | No | ||
| process_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions auto_inject for injecting the Inspector but does not disclose side effects on the target process, error conditions, or prerequisites (e.g., administrator rights, Inspector installation). The description lacks sufficient behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two sentences: the first states the core purpose, and the second adds essential parameter guidance. It is front-loaded, concise, and contains no filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the three parameters and no output schema, the description covers the main action and parameter semantics but does not address what happens after attachment (e.g., return value, readiness for other tools). It omits the context that this tool is a prerequisite for most other WPF tools, which would be valuable for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description clarifies the purpose of process_id and process_name as identification methods and explains auto_inject for injection. However, it does not address scenarios like both identifiers provided, the default behavior of null, or the difference between the two parameters in terms of precedence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Attach'), the target ('WPF application'), and the two identification methods ('process ID or name'). This distinguishes it from sibling tools like wpf_click_element or wpf_capture_screenshot, which operate on an already-attached application.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to set auto_inject=true, but does not explain when this tool should be used versus alternatives (e.g., wpf_list_processes as a prerequisite). No explicit when-not-to-use or context for choosing between process_id and process_name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_capture_screenshotA
Capture a screenshot of the WPF window or a specific element. Returns an image that can be visually analyzed. Use element_handle to capture a specific element, or omit for the entire window. mode='render' (default) re-renders the visual off-screen — works even if the window is covered, but CANNOT see open Popups, ComboBox dropdowns, context menus or tooltips. mode='screen' captures the actual on-screen pixels (GDI) and DOES include them — use it right after clicking something that opened a popup/menu; requires the window to be visible and unobstructed.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | render | |
| max_width | No | ||
| max_height | No | ||
| element_handle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided so description bears full burden. It discloses that 'render' re-renders off-screen and cannot see popups/menus, while 'screen' captures on-screen pixels and requires visibility. This is good behavioral disclosure for a screenshot tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states purpose concisely, second provides detailed mode guidance. Efficient but could be slightly more structured with bullet points for clarity. No information is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description notes it returns an image for visual analysis. Parameters are mostly covered. For a screenshot tool with no complex outputs, this is complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description compensates by explaining 'element_handle' (capture specific element or omit for entire window) and 'mode' (render vs screen with behavioral differences). max_width and max_height are not explained beyond defaults, but their purpose is somewhat implied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Capture a screenshot of the WPF window or a specific element.' The verb 'capture' and resource 'screenshot of WPF window/element' are specifically defined. No sibling tool performs a similar function, so it is well-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use each mode: 'render' for general use but cannot capture popups/menus; 'screen' for capturing popups/menus after clicking. Also advises to use element_handle for specific elements. Lacks explicit 'when not to use' but is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_clear_binding_errorsA
Clear the captured binding errors list. Useful before testing specific scenarios.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool clears a list, implying mutation, but doesn't specify side effects, scope (all errors or filtered), or behavior when list is already empty. This is adequate but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences, front-loaded with the main action and a use case. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter tool with no output schema, the description covers the essential purpose and usage context. Could clarify scope, but complete enough for basic tool operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema description coverage. With no parameters, the description adds no parameter-specific info, but this is acceptable as the baseline is 4 for 0 params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool name 'wpf_clear_binding_errors' combined with description 'Clear the captured binding errors list' clearly states the action and resource. It distinguishes itself from sibling 'wpf_get_binding_errors' which captures errors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description adds 'Useful before testing specific scenarios,' providing clear usage context. However, no explicit when-not-to-use or alternatives are given, but given the tool's simplicity, this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_click_elementA
Click a UI element. By default invokes the control's action via UI Automation (works for buttons, menu items, checkboxes, radio buttons, tabs, list items, expanders) without moving the mouse or focusing the window. Set physical=true to perform a real OS mouse click at the element's on-screen position (works on any visible element but moves the cursor and brings the window forward; auto-scrolls the element into view first). click_type: 'single' (default), 'double' (open items), 'right' (context menus) — double and right are always physical. After opening a context menu or dropdown, use wpf_capture_screenshot with mode='screen' to see it. STATE-CHANGING.
| Name | Required | Description | Default |
|---|---|---|---|
| physical | No | ||
| click_type | No | ||
| element_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description fully bears the burden. It discloses side effects: physical click moves cursor, brings window forward, auto-scrolls; double/right clicks are always physical. It also labels the tool as STATE-CHANGING. This is comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise; every sentence adds value. It is front-loaded with the core action and structured with parameter details. Minor redundancy could be trimmed, but overall effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description does not mention return values or error handling. However, it covers usage modes, parameter details, and behavioral nuances. For a simple click tool, this is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters. It covers physical (boolean, default false), click_type (string, default null, listing 'single', 'double', 'right'), but element_handle is only mentioned as required without further explanation. Slightly incomplete, but valuable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool clicks a UI element, enumerates supported control types (buttons, menu items, etc.), and distinguishes two modes (UI Automation vs physical click). This specificity and resource identification earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidelines: default vs physical click, click types (single, double, right), and after-action tips (use wpf_capture_screenshot for context menus). It lacks explicit when-not-to-use or alternatives, but the guidance is effective.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_diffA
Diff two snapshots captured with wpf_snapshot, to measure the effect of a change. Returns a summary (counts) plus, for each element that changed, the exact properties that changed (from → to), keyed by stable element handle; plus elements added or removed between the two snapshots. Use this to verify a planned UI tweak did what you expected (e.g. Margin 0,0,0,0 → 40,40,40,40; Visibility Collapsed → Visible; a child appeared).
| Name | Required | Description | Default |
|---|---|---|---|
| after | Yes | ||
| before | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It clearly discloses the output: 'Returns a summary (counts) plus, for each element that changed, the exact properties that changed (from → to), keyed by stable element handle; plus elements added or removed between the two snapshots.' No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the purpose, and efficiently describes the output structure without superfluous text. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the return value in detail (compensating for no output schema) but lacks parameter semantics. For a 2-parameter tool, this is a notable gap, making it somewhat incomplete for an agent to use correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must add meaning. It mentions 'before' and 'after' as snapshot names but does not explain their format (e.g., file paths, data content). The description only implies they are snapshots captured with wpf_snapshot, leaving ambiguity for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs and resources: 'Diff two snapshots captured with wpf_snapshot, to measure the effect of a change.' It clearly distinguishes from sibling tools like wpf_snapshot (which captures) and others.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use this to verify a planned UI tweak did what you expected' and provides concrete examples. It implies a workflow with wpf_snapshot but does not explicitly mention when not to use it or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_evaluate_bindingA
Explain WHY a property has its current value — the go-to tool for 'why is X empty/wrong/disabled?'. Reports the value source (Local, Style, Binding, Inherited, Default, ...), the effective value, and whether it's animated/coerced. When the value comes from a binding, it also resolves the binding path hop-by-hop against the source (DataContext / ElementName / RelativeSource / Source) and reports each segment's value and type, pinpointing exactly where a broken binding fails (e.g. a null intermediate, or a misspelled property that doesn't exist on the DataContext type). Complements wpf_get_bindings (which lists bindings) by actually evaluating one.
| Name | Required | Description | Default |
|---|---|---|---|
| property_name | Yes | ||
| element_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral transparency. It details what the tool reports: value source, effective value, animation/coercion status, and for bindings, a hop-by-hop path resolution. It does not mention side effects, permissions, or error handling, but the disclosed behavior is sufficient for an agent to understand the tool's operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is several sentences but each sentence adds value: first states purpose, then details output, then differentiates from sibling. It is well-structured and front-loaded. Could be slightly more concise, but no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and two parameters with 0% schema coverage, the description provides substantial context about what the tool returns and its diagnostic role. It does not cover return format or error scenarios, but the level of detail is adequate for a diagnostic tool in a rich sibling set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% (no descriptions in the input schema), so the description must add meaning. While the tool name and description imply that 'element_handle' identifies the UI element and 'property_name' the property, it does not explicitly describe their types, formats, or constraints. The context helps, but explicit parameter explanations would improve clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: explain why a property has its current value. It specifies the resource (a property) and the action (evaluate binding). It directly distinguishes itself from sibling tool 'wpf_get_bindings' by noting that it evaluates one binding while the other lists them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: it is the 'go-to tool for why is X empty/wrong/disabled?' and states it complements 'wpf_get_bindings' by evaluating a specific binding. It provides clear context on when to invoke it versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_explain_triggersA
Explain an element's triggers and where a value comes from — for 'why doesn't this trigger fire?' and 'which style/setter set this value?'. Lists the element's Style triggers (walking BasedOn) AND its ControlTemplate triggers (where most visual-state triggers live, e.g. IsMouseOver/IsEnabled on a Button), each EVALUATED against the current state: the condition (property=expected), the property's CURRENT value, whether it matches, whether the trigger is active, and the setters it applies. This tells you a trigger isn't firing because its condition property currently holds a different value. Pass property_name to also attribute that property's effective value to its source: a specific style setter (which style, which setter) or an active trigger (which condition), or local/inherited/default.
| Name | Required | Description | Default |
|---|---|---|---|
| property_name | No | ||
| element_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully covers behavioral aspects: it lists triggers, evaluates conditions, shows current values, match status, active status, and setters. It also explains the optional property_name parameter for value attribution. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is detailed but each sentence adds value. It is front-loaded with the primary purpose and use cases. Minor redundancy could be trimmed, but overall it is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and only two parameters, the description is complete: it explains both parameters, the output (list of triggers with evaluation), and the optional behavior when property_name is provided. It covers all necessary information for an AI agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description adds meaning: element_handle is implied as the target element, and property_name is explained as 'attribute that property's effective value to its source'. This compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it explains triggers and value sources for WPF elements, with specific use cases like 'why doesn't this trigger fire?' and 'which style/setter set this value?'. It distinguishes itself from sibling tools by focusing on trigger evaluation and property attribution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear use cases for when to use this tool, such as debugging trigger firing and identifying value sources. However, it does not explicitly mention when not to use it or compare it to alternatives like wpf_get_styles or wpf_get_element_properties.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_export_treeC
Export visual tree to XAML or JSON
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | json | |
| element_handle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No behavioral traits disclosed beyond the action. No annotations provided, so description should cover safety, auth, or side effects, but it does not. Unclear if operation is read-only or modifies state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely short (one sentence) but omits critical details. Not effectively concise; would benefit from clarifying parameters and output format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Very incomplete. No output schema, no parameter documentation, no annotations. Agent lacks information to invoke tool correctly (valid format values, element_handle usage, return format).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%. Description does not explain the format parameter's valid values (only suggests XAML/JSON) or the element_handle parameter's purpose (e.g., root element handle). No default values clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (Export) and resource (visual tree) with format options (XAML or JSON). It distinguishes from sibling tool wpf_get_visual_tree by implying file/string output, but could specify whether output is to file or returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like wpf_get_visual_tree. No context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_find_elementsA
Query elements across all open windows. Filters combine with AND: type_name (partial match, e.g. 'Button' matches 'System.Windows.Controls.Button'), element_name (x:Name substring), text (visible text content — matches a Button's caption, TextBlock text, Window title, AutomationProperties.Name, ToolTip; case-insensitive substring), property_filter (object of property name → expected value substring, e.g. {"IsEnabled": "True"}), visible_only (exclude collapsed/hidden elements — recommended when looking for something the user can see). PREFER text over dumping the tree: e.g. text='Save' + type_name='Button' finds the Save button directly. Results include text, automationId, isVisible, isEnabled and screenBounds (device pixels) so you can pick the right element without extra calls. Returns up to max_results (default 50).
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| type_name | No | ||
| max_results | No | ||
| root_handle | No | ||
| element_name | No | ||
| visible_only | No | ||
| property_filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explains filter combination (AND), text matching behavior (case-insensitive substring), property_filter format, visible_only recommendation, and result fields. It does not mention side effects or error handling, but for a read-only query tool, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but front-loaded with the core purpose. It efficiently packs filter behavior, result fields, and a recommendation. Minor redundancy, but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, no output schema, and no annotations, the description is fairly complete covering filter behavior, result fields, and a recommendation. Missing root_handle parameter and potential error conditions, but overall adequate for the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must explain parameters. It covers 6 of 7 parameters (missing root_handle) with useful details like text being visible content, property_filter structure. The missing root_handle is a gap, but overall adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool queries elements across all open windows, with filtering details. However, it does not explicitly distinguish from the sibling 'wpf_find_elements_deep' or other tree tools, though it offers a usage preference note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an example and a preference for using 'text' over dumping the tree, but lacks explicit when-to-use or when-not-to-use guidance relative to alternatives like wpf_find_elements_deep. The guidance is implicit and incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_find_elements_deepA
Deep search for ALL elements matching criteria (no result limit). Requires at least type_name, element_name or text to avoid returning the entire tree. Same filters as wpf_find_elements: type_name (partial match), element_name (x:Name substring), text (visible text content), property_filter, visible_only. Use root_handle to limit scope.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| type_name | No | ||
| root_handle | No | ||
| element_name | No | ||
| visible_only | No | ||
| property_filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behaviors: no result limit, requirement for at least one filter, and scoping via root_handle. It does not cover return format or performance implications, but the main behavioral aspects are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two sentences that front-load the purpose and requirement, then list filters and scoping. Every sentence adds value, and there is no extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters and no output schema, the description adequately covers input constraints but misses important context: it does not describe the return format (list of elements) or any error conditions. The word 'deep' is used but not defined. These gaps reduce completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains 5 of 6 parameters (type_name, element_name, text, visible_only, root_handle) with matching semantics. However, 'property_filter' is mentioned but not explained, which is a minor gap. Overall, the description adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a deep search for all matching elements with no result limit. It distinguishes itself from the sibling 'wpf_find_elements' by specifying 'no result limit' and indicating the same filters, making the purpose and differentiation explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage constraints: requires at least one of type_name, element_name, or text to avoid returning the entire tree. It also mentions using root_handle to limit scope. However, it does not explicitly state when to use an alternative tool (e.g., wpf_find_elements for limited results), though the differentiation is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_get_binding_errorsA
List all binding errors captured since application start. Errors are detected via WPF trace listener. Use wpf_clear_binding_errors to reset the list.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
In absence of annotations, description notes detection via WPF trace listener but does not cover behavior like empty list or performance. Adequate for a simple read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences: first states purpose and scope, second provides guidance. No extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description covers purpose, detection method, and related tool. Complete for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; schema coverage is trivially 100%. Baseline 4 for 0-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all binding errors captured since application start' with a specific verb (list) and resource (binding errors), and distinguishes from sibling wpf_clear_binding_errors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit alternative tool for resetting (wpf_clear_binding_errors) but lacks broader guidance on when to use this vs other get tools like wpf_get_bindings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_get_bindingsB
Get all data bindings for an element with their status
| Name | Required | Description | Default |
|---|---|---|---|
| element_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It implies a read operation and mentions 'status', but lacks details on output format, potential size, or performance impact. Not contradictory but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence conveying the core functionality with no waste; front-loaded information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-param tool with no output schema or annotations, the description tells what it does but not what the output looks like or how to use the parameter, leaving gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'element_handle' is not described in the schema (0% coverage) and the description does not explain how to obtain or format it, leaving ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'get', the resource 'data bindings', and specifies 'for an element' and 'with their status', distinguishing it from siblings like wpf_get_binding_errors and wpf_get_data_context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, prerequisites (e.g., element must exist), or conditions under which it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_get_data_contextA
Get the DataContext for an element, including type info, properties, INPC status, and inheritance chain up the visual tree. Essential for diagnosing binding path errors.
| Name | Required | Description | Default |
|---|---|---|---|
| element_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It transparently describes what the tool returns (DataContext with type info, properties, INPC status, inheritance chain). It does not mention side effects, but as a read-only diagnostic tool, that is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy. The first sentence front-loads the action and output, the second adds practical context. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter, no output schema, and no annotations, the description is fairly complete: it specifies what is included and why. It could mention that the element must be in the visual tree, but overall it covers essentials.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, requiring description to compensate. The description implies element_handle identifies an element but does not explicitly define the parameter. Context helps, but explicit description is lacking.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the DataContext for an element, listing included data (type info, properties, INPC status, inheritance chain) and its use case (diagnosing binding path errors). This distinguishes it from siblings like wpf_get_bindings and wpf_get_visual_tree.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states it is 'essential for diagnosing binding path errors,' providing a clear use case. However, it does not specify when not to use this tool or mention alternatives, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_get_element_propertiesC
Get all dependency properties of a UI element
| Name | Required | Description | Default |
|---|---|---|---|
| element_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavior. It does not state that this is a read-only operation or what 'all dependency properties' entails (e.g., attached properties, inherited values). The lack of detail leaves the agent uncertain about side effects or scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at one sentence, but it is underspecified rather than efficiently informative. It earns its place but fails to add necessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description should still provide enough to use it correctly. It is incomplete because it omits parameter guidance and return value expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the single required parameter 'element_handle'. The description does not explain what a valid handle is, how to obtain it, or its expected format. This is a critical gap for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get all dependency properties of a UI element', which is a clear verb+resource pair. However, it does not differentiate from sibling tools like 'wpf_get_bindings' or 'wpf_get_data_context', which may cause confusion about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, such as needing to attach to a WPF application first, or when other property-related tools might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_get_layout_infoC
Get layout information (ActualWidth, ActualHeight, Margin, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| element_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read-only operation ('Get'), but with no annotations and no explicit statement about side effects, permissions, or state requirements, it fails to clarify behavioral traits. A simple read-only hint is absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise but lacks structure (no sections for usage, parameters, or output). While not verbose, it sacrifices completeness for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, no output schema, and many sibling tools, the description is insufficient. It does not explain what 'layout information' includes beyond examples, nor does it clarify that the output is likely a dictionary of properties. The agent would struggle to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the only parameter (element_handle), and the tool description does not add any meaning to what this parameter represents or how to obtain it. The parameter is completely opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: retrieving layout information (ActualWidth, ActualHeight, Margin, etc.) for a WPF element. The verb 'Get' and the specific properties differentiate it from sibling tools like wpf_get_element_properties, though it doesn't explicitly contrast them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like wpf_get_element_properties or wpf_get_data_context. There are no examples or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_get_resourcesC
Enumerate resource dictionaries and their contents
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | application | |
| element_handle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose side effects and behavior. It only states enumeration, lacking details on whether this is read-only, impacts state, or what happens with different scope values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence without fluff, but it omits critical details, making it under-specified rather than optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two parameters, no output schema, and a complex domain (WPF resources), the description is incomplete. It does not explain return values, parameter roles, or usage scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and description fails to explain the two parameters ('scope' and 'element_handle'). Their purpose, allowed values, and defaults are not clarified, providing no additional meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Enumerate resource dictionaries and their contents' clearly states the action and resource, distinguishing it from sibling tools like wpf_get_styles which focus on specific resource types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like wpf_get_styles or wpf_get_bindings. The description does not mention context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_get_stylesC
Get applied styles and templates for an element
| Name | Required | Description | Default |
|---|---|---|---|
| element_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavioral traits. It only states the action without mentioning side effects, data freshness, or requirements, leaving significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise but overly sparse; it states purpose adequately but omits necessary details, making it minimally acceptable in structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and simple parameters, the description should explain return value or style format. It provides no such context, making it incomplete for effective tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description adds no meaning to the single parameter 'element_handle' beyond the schema, failing to explain its format or scope.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Get', resource 'applied styles and templates', and target 'element', distinguishing it from sibling get tools like get_bindings or get_element_properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, nor any prerequisites or limitations. The description is silent on usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_get_visual_treeA
Get the visual tree hierarchy. Use root_handle to start from a specific element (from wpf_find_elements). Use max_depth to control depth (1-100, default 25). For deep UIs like AvalonDock, increase max_depth or use root_handle to zoom into a subtree.
| Name | Required | Description | Default |
|---|---|---|---|
| max_depth | No | ||
| root_handle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as read-only nature, authorization needs, or side effects. Since it's a 'get' operation, it likely does not modify state, but this is not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, no redundant words, and the purpose is front-loaded. Each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is present, and the description does not explain the return format. Behavioral details are missing, but for a simple hierarchical retrieval, the description is minimally viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to both parameters beyond the schema: root_handle is linked to wpf_find_elements, and max_depth has a suggested range (1-100) with a default of 25. Schema coverage is 0%, so the description compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the visual tree hierarchy' with a specific verb and resource. It distinguishes itself from sibling tools by referencing 'root_handle to start from a specific element (from wpf_find_elements)', indicating its unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on using root_handle and max_depth parameters, including a tip for deep UIs like AvalonDock. It does not explicitly mention when not to use or alternatives, but the context is sufficient for typical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_highlight_elementC
Visually highlight an element in the running application
| Name | Required | Description | Default |
|---|---|---|---|
| duration_ms | No | ||
| element_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only states the basic action without any behavioral details. It does not mention that the highlight is temporary, that duration_ms controls the time, or any other effects. With no annotations, this leaves the agent guessing about the tool's side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and to the point, but it lacks structure. It is a single sentence without breaking down purpose, parameters, or behavior. While concise, it sacrifices clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is incomplete for an agent to use confidently. It lacks information about the preconditions (element must exist), the effect on UI state, and how the duration works. With no annotations or output schema, the description carries full responsibility for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention or explain any parameters. With 0% schema coverage, the agent has no information about 'element_handle' or 'duration_ms' beyond their types. The description should have clarified these.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'highlight' and resource 'element', making the purpose clear. While it doesn't explicitly distinguish from siblings, the action is unique among the listed tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines provided. The description does not indicate when to use this tool versus other element-related tools like wpf_click_element or wpf_find_elements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_list_processesA
List all running WPF applications available for inspection
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only states basic listing without disclosing details like output format, performance implications, or safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, concise and front-loaded with verb and resource, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description covers the basic purpose but omits output format or how it integrates with sibling tools. Given no output schema, more detail on return value would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema coverage is trivially 100%. Description adds no parameter info beyond schema, but none is needed. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'list' and resource 'running WPF applications', distinguishing it from sibling tools that perform actions like attaching or clicking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use vs alternatives, but the purpose implies usage before attaching or inspecting applications. Lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_revert_propertyA
Undo live property edits made with wpf_set_property. By default reverts the most recent edit; pass element_handle and/or property_name to target a specific one, or all=true to undo every pending edit. Restores whatever held the property before (a binding, a local value, or nothing — falling back to style/inherited/default). Returns how many were reverted and how many edits remain pending.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | ||
| property_name | No | ||
| element_handle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it restores the previous property value (binding, local, or fallback) and returns counts of reverted and pending edits. No annotations exist, so description carries full burden; it provides sufficient behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences efficiently convey purpose, options, and behavior without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers return values and fallback behavior, making it complete for understanding tool effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description adds meaning to all three parameters (all, property_name, element_handle) beyond the schema's type/default definitions, explaining their roles in targeting and scope.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it undoes live property edits made with wpf_set_property, distinguishing it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains default revert of most recent edit, options to target specific edits via element_handle and property_name, and all=true for bulk revert. While clear, it does not explicitly state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_select_itemA
Select an item in a ComboBox, ListBox, ListView or TabControl by visible text (item_text, case-insensitive substring) or zero-based index. PREFER this over clicking for dropdowns/lists: it works even when items are virtualized (not yet in the visual tree) and raises proper selection events. On failure the error lists the available items. STATE-CHANGING.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | ||
| item_text | No | ||
| element_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses that it is state-changing ('STATE-CHANGING') and describes failure behavior (lists available items). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise with no wasted words. Front-loads purpose, then adds guidelines and behavioral notes. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers control types, selection methods, preference over clicking, virtualized items, selection events, error behavior, and state-changing. Complete for a selection tool without output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. Description adds meaning: explains item_text as visible text with case-insensitive substring matching, index as zero-based. Adds value beyond bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it selects an item in ComboBox, ListBox, ListView, or TabControl by visible text or zero-based index. Distinguishes from sibling tools like wpf_click_element by noting it works with virtualized items and raises proper selection events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'PREFER this over clicking for dropdowns/lists' and explains why. Does not explicitly state when not to use it or name alternatives, but the preference guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_send_keysA
Send a keyboard shortcut / key combination to a WPF element (or to whatever currently has keyboard focus, when element_handle is omitted). Examples: 'Ctrl+S', 'Ctrl+Shift+F', 'Enter', 'Escape', 'F5', 'Alt+F4', 'Win+R'. Modifiers: Ctrl, Shift, Alt, Win. Keys: A-Z, 0-9, F1-F12, Enter, Esc, Tab, Space, Backspace, Delete, Insert, Home, End, PageUp, PageDown, Up, Down, Left, Right. Uses OS keyboard input - brings the target window to the foreground. STATE-CHANGING.
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes | ||
| element_handle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden and discloses key behavioral traits: uses OS keyboard input, brings target window to foreground, and is state-changing. This warns the agent about side effects. It does not cover rate limits or error conditions, but for a keystroke tool, the disclosed behaviors are sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph but well-structured: action statement, examples, modifier/key lists, and behavioral note. Every sentence adds value; no redundancy. Perfectly concise for the information conveyed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no real complexity (2 simple params), the description covers all necessary aspects: what keys are accepted, how to target an element, and side effects. Missing return value info is acceptable for a void-action tool. Adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so description must compensate. It explains the 'keys' parameter with examples and valid values, and clarifies that element_handle defaults to current focus. This adds significant meaning beyond the schema's type-only definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action ('Send a keyboard shortcut') and the target ('to a WPF element or to whatever currently has keyboard focus'). It provides specific examples and lists valid modifiers and keys, leaving no ambiguity. No sibling tool performs key sending, so it is well-differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explains that element_handle is optional and that without it, keys go to the focused element. Examples illustrate common keyboard shortcuts. However, it does not explicitly state when to prefer this tool over alternatives like wpf_set_text (for typing text) or when not to use it (e.g., for non-WPF elements requiring different automation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_set_propertyA
Live-edit a dependency property on an element at runtime, to test whether a planned UI change is effective without rebuilding. The value is a string converted to the property's type: e.g. property_name='Margin' value='20,0,20,0', property_name='Visibility' value='Collapsed', property_name='Background' value='Red' (or '#FF0000'), property_name='Width' value='300', value='{null}' for null. Returns the coerced value read back and what previously held the property (Binding/Local/Unset). Setting a data-bound property replaces the binding with a local value; wpf_revert_property restores it. Pair with wpf_capture_screenshot to see the effect, then revert. STATE-CHANGING (reversible via wpf_revert_property).
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| property_name | Yes | ||
| element_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool is state-changing, reversible, replaces bindings with local values, and returns coerced value and previous source. It does not mention potential side effects or permissions, but coverage is strong for a testing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, followed by examples and behavioral notes. It contains some redundancy (e.g., repeated 'e.g.') but every sentence adds value. Slightly long but well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 3 string params and no output schema, the description is exceptionally complete: it covers purpose, usage, parameter details, side effects, return value, and related tools. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates fully by explaining each parameter through examples and specifying that value is a string converted to the property's type, including syntax for null and various types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it live-edits a dependency property at runtime for testing UI changes. It provides specific examples and distinguishes from siblings by mentioning pairing with wpf_capture_screenshot and wpf_revert_property.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the tool is for testing UI changes without rebuilding, suggests pairing with screenshot and revert, and gives usage examples. However, it does not explicitly state when not to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_set_textA
Set the text/value of a UI element (TextBox, ComboBox, etc.). By default uses UI Automation IValueProvider.SetValue (clean, no focus needed, raises proper events). Falls back to setting TextBox.Text or PasswordBox.Password directly, or a reflected string 'Text' property. Set physical=true to focus the element and type via OS keyboard input (clears existing text with Ctrl+A/Delete first, then types each character; moves window focus). STATE-CHANGING.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| physical | No | ||
| element_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and details behavioral traits: default uses IValueProvider.SetValue (clean, no focus, raises events), fallback to direct property setting, and physical mode's focus, clear, and type behavior. It also declares 'STATE-CHANGING.' Missing details on potential side effects or error conditions, but sufficiently transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense and front-loaded with the primary purpose. It efficiently covers default behavior, fallbacks, and the physical mode in a readable structure. Some minor redundancy could be trimmed, but overall concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a text-setting tool with no output schema, the description covers the main behaviors, fallback mechanism, and physical typing mode. It does not explain return values or error handling, but given the tool's expected behavior, it provides enough context for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the 'text' parameter as the value to set, 'physical' as a boolean for OS keyboard input, and 'element_handle' by context as the target element. While element_handle is not explicitly defined, the purpose is clear. The description adds meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sets text/value of UI elements like TextBox and ComboBox, naming the primary method (IValueProvider.SetValue) and fallbacks. It distinguishes itself from sibling tools focusing on clicking, selecting, or sending keys.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the default mode vs physical=true (focused typing), providing clear context for choosing between them. However, it does not explicitly contrast with sibling tools like wpf_send_keys or wpf_set_property, leaving some ambiguity about when to prefer this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_snapshotA
Capture a snapshot of an element's subtree (layout metrics, visibility, alignment, brushes, text) and store it under a label, to diff later with wpf_diff. Workflow: wpf_snapshot(label='before') → make a change (e.g. wpf_set_property) → wpf_snapshot(label='after') → wpf_diff('before','after') to see exactly what moved. element_handle sets the subtree root (omit for the whole main window); max_depth default 25. Returns the label and how many elements were captured.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| max_depth | No | ||
| element_handle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses what data is captured (layout metrics, etc.) and the workflow. It does not detail whether the snapshot is deep or shallow, whether overwriting a label is allowed, or any side effects. It is decent but could be more explicit about safety (e.g., it's read-only).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using three sentences. The first sentence states the core purpose, the second gives workflow context, and the third clarifies parameters. No redundant or filler words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Considering the tool has 3 parameters and no output schema, the description covers the workflow, parameter usage, and return (label and count). It is missing details about label uniqueness and persistence, but overall it provides sufficient context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It explains each parameter: label is for storing, max_depth default 25, element_handle sets subtree root or whole window. This adds meaningful context beyond the schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'capture a snapshot' and specifies the resource: an element's subtree with details about what is captured (layout metrics, visibility, alignment, brushes, text). It distinguishes itself from the sibling tool wpf_diff, which compares snapshots, by explaining its role in the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool: in a workflow with wpf_snapshot before and after a change, followed by wpf_diff. It explains that element_handle sets the subtree root and max_depth defaults to 25. However, it does not mention when not to use it or alternatives beyond wpf_diff.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_wait_for_elementA
Wait until an element matching the criteria satisfies a condition, polling in the target app so you don't have to sleep-and-retry. Identify the element with type_name, element_name and/or text (same matching as wpf_find_elements). condition: 'visible' (default — element exists and is on screen), 'exists' (in the tree even if not visible), 'enabled' (visible and IsEnabled=true), 'hidden' (no matching visible element — e.g. a spinner disappeared). Returns matched (bool), waited_ms, and matched_handle/element_type when found. Use after a click that triggers async work (dialog opens, spinner clears, button enables) before the next step. timeout_ms default 10000 (max 25000); poll_interval_ms default 250.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| condition | No | visible | |
| type_name | No | ||
| timeout_ms | No | ||
| root_handle | No | ||
| element_name | No | ||
| poll_interval_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses polling mechanism, condition options, return values (matched bool, waited_ms, matched_handle), and default limits (timeout 10000ms, max 25000ms, poll interval 250ms). Lacks detail on error handling or edge cases like timeout result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with about 5 sentences that are front-loaded with purpose. Each sentence adds value, though a slight restructuring could improve clarity. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (polling, multiple conditions, async usage), the description covers usage context, condition semantics, return fields, and defaults. It is nearly complete for typical agent usage, though it could detail the root_handle parameter and timeout behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the matching parameters (type_name, element_name, text) and condition options, timeout_ms default and max, poll_interval_ms default. It omits explanation for root_handle, but overall adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: waiting for an element to satisfy a condition via polling. It specifies the verb 'wait' and the resource 'element matching criteria', and distinguishes it from sibling tools like wpf_find_elements by emphasizing the polling behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use after a click that triggers async work (dialog opens, spinner clears, button enables) before the next step.' It explains each condition and its typical scenario, but does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wpf_watch_propertyC
Monitor a property for changes
| Name | Required | Description | Default |
|---|---|---|---|
| property_name | Yes | ||
| element_handle | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully disclose behavior. It only says 'Monitor a property for changes' without stating if it blocks, returns immediately, is continuous, or has side effects. This is insufficient for an agent to predict tool impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise at 4 words, but at the expense of critical information. Conciseness should not sacrifice completeness; this is under-specification, not efficient brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and only two bare parameters, the description is severely incomplete. A tool that monitors properties requires details on return format, duration, error handling, and interaction with the UI thread—none provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description should add meaning to parameters. Neither 'property_name' nor 'element_handle' are explained beyond their names. No hints on format, constraints, or relationship between parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses verb 'Monitor' and resource 'property', indicating a watching function. However, 'monitor' is vague—does it set up a subscription, poll, or return on change? It distinguishes from siblings like 'wpf_get_element_properties' (snapshot) and 'wpf_set_property' (mutation), but the lack of specificity reduces clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like 'wpf_get_element_properties' for one-time retrieval or 'wpf_get_bindings' for binding info. The description does not explain context, prerequisites, or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
2 tool updates
v0.12.0- Added
wpf_evaluate_binding - Added
wpf_explain_triggers
2 tool updates
v0.10.0- Added
wpf_diff - Added
wpf_snapshot
24 tool updates
v0.1.0- First observed
wpf_attach - First observed
wpf_capture_screenshot - First observed
wpf_clear_binding_errors - First observed
wpf_click_element - First observed
wpf_export_tree - First observed
wpf_find_elements - First observed
wpf_find_elements_deep - First observed
wpf_get_binding_errors - First observed
wpf_get_bindings - First observed
wpf_get_data_context - First observed
wpf_get_element_properties - First observed
wpf_get_layout_info - First observed
wpf_get_resources - First observed
wpf_get_styles - First observed
wpf_get_visual_tree - First observed
wpf_highlight_element - First observed
wpf_list_processes - First observed
wpf_revert_property - First observed
wpf_select_item - First observed
wpf_send_keys - First observed
wpf_set_property - First observed
wpf_set_text - First observed
wpf_wait_for_element - First observed
wpf_watch_property
TDQS
Each tool has a clearly distinct purpose. Even similar tools like wpf_find_elements and wpf_find_elements_deep are differentiated by result limits. Descriptions specify exact behaviors and modes (e.g., screenshot modes, click types), leaving no ambiguity.
All tools follow a consistent 'wpf_verb_noun' pattern with snake_case. Verbs are imperative (click, set, get, list, find) and nouns describe the target (element, screenshot, property). No mixed conventions or irregular names.
26 tools is well-scoped for a comprehensive WPF debugging server. The set covers attachment, traversal, property inspection, live editing, screenshot, diff, and waiting, without being excessive or redundant.
The tool surface is exhaustive for WPF UI inspection and modification: attach, process list, find elements (shallow/deep), get properties/styles/bindings/datacontext/resources, edit live (set property, set text, revert), interact (click, select, send keys), capture screenshots, snapshot/diff, wait for elements, highlight, and watch properties and binding errors.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
Turns any agent into a full agentic application — branded, interactive screens generated at runtime.
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceDesktop UI automation for AI agents: screenshots, window management, mouse, keyboard, UI Automation tree, OCR. Single Windows x64 binary, no dependencies.-
- AlicenseNot gradedqualityCmaintenanceEnables AI coding agents to automate Windows desktop applications through semantic UI Automation instead of brittle coordinate clicks, with tools for discovering windows, finding controls by stable identifiers, and verifying actions.1MIT
- AlicenseBqualityBmaintenanceEnables AI coding agents to debug .NET applications with breakpoints, stepping, variable inspection, and GUI automation for WPF, WinForms, and Avalonia apps.1356MIT
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol server that gives AI assistants full control over native Windows applications — launch, inspect, click, type, screenshot, and test any WinUI3, WPF, WinForms, UWP, or Win32 app.9438MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/faze79/WPFVisualTreeMcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server