Skip to main content
Glama

WpfVisualTreeMcp

Build Release .NET License: MIT MCP Compatible

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.

Demo: an AI agent drives a WPF app and finds a binding bug

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)

  1. Download and extract the latest release zip (requires the .NET 8 Desktop Runtime).

  2. 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": []
        }
      }
    }
  3. 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 click

  • Set Text (new in v0.5.0) - Fill a TextBox/ComboBox/PasswordBox via UI Automation IValueProvider.SetValue, with a TextBox.Text / PasswordBox.Password / reflected-Text fallback, or physical=true to 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 input

  • Layout 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

Snoop

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

wpf_wait_for

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 (dnx/tool) + official MCP registry

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

dotnet tool install -g WpfVisualTreeMcp     # installs the `wpfinspect` command

The 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 server

Option 2: Download Release

Download the latest release from GitHub Releases:

  1. Download WpfVisualTreeMcp-vX.X.X-win-x64.zip

  2. Extract to a folder (e.g., C:\Tools\WpfVisualTreeMcp)

  3. 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 Release

Configuration

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.exe

You can verify the server was added:

claude mcp list

Option 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 .exe file

  • Use forward slashes (/) in paths on Windows

  • Build in Release mode for production: dotnet build -c Release

  • Restart 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": []
    }
  }
}

For your WPF application to be inspectable, add a reference to the Inspector DLL and initialize it on startup:

  1. Add a project reference to WpfVisualTreeMcp.Inspector

  2. In 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

wpf_list_processes

List all running WPF applications

wpf_attach

Attach to a WPF application (supports auto_inject for DLL injection)

wpf_get_visual_tree

Get the visual tree hierarchy (default depth: 25, max: 100)

wpf_get_element_properties

Get all dependency properties of an element

wpf_find_elements

Query elements by type, x:Name, visible text, property values and visibility; results include text, automation id, enabled/visible state and screen bounds

wpf_find_elements_deep

Same query filters without result limit, across all windows including adorners/popups

wpf_capture_screenshot

Capture a screenshot of the window or element (returns image); mode='screen' captures real on-screen pixels including open popups, dropdowns and context menus

wpf_get_bindings

Get data bindings for an element (includes MultiBinding, converter, StringFormat)

wpf_get_binding_errors

List all captured binding errors

wpf_clear_binding_errors

Clear the captured binding errors list

wpf_get_data_context

Get DataContext type, properties, INPC status, and inheritance chain

wpf_get_resources

Enumerate resource dictionaries

wpf_get_styles

Get applied styles and templates

wpf_watch_property

Monitor a property for changes

wpf_evaluate_binding

Explain why a property has its value — value source, and for bindings a hop-by-hop path resolution pinpointing where a broken binding fails

wpf_explain_triggers

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

wpf_snapshot

Capture an element subtree's state (layout, visibility, brushes, text) under a label

wpf_diff

Diff two snapshots — measure exactly what a change moved (property from→to, added/removed)

wpf_set_property

Live-edit a dependency property at runtime (type-converted), to test a change without rebuilding. State-changing, reversible.

wpf_revert_property

Undo wpf_set_property edits (one, filtered, or all) — restores the prior binding/value/default.

wpf_highlight_element

Visually highlight an element

wpf_click_element

Click a control — UI Automation invoke (Invoke/Toggle/Select/ExpandCollapse) by default, physical=true for a real OS mouse click (auto-scrolls into view), click_type='double'/'right' for double/right clicks. State-changing.

wpf_select_item

Select an item in a ComboBox/ListBox/ListView/TabControl by visible text or index — works with virtualized items. State-changing.

wpf_wait_for

Wait until an element is visible/exists/enabled/hidden, polling in the target app — no sleep-and-retry loops.

wpf_set_text

Set text/value of a TextBox/ComboBox/PasswordBox — UI Automation IValueProvider.SetValue by default, physical=true to type via OS keyboard input. State-changing.

wpf_send_keys

Send a keyboard shortcut (Ctrl+S, Alt+F4, F5, Enter, ...) to an element or the focused window. State-changing.

wpf_get_layout_info

Get layout information

wpf_export_tree

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 index

  • Double / 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 loops

  • Concurrent 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_recordwpf_export_test — record a driven workflow, export an xUnit + driver test

  • Inspector-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

  1. Clone the repository:

    git clone https://github.com/faze79/WpfVisualTreeMcp.git
    cd WpfVisualTreeMcp
  2. Open in Visual Studio 2022 or VS Code:

    code .
    # or
    start WpfVisualTreeMcp.sln
  3. Build and run tests:

    dotnet build
    dotnet test
  4. Run 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/                               # Documentation

Technical 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.cs routes via CliRunner.IsCliCommand)

Acknowledgments

License

This project is licensed under the MIT License - see the LICENSE file for details.

Available Tools

28 tools
wpf_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
process_idNo
auto_injectNo
process_nameNo

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNorender
max_widthNo
max_heightNo
element_handleNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
physicalNo
click_typeNo
element_handleYes

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
afterYes
beforeYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
property_nameYes
element_handleYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
property_nameNo
element_handleYes

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNojson
element_handleNo

TDQS

C2.3/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
textNo
type_nameNo
max_resultsNo
root_handleNo
element_nameNo
visible_onlyNo
property_filterNo

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNo
type_nameNo
root_handleNo
element_nameNo
visible_onlyNo
property_filterNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
element_handleYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
element_handleYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
element_handleYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.)

ParametersJSON Schema
NameRequiredDescriptionDefault
element_handleYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoapplication
element_handleNo

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
element_handleYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_depthNo
root_handleNo

TDQS

A3.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
duration_msNo
element_handleYes

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNo
property_nameNo
element_handleNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNo
item_textNo
element_handleYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keysYes
element_handleNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYes
property_nameYes
element_handleYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
physicalNo
element_handleYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNo
max_depthNo
element_handleNo

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNo
conditionNovisible
type_nameNo
timeout_msNo
root_handleNo
element_nameNo
poll_interval_msNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
property_nameYes
element_handleYes

TDQS

C2.2/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

  1. 2 tool updatesv0.12.0
    • Addedwpf_evaluate_binding
    • Addedwpf_explain_triggers
  2. 2 tool updatesv0.10.0
    • Addedwpf_diff
    • Addedwpf_snapshot
  3. 24 tool updatesv0.1.0
    • First observedwpf_attach
    • First observedwpf_capture_screenshot
    • First observedwpf_clear_binding_errors
    • First observedwpf_click_element
    • First observedwpf_export_tree
    • First observedwpf_find_elements
    • First observedwpf_find_elements_deep
    • First observedwpf_get_binding_errors
    • First observedwpf_get_bindings
    • First observedwpf_get_data_context
    • First observedwpf_get_element_properties
    • First observedwpf_get_layout_info
    • First observedwpf_get_resources
    • First observedwpf_get_styles
    • First observedwpf_get_visual_tree
    • First observedwpf_highlight_element
    • First observedwpf_list_processes
    • First observedwpf_revert_property
    • First observedwpf_select_item
    • First observedwpf_send_keys
    • First observedwpf_set_property
    • First observedwpf_set_text
    • First observedwpf_wait_for_element
    • First observedwpf_watch_property

TDQS

A3.7/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivitySlowing
ResponsivenessSyncing

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Desktop UI automation for AI agents: screenshots, window management, mouse, keyboard, UI Automation tree, OCR. Single Windows x64 binary, no dependencies.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    1
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI coding agents to debug .NET applications with breakpoints, stepping, variable inspection, and GUI automation for WPF, WinForms, and Avalonia apps.
    135
    6
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A 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.
    94
    38
    MIT

Latest Blog Posts

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