Skip to main content
Glama

qtpy-mcp

MCP server that lets an AI agent find, screenshot, GIF-record and drive Qt widgets in running applications and DCCs (Houdini, Blender, Maya, Nuke, ...), built on Qt.py so it works with PySide6, PyQt6, PySide2 and PyQt5.

It is a fork of 0xCarbon/qt-mcp (MIT OR Apache-2.0): same tool set, plus Qt.py, many-apps-at-once routing, semantic widget search and GIFs.

 "screenshot the PIPE-1234 window's docked Render Queue"      ┌────────────────────┐
 "now the widget labelled 'Name goes here:' in DEV-1515"  ──► │  Houdini  pid 4121 │ probe
 "record a GIF of Houdini process 1252151's 'Foo bar'"        ├────────────────────┤
        │                                                      │  Houdini  pid 1252 │ probe
   MCP client ──stdio──► qtpy-mcp ── registry + JSON-RPC ───► ├────────────────────┤
                         (routes)    (127.0.0.1, token)        │  Blender  pid 7770 │ probe
                                                               └────────────────────┘

What you can ask for

  • Find by meaning, not by ref: text, window title, class, objectName, placeholder, tooltip, whatsThis, statusTip, accessible name, tab text, dynamic properties, even style sheet. Fuzzy-ranked; each hit says which field matched.

  • Screenshot a whole window, a dialog, or any sub-widget such as a docked panel. A match on a label like Name goes here: captures the form around it (expand="auto"; also self, parent, buddy, window).

  • Record a GIF (qt_record_gif, or qt_record_start / qt_record_stop while you interact). The probe grabs frames with QWidget.grab() and Pillow encodes them, so it behaves the same on Windows, Linux and macOS: no ffmpeg or screen-capture APIs.

  • Many applications at once. Several Houdinis, Blender and Maya can be open together; one agent connection addresses any of them (see below).

  • Everything upstream provides: widget tree snapshots, properties, click / type / keys, menus, signals, layout checks, QGraphicsScene and VTK inspection.

Related MCP server: kwin-mcp

Install

Two pieces: the probe lives inside the Qt application; the server runs next to your MCP client.

# MCP client side (any Python 3.10+):
uvx qtpy-mcp                      # or: pip install qtpy-mcp

# Inside a DCC, whose Python already has a Qt binding: install without dependencies
hython -m pip install --no-deps qtpy-mcp Qt.py          # Houdini
<blender-python> -m pip install --no-deps qtpy-mcp Qt.py PySide6-Essentials   # Blender

Standalone apps can use an extra: pip install "qtpy-mcp[pyside6]" (or pyqt6, pyqt5, pyside2). Choose a binding with QT_PREFERRED_BINDING=PyQt6 (Qt.py's own variable).

MCP client config:

{ "mcpServers": { "qtpy": { "command": "uvx", "args": ["qtpy-mcp"] } } }

Put the probe in your app

from qtpy_mcp.probe import install

install(name="houdini")  # after the QApplication exists

or set QTPY_MCP_PROBE=1 in the environment before launching (no code change). Working examples: examples/houdini, examples/blender.

Talking to several apps

Every tool takes an optional instance. The server finds running apps through a per-user registry, so apps may start and stop at any time. A reference can be any of:

You say

instance

a window title or part of one

"PIPE-1234", "DEV-1515"

a process id

1252151, "1252151", "pid:1252151", "houdini-1252151"

an app name (if unique)

"blender"

the instance id

"houdini-1252151"

If a reference matches more than one app, the tool errors with the candidates (pid, name, window titles) rather than guessing. With one app running, instance can be omitted. qt_list_instances shows what is running; qt_find_anywhere searches every app for a description and names the owner of each hit; qt_select_instance sets a default.

Routing is covered by tests against fake probes, and against real separate Qt processes (tests/test_multiprocess.py).

Tools

Instances

qt_list_instances, qt_select_instance, qt_find_anywhere

Finding

qt_find_widget (semantic: describe, window_title, class_name, object_name, search_fields, min_score), qt_snapshot, qt_object_tree, qt_list_windows

Pictures

qt_screenshot (by ref or by description), qt_record_gif, qt_record_start, qt_record_stop, qt_vtk_screenshot

Driving

qt_click, qt_type, qt_key_press, qt_trigger_action, qt_set_property, qt_invoke_slot, qt_wait_for, qt_batch

Inspecting

qt_widget_details, qt_get_text, qt_menu_items, qt_active_popup, qt_signals, qt_layout_check, qt_thread_check, qt_messages, qt_scene_snapshot, qt_vtk_scene_info

Configuration

Variable

Meaning

QTPY_MCP_PROBE=1

auto-install the probe when a QApplication is created

QTPY_MCP_NAME

label for this instance (default: application name)

QTPY_MCP_PORT

fixed probe port (default: ephemeral); on the server side, connect to this one port and skip the registry

QTPY_MCP_HOST

host the server connects to in fixed-port mode

QTPY_MCP_TOKEN

shared secret instead of a random one

QTPY_MCP_REGISTRY_DIR

where instances register (default: per-user runtime dir)

QTPY_MCP_SCREENSHOT_MAX_WIDTH / _HEIGHT

cap screenshot size

QT_PREFERRED_BINDING

Qt.py: PySide6, PyQt6, PySide2, PyQt5

Security

The probe can click, type and call slots in the host application. It listens on 127.0.0.1 only, on an ephemeral port, and every request needs a per-process token kept in a registry file readable only by your user. See SECURITY.md.

Development

See CONTRIBUTING.md. Quality gates in CI: ruff, mypy --strict, tests on PySide6 / PyQt6 / PyQt5 (Linux, Windows, macOS), a Blender smoke test, build checks and pip-audit. Pushing a vX.Y.Z tag publishes to PyPI.

License

MIT OR Apache-2.0, at your option (LICENSE-MIT, LICENSE-APACHE). Portions derive from qt-mcp; see NOTICE.

Available Tools

30 tools
qt_active_popupC

Check for active popup or modal dialog widgets.

NameRequiredDescriptionDefault
instanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/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 does not clarify whether this is read-only (implied by 'Check' but unstated), what counts as 'active', whether it blocks, or whether permissions are needed. For a tool with zero annotation coverage this is a substantial gap.

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?

A single tight sentence with no filler and the resource front-loaded. It is concise to the point of under-specification, but structure itself is clean.

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?

An output schema exists, so return values need not be explained, but the undocumented 'instance' parameter, absent annotations, and lack of usage context leave the definition too thin for reliable invocation.

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 single 'instance' parameter has 0% schema description coverage, and the description does not mention it at all, leaving its purpose (which instance to probe, defaulting to all?) completely undocumented.

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?

States a specific verb ('Check for') and a well-defined resource ('active popup or modal dialog widgets'), making the intent clear. It does not explicitly differentiate itself from nearby siblings like qt_list_windows or qt_messages, so it falls short of 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this versus alternatives, no prerequisites, and no mention of what to do with the result. Usage is only inferable from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_batchA

Execute multiple Qt operations in a single round trip.

Chains clicks, types, key presses, waits, snapshots, and reads into one server call — dramatically reduces latency compared to sequential tool calls.

Each step dict: method (str, required): RPC method — same names as probe methods: click, type_text, key_press, set_property, invoke_slot, get_text, trigger_action, wait_for, snapshot, find_widget, screenshot. Special: "wait" with params {"ms": N} sleeps N ms processing events. params (dict, optional): Parameters forwarded to the method. wait_ms (int, optional): Extra pause after the step (default 0).

Execution stops on the first error; partial results are returned. Screenshot steps return size only (not base64 data) — call qt_screenshot separately when you actually need the image.

Note: refs must be known before calling qt_batch — steps cannot reference results from earlier steps within the same batch. Use qt_find_widget first to obtain refs, then pass them into the batch call.

Example — click a button twice then read a label in one round trip: qt_batch([ {"method": "click", "params": {"ref": "w5"}}, {"method": "click", "params": {"ref": "w5"}}, {"method": "get_text", "params": {"ref": "w12"}}, ])

Example — type multi-line code into IPython console and wait for output: qt_batch([ {"method": "type_text", "params": {"ref": "w42", "text": "%run /tmp/x.py", "use_clipboard": true}}, {"method": "key_press", "params": {"key": "Return"}}, {"method": "wait", "params": {"ms": 3000}}, {"method": "snapshot", "params": {"max_depth": 4}}, ])

NameRequiredDescriptionDefault
stepsYes
instanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it discloses failure semantics ('execution stops on the first error; partial results are returned'), output truncation for screenshot steps (size only, not base64), the default for wait_ms, and the 'wait' special-case that processes events during sleep. The no-forward-reference constraint between steps is exactly the kind of non-obvious behavior an agent would otherwise discover by failing.

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?

Front-loaded with the one-line purpose, then a spec block, then caveats, then examples — good ordering with no filler. The two examples are long but demonstrate distinct non-obvious patterns (ref reuse and clipboard-based typing plus wait), so they mostly earn their space; the second could be trimmed slightly.

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?

An output schema exists, so return values needn't be described, and everything else an agent needs to call this correctly is present: sub-object schema, method vocabulary, error/partial-result behavior, prerequisite for refs, and the screenshot caveat. The only omission is the instance selector, which sibling qt_select_instance handles.

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% and the steps array is a free-form object with additionalProperties, so the schema documents nothing — the description compensates by fully specifying the sub-object keys (method required, params optional, wait_ms default 0) and enumerating valid method names plus the 'wait' special form. The remaining gap is the top-level 'instance' parameter, which is never mentioned.

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?

States a specific verb and resource — executing multiple Qt operations in one round trip — and immediately enumerates the step types it chains (clicks, types, key presses, waits, snapshots, reads). It explicitly distinguishes itself from siblings by naming qt_screenshot and qt_find_widget as the tools to use when you need the image or the refs.

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?

Gives the condition that selects this tool ('dramatically reduces latency compared to sequential tool calls') and the prerequisite that gates it ('refs must be known before calling qt_batch ... use qt_find_widget first'). It also routes the agent away to qt_screenshot when actual image data is needed, which is the classic misuse case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_clickB

Click a widget.

Args: ref: Widget ref from qt_snapshot. button: Mouse button - 'left', 'right', or 'middle'. modifiers: Keyboard modifiers - 'shift', 'ctrl', 'alt', 'meta'. position: [x, y] relative to widget top-left. Default: center.

NameRequiredDescriptionDefault
refYes
buttonNoleft
instanceNo
positionNo
modifiersNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, yet it only names the action. It says nothing about whether the click blocks until the event loop processes, what happens if the widget is not visible or not found, whether coordinates are scaled by DPI, or whether the operation is safe to repeat. For a UI-mutating tool this is a meaningful gap.

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 one-line purpose is front-loaded and the arg list is terse with no filler. Every line carries information; only the missing instance entry counts against it.

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?

An output schema exists, so return values need not be explained, and four of five parameters are covered. Still missing are the 'instance' parameter's purpose and any note on failure behavior or post-click verification, which matter for an automation click in a multi-instance Qt environment.

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%, so the description must compensate, and it does substantially: it supplies the accepted button values ('left', 'right', 'middle'), the accepted modifier names, the meaning of position as widget-relative [x, y], and the default of center (which the schema does not express). However, the 'instance' parameter is entirely undocumented, leaving one of five params with no semantics anywhere.

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?

States a specific verb and resource ("Click a widget"), which is immediately actionable and distinguishable from siblings like qt_type or qt_key_press. It does not, however, differentiate itself from qt_trigger_action or qt_invoke_slot, which are plausible alternatives for activating a widget.

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 note that ref comes "from qt_snapshot" implies a prerequisite workflow (snapshot, then click), which is useful implied guidance. There is no explicit when-to-use vs. when-not-to-use guidance and no mention of alternatives such as qt_trigger_action for non-mouse activation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_find_anywhereA

Semantic widget search across ALL running Qt apps at once.

Use when you do not know which app has the widget. Each hit names its instance; pass that id as instance to qt_screenshot, qt_click, ... together with the ref.

NameRequiredDescriptionDefault
describeNo
min_scoreNo
class_nameNo
max_resultsNo
object_nameNo
visible_onlyNo
window_titleNo
search_fieldsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose the cross-process scope and part of the hit payload (instance name + ref), but says nothing about cost/latency of scanning every app, what happens on zero hits, or how the min_score threshold changes behavior. Read-only intent is implied but never 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?

Three short lines, zero waste, with the cross-app scope and the when-to-use condition front-loaded before the follow-up action. Nothing redundant relative to the structured fields.

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 output schema exists, so return values needn't be spelled out, and the description adequately covers the tool's identity and follow-up workflow. For an 8-parameter, zero-annotation search tool though, the filtering and scoring parameters an agent must set correctly are entirely unaddressed.

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?

Eight parameters with 0% schema description coverage, and the description explains essentially none of them — describe, min_score, class_name, object_name, max_results, visible_only and search_fields are all left to guesswork. Only the semantic nature of the query is hinted at; the `instance` reference discussed belongs to other tools, not this 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?

States a specific verb and resource ('Semantic widget search') plus explicit scope ('across ALL running Qt apps at once'), which implicitly separates it from the single-instance sibling qt_find_widget. An agent can tell which finder to reach for without opening a schema.

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?

'Use when you do not know which app has the widget' gives a clear selection condition, and the second sentence tells the agent what to do with a hit (pass the instance id to qt_screenshot, qt_click, ... with the ref). It never names qt_find_widget as the alternative for the known-app case, so the exclusion is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_find_widgetA

Search the widget tree for widgets matching criteria. Prefer over qt_snapshot.

Two modes. With describe and/or window_title it is a semantic search: describe is matched fuzzily (typos, punctuation and case ignored) against label/button text, group and dock titles, tooltip, what's-this, status tip, accessible name/description, objectName, placeholder, tab titles, dynamic properties, class name and style sheet; results are ranked with the reason each matched. Otherwise the plain substring filters below apply.

Registers found widgets in the ref registry — returned refs are immediately usable with qt_click, qt_type, qt_get_text, etc.

Args: pattern: Case-insensitive substring matched against class name, objectName, or text content (OR logic across fields). class_name: Exact class name, case-insensitive (e.g. 'QLineEdit', 'QPushButton', 'ControlWidget'). Must match the full class name, not a substring. object_name: Substring match on objectName. text: Substring match on widget text/label content. root_ref: Restrict search to subtree of this widget. visible_only: Only return visible widgets (default True). max_results: Cap on results returned (default 20). describe: Free-text description, e.g. 'Name goes here:' or 'save the profile'. window_title: Fuzzy match on the top-level window title (e.g. 'PIPE-1234'). search_fields: Limit describe to some of: text, title, placeholder, tooltip, whats_this, status_tip, accessible_name, accessible_description, object_name, window_title, tab_text, properties, class_name, style_sheet. min_score: Minimum semantic match score 0-1 (default 0.5).

At least one of pattern, class_name, object_name, text, describe or window_title must be provided.

NameRequiredDescriptionDefault
textNo
patternNo
describeNo
instanceNo
root_refNo
min_scoreNo
class_nameNo
max_resultsNo
object_nameNo
visible_onlyNo
window_titleNo
search_fieldsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and largely succeeds: it discloses the side effect that found widgets are registered in the ref registry and that returned refs are immediately usable with qt_click, qt_type, and qt_get_text. It also explains ranking output ('reason each matched'). It stops short of stating cost/performance characteristics or whether the registry entries expire, which would matter for a discovery 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?

Front-loaded with purpose and precedence, then the mode distinction, then a scannable Args block. The prose about which fields `describe` searches is dense but earns its place because it cannot be inferred from the schema, and no sentence is filler.

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?

An output schema exists, so return-shape explanation is not required, and the description still usefully notes that results come with match reasons. Modes, argument semantics, and the mutual-requirement are all covered; only the undocumented `instance` parameter leaves a gap an agent could trip on.

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%, so the Args block does substantial work: it defines every filter's matching semantics (substring vs. exact full class name vs. fuzzy) and the enum-like list of allowed search_fields values. However, the `instance` parameter appears in the schema and is never mentioned in the description at all, and it is the most ambiguous parameter (union of string/integer/null) — a real gap given zero schema-level documentation.

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?

States a specific verb and resource ('Search the widget tree for widgets matching criteria') and immediately distinguishes itself from the sibling qt_snapshot. The two-mode split (semantic via describe/window_title vs. substring filters) makes the tool's identity unambiguous before any schema is opened.

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 over qt_snapshot' and explains which argument combination selects semantic mode versus plain substring mode, plus the at-least-one-argument precondition. It does not, however, contrast against other plausible siblings such as qt_find_anywhere or qt_object_tree, so the routing guidance is clear but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_get_textB

Extract text content from a text editor or input widget.

Args: ref: Widget ref from qt_snapshot (e.g., 'w5').

Works with QPlainTextEdit, QTextEdit, QLineEdit, QLabel, QComboBox, and any widget with a text() or toPlainText() method.

NameRequiredDescriptionDefault
refYes
instanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. 'Extract' signals a non-mutating read, and the widget-coverage sentence is genuinely useful behavior context, but it says nothing about what happens for unsupported widgets (error vs empty string) or about focus/visibility requirements.

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?

Short, front-loaded, and the Args block plus compatibility sentence are each doing distinct work. The 'any widget with a text() or toPlainText() method' clause is slightly redundant with the enumerated list but still informative.

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?

An output schema exists, so return values need not be explained, and the ref origin is covered. However, an undocumented second parameter and no failure-mode guidance leave gaps for a tool that agents will call on arbitrary widgets.

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%, so the description must compensate. It does well for 'ref' — origin (qt_snapshot) and format example ('w5') — but the second parameter, 'instance', is never mentioned anywhere, leaving it fully undocumented.

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?

States a specific verb and resource ('Extract text content from a text editor or input widget') and lists the concrete widget types it covers, which is well beyond a tautology. It does not differentiate itself from nearby siblings like qt_widget_details, which could plausibly also surface text.

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?

Usage is only implied: the 'ref' note tells the agent to call qt_snapshot first, which establishes a workflow order. There is no explicit when-to-use versus qt_widget_details or when-not (e.g., non-text widgets), so the agent must infer routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_invoke_slotC

Invoke a slot or method on a QObject.

Args: ref: Widget ref from qt_snapshot. method_name: Slot/method name to invoke.

NameRequiredDescriptionDefault
refYes
instanceNo
method_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.8/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 carry the full behavioral burden. It says it invokes a slot or method but does not disclose side effects, whether the invocation can be destructive, permission requirements, or what happens if the method has arguments or fails.

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 short and front-loads the core action in the first sentence. The Args section is compact and easy to scan, with no unnecessary prose.

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 an arbitrary QObject method-invocation tool with no annotations and only 0% schema description coverage, the description is too thin. It omits the optional instance parameter, invocation argument behavior, and side-effect expectations, though the output schema reduces the need to explain return values.

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 description coverage is 0%, and the description only explains ref and method_name. The optional instance parameter is completely undocumented, and there is no detail on how method arguments are supplied despite this being an invocation tool.

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 a specific verb and resource: invoke a slot or method on a QObject. It is clear enough to distinguish from general property setters or signal readers, but it does not explicitly name or contrast with close siblings such as qt_trigger_action or qt_set_property.

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?

The only usage context is that ref comes from qt_snapshot. There is no guidance on when to choose this tool over qt_trigger_action, qt_set_property, or direct interaction tools, and no exclusions or prerequisites beyond the ref source.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_key_pressB

Send a key event to a widget or the focused widget.

Args: key: Key name (e.g., 'Return', 'Escape', 'Ctrl+S', 'a'). ref: Widget ref. If omitted, sends to the currently focused widget.

NameRequiredDescriptionDefault
keyYes
refNo
instanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/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 the full burden. It discloses the target-resolution rule and gives key-name examples, but says nothing about whether the event is synchronous, whether modifiers/hold-repeat are supported, or that arbitrary key events can destructively affect the app (e.g., Ctrl+Q). The output schema relieves it of return-value explanation.

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?

Front-loaded with the one-sentence purpose, followed by a compact args block. Every line carries information; the only waste is that the arg list duplicates the `key` name without formalizing the format.

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 that fires arbitrary key events, completeness would require stating that the target may need focus and that some keys are destructive. The undocumented `instance` parameter and absent annotation coverage leave gaps, though the existing output schema covers the return side.

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%, so the description must compensate. It does add real meaning for `key` (naming 'Return', 'Escape', 'Ctrl+S', 'a') and explains the `ref` default behavior, but the third parameter `instance` is never mentioned anywhere and the modifier syntax is only shown, not specified.

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?

States a specific verb and resource: 'Send a key event to a widget or the focused widget.' The target-resolution behavior (widget ref vs focused widget) is spelled out. It never distinguishes itself from the near-sibling qt_type, which an agent could plausibly confuse with it, so it stops short of 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: omit `ref` to send to the focused widget. There is no explicit guidance on when to choose key_press over qt_type, qt_click, or qt_trigger_action, and no mention of prerequisites such as the target widget needing focus.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_layout_checkB

Detect layout issues in the visible widget tree.

Scans all visible widgets and reports problems like:

  • zero_size: Visible widget with 0x0 geometry (collapsed)

  • no_layout: Container with visible children but no layout manager

  • smaller_than_hint: Widget smaller than its sizeHint (content likely clipped)

  • text_truncated: Text content wider than widget width

  • overlapping_siblings: Sibling widgets with intersecting geometries

NameRequiredDescriptionDefault
instanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. It discloses the scan scope, the non-mutating 'detect/report' behavior, and defines each reported issue category, though it does not explicitly state read-only safety or performance characteristics.

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 front-loaded with a clear one-line purpose, then uses a compact structured list to define issue categories. Every sentence and bullet 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 tool's behavior and output categories are reasonably covered, and an output schema exists so return values need not be explained. However, the single optional parameter is completely undocumented and there is no usage routing, leaving meaningful gaps for an agent selecting and invoking the tool.

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?

There is one optional 'instance' parameter with 0% schema description coverage, and the description never mentions it. It does not explain what 'instance' means, whether null selects all instances, or how string versus integer values are interpreted.

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 a specific verb and resource: detect layout issues in the visible widget tree. It further clarifies the tool's purpose by listing the exact issue categories it reports, but it does not explicitly distinguish itself from related inspection tools such as qt_object_tree or qt_widget_details.

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?

Usage is implied by the diagnostic nature of the tool and the issue list, but there is no explicit guidance on when to use this tool instead of alternatives. No exclusions, prerequisites, or sibling comparisons are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_list_instancesA

List running Qt apps that have the qtpy-mcp probe (Houdini, Blender, Maya, ...).

Shows each instance id, process, binding and visible window titles. Use the id with the instance argument of any tool, or with qt_select_instance.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. It discloses the key qualifier that only probe-instrumented apps appear (not every Qt process) and enumerates what is shown, but says nothing about read-only safety, whether it's a snapshot at call time, or what happens with zero results.

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 tight sentences with the core definition front-loaded and the follow-up guidance second. Every clause contributes; nothing is padding.

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?

An output schema exists, so the description needn't re-explain return values, and there are no parameters to document. For a simple discovery tool this is close to complete, with only the safety profile and empty-result behavior left unstated.

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 takes zero parameters, which is the baseline-4 case; there is nothing to disambiguate. The description correctly implies the tool is argument-free and that the id comes out of the result rather than going in.

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?

States a specific verb and resource: 'List running Qt apps that have the qtpy-mcp probe', with example targets (Houdini, Blender, Maya). It's clearly a discovery/listing tool, though it doesn't explicitly distinguish itself from the sibling qt_list_windows, which an agent could easily confuse it with.

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?

Gives actionable downstream guidance: use the returned id 'with the `instance` argument of any tool, or with qt_select_instance'. That establishes the role as the entry point to all other tools. It stops short of saying when NOT to use it (e.g. vs qt_list_windows) or what an empty result means.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_list_windowsC

List all top-level windows and their types.

NameRequiredDescriptionDefault
instanceNo
skip_hiddenNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description bears the full burden, but "List" implies a non-mutating read and "top-level" usefully scopes which windows are included (excluding children). It still says nothing about whether a specific Qt instance must be selected first, or that hidden windows are excluded by default, which is nontrivial behavior.

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?

A single short sentence with the capability front-loaded and no filler. It is efficient, though brevity here reflects under-specification rather than tight editing.

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?

An output schema covers return values and the tool is conceptually simple, but with zero annotation coverage and zero parameter documentation, the description leaves key calling decisions (default hidden-window filtering, instance targeting) entirely unresolved.

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 description coverage is 0% and two optional parameters exist: `instance` (string|integer|null) and `skip_hidden` (default true). The description mentions neither, so an agent cannot tell that results are filtered to visible windows by default or what `instance` selects.

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?

Names a specific verb and resource ("List all top-level windows") plus what is returned ("their types"), which separates it from tree-walking siblings like qt_object_tree or qt_active_popup. It does not explicitly name an alternative, but the resource is concrete enough that an agent can route to it without opening the schema.

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?

There is no statement of when to use this versus qt_list_instances, qt_object_tree, qt_active_popup, or qt_scene_snapshot, and no exclusions or prerequisites. The discovery use case is only inferable from the word "List".

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_menu_itemsC

Get actions from a QMenu widget.

Args: ref: Ref to a QMenu widget.

NameRequiredDescriptionDefault
refYes
instanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read operation by saying 'Get actions,' but does not disclose side effects, permissions, error behavior for non-QMenu refs, or how the optional instance affects execution.

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 short and front-loaded with the core action. The Args section is sparse but not wasteful, though it could be more structured for the undocumented instance parameter.

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 tool with no annotations and 0% schema description coverage, the description is incomplete: it does not explain the optional instance argument, ref acquisition, or behavioral expectations. The output schema covers return values, but invocation semantics remain under-specified.

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 description coverage is 0%, so the description must compensate. It only partially documents ref as a 'Ref to a QMenu widget' and does not explain the optional instance parameter at all.

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 a specific verb and resource: 'Get actions from a QMenu widget.' This clearly distinguishes the operation from generic widget inspection or action triggering, though it does not explicitly contrast with siblings like qt_trigger_action.

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?

It only says the ref must point to a QMenu widget. There is no guidance on when to use this tool versus alternatives such as qt_object_tree, qt_widget_details, or qt_trigger_action, and no prerequisites or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_messagesC

Returns all console messages

Args: level: Level of the console messages to return. Each level includes the messages of more severe levels. Defaults to "info".

NameRequiredDescriptionDefault
levelNoinfo
instanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that higher levels include more severe messages, but it does not state whether this is read-only, whether it has side effects, what happens with instance selection, or any operational constraints.

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 short and front-loaded with the return behavior. The level explanation is useful, though the literal 'Args:' formatting is slightly awkward and the text is too sparse rather than verbose.

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 output schema exists, so return values need less explanation. But with zero annotation coverage, an undocumented instance parameter, and no usage guidance, the description is not complete enough for reliable invocation.

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 description coverage is 0%, and the description only documents the level parameter. The instance parameter is completely absent from the description, leaving half of the input schema unexplained.

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 a clear verb and resource: it returns all console messages. It also mentions level filtering, so an agent can understand the tool’s core purpose. However, it does not distinguish this tool from the many sibling Qt inspection tools, so it stops short of 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives the default level but never says when to use this tool versus alternatives such as qt_signals, qt_thread_check, or other diagnostics-oriented siblings. There are no exclusions or routing cues.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_object_treeB

Get the full QObject parent-child tree (not just visible widgets).

Args: root_ref: Starting ref. Defaults to QApplication root. max_depth: Maximum traversal depth.

NameRequiredDescriptionDefault
instanceNo
root_refNo
max_depthNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries full behavioral burden. It does disclose meaningful traits — the traversal covers non-visible QObjects and is bounded by a depth limit — but says nothing about traversal cost, output size for large trees, or what happens when root_ref is unresolvable.

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?

One front-loaded sentence carrying the key distinction, followed by a compact args block. Minimal waste; the args block mainly restates schema fields but adds default values for two of them.

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?

An output schema exists, so return shape need not be described. However, with zero annotation coverage and zero schema description coverage on a 3-parameter tool, the missing 'instance' parameter documentation and absent caveats about large-tree traversal leave real 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?

Schema description coverage is 0%, so the description must compensate. It explains root_ref (default QApplication root) and max_depth (traversal bound), but leaves the 'instance' parameter — clearly significant given sibling tools qt_list_instances/qt_select_instance — completely undocumented in both schema and description.

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?

States a specific verb and resource: retrieving the full QObject parent-child tree. The parenthetical 'not just visible widgets' differentiates it from widget-oriented siblings like qt_find_widget and qt_widget_details, though it doesn't name those siblings explicitly.

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 'not just visible widgets' contrast implies when this tool is preferable to widget-listing tools, but there is no explicit when-to-use/when-not guidance and no sibling is named as an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_record_gifA

Record an animated GIF of a window or widget for duration seconds.

Identify the widget exactly like qt_screenshot (ref, or describe/window_title/ class_name/object_name; the active window if nothing is given). The app keeps running normally while recording; interact with it meanwhile via other tools or by hand. Works on Windows and Linux (frames come from Qt's own rendering, no screen capture needed). For longer or interleaved recordings use qt_record_start / qt_record_stop.

NameRequiredDescriptionDefault
fpsNo
refNo
indexNo
expandNoauto
describeNo
durationNo
instanceNo
max_widthNo
min_scoreNo
class_nameNo
object_nameNo
window_titleNo
search_fieldsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden, and it mostly does: the app keeps running while recording, you can interact concurrently, it works on Windows and Linux, and frames come from Qt's own rendering rather than screen capture. It does not say where the GIF is written or how large the output may be, but the output schema covers return values.

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?

Three sentences that are front-loaded. The scoping sentence comes first and the alternative-tool pointer comes last. The widget identification listing is a dense parenthetical but earns its place because it points the agent to the sibling's semantics.

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 13-parameter recording tool with an output schema and no annotations, the description conveys the recording semantics, the platform support and the target-identification rules. The gaps (fps, expand, max_width, min_score) are tuning knobs whose defaults are probably acceptable, but an agent still has to guess what they do.

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% across 13 parameters, so the description must compensate. It names and explains duration and the identification parameters (ref, describe, window_title, class_name, object_name), but leaves fps, index, expand, max_width, min_score, search_fields and instance unexplained, so it compensates only partly.

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 opens with a concrete verb+resource: 'Record an animated GIF of a window or widget for `duration` seconds.' It also distinguishes itself from the siblings qt_record_start/qt_record_stop for longer or interleaved recordings.

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?

It states exactly how to identify the target ('identify the widget exactly like qt_screenshot', defaulting to the active window) and names the alternative tools plus the condition that selects them. An agent does not need to infer when to use this rather than qt_record_start.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_record_startB

Start a background GIF recording; stop it later with qt_record_stop.

Returns a recording id that already names the app, so qt_record_stop needs no instance. Recording stops by itself after max_seconds.

NameRequiredDescriptionDefault
fpsNo
refNo
indexNo
expandNoauto
describeNo
instanceNo
max_widthNo
min_scoreNo
class_nameNo
max_secondsNo
object_nameNo
window_titleNo
search_fieldsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose useful traits: recording runs in the background, returns a recording id encoding the app, and auto-stops after max_seconds. It omits where the GIF is written, whether a second concurrent start is allowed, and what happens if the process ends before stop is called.

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 short sentences, front-loaded with the action and its companion tool, then the return value, then the auto-stop guard. Nothing is wasted.

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 13 parameters, zero schema descriptions, and no annotations, the brief lifecycle note is not enough to call the tool correctly — an agent cannot tell what the widget-selection parameters do or how they interact. The output schema covers the return value, so that gap is fine, but the input side is severely under-explained.

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?

13 parameters at 0% schema description coverage, and the description explicitly explains only max_seconds (and obliquely instance). fps, ref, index, expand, describe, max_width, min_score, class_name, object_name, window_title and search_fields are entirely undocumented in both places.

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?

States a specific verb and resource: 'Start a background GIF recording', with 'background' signaling the asynchronous variant. It names qt_record_stop as the terminator but never contrasts itself with the sibling qt_record_gif, leaving the start-vs-record_gif choice to inference.

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?

It clearly gives the lifecycle: call this, then qt_record_stop, and it self-terminates after max_seconds. However it never says when to pick this over qt_record_gif, nor any prerequisites about targeting an application instance before starting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_record_stopA

Stop a recording started with qt_record_start and return the GIF.

Args: recording_id: The id returned by qt_record_start (includes the app it belongs to).

NameRequiredDescriptionDefault
recording_idYes

Output Schema

NameRequiredDescription
resultYes

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 behavioral burden. It discloses that stopping returns a GIF, implying finalization, but it does not mention side effects such as what happens to the recording session, error behavior for invalid IDs, or whether stopping is destructive.

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 front-loaded with the core action and return value, followed by a concise argument note. Every sentence contributes directly to invocation.

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?

The tool is simple with one required parameter, and an output schema exists so return format details are not needed in the description. The description covers the action, prerequisite, and parameter origin adequately, though it could note error or edge-case 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?

Although schema description coverage is 0%, the description explains that recording_id is the identifier returned by qt_record_start and that it includes the associated app. This adds meaningful context beyond the bare string 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 uses a specific verb and resource ('Stop a recording') and explicitly ties it to the sibling tool 'qt_record_start', so an agent can distinguish it from related capture tools like qt_record_gif. It also names the returned artifact (GIF), clarifying the outcome.

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?

It clearly states the tool is for stopping a recording that was started with qt_record_start, giving the agent a prerequisite context. However, it does not explicitly mention alternatives or when not to use it (e.g., if no recording is active).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_scene_snapshotC

Get all items in a QGraphicsScene.

Args: ref: Ref to a QGraphicsView widget.

NameRequiredDescriptionDefault
refYes
instanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/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. 'Get all items' implies a read, but it does not explicitly state that it is non-mutating, whether it requires a GUI thread, or what limitations exist. An output schema exists, which covers return values, but the behavioral profile remains under-disclosed.

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?

Very short and front-loaded: the core purpose is the first sentence, with a brief Args block. No wasted prose, though the formatting is minimal.

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 output schema covers return values and the required parameter is explained, so the essentials are present for a simple read tool. However, the missing 'instance' documentation and lack of any usage or behavioral context leave gaps for an agent selecting among many Qt siblings.

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%, so the description must compensate. It does explain the required 'ref' parameter meaningfully as a reference to a QGraphicsView widget, which is useful beyond the bare schema, but the optional 'instance' parameter is not mentioned at all.

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?

States a specific verb and resource: 'Get all items in a QGraphicsScene.' The purpose is clear, but it does not differentiate from siblings like qt_snapshot, qt_object_tree, or qt_vtk_scene_info, which an agent must choose between.

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?

Provides no when-to-use guidance or alternatives. It never says when qt_scene_snapshot is preferable to qt_snapshot or qt_object_tree, so the agent must infer selection from tool names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_screenshotA

Take a screenshot of a window or any widget, identified by ref OR by description.

Identify the widget semantically instead of by ref, e.g. describe="Name goes here:" (a label: captures the widget that holds it), describe="save the profile" (tooltip), window_title="PIPE-1234" with class_name="QDockWidget" (a docked widget), or object_name="nameEdit". Add instance (pid, id or window title of the app) when several Qt apps are running.

Args: ref: Widget ref from qt_snapshot/qt_find_widget. If nothing identifies a widget, the active window is captured. full_window: If True, captures the first visible top-level window. max_width: Max width before downscaling (default 1920). max_height: Max height before downscaling (default 1080). format: Image format - 'png' or 'jpeg' (default 'png'). quality: JPEG quality 1-100 (default 80, ignored for PNG). describe: Free-text description matched against text, titles, tooltip, what's-this, status tip, accessible name, objectName, placeholder, QSS ... (fuzzy). window_title: Fuzzy match on the top-level window title. class_name: Qt class, subclasses match (e.g. 'QDockWidget'). object_name: objectName, supports * and ? wildcards. search_fields: Limit describe to specific fields (see qt_find_widget). expand: What to capture relative to the match: 'auto' (a matched label captures the widget holding it; anything else captures itself), 'self', 'parent', 'buddy' (the label's field) or 'window'. index: Which ranked match to use (0 = best). min_score: Minimum semantic match score 0-1.

Returns an image plus a note saying what was captured.

NameRequiredDescriptionDefault
refNo
indexNo
expandNoauto
formatNopng
qualityNo
describeNo
instanceNo
max_widthNo
min_scoreNo
class_nameNo
max_heightNo
full_windowNo
object_nameNo
window_titleNo
search_fieldsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it documents downscaling caps, JPEG quality being ignored for PNG, fuzzy matching behavior, wildcard support, and that the return is an image plus a note describing what was captured. Missing only mutation/side-effect framing (none expected) and any note on capture cost or failure modes when no widget matches.

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?

Front-loaded with the core action and a compact set of worked examples, then a clean Args list; minimal waste. The four inline examples are slightly verbose but each illustrates a distinct identification strategy, so they earn their space.

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?

For a 15-parameter, zero-annotation tool with an output schema, the description covers targeting modes, defaults, downscaling, and the fallback path. Return-value detail is not required given the output schema, and the brief 'returns an image plus a note' is sufficient orientation.

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?

Schema description coverage is 0%, yet the Args block documents essentially all 15 parameters, including non-obvious ones: `expand`'s four modes and its 'auto' label-captures-holder rule, `index` as ranked-match selector, `min_score` range, and `search_fields` delegation to qt_find_widget. `instance` is explained in the prose preamble rather than the Args list, but is still covered.

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 opening sentence gives a specific verb (take a screenshot) and resource (a window or any widget), plus the two identification modes (ref vs. description). It does not explicitly contrast itself with near-neighbours like qt_vtk_screenshot or qt_scene_snapshot, so the agent must infer which screenshot tool to pick.

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?

It spells out how to select a target: ref from qt_snapshot/qt_find_widget, semantic `describe` with concrete examples, window_title+class_name, object_name, and `instance` when multiple Qt apps run, plus the fallback that the active window is captured when nothing identifies a widget. It gives no explicit when-not or alternative-tool routing against the other capture tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_select_instanceA

Make one running Qt app the default target for later tool calls.

Args: instance: Instance id, pid, name, or words from a window title, e.g. "PIPE-1234".

NameRequiredDescriptionDefault
instanceYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the burden; it does disclose the key behavioral trait that selection persists and affects later calls. However, it says nothing about ambiguity handling (multiple matching windows), validation failures, or whether the selection is process-wide or per-session.

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 front-load the effect, followed by a tight parameter note with an example. Minimal waste, though the 'Args:' block formatting is slightly verbose for a single parameter.

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 session-state tool with an output schema present, the description covers purpose and the one parameter's accepted formats. The remaining gap is failure/ambiguity behavior, which matters but is secondary.

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, and it does: the single parameter accepts an instance id, pid, name, or words from a window title, with a concrete example ('PIPE-1234'). It does not note that integer input corresponds to a pid or how partial window-title matching resolves.

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?

States a specific verb and resource: makes one running Qt app the default target for subsequent tool calls. This clearly distinguishes it from list-style siblings like qt_list_instances, though it never names a sibling explicitly.

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 phrase 'default target for later tool calls' implies it should be invoked before other Qt tools, but there is no explicit when-to-use/when-not guidance or reference to alternatives such as qt_list_instances for discovering instances first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_set_propertyB

Set a Qt property on a widget.

Args: ref: Widget ref from qt_snapshot. property_name: Qt property name. value: New value for the property.

NameRequiredDescriptionDefault
refYes
valueYes
instanceNo
property_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it says nothing about mutation semantics: no mention of failure behavior for unknown or read-only properties, whether the change is applied synchronously or requires a repaint/event-loop pass, or whether it is reversible. Only the bare action is disclosed.

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 lead sentence is front-loaded and the Args block is terse. The property_name and value entries add little beyond the schema titles, but there is no padding or redundancy of note.

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?

An output schema exists, so return values need not be explained, and the ref-to-qt_snapshot linkage is helpful. But for a no-annotation mutation tool in a multi-instance environment (qt_list_instances, qt_select_instance), the unaddressed 'instance' parameter and absent error semantics leave meaningful 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?

Schema description coverage is 0%, so the description must compensate. It adds real meaning for ref ('Widget ref from qt_snapshot') but merely restates property_name and value as their own titles, and never mentions the optional 'instance' parameter that appears in the schema — leaving one of four parameters entirely undocumented anywhere.

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 a specific verb and resource ('Set a Qt property on a widget'), which is clearly distinct from read-oriented siblings like qt_get_text or qt_widget_details. It does not explicitly differentiate itself from other mutation siblings such as qt_invoke_slot or qt_trigger_action, so it stops short of 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

One useful prerequisite is given: the ref comes from qt_snapshot, which tells the agent how to obtain the target. However, there is no guidance on when to use this versus qt_invoke_slot, qt_type, or qt_batch, and no note on whether the widget must be visible or the property writable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_signalsA

Inspect signal connections on a QObject.

For a given widget/object, enumerates all signals and reports which are connected and how many receivers each has. Useful for debugging "nothing happens when I click" problems.

Args: ref: Widget ref from qt_snapshot (e.g., 'w5').

NameRequiredDescriptionDefault
refYes
instanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden well: 'Inspect' and 'enumerates ... reports' make clear this is a read-only introspection operation with no mutation, and it discloses what information is returned per signal. It stops short of stating permission requirements or explicitly affirming no 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose and the diagnosing use case are front-loaded in the first two sentences, with zero filler. The Args block is slightly redundant with the schema but stays short.

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?

An output schema exists, so return values need not be explained, and the primary ref parameter and use case are covered. However, the undocumented `instance` parameter and no mention of how it interacts with qt_select_instance leave a real gap for a 2-parameter tool with 0% schema coverage.

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%, so the description must compensate. It documents `ref` well (source: qt_snapshot, example 'w5'), but the second parameter `instance` is never mentioned, leaving half the parameters undocumented.

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?

States a specific verb and resource ('Inspect signal connections on a QObject') and enumerates exactly what is reported: signals, connection state, and receiver counts. This clearly separates it from siblings like qt_invoke_slot or qt_wait_for, which act on signals rather than inspecting them.

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 a concrete diagnostic scenario ('debugging "nothing happens when I click" problems') that tells the agent when this tool applies. It lacks explicit when-not guidance or named alternatives (e.g., 'use qt_invoke_slot to fire a signal'), so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_snapshotB

Capture the full Qt widget tree as a structured accessibility-like snapshot.

Returns a YAML-like text tree with widget types, object names, text content, geometry, visibility, enabled state, and interaction refs (w1, w2, ...). Use the refs to interact with specific widgets via other tools.

NameRequiredDescriptionDefault
instanceNo
root_refNo
max_depthNo
skip_hiddenNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden. It does disclose the output shape, the fields returned, and the ref-addressing mechanism, which implies a read-only capture. However, it says nothing about tree size/cost on large UIs, whether the capture blocks the app, or that the call is non-destructive.

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 tight paragraphs: the purpose is front-loaded in the first sentence, followed by a compact enumeration of return contents and one actionable follow-up. No filler.

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?

An output schema exists so return values needn't be spelled out, and the description is adequate on that axis. But for a four-parameter capture tool with zero schema coverage and no annotations, the absence of any parameter semantics leaves the agent guessing what root_ref and max_depth actually do.

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 description coverage is 0%, so the description must compensate for all four parameters and does not. root_ref, max_depth (default 10), and skip_hidden are never mentioned; 'full widget tree' arguably conflicts with the existence of a depth limit and hidden-widget skipping. Only the ref concept is loosely echoed.

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 definition names a specific verb and resource ('Capture the full Qt widget tree as a structured accessibility-like snapshot') and lists exactly what the output contains, so the agent knows precisely what it gets. It stops short of differentiating from near-identical siblings like qt_object_tree or qt_scene_snapshot, which an agent would plausibly confuse with this one.

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?

'Use the refs to interact with specific widgets via other tools' gives downstream usage context, but there is no guidance on when to choose this over qt_object_tree, qt_scene_snapshot, or qt_find_widget. Usage is implied by the purpose rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_thread_checkB

Check thread affinity of all QObjects to detect threading issues.

Reports which threads own QObjects, flags QWidget subclasses on non-GUI threads (the #1 cause of GUI freezes), and lists QThread instances.

NameRequiredDescriptionDefault
instanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the whole behavioral burden. It does disclose meaningful substance — which threads own QObjects, which widgets are on non-GUI threads, and a listing of QThread instances — implying a read-only diagnostic. However, it never states that it is non-mutating, how expensive it is, or what the scoping effect of the 'instance' parameter is.

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?

Three short sentences, front-loaded with the verb and resource, with the parenthetical 'the #1 cause of GUI freezes' earning its place by justifying the tool's existence. No filler, though it is slightly padded by the itemized listing.

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?

An output schema exists, so return-value explanation is not required, and the description adequately frames the diagnostic output. But with no annotations and an undocumented parameter, key details — safety profile, instance scoping, behavior when no Qt app is present — are left uncovered.

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 single `instance` parameter has 0% schema description coverage, so the description must compensate and does not — the parameter is never mentioned. Worse, the description says it checks 'all QObjects', which leaves ambiguous what passing an instance would narrow it to.

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 names a specific verb ('Check') and resource ('thread affinity of all QObjects') and states the goal ('detect threading issues'). It is clearly distinct from siblings like qt_layout_check or qt_object_tree, though it never explicitly names an alternative, so it falls short of 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'to detect threading issues' and the note about GUI freezes imply a diagnostic use case, but there is no explicit when-to-use, when-not-to-use, or named alternative among the many qt_* siblings. The usage context is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_trigger_actionA

Trigger a menu action or toolbar action by text or index.

Args: ref: Ref to a QMenu, QMenuBar, QToolBar, or any widget with actions. action_text: The action's display text (e.g., 'Save', '&Open'). Ampersands are stripped for matching. action_index: The 0-based index of the action (matching qt_menu_items order).

Provide either action_text or action_index (not both). Use qt_menu_items first to see available actions.

NameRequiredDescriptionDefault
refYes
instanceNo
action_textNo
action_indexNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the burden. It usefully discloses matching behavior (ampersands stripped) and that index corresponds to qt_menu_items order, but omits failure modes, whether the action requires a visible/active widget or menu, what side effects the triggered action causes, and error behavior.

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?

Front-loads the one-line purpose, then enumerates args with just enough detail. The Args block is slightly verbose but each line earns its place; no filler.

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?

An output schema exists so return values needn't be explained, and the action-selection parameters are covered. However the undocumented 'instance' parameter and the absence of failure/side-effect disclosure leave meaningful gaps for a mutation-style trigger tool.

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%, so the description must compensate. It documents ref, action_text, and action_index well, including ampersand handling and index semantics, but completely omits the 'instance' parameter present in the schema, leaving one of four params unexplained anywhere.

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?

States a specific verb (Trigger) and specific resource (menu action or toolbar action) with the selection mechanism (text or index). It is distinguishable from siblings like qt_click and qt_invoke_slot, which operate on widgets/slots rather than existing actions.

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?

Explicitly states the alternative invocation modes (action_text or action_index, not both) and routes the agent through qt_menu_items first to discover available actions. This is clear when-to-use guidance with a named prerequisite sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_typeA

Type text into a widget.

Args: ref: Widget ref from qt_snapshot. text: Text to type. clear_first: If True, select all and delete before typing. use_clipboard: If True, insert via Ctrl+V paste instead of key-by-key events. Use this for multi-line text in console/terminal widgets — character-by-character typing treats each newline as Enter (submit), corrupting multi-line input.

NameRequiredDescriptionDefault
refYes
textYes
instanceNo
clear_firstNo
use_clipboardNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose real behavior: clear_first selects-all-then-deletes, and use_clipboard switches from synthesized key events to Ctrl+V paste. The warning that character-by-character typing corrupts multi-line console input is exactly the kind of non-obvious side effect that prevents failed calls. It leaves unstated whether the target must be focused/visible and how failures surface, though the output schema covers return values.

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?

Front-loaded with a one-line purpose followed by a compact Args block; every sentence, including the multi-line caveat, carries actionable information. The caveat is slightly verbose but is placed next to the parameter it governs.

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 5-parameter mutation-style tool with no annotations, the description covers the operation, both mode switches, and the one dangerous edge case; an output schema exists so return values need not be explained. The undocumented `instance` parameter is the only substantive hole.

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 has to compensate, and it documents 4 of 5 parameters including the semantics of both booleans and the origin of ref. The `instance` parameter is never mentioned in either the schema or the description, leaving one gap.

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?

States a specific verb and resource ("Type text into a widget") and ties ref to qt_snapshot, so an agent knows it is an input-simulation tool rather than a query. It stops short of naming the nearest sibling (qt_key_press) or explaining the boundary between whole-string typing and raw key 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?

Gives an explicit conditional rule for use_clipboard — multi-line text in console/terminal widgets — with the failure mode spelled out (newlines become Enter/submit). It does not say when to prefer this tool over qt_key_press or what to do if the widget is not focused.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_vtk_scene_infoC

Get VTK scene state from a PyVista/VTK widget.

Args: ref: Ref to a widget containing a VTK render window.

NameRequiredDescriptionDefault
refYes
instanceNo

Output Schema

NameRequiredDescription
resultYes

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 carries the full burden and does not say whether this is read-only, what happens if ref points to a non-VTK widget, or how expensive/deep the scene traversal is. 'Scene state' is left undefined, so the agent cannot predict payload shape or 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short lines, front-loaded with the purpose. The Args block merely repeats the schema, which is mild waste but not verbose, and the core statement is immediately readable.

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?

An output schema exists so return values need not be explained, but the description still leaves the omitted instance parameter, the read-only nature, and the distinction from screenshot/snapshot siblings unaddressed. For a tool with two parameters and zero schema documentation, this is thin.

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 description coverage is 0%, so the description must compensate, but it only restates ref as 'a widget containing a VTK render window' and completely omits the optional instance parameter. An agent has no idea what instance selects or when to pass it.

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?

States a specific verb and resource: 'Get VTK scene state from a PyVista/VTK widget.' An agent can tell this is a read of VTK render-window state, but the description never distinguishes it from siblings such as qt_vtk_screenshot or qt_scene_snapshot, which sound close enough to require a differentiator.

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 when-to-use guidance at all. Given that qt_vtk_screenshot, qt_scene_snapshot, and qt_widget_details sit alongside it, the description should say when scene state is preferable to a screenshot or a widget detail dump, and it says nothing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_vtk_screenshotC

Capture a VTK render window to an image.

Args: ref: Ref to a widget containing a VTK render window.

NameRequiredDescriptionDefault
refYes
instanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It says the tool captures an image, but does not state side effects, whether the operation is read-only, any permission requirements, or what happens with the optional instance parameter; the output schema is the only source of return-value information.

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 brief, front-loaded, and free of filler. The purpose is stated first, followed by a compact Args section, so every sentence contributes to invocation.

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 low-complexity screenshot tool with an output schema, the core required parameter is minimally explained. However, it omits the optional instance parameter and provides no sibling-routing context despite numerous nearby screenshot and snapshot tools, leaving clear 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?

Schema description coverage is 0%, so the description must compensate for both parameters. It partially explains the required ref as 'Ref to a widget containing a VTK render window,' but never mentions or explains the optional instance parameter, leaving a significant semantic gap.

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 a specific verb and resource: 'Capture a VTK render window to an image.' This is clear enough to distinguish the core action from generic UI interaction tools, but it does not explicitly differentiate itself from sibling screenshot tools such as qt_screenshot, qt_scene_snapshot, or qt_snapshot.

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?

There is no guidance on when to use this tool versus the many screenshot and snapshot siblings. The only usage signal is implicit in the resource named ('VTK render window'), with no exclusions or alternative-routing instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_wait_forB

Wait for a UI state change.

Args: condition: One of 'widget_visible', 'window_count_changed', 'property_equals'. timeout_ms: Max time to wait in milliseconds (default 5000). object_name: Widget objectName (for widget_visible). ref: Widget ref (for property_equals). property_name: Property name (for property_equals). value: Expected value (for property_equals).

NameRequiredDescriptionDefault
refNo
valueNo
instanceNo
conditionYes
timeout_msNo
object_nameNo
property_nameNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it omits the most important trait for a wait tool: what happens on timeout (error vs. returning a negative result), whether the call blocks the UI thread, and whether the operation is purely observational. It does disclose the default timeout of 5000 ms, which is useful, but that is the only behavioral detail.

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 one-line purpose is front-loaded and the arg block is a scannable per-parameter list with no filler. The only structural weakness is that the conditions and their required companion parameters are spread across separate lines rather than grouped, forcing the agent to reconstruct which args pair with which condition.

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?

An output schema exists, so return-value explanation is rightly omitted, and the condition vocabulary is covered. However, for a 7-parameter tool with zero annotation and zero schema-description coverage, leaving 'instance' undocumented and the timeout/failure contract unstated leaves real gaps for correct invocation.

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, and it largely does: it documents condition, timeout_ms, object_name, ref, property_name, and value, and crucially enumerates the three legal condition strings that the schema does not constrain with an enum. The gap is that the seventh parameter, 'instance', is never mentioned, and there is no explanation of the ref-vs-object_name distinction beyond their condition pairing.

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?

States a specific verb and resource ('Wait for a UI state change') and the arg list enumerates the three concrete conditions, so the agent knows exactly what kinds of state it can wait on. It is clearly differentiated from action siblings like qt_click or qt_type, though it doesn't distinguish itself from read-only inspection siblings such as qt_snapshot that could also reveal state.

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?

Usage is only implicit: the tool is obviously for synchronizing on asynchronous UI changes before inspecting or asserting. There is no explicit 'use this instead of polling / instead of qt_snapshot' guidance, no mention of when a wait is the wrong tool, and no prerequisites about the target instance needing to be selected.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

qt_widget_detailsB

Get detailed properties of a specific widget.

Args: ref: Widget ref from qt_snapshot (e.g., 'w5').

Returns all Qt properties, geometry, parent chain, and more.

NameRequiredDescriptionDefault
refYes
instanceNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses that the call returns all Qt properties, geometry, and parent chain, which helps set expectations for a read operation. But 'and more' is vague, and it says nothing about side effects, instance selection behavior, or how the tool behaves when multiple instances exist.

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 short and front-loaded, with no filler sentences. The one weakness is the vague closing phrase 'and more', which is not informative enough to earn 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 tool is relatively simple, and the presence of an output schema reduces the need to explain return values in detail. Still, the description omits the optional instance parameter and provides no annotation-equivalent context for behavior, so it is only adequate.

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%, so the description must compensate. It does well for the required 'ref' parameter by explaining that it comes from qt_snapshot and giving an example, but it never mentions the optional 'instance' parameter, leaving that behavior undocumented in both schema and description.

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 gives a specific verb and resource: 'Get detailed properties of a specific widget.' That is clear enough for an agent to know what the tool does. It does not, however, explicitly distinguish it from siblings such as qt_snapshot or qt_object_tree, so it stops short of 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 Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating that the ref comes from qt_snapshot, which gives useful provenance. It does not state when to use this instead of qt_snapshot, qt_object_tree, or qt_find_widget, nor does it give exclusions.

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.

  1. 30 tool updatesv0.1.0
    • First observedqt_active_popup
    • First observedqt_batch
    • First observedqt_click
    • First observedqt_find_anywhere
    • First observedqt_find_widget
    • First observedqt_get_text
    • First observedqt_invoke_slot
    • First observedqt_key_press
    • First observedqt_layout_check
    • First observedqt_list_instances
    • First observedqt_list_windows
    • First observedqt_menu_items
    • First observedqt_messages
    • First observedqt_object_tree
    • First observedqt_record_gif
    • First observedqt_record_start
    • First observedqt_record_stop
    • First observedqt_scene_snapshot
    • First observedqt_screenshot
    • First observedqt_select_instance
    • First observedqt_set_property
    • First observedqt_signals
    • First observedqt_snapshot
    • First observedqt_thread_check
    • First observedqt_trigger_action
    • First observedqt_type
    • First observedqt_vtk_scene_info
    • First observedqt_vtk_screenshot
    • First observedqt_wait_for
    • First observedqt_widget_details

TDQS

B3.3/5.0

Scored across 30 tools

Disambiguation4/5

Most tools target clearly distinct operations, and the long descriptions actively steer selection (e.g. qt_find_widget vs qt_find_anywhere, qt_record_gif vs qt_record_start/stop, qt_screenshot vs qt_vtk_screenshot). A few pairs still require reading the docs to separate: qt_snapshot vs qt_object_tree, qt_scene_snapshot vs qt_snapshot, and qt_widget_details vs qt_snapshot.

Naming Consistency4/5

All tools share a qt_ prefix and snake_case with verb-first names (qt_find_widget, qt_click, qt_set_property, qt_trigger_action, qt_wait_for), which is highly predictable. A handful drop the verb and are noun phrases (qt_object_tree, qt_menu_items, qt_widget_details, qt_active_popup, qt_messages), a minor inconsistency in an otherwise uniform scheme.

Tool Count3/5

30 tools is above the comfortable range and includes consolidation candidates: the GIF trio (qt_record_gif / qt_record_start / qt_record_stop), the VTK pair, and the two find tools. The scope (introspection, interaction, recording, multi-instance, threads/signals, VTK) is genuinely broad, so most tools do earn their place, but the surface is heavier than ideal.

Completeness4/5

Coverage is unusually thorough: discovery (snapshot, find, object tree, windows, popups), interaction (click, type, key press, set property, invoke slot, trigger action), async (wait, batch), diagnostics (layout, threads, signals, messages), plus VTK and recording. Minor gaps remain around drag-and-drop, explicit scrolling, and app/window lifecycle (launch/close), though these are largely workaroundable via key_press or invoke_slot.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An MCP server for inspecting, debugging, and interacting with PySide6 desktop applications. It enables AI agents to capture UI snapshots, read widget properties, and perform actions like clicking buttons or typing text.
    22
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to automate Linux desktop GUI by launching and interacting with Wayland applications in isolated virtual KWin sessions, or connecting to live desktops for collaborative automation.
    155 PyPI
    76
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for automating and introspecting native Qt applications (QWidget and QML) without source changes. Enables AI agents to control running Qt apps through UI snapshots, element lookup, and real input simulation.
    25
    6
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to see, control, and debug PySide6 desktop applications without modifying their source code, by capturing screenshots, inspecting widget trees, performing clicks and typing, reading logs, and running Python inside the app process.
    22
    41 PyPI
    6
    MIT