pbi-webview2
This MCP server drives a live Power BI Desktop report canvas via Chrome DevTools Protocol (CDP), enabling AI agents to automate testing, data reading, and interaction without screenshots or OCR.
Launch & Connect
Launch Power BI Desktop with a CDP debug port on a
.pbipfile, or attach to an already running instanceCheck connection status (build info, title bar, active page, zoom, canvas readiness) and run quick health probes
Navigate Pages
List all report pages and switch between them by exact name, with optional wait-until-ready
Clear selections without blind-clicking the canvas
Read Data
Extract structured data from card visuals and matrix/table grids (including scrolling virtualized grids)
List all visible visuals with title, type, position, size, and error status
Read DAX query editor and TMDL view content from Monaco
Run DAX queries and capture structured results
Interact with Visuals
Click elements by text, aria-label, or selector; set slicer values; fire bookmarks; expand/collapse matrix hierarchies
Type into inputs, search slicer boxes, hover for tooltips, and open/invoke context menus
Test & Analyze
Test cross-filter interactions, scan for broken visuals and console errors
Run Performance Analyzer for per-visual render times and DAX capture
Sweep all pages to record load times, errors, and card fingerprints
Capture and compare value baselines for regression testing
Capture Output
Take screenshots of the full page or clipped to a specific visual
Capture accessibility tree snapshots and deep-inspect DOM or V8 heap usage
Escape Hatches
Evaluate arbitrary JavaScript in the report canvas (
pbi_eval)Run trusted Playwright code with full
page.mouse/page.keyboardaccess (token-guarded)
State & Application Management
Automate Desktop dialogs (read and click buttons, with a safety guard on Save)
Save, close, or reload the report — each guarded by explicit confirmation flags to avoid persisting test state
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pbi-webview2Open my monthly report and show me the summary table"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pbi-webview2 — MCP server for the live Power BI Desktop report canvas
pbi-webview2 is a Model Context Protocol server
that drives Power BI Desktop's WebView2 report canvas over CDP (Chrome DevTools
Protocol). It turns an AI agent (Claude Code, Claude Desktop, or any MCP client) into
a hands-on tester of your running report: switch pages, click slicers and buttons,
fire bookmarks by name, read cards and matrices as structured data, judge whether a
cross-filter fired, scan for broken visuals, run the Performance Analyzer, capture and
compare value baselines, and screenshot individual visuals.
Why
Power BI Desktop renders its report canvas inside an embedded WebView2 (Chromium). When
Desktop is launched with the WebView2 remote-debugging port enabled, that canvas is a
real DOM you can attach to over CDP. pbi-webview2 exploits this to interact with the
live report — no reload, no re-render, no screenshot-OCR to guess at numbers. Every
tool reads values straight from the DOM, and clicks are trusted OS-level input that
Desktop actually reacts to (synthetic DOM events are ignored by the canvas). Selectors
and behavioural traps were verified against Power BI Desktop 2.155 (July 2026).
Each tool is one full, verified recipe (tag the target element in-page, then act on it
by a data-pw selector) rather than a raw primitive — so the agent gets a clean result
object ({connected:true, ...}) instead of having to rediscover the DOM every time.
Related MCP server: Chrome DevTools MCP
Requirements
Windows — Power BI Desktop is Windows-only, and so is this server (
os: win32).Power BI Desktop installed (as
PBIDesktop.exeor the Microsoft Store version).Node.js ≥ 20.
Optional: Microsoft's
@microsoft/powerbi-desktop-bridge-cli(only if you prefer the bridge CLI over the built-in directPBIDesktop.exelaunch — seepbi_launchbelow).
Install / registration
The server runs straight from npm via npx; nothing to clone.
Claude Code
claude mcp add pbi-webview2 -- npx -y pbi-webview2Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"pbi-webview2": {
"command": "npx",
"args": ["-y", "pbi-webview2"]
}
}
}Generic MCP client / from source
Any client that speaks stdio MCP can launch it. To run from a local checkout instead of npm:
{
"mcpServers": {
"pbi-webview2": {
"command": "node",
"args": ["C:/path/to/pbi-webview2/server.js"],
"env": { "PBI_CDP_ENDPOINT": "http://127.0.0.1:9222" }
}
}
}The server connects lazily — it boots fine with Desktop closed, and every tool
returns a structured {connected:false, error, hint} (never a thrown error) until
Desktop is reachable. So you can register it once and launch Desktop later.
Quickstart workflow
The canonical loop is launch → wait → status → drive:
pbi_launch {pbip:"C:/path/to/Report.pbip"}— launches Desktop with the CDP debug port and waits until the port answers. The port only exists when Desktop is started with the right environment variable, and it cannot be attached later — so this must be how Desktop comes up.pbi_wait_for {text:"<a page name>"}— the CDP port answering does not mean the canvas has finished rendering; a heavy report re-queries every visual for seconds-to-minutes. Poll for a known page/visual label to appear first.pbi_status— confirm build, title bar, active page, page count, zoom, andcanvasReady.Drive it —
pbi_pages,pbi_goto_page,pbi_set_slicer,pbi_read_cards,pbi_read_matrix,pbi_cross_filter_test,pbi_visuals,pbi_screenshot, …
If Desktop is already running on the port, pbi_launch reports the existing instance
instead of starting a second one (a second instance competes for Analysis Services
memory and makes both render as if frozen).
Environment variables
Var | Default | Purpose |
|
| CDP endpoint to attach to. Always |
| — | Explicit path to Microsoft's |
| — | Explicit path to |
|
| Where screenshots + baselines are written (never the repo/CWD). |
|
| Per- |
|
| Steady interval between poll probes inside the multi-step tools. Polls ramp adaptively from ~250ms toward this value, so warm/ready pages satisfy fast. |
|
| Post-navigation settle in |
How pbi_launch resolves a launcher
pbi_launch tries three strategies in order and reports which one it used
(launcher: "bridge-env" | "bridge-path" | "direct"):
PBI_DESKTOP_BRIDGE— the explicit bridge CLI path from the env var.powerbi-desktoponPATH— resolved viawhere.exe(the npm-installed bridge CLI shim).Direct
PBIDesktop.exespawn — needs no Microsoft CLI at all. Locates the exe fromPBI_DESKTOP_EXE, then%ProgramFiles%\Microsoft Power BI Desktop\bin\PBIDesktop.exe, then the Store alias%LOCALAPPDATA%\Microsoft\WindowsApps\PBIDesktop.exe.
All three inject WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS=--remote-debugging-port=<port>
into Desktop's own process environment (the only way the port gets enabled). If nothing
resolves, pbi_launch returns {launched:false, error, hint} telling you to
npm i -g @microsoft/powerbi-desktop-bridge-cli or set PBI_DESKTOP_EXE.
Tools
55 tools. Each returns a leading status key: the connected: family reports CDP
reachability of the report canvas ({connected:false, ...} when Desktop is
unreachable); the ok: family covers escape hatches, the separate DAX/TMDL/dialog
CDP targets, and the guarded save/close/reload tools ({ok:false, reason} — or a
{ok:true, <action>:false, reason} refusal — when a surface isn't available or a guard
flag wasn't passed). Tools returning found:false / extracted:false also carry a
structured code REASON (not-found / not-ready / wrong-view / canvas-busy
/ not-extractable) so a loop can branch on the failure without string-matching.
Tool | Status | Key params | What it does |
|
|
| Launch Desktop WITH the CDP port (bridge-env → bridge-path → direct |
|
|
| Connect + report build, title bar, active page, page count, zoom, canvasReady, dirty. |
|
| — | All page tabs |
|
|
| Exact-match page nav; verifies |
|
| — | Clear selection via the neighbour-page-and-back trick (never blind-clicks the canvas). |
|
| — | Batched scorecard (toggles, cards, badges, selectedCount, slicerItemsVisible, …). |
|
| — | Parsed cards |
|
|
| Generic tag-then-act click with overlay-intercept + on-path SVG coordinate fallback. |
|
|
| Click a button/list slicer; returns before/after state. |
|
|
| Fire any bookmark via the View > Bookmarks pane (trusted click); restores chrome. |
|
|
| Full grid as |
|
|
| Expand/collapse a hierarchy row; returns rowsBefore/After. |
|
|
| Click a data point; verdict = highlights rose OR card fingerprint changed; optional restore. |
|
|
| Trusted hover, read tooltip text. |
|
| — | Broken-visual scan + non-benign console errors (+ benignFaviconCount). |
|
|
| Per-visual render ms; optional visual-DAX capture via clipboard (clobbers clipboard); restores pane + ribbon. |
|
|
| HEAVY — iterates pages (each re-queries all its visuals), records loadMs + error scan + card fingerprint; restores page. |
|
|
| Value-baseline capture/compare/list to |
|
|
| Poll body innerText until text appears/disappears. |
|
|
| Escape hatch — |
|
|
| TRUSTED escape hatch — runs |
|
|
| Accessibility-tree (ARIA) snapshot for structure discovery when a selector drifts. An invalid |
|
|
| Trusted-keyboard type into an editable element; aborts if focus doesn't land on the input (never types into the canvas). |
|
|
| Type into a slicer search box; return filtered items; optional pick clicks the match. Same focus-safety abort as |
|
|
| Right-click a data point/visual, read menu items; optional click invokes one (else Escape-closes). |
|
|
| Screenshot to the output dir. With |
|
| — | List visible visuals as |
|
| — | Read the DAX query view editor text (Monaco; reaches the |
|
| — | Read the TMDL view editor text (Monaco; reaches the |
|
|
| Write DAX into the query view + run (F5, Run-button fallback) + read the results grid. OVERWRITES the editor content — but the prior text is captured first; |
|
|
| Read/click a Desktop dialog ( |
|
|
| Raw-CDP deep inspection: compact a11y tree, DOMSnapshot size probe, or V8 heap usage. Read-only. |
|
|
| Forces |
|
|
| GUARDED save. Without |
|
|
| GUARDED process kill — always needs |
|
|
| GUARDED visual repaint — needs |
|
|
| CHEAP aggregate: |
|
|
| List measures/tables/columns/relationships as structured metadata via |
|
|
| Run up to 20 DAX queries sequentially, collect all result sets. Auto-restores the editor buffer (default |
|
| — | Format the DAX query editor via Monaco |
|
|
| Capture/restore the Monaco editor text so |
|
|
| Wait until the canvas render is STABLE ( |
|
|
| Read a |
|
|
| Best-effort: extract a visual's data via right-click data point → "Show as a table". SCOPE: needs a DOM data point — many chart/canvas visuals expose none (returns |
|
|
| Read a slicer's |
|
| — | Best-effort read of the Filters pane as data; opens the pane if closed, reads, then restores it. Honest |
|
|
| Expand/collapse ALL matrix hierarchy levels by iteratively left-clicking the +/- expander buttons; returns |
|
|
| Sort a grid by a column header; returns |
|
|
| Multi-select list-slicer items (first plain, rest Ctrl+click); returns |
|
|
| Drill down/up via the visual-header control, or drill-through via a data-point menu. Honest |
|
|
| Trusted-Tab focus-order / a11y audit; records |
|
| — | ONE-call page judgment: visuals+cards+badges+slicers+broken-visuals+console-errors in a single round-trip. The agentic loop's observe step. |
|
|
| Capture a full page digest and structurally diff two states (cards changed/added/removed, visual/broken deltas, slicer/page changes). |
|
|
| Structured pass/fail assertions over a fresh page digest for loop control; each provided predicate becomes a |
|
|
| Screenshot with numbered overlay boxes over each visual + a legend ( |
Dirty state is not detectable over CDP. Verified against Desktop 2.155: a real report edit changes nothing reachable from any WebView target (no title-bar change, no
*, Save button always enabled, nowindow.powerbi.isDirty). Power BI Desktop's dirty flag lives in its native WPF host shell, which CDP cannot see. Sopbi_save/pbi_close/pbi_reloadnever detect unsaved work — they gate on your explicit intent flag (confirm/discardChanges/saveFirst). This is deliberate: a guard that silently under-reports "clean" would be more dangerous than one that always asks you to state intent.
Cost tiers
A loop should poll the CHEAP tools; call HEAVY tools only intentionally.
Tier | Latency (warm) | Tools |
CHEAP | sub-second |
|
MEDIUM | ~1-5s (click + poll) |
|
HEAVY | ~10-45s+ (deliberate) |
|
Choosing between similar tools
Several tools overlap in area but answer different questions — pick by intent:
State reads:
pbi_status(build/title/page/zoom) ·pbi_state_probe(toggles/cards/badges/selection — cheapest data probe) ·pbi_health(broken/console/heap quick-check) ·pbi_page_digest(everything in one call — supersetsstate_probe; use it as the agentic observe step,state_probewhen you only need the cheap scorecard).Slicers:
pbi_set_slicer(one button/item) ·pbi_multiselect_slicer(several list items, Ctrl-held) ·pbi_search_slicer(type in the search box, optional pick). Distinct mechanics — not interchangeable.Grids:
pbi_read_matrix(matrix/pivot, merges row headers) ·pbi_read_table(flattableEx, no row headers).pbi_show_as_tableis the best-effort extractor for non-grid visuals (and often returnsnot-extractable— see below).Waiting:
pbi_wait_for(a specific text appears/disappears) ·pbi_wait_stable(render fully settles — deterministic, use after a nav/edit).Escape hatches:
pbi_eval(page.evaluate, synthetic events — read-only DOM) ·pbi_run_code(trustedpage.mouse/page.keyboard— real input).Screenshots:
pbi_screenshot(full page or one visual viavisualTitle) ·pbi_annotate_screenshot(numbered overlay boxes + legend for multimodal judging).
Model & DAX introspection
pbi_model_info gives you a metadata browser — measures, tables, columns, and
relationships as structured rows — with no XMLA connection. It runs INFO.VIEW.* DAX
(INFO.VIEW.MEASURES/TABLES/COLUMNS/RELATIONSHIPS()) inside the DAX query view and shapes
the result grid, so you read the model over the same CDP channel as everything else.
Precondition: the DAX query view must be OPEN in Desktop (the Home ribbon's "DAX query view" tab). These tools reach the separate
daxQueryViewCDP target and will not open ribbon views for you — same precondition aspbi_read_dax_editor.Filter with
table(exact[Table]),nameLike(CONTAINSSTRINGon[Name]), andtop. The heavyExpression/FormatStringDefinition/DetailRowsDefinitioncolumns are dropped by default; passincludeExpression:trueto keep them.pbi_dax_batchruns up to 20 queries in one call;pbi_format_daxpretty-prints the editor via Monaco's Format Document action.Editor safety.
pbi_dax_query/pbi_model_info/pbi_dax_batchoverwrite the query editor, so they capture the prior text first and restore it (restore:trueondax_query, on by default fordax_batch, always formodel_info). You can also snapshot and re-instate the buffer manually withpbi_editor_buffer {action:"capture"|"restore"}.
Reading visual data
Grids expose their full data in the DOM; charts do not. This asymmetry is the single most important thing to know when reading values:
Matrices & tables (
pbi_read_matrix,pbi_read_table) return the complete grid — every cell is a real DOM node, and both tools scroll virtualized grids and merge the rows. This is the reliable path for any tabular data.Chart values are NOT in the DOM. Verified against Desktop 2.155: donut/column/line visuals render their marks without persistent DOM values — arcs aren't addressable SVG paths, and the
role="option"nodes carryaria-label="null"(only category labels are present as text). Scraping a chart's values from the DOM does not work.pbi_show_as_tableis a best-effort extra path: it right-clicks a data point → "Show as a table" (or theAlt+Shift+F11accessible show-data table), reads the overlay grid, and restores the canvas. It only works where the visual exposes a DOM data point — many chart/canvas/custom visuals expose none, so it honestly returns{extracted:false, code:"not-extractable"}. Preferread_matrix/read_tablefor tabular data; reach forshow_as_tableonly when the data lives behind a chart.
Agentic loop v2
The canonical safe act → observe → judge → verify loop. Every state-changing step is
behind an explicit guard flag — the loop only passes confirm / saveFirst /
discardChanges when the edit is legitimate, so a test-click loop can never persist garbage
or lose work. The v1.2.0 tools collapse the observe/judge/verify steps into single
round-trips:
settle —
pbi_wait_stableblocks until the render is actually done (LayoutCount / RecalcStyleCount flat + aria-busy clear), instead of guessing at a fixed timeout.observe —
pbi_page_digestreturns visuals + cards + badges + slicers + broken visuals + console errors in ONE call.judge —
pbi_assertruns structured predicates (cardEquals,visualCountAtLeast,noBrokenVisuals,activePageIs) over a fresh digest and returns pass/fail.verify change —
pbi_diff_statecaptures a digest before an action and structurally diffs it after (which cards changed, visual/broken deltas, slicer/page changes).
pbi_launch → pbi_wait_for
→ pbi_diff_state {action:"capture", name:"before"} # snapshot the page digest
→ (edit via your model/authoring MCP)
→ pbi_reload {saveFirst:true, stable:true} # repaint from the loaded model + wait for settle (guarded; no data refresh)
→ pbi_page_digest # ONE-call observe: broken visuals? console errors? cards?
→ pbi_assert {noBrokenVisuals:true, cardEquals:{...}} # judge: did it land?
→ pbi_diff_state {action:"compare", name:"before"} # verify: exactly what changed
→ judge → fix → repeat
→ (restore slicers/selection: pbi_deselect / CLEAR bookmark)
→ pbi_save {confirm:true} # opt-in save
→ pbi_close {discardChanges:true} # deliberate teardown at the very end (flag always required)Between iterations, observe with pbi_page_digest / pbi_health and pbi_status {light:true} (all CHEAP). Restore slicers/selection BEFORE pbi_save {confirm:true} so
you don't persist test-click state. pbi_save, pbi_close, and pbi_reload NEVER act
without their guard flag — without it they return a refusal object, not the action.
Robustness
Newer tools resolve elements through an ARIA-role resolver (role + accessible name)
rather than brittle class selectors, so they survive Desktop DOM churn better. When a tool
can't complete, it returns a structured REASON code instead of a bare error, so a loop
can branch on the failure kind without string-matching:
| Meaning |
| The target element (visual, column, slicer, matrix, drill control) wasn't present. |
| The surface exists but hasn't populated yet (e.g. an empty/collapsed Filters pane, a show-as-table grid that never appeared). |
| The wrong CDP view is focused for the operation. |
| A read landed mid-render; retry after |
| The data exists but isn't reachable over the DOM (e.g. a chart with no DOM data point for |
Safety & etiquette
Every interaction happens against the live, unsaved report in memory. Follow these:
Never save after test clicks. Every click mutates unsaved in-memory report state. Restore slicers / active page when done (a CLEAR bookmark or
pbi_deselecthelps; the sweep/baseline/bookmark tools restore the starting page/chrome for you).pbi_dialogrefuses to click a Save button unlessbuttonis passed exactly as"Save"(case-sensitive) — a guard against accidentally saving the report.Token guard is honest, not a sandbox.
pbi_evalandpbi_run_codereject code that referencespowerBIAccessToken, but that is a best-effort textual (regex) guard, not a security sandbox. Do not rely on it as a boundary.Restore state after test clicks so the next run starts clean.
Screenshots and baselines are written to
PBI_OUTPUT_DIR(a temp dir), never the repo.
Troubleshooting
{connected:false}from every tool — Desktop isn't reachable on the CDP port. Launch viapbi_launch(the port is enabled only at launch and cannot be attached later). Verify withInvoke-RestMethod http://127.0.0.1:9222/json/version.Use
127.0.0.1, neverlocalhost—localhostresolves IPv6 first and times out; the debug port binds IPv4 loopback only.renderer-busyerrors — apage.evaluatelanded while the canvas was mid-render (page switch or visual queries in flight). The read fails fast rather than hanging; retry in a few seconds, or usepbi_wait_forto gate on readiness.Report renders as if frozen / blank — check
pbi_launch's pre-flight warnings. Orphanedmsmdsrv(Analysis Services) engines from earlier debug launches hold RAM and starve the new instance; end themsmdsrvprocesses with no matching Desktop (or reboot) before blaming the report. Also avoid two Desktop instances at once.A selector stopped matching after a Desktop update — use
pbi_snapshot(ARIA tree) orpbi_deep_snapshotto rediscover structure, thenpbi_run_codeto drive it.
Coexistence with other CDP clients
CDP supports multiple simultaneous clients attached to the same endpoint. So
pbi-webview2 can run alongside any other CDP client (Playwright, another MCP server, a
DevTools window) pointed at http://127.0.0.1:9222 at the same time — they don't
conflict. On disconnect, pbi-webview2 never closes Desktop: connectOverCDP's close
only detaches the CDP session, it doesn't terminate the process.
Development / test
npm test # smoke test — passes WITHOUT Desktop running (asserts connected:false)The smoke test spawns node server.js, speaks MCP over stdio, asserts all 55 tools are
registered (exact-count assertion), then calls pbi_status and asserts it returns
{connected:false, error, hint} (Desktop not running). It points the CDP endpoint at a
dead port so the connect fails fast — no Desktop required.
License
MIT — see LICENSE.
Available Tools
33 toolspbi_baselineA
Capture / compare / list value baselines. capture: store {cards, badges, visibleVisualCount} per page (default current; pages:["*"]=all) to /baselines/.json. compare: re-capture + diff. list: available baseline names.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| pages | No | ||
| action | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses default behavior (pages defaults to current, ["*"] captures all) and output location. However, it does not explain whether compare overwrites the existing baseline, what happens if the name already exists, or if the tool requires prior capture. No annotations exist to supplement this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three short lines covering the three actions with per-action details. It is front-loaded with the core verbs ('Capture / compare / list') and avoids any extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and output schema, the description provides a solid overview of the tool's purpose, actions, and key parameters. It is nearly complete but could mention whether name is required for capture/compare and potential overwrite behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds essential meaning: it defines 'capture', 'compare', and 'list' actions; explains pages formatting (default current, ["*"] all); and indicates name is used in the output filename. However, it does not fully clarify whether name is required for capture/compare or its permissible values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool captures, compares, or lists value baselines. It specifies exactly what is stored (cards, badges, visibleVisualCount) per page, and differentiates the three actions (capture, compare, list) with distinct behaviors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus its siblings (e.g., pbi_snapshot, pbi_read_cards). The context of baselines (e.g., for regression testing) is implied but not explicit, and there is no mention of prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_clickA
Generic tag-then-act click by text | ariaLabel | selector (ctrl for action buttons; index disambiguates). Overlay-intercept coordinate fallback. Returns {clicked, method, matchedLabel, candidateCount}.
| Name | Required | Description | Default |
|---|---|---|---|
| ctrl | No | ||
| text | No | ||
| index | No | ||
| selector | No | ||
| ariaLabel | No | ||
| report_selection | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and exceeds basic expectations by disclosing the overlay-intercept fallback, the return format including method and candidateCount, and the ctrl modifier for action buttons. It does not address safety or side effects, but the behavioral traits are well communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: two sentences that front-load the purpose and key details. Every word adds value, with no fluff or repetition. It is well-structured and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (6 parameters, multiple identification methods, no output schema), the description covers identification, modifier, and return, but lacks explanation of 'tag-then-act', the coordinate fallback mechanism, and differentiation from other interaction tools. It is adequate but not complete for a deep understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for text, ariaLabel, selector, ctrl (action buttons), and index (disambiguation), but omits report_selection entirely. This partial coverage results in adequate but incomplete parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the specific action (click) and the identification methods (text, ariaLabel, selector), along with modifier (ctrl) and disambiguation (index). It clearly distinguishes from sibling tools by being the generic click operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like pbi_context_menu or pbi_deselect. It does not specify contexts, prerequisites, or exclusions, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_cross_filter_testB
Click a data point and judge whether a cross-filter FIRED (highlights rose OR card fingerprint changed). Optional restore re-clicks and verifies baseline. Returns {fired, highlightsBefore, highlightsAfter, changedCards, restored}.
| Name | Required | Description | Default |
|---|---|---|---|
| restore | No | ||
| selector | No | ||
| ariaLabel | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that it clicks, judges cross-filter firing, and optionally restores. It mentions return values including highlightsBefore/After and changedCards. However, it does not detail side effects like state changes to the visual or potential waits, and does not cover 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two sentences that cover main action and return. It is front-loaded and avoids redundancy. However, it could be slightly improved by including parameter details without adding much length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description does include return format. However, it lacks prerequisites (e.g., visual must exist), error conditions, or scenarios where cross-filter may not fire. For a testing tool, this information is crucial for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must compensate. Only 'restore' is explained ('Optional restore re-clicks and verifies baseline'). The 'selector' and 'ariaLabel' parameters are not described, leaving ambiguity about their purpose and usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: clicking a data point and judging whether a cross-filter fired, with optional restore. It uses a specific verb ('test') and resource ('cross-filter'), and distinguishes from sibling tools like pbi_click and pbi_read_cards by combining click with verification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., pbi_click or pbi_read_cards). It does not state prerequisites, edge cases, or when not to use it. The description only explains what it does, not the context of use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_dax_queryA
Write DAX into the DAX query view editor and RUN it, then read the results grid. Reaches the daxQueryView CDP target (SEPARATE from reportView); {ok:false, reason} if the view has never been opened in Desktop (open the DAX query view tab first — this tool will NOT open ribbon views). Runs via F5 on the focused editor, falling back to a visible "Run" button. Returns {ran, columns, rows, rowCount, error?}. CAVEAT: this OVERWRITES whatever DAX the user had in the query editor — prior text is NOT restored (unrecoverable). Use a throwaway query view.
| Name | Required | Description | Default |
|---|---|---|---|
| dax | Yes | The DAX to run (EVALUATE …). Overwrites the editor content. | |
| timeoutMs | No | How long to poll for results (default 30000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description thoroughly discloses behavioral traits: overwrites prior content, runs via F5 with fallback, requires view to be opened, and specifies return format (ran, columns, rows, rowCount, error?). No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with front-loaded purpose. However, the overwrite warning is mentioned twice, slightly reducing conciseness. Still efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and absence of output schema, the description covers required prerequisites, behavior, return values, caveats, and usage guidance comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline is 3. The description adds meaning by explaining that the 'dax' parameter 'Overwrites the editor content' and that 'timeoutMs' is polling time, providing extra context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Write DAX and run it) and the resource (DAX query view editor) with a specific verb 'Write' and 'RUN', and distinguishes from sibling tools like pbi_read_dax_editor by specifying the execution aspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context: when to use (to run DAX), prerequisites (view must have been opened in Desktop), and a clear caveat (overwrites editor content, unrecoverable) with advice to use a throwaway query view.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_deep_snapshotA
Raw-CDP deep inspection of the reportView page. what:"axtree" (default) = a compact {role,name} projection of the full accessibility tree (capped to maxNodes, totalNodes reported); "dom" = a DOMSnapshot size probe ({documentCount, note}); "heap" = V8 heap usage ({usedMB, totalMB}). Read-only; safe.
| Name | Required | Description | Default |
|---|---|---|---|
| what | No | default "axtree" | |
| maxNodes | No | axtree node cap (default 500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It declares the tool is 'Read-only; safe' and details the return structure for each mode (axtree cap, dom size probe, heap usage). No side effects or prerequisites are mentioned, but the read-only assurance is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for each mode using colons. It is verbose but includes essential details without unnecessary fluff. Front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately covers return values for all three modes. Parameter descriptions are complete. Missing aspects like error handling or edge cases are minor, as the tool seems straightforward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds meaning by explaining the purpose of each mode ('compact projection', 'size probe', 'usage') and noting defaults ('default axtree', 'default 500' for maxNodes), going beyond the enum and type info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a 'Raw-CDP deep inspection of the reportView page' and lists three specific modes with their outputs. It distinguishes itself from sibling pbi_snapshot by emphasizing 'deep' inspection, but does not explicitly contrast with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool over alternatives or on choosing between the three modes. The description does not provide context for usage decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_deselectC
Clear visual/group selection via the neighbour-page-and-back trick (never blind-clicks the canvas). Returns {selectedBefore, selectedAfter, page}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It mentions the trick and return values but does not clarify whether the operation is destructive or reversible, what side effects occur (e.g., clearing filters), or any permissions needed. The term 'clear selection' implies mutation, but no safety information is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: one sentence and a return type line. It is front-loaded with the core action. However, the jargon 'neighbour-page-and-back trick' could be expanded slightly for clarity, but overall it is efficient with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description covers the basic purpose and return shape. However, it lacks explanation of the trick's implications, the exact return fields' meanings, and when this tool is appropriate compared to peers. It is minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters (100% coverage by schema), so the baseline is 3. The description does not need to add parameter details, but it does not explain any implicit inputs or the behavior of the trick beyond the schema. It adds some context but no additional parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool clears visual/group selection and specifies the technique used ('neighbour-page-and-back trick'). It distinguishes itself from siblings like pbi_click or pbi_context_menu. However, the jargon may be slightly ambiguous for an AI agent, preventing a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., clicking the canvas). The description only states what it does, not the context or prerequisites. An agent would have no information about ideal scenarios or when to avoid this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_dialogA
Automate a Desktop dialog (desktopDialogHost CDP target — exists ONLY while a dialog is showing). action:"read" returns {open, text, buttons}; action:"click" trusted-clicks the button matching button (exact, then case-insensitive contains). Returns {open:false, reason:"no dialog showing"} when none is up. SAFETY: a button labelled "Save" (any case) is refused UNLESS the button param is EXACTLY "Save" (case-sensitive) — protects against accidentally saving the report.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| button | No | Label to click (required for action:"click") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Explains actions, return values, and a safety rule about 'Save' button. Transparent about click matching behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections for actions and safety. Slightly verbose but every sentence adds information. Front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers both actions, required parameters, return values for success and failure, and safety constraints. No output schema but return values are described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 50% only documents action enum and button label. Description adds matching strategy (exact then case-insensitive contains) and safety rule, providing value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it automates a Desktop dialog with specific actions 'read' and 'click'. Distinguishes itself from siblings by mentioning the CDP target and dialog-only existence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use (dialog showing) and what happens when not ('no dialog showing'). Does not mention alternatives among siblings, but no other dialog tool exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_emulate_themeA
Force the WebView media query prefers-color-scheme to light/dark/no-preference (via page.emulateMedia). Returns {emulated, scheme}. NOTE (verified 2026-07-15): the signal flips correctly (matchMedia reflects it) but Power BI Desktop reports do NOT restyle on prefers-color-scheme — report theming is driven by theme.json + app settings, not this CSS signal — so this is effectively INERT for PBI report canvases (it would matter only for a generic web app). Kept for completeness; do not expect a visual change. RESET to "no-preference" when done.
| Name | Required | Description | Default |
|---|---|---|---|
| scheme | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it returns {emulated, scheme}, notes that it is effectively inert for PBI report canvases, and why. Also mentions the verification date and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the action and return, then provides essential context. The middle sentence is somewhat long but packs necessary nuance. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return object. It covers behavior, limitations, and reset advice. All relevant context for an AI agent to use correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema by listing the three enum values (light, dark, no-preference) and explaining their role. Although schema coverage is 0%, the description compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: forcing the WebView media query prefers-color-scheme to light/dark/no-preference. It distinguishes itself from siblings by being a media query emulation tool, not a UI interaction or data retrieval tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit context on when to use the tool (testing prefers-color-scheme), and importantly, when not to expect visual changes in PBI report canvases. Advises resetting to 'no-preference' when done, giving clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_evalA
Escape hatch: evaluate a function-body or arrow-fn string in the reportView page. Rejects any code referencing powerBIAccessToken. Returns the JSON-serialized result. NOTE: the powerBIAccessToken rejection is a best-effort textual guard (a regex on the code string), not a sandbox.
| Name | Required | Description | Default |
|---|---|---|---|
| js | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behaviors: evaluates JS, returns JSON-serialized result, and notably the 'best-effort textual guard' for access token rejection. However, does not mention potential side effects on page state or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundant text. Front-loaded with 'Escape hatch' for immediate purpose recognition. Every line adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (code evaluation) and lack of output schema, the description omits crucial context: what the JSON-serialized result contains, error behavior, and security implications beyond the token guard.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description partially compensates by specifying the parameter is a 'function-body or arrow-fn string'. But lacks details on expected format, syntax rules, or limitations beyond the token guard.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it evaluates JavaScript code in the reportView page using specific verb 'evaluate' and resource 'function-body or arrow-fn string'. The 'escape hatch' label distinguishes it from other tools by implying low-level, unrestricted execution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Does not explicitly state when to use this tool versus siblings like pbi_run_code. Provides only a constraint (rejects powerBIAccessToken references) but no contextual guidance on preferred use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_fire_bookmarkA
Fire ANY bookmark by name via the View > Bookmarks pane (trusted coordinate click; optional group; expandable groups auto-expanded). Returns {fired, landedPage, warning?}.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| group | No | ||
| expectPage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It discloses the trusted coordinate click mechanism, auto-expansion of groups, and return format. However, it does not mention error conditions, prerequisites (bookmark must exist?), or side effects (e.g., navigation).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first explains purpose and mechanism, the second lists return values. Every word contributes, and key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, no output schema, and 29 siblings, the description covers core action and return type but lacks parameter details (expectPage missing), prerequisites, error handling, and comparison to similar tools. The return value info partially offsets the missing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with 3 parameters. The description only explains 'name' (bookmark name) and vaguely mentions 'group' (optional group), but does not describe 'expectPage' at all. This is a significant gap given no schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb 'fire' and the resource 'bookmark', and mentions the specific UI mechanism (View > Bookmarks pane, trusted coordinate click) and scope (ANY bookmark, optional group, auto-expand). This distinguishes it from sibling tools like pbi_goto_page or pbi_click.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for firing bookmarks by name, but provides no explicit guidance on when to use this tool versus alternatives (e.g., pbi_click, pbi_goto_page). No when-not or exclusion criteria are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_goto_pageA
Navigate to a page by EXACT name. Returns as soon as the tab switches (the canvas may still be rendering — use pbi_wait_for before reading values); waitReady:true blocks until visuals are painted. On not-found returns closest candidates.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact page display name | |
| waitReady | No | Wait (up to 30s) for the canvas to paint visuals before returning; default false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully bears responsibility. Details timing: returns on tab switch but canvas may still render, waitReady blocks up to 30s. Discloses error behavior: returns closest candidates on not-found. Fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste. First sentence defines core function; second sentence packs behavioral details, blocking option, and error handling. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, yet description explains return behavior (closest candidates on not-found). Covers navigation, timing, blocking, error recovery. Siblings include many tools but this one is self-contained. Complete for an action tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description adds value by explaining the effect of waitReady (blocking vs non-blocking) and the return timing context, which goes beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states navigate to a page by exact name. Verb and resource are specific. Distinguishes from sibling tools like pbi_pages (listing pages) and pbi_fire_bookmark (bookmark navigation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear when-to-use context: navigation requiring exact name. Advises using pbi_wait_for when not blocking, and explains waitReady:true behavior for waiting on rendering. Does not explicitly contrast with alternatives but covers key scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_hover_tooltipA
Trusted mouse-move hover to a point (offsetX/offsetY to aim off-center, e.g. donut ring) and read the tooltip text. Returns {tooltipText} or {tooltipText:null}.
| Name | Required | Description | Default |
|---|---|---|---|
| offsetX | No | ||
| offsetY | No | ||
| selector | No | ||
| ariaLabel | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates the tool performs a trusted mouse-move hover and returns tooltip text or null. It does not disclose behavioral traits such as potential side effects, required navigation state, or behavior if the target element is not found. With no annotations, it carries the full burden but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: first defines action and parameters, second defines return value. Every sentence earns its place, no fluff, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, no output schema, and no annotations, the description is incomplete. It fails to explain selector and ariaLabel, coordinate system for offsets, whether offset values are optional, or if hover triggers tooltip display. The description does not fully compensate for the missing structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description must compensate. It explains offsetX/offsetY as off-center aim (e.g., donut ring), but does not mention selector or ariaLabel parameters. The description adds value for two parameters but leaves half undocumented, making it insufficient for agent understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a trusted hover to read tooltip text, specifying offsetX/offsetY for off-center aiming (e.g., donut ring). It distinguishes from siblings like pbi_click and pbi_context_menu, which perform different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reading tooltips on hover, and provides practical guidance on aiming with offsets. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention when not to use it or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_launchA
Launch Power BI Desktop on a .pbip WITH the CDP debug port. Resolves a launcher in order: PBI_DESKTOP_BRIDGE env → powerbi-desktop on PATH → direct PBIDesktop.exe (reported as launcher: bridge-env|bridge-path|direct). Injects the WebView2 remote-debugging env var into Desktop's own process, spawns detached, waits until the CDP port answers. If the port is already up, reports the running instance instead of launching a second one. Pre-flight warns about orphaned PBIDesktop/msmdsrv. After it returns cdpUp:true, call pbi_wait_for {text:""} — the canvas is still rendering.
| Name | Required | Description | Default |
|---|---|---|---|
| pbip | Yes | Absolute path to the .pbip file | |
| port | No | CDP port (default 9222) | |
| waitPortMs | No | How long to wait for the CDP port to answer (default 240000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description reveals full behavioral details: launcher resolution order (PBI_DESKTOP_BRIDGE env → path → direct), injection of WebView2 remote-debugging env var, detached spawning, waiting for CDP port, reuse of existing instance if port is up, and pre-flight warning. This is highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph. It front-loads the primary action, then efficiently covers resolution order, spawning mechanics, port reuse, pre-flight warning, and post-launch instruction. Every sentence serves a purpose with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (debug port launch, multiple launcher paths) and absence of output schema, the description is remarkably complete. It explains inputs, process, edge cases (port already up), and expected follow-up (pbi_wait_for). No gaps remain for an agent to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so schema already documents the three parameters. The description adds valuable context: explains default values for port (9222) and waitPortMs (240000), and provides additional meaning for pbip (absolute path). It goes beyond the schema by explaining launcher resolution and post-launch behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Launch Power BI Desktop on a .pbip WITH the CDP debug port.' It specifies the exact resource (pbip file) and the key action (launch with debug port). This is specific and distinct from sibling tools like pbi_wait_for or pbi_pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance, including pre-flight warnings about orphaned processes, and post-launch guidance: 'After it returns cdpUp:true, call pbi_wait_for {text:"<page name>"} — the canvas is still rendering.' It also explains behavior when port is already up, avoiding redundant launches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_matrix_expandB
Expand or collapse a matrix hierarchy row (by rowHeader). Grid re-renders; returns {rowsBefore, rowsAfter}.
| Name | Required | Description | Default |
|---|---|---|---|
| collapse | No | ||
| rowHeader | Yes | ||
| titleMatch | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses the re-render side effect and return structure, but does not mention destructiveness, required state, or failure conditions. The behavioral disclosure is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with a single sentence plus a return note. It is front-loaded and contains no superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks explanation of the return values (rowsBefore, rowsAfter) and the effect of the 'collapse' parameter. Given no output schema and 0% schema coverage, the description is insufficient for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description explains the 'rowHeader' parameter but does not clarify the 'collapse' boolean or 'titleMatch' string. Only one of three parameters gains additional meaning from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (expand/collapse) and resource (matrix hierarchy row) with the key identifier (rowHeader). It distinguishes from reading tools like pbi_read_matrix, but does not explicitly differentiate from other sibling tools that might also modify state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor are there any prerequisites or exclusions. The description lacks context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_pagesA
List all report page tabs as [{name, active}].
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral aspects such as side effects, permissions, or limitations. For a read-only list operation, the risk is low, but the description fails to add transparency beyond the basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded. It provides all necessary information without any extraneous text, earning a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description is complete. It specifies the action and the output format, meeting all contextual needs for this low-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so no parameter information is needed. The description does not add any parameter semantics, but the schema coverage is 100% (vacuously). Baseline for zero parameters is 4, indicating no missing information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all report page tabs and specifies the output format as an array of objects with 'name' and 'active' fields. It distinguishes from sibling tools like pbi_goto_page (navigation) and pbi_page_sweep (iteration) by focusing on listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. The tool's simple nature (no parameters, direct output) makes usage intuitive, but it does not mention alternatives or prerequisites, which is acceptable given the low complexity but leaves room for improvement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_page_sweepA
HEAVY, deliberately renders every page: each page switch makes Desktop re-query all its visuals (blank/busy for that page’s real load time, often 10-30s+). Run as an intentional health sweep (≤2 pages per call; user warned/away), never casually. Iterates pages, waits canvas-ready (cap 30s/page), records loadMs + error scan + cards fingerprint; restores the original page.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | ||
| errorScan | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently explains the heavy cost (10-30s+ per page), the waiting mechanism (canvas-ready cap 30s/page), the recording of loadMs and error scan, and the restoration of the original page. This covers the key behavioral traits adequately.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with the heavy warning placed upfront. Each sentence adds value, covering purpose, constraints, behavior, and output. Minor redundancy could be trimmed, but overall it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity and lack of output schema, the description covers the main behaviors and constraints but does not explicitly state what the tool returns or yields (e.g., the recorded data). While it mentions recording loadMs, error scan, and cards fingerprint, the return format is unclear, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning. It explains that 'pages' are the list of page names to iterate and 'errorScan' controls error scanning. This clarifies the parameters beyond their schema definition, though default values or formats are not detailed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: performing a heavy health sweep by rendering each page, measuring load time, scanning errors, and recording a card fingerprint. It distinguishes itself from siblings like pbi_goto_page by emphasizing its deliberate, heavy nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using the tool as an intentional health sweep with a maximum of 2 pages per call and warns against casual use. However, it does not explicitly name alternative tools for lighter navigation or performance checks, leaving the agent to infer when to use this vs. siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_perf_analyzerA
Run the Performance Analyzer lane: per-visual render ms; optional captureQueryFor grabs one visual DAX via clipboard (clobbers clipboard). Restores pane + ribbon.
| Name | Required | Description | Default |
|---|---|---|---|
| captureQueryFor | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility. It discloses that the 'captureQueryFor' parameter clobbers the clipboard and that the tool restores the pane and ribbon after execution. This is helpful behavioral context, although it does not mention whether the tool modifies any data or requires specific permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences totaling 22 words—with no filler. It front-loads the primary purpose and then efficiently covers the optional parameter and side effects. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema, no annotations), the description covers most necessary aspects: purpose, side effect, and restoration behavior. However, it does not clarify what the tool outputs (e.g., where per-visual render ms appear) or whether a visual must be selected. A small gap, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has a single optional parameter with 0% description coverage. The description fully explains this parameter: 'optional captureQueryFor grabs one visual DAX via clipboard (clobbers clipboard).' This adds meaningful semantics beyond the schema's bare type definition, making the parameter's purpose and side effect clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this tool runs the Performance Analyzer lane and measures per-visual render milliseconds. It uses a specific verb ('Run') and resource ('Performance Analyzer lane'), and the additional detail about per-visual ms makes the purpose unmistakable. While it doesn't explicitly distinguish from siblings, no sibling tool has an obviously overlapping purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention scenarios where this tool is preferable or when to avoid it, nor does it reference other tools like pbi_eval or pbi_baseline. The only usage hint is the optional parameter, but no contextual advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_read_cardsA
Parsed card visuals as [{title, value}].
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the return format but does not mention side effects, required state (e.g., presence of card visuals on page), error conditions, or idempotency. The description is minimal but not misleading; it adequately conveys the basic behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise, front-loaded with the action, and contains no unnecessary words. It communicates the tool's purpose efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description covers the core behavior. However, it lacks context about when card visuals exist or how to ensure they are present. A more complete description might mention invoking after pbi_visuals or similar dependency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters (0 params, 100% schema coverage), so no parameter documentation is needed. The description adds no parameter information but is consistent with the schema. Per guidelines, 0 params warrants a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool parses card visuals and returns a list of dictionaries with title and value. It uses a specific verb ('parses') and resource ('card visuals'), and distinguishes itself from siblings like pbi_read_matrix by focusing specifically on card visuals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. While the purpose is clear and it's a simple read operation, there is no mention of prerequisites or when not to use it. The presence of sibling tools like pbi_read_matrix suggests different visual types, but no comparison is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_read_dax_editorA
Read the DAX query view editor text (Monaco). Reaches the daxQueryView CDP target (a SEPARATE page from reportView); returns {ok:false, reason} if that view has never been opened in Desktop (open it via the DAX query view tab first — this tool will NOT open ribbon views). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that it reaches a separate page, returns error if view not opened, and is read-only. This adequately informs the agent of behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. Essential information is front-loaded: action, target, constraints, and error case.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description covers the tool's purpose, error conditions, and constraints. Slightly lacking explicit statement of success return value, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist in the schema, so description does not need to add parameter details. Baseline of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it reads the DAX query view editor text, specifies the target (daxQueryView CDP target), and distinguishes it from reportView. Also declares itself read-only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when the tool will fail (if view never opened) and instructs to open via the DAX query view tab first. Explicitly states it will not open ribbon views, helping differentiate from other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_read_matrixA
Read a matrix/grid fully as {columns, rows:[{header, cells}], ariaRowCount, ariaColCount, complete}. Scrolls virtualized grids and merges by row header.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | ||
| titleMatch | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes key behaviors: scrolls virtualized grids and merges by row header. Since no annotations are provided, the description fully covers behavioral traits expected for a read operation, though lacks mention of potential side effects or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with high information density. Front-loads output structure, then adds behavioral details. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides output shape compensating for missing output schema, but critically lacks parameter documentation. Completeness is adequate for a simple tool but falls short given the lack of param descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No explanation of the two parameters (index, titleMatch) despite 0% schema description coverage. The description adds no meaning beyond the schema, leaving agents unable to determine how to use these optional parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'Read' and resource 'matrix/grid'. Specifies output format {columns, rows, ...} and unique behaviors like scrolling virtualized grids and merging by row header. Distinct from siblings like pbi_read_cards.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for reading matrices with virtualized grids, but no explicit guidance on when to use vs alternatives or prerequisites. Missing context on when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_read_tmdlA
Read the TMDL view editor text (Monaco). Reaches the tmdlView CDP target (a SEPARATE page from reportView); returns {ok:false, reason} if that view has never been opened in Desktop (open the TMDL view tab first — this tool will NOT open ribbon views). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full weight. It discloses read-only nature, the error case when view not opened, and that it does not open ribbon views. Gives architectural context (separate page from reportView). Minor omission: doesn't explicitly describe success response format, but can be inferred.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no wasted words. Front-loaded with primary action, followed by essential caveats. Excellent structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description covers purpose, prerequisites, error behavior, and read-only nature. Lacks explicit success response but is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has zero parameters; description does not need to add semantics. Baseline of 4 applies as no information is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (read), the target (TMDL view editor text), and distinguishes it from sibling tools like pbi_read_dax_editor by emphasizing it's a separate page and requires prior opening. No tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (to read TMDL view text) and when it fails (if view never opened), and instructs to open the tab first. It does not explicitly mention alternatives but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_run_codeA
TRUSTED escape hatch (browser_run_code_unsafe equivalent). Runs an async JS function with the live Playwright reportView page — page.mouse/page.keyboard give REAL trusted input (unlike pbi_eval, which is page.evaluate and cannot do trusted clicks/keys). Use for rediscovery + interactions the canned tools do not cover. The code string must be an async arrow/function taking (page); its return value is JSON-serialized. Rejects powerBIAccessToken. UNSAFE: arbitrary automation — mutating clicks change report state, so restore after. The powerBIAccessToken rejection is a best-effort textual guard (a regex on the code string), not a sandbox. NOTE inside page.evaluate sandboxes setTimeout is undefined — use page.waitForTimeout(ms).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | async (page) => { ... } — returns JSON-serializable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description extensively discloses behavioral traits: trusted input via page.mouse/keyboard, arbitrary automation risk, best-effort powerBIAccessToken guard, need to restore state after mutations, and setTimeout inside page.evaluate. This exceeds basic expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense with useful information and front-loaded with the 'escape hatch' purpose. While every sentence earns its place, the length is slightly high; a more streamlined presentation could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 param, no output schema), the description is fully comprehensive: it covers purpose, usage context, behavioral warnings, parameter requirements, and security limitations. No unnecessary omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'code', but the description adds meaningful context: it must be an async arrow/function taking (page), return value is JSON-serialized, and includes a security guard note. This adds value beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it runs an async JS function with a live Playwright page, providing real trusted input. It explicitly distinguishes itself from pbi_eval by contrasting with page.evaluate, making the purpose and differentiation precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises use for rediscovery and interactions not covered by canned tools, and warns about unsafe automation and state restoration. While it implicitly favors canned tools when available, it lacks explicit 'when not to use' or direct alternatives beyond pbi_eval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_scan_errorsA
Scan visible visuals for broken/errored surfaces + recent non-benign console errors. Excludes the permanent favicon.ico error (reported as benignFaviconCount).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must fully disclose behavior. It mentions the exclusion of favicon errors but does not discuss side effects, permissions, or reliability. The tool appears to be a read-only scan, but this is not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the main action, no wasted words. The description is concise and efficiently communicates the tool's purpose and key detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description is mostly complete. It covers the main function and an important exclusion. Minor ambiguity around 'recent' could be clarified, but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the description does not need to add parameter-level meaning. Baseline score of 4 is appropriate as the description adequately handles the no-parameter case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool scans visible visuals for broken/errored surfaces and recent non-benign console errors, with a specific exclusion. This distinguishes it from sibling tools like pbi_screenshot or pbi_read_cards, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context about excluded favicon errors but does not explicitly state when to use this tool versus alternatives. Given many sibling tools, more explicit guidance would improve usability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_screenshotA
Screenshot the reportView page to the output dir (never the repo). Optional filename + fullPage. With visualTitle, clips the shot to the matching visual (exact then case-insensitive contains on the same title logic as pbi_visuals) and returns {clippedTo}; on a miss returns {saved:false, reason, candidates}. Returns {path}.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | ||
| fullPage | No | ||
| visualTitle | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses output location (not repo), return objects ({path}, {clippedTo}, error structure), and matching logic (exact then case-insensitive contains). It does not cover permissions or side effects, but the read-only nature is inferred.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence conveying all key information. It is relatively concise but could be better structured (e.g., with separate sentences or bullet points) for readability. No extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers return values ({path}, {clippedTo}, error case) and matching logic adequately. It could mention the output directory is configurable, but overall it provides sufficient context for a screenshot tool with 3 optional parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description explains each parameter's purpose: filename (optional), fullPage (optional), visualTitle (clips to matching visual with specific logic). It adds significant meaning, including error handling with candidates list, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it screenshots the reportView page, specifies optional parameters (filename, fullPage, visualTitle), and details clipping behavior. It differentiates from sibling tools like pbi_visuals by referencing the same visual logic for title matching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly covers usage (screenshots with optional clipping) but does not explicitly state when to use this tool over siblings, nor does it provide exclusions or alternatives. The agent can infer from context but lacks clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_search_slicerA
Type into a slicer's search box and (optionally) click the matching result. Focuses the box IN-PAGE and ABORTS (searched:false) if focus does not land on it — never sends keystrokes to the canvas (a mis-focused select-all+delete once removed all page visuals). Clears via the input's own value, types query, polls for filtered .slicerItemContainer items, returns them as matches. With pick, clicks the item equalling (then including) pick. Returns {searched, picked, pickedLabel?, matches} or {searched:false, reason}. Mutates a filter when pick clicks — restore after.
| Name | Required | Description | Default |
|---|---|---|---|
| pick | No | ||
| query | Yes | ||
| container | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behaviors: never sends keystrokes to canvas (historical bug), clears via input's own value, polls for filtered items, returns specific shape, and notes mutation of filter when pick is used. This is comprehensive and builds trust.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and contains valuable behavioral details, but it is somewhat lengthy. Every sentence adds meaning, but there is minor redundancy (e.g., 'never sends keystrokes' could be integrated). A good balance of completeness and conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 params, no output schema, no annotations), the description covers return values, mutation effects, and edge cases (focus abort). It lacks explanation for the 'container' parameter, but overall provides sufficient context for an AI agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has three parameters (query, pick, container) with zero description coverage. The description explains query and pick (including matching logic), but container is not described, leaving a semantic gap. Though the description adds value for two parameters, the missing container reduces effectiveness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool types into a slicer's search box and optionally clicks a matching result. It uses specific verb 'type' and resource 'slicer search box', distinguishing it from siblings like pbi_set_slicer (which sets slicer state) and pbi_type (general typing).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (to search and pick slicer items) and provides behavioral details such as aborting if focus fails and clearing via input's value. However, it does not explicitly state when not to use it or compare with alternatives like pbi_set_slicer, which would strengthen guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_set_slicerA
Set a slicer: kind "button" (buttonSlicerVisual, returns aria-pressed before/after) or "item" (list slicer item, returns a fresh state probe).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose all behaviors. It reveals that button kind returns aria-pressed before/after and item kind returns a fresh state probe, but does not mention side effects, destructive potential, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the action. However, it uses parentheses and could be restructured for clarity. Still, it earns its place with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two parameters, no output schema, and no annotations, the description provides basic understanding but omits details about return types, error cases, and state changes. It is adequate but incomplete for a full contextual picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must clarify parameters. It explains the 'kind' parameter with its two enum values and the different returns, but fails to describe the 'value' parameter, leaving ambiguity about its format or meaning for each kind.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sets a slicer and distinguishes two specific kinds ('button' and 'item'), each with distinct behavior and return values. This provides a specific verb-resource-action and differentiates the tool's two modes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use each kind (button vs item) but does not explicitly mention when not to use this tool or compare it to siblings like 'pbi_search_slicer' or 'pbi_click'. Lacks explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_snapshotA
Accessibility-tree snapshot of the reportView page (browser_snapshot equivalent) for structure discovery when a selector drifts. Returns the ARIA snapshot (roles + accessible names, indented) as lines. selector scopes to a sub-tree (default "body"); filter (regex string) keeps only matching lines (with their indent); maxLines caps output. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Regex; keep only lines whose text matches | |
| maxLines | No | Cap returned lines (default 400) | |
| selector | No | Root to snapshot; default "body" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description fully discloses behavior: read-only, returns indented lines of ARIA snapshot, selector scoping to sub-tree, filter regex with indent preservation, maxLines cap with default 400. Clearly labeled 'Read-only' at end.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: first states purpose and analogy, second describes output format, third explains all three parameters with defaults. Front-loaded and no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description sufficiently explains return format (lines with roles and accessible names, indented). All parameters are described with defaults and behavior. Maps well to tool complexity and sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (baseline 3), but description adds value: explains filter keeps matching lines with their indent, gives default values for maxLines (400) and selector ('body'), and clarifies selector roots the snapshot.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Explicitly states it returns accessibility-tree snapshot of reportView page, comparable to browser_snapshot, for structure discovery when selectors drift. Clearly differentiates from siblings like pbi_deep_snapshot by specifying it returns ARIA snapshot with roles and accessible names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context for when to use: 'for structure discovery when a selector drifts.' Although it doesn't explicitly list alternatives or when not to use, the use case is clearly implied, guiding the agent appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_state_probeB
Batched scorecard: {activePage, toggles, cards, badges, selectedCount, slicerItemsVisible, visibleVisualCount}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It lists return fields but does not disclose behavioral traits like read-only nature, side effects, or rate limits. The name 'state_probe' implies a read operation, but this is not explicitly confirmed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single line, which is concise but could be more front-loaded with a clear action verb. The list of fields in braces is efficient, but a more structured sentence would improve clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the return fields. However, it lacks context on when to use this probe compared to other state-related tools, and it does not describe the behavior of a 'batched scorecard' in detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4. The description adds meaning by listing the output fields (activePage, toggles, etc.), which compensates for the absence of a return schema. This tells the agent what to expect from the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description includes a specific verb ('Batched scorecard') and lists concrete state fields, distinguishing it from sibling tools like pbi_snapshot or pbi_read_cards which focus on single aspects. However, it does not explicitly state a verb like 'get' or 'retrieve', leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as pbi_snapshot or pbi_deep_snapshot. There is no mention of use cases, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_statusA
Connect to Power BI Desktop over CDP and report status: build, title bar, active page, page count, zoom, canvasReady. Returns {connected:false,...} if unreachable.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the connection behavior, the specific status fields reported, and the fallback return value. This provides sufficient transparency for a read-only status check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the key action and lists details efficiently. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description covers input (none), behavior (connecting over CDP, reporting specific fields), and output format (including failure case). This is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters are defined, so baseline score is 4. The description does not need to add parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool connects to Power BI Desktop over CDP and reports status, listing specific fields like build, title bar, active page, page count, zoom, canvasReady. This differentiates it from sibling tools that perform more specific actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that the tool is used to check status and connectivity, including the return format when unreachable. However, it does not explicitly mention when not to use this tool or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_typeA
Type text into an editable element (input/textarea/contenteditable/searchbox/textbox) via TRUSTED keyboard input. Target resolution: selector > element whose aria-label includes ariaLabel > first visible search/text input. Focuses the input IN-PAGE and ABORTS (typed:false) if focus does not land on it — never sends keystrokes to the canvas. clear empties the input via its own value (no global select-all); submit presses Enter. Returns {typed, matchedLabel, cleared, submitted}. WARNING: real typing mutates report state — restore/clear when testing.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| clear | No | ||
| submit | No | ||
| selector | No | ||
| ariaLabel | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It discloses target resolution order, focus behavior, abort on focus failure, clear and submit mechanics, return value shape, and a clear warning about state mutation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise and front-loaded with purpose. It efficiently packs technical details, though could benefit from structured bullets for clarity. No wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, target resolution, clear/submit behaviors, return value, and mutation warning. Missing some edge cases (e.g., interplay of clear and submit, behavior with empty text) but given complexity, it is largely complete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It explains clear, submit, selector, and ariaLabel behaviors in context. The required 'text' parameter is obvious from tool name but could be more explicit about appending vs replacing. Overall, adds significant meaning beyond bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool types text into editable elements via trusted keyboard input. It specifies target element types and resolution order, distinguishing it from sibling tools like pbi_click which handle clicks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by purpose but no explicit comparison to alternatives or conditions for use. The warning about mutating report state provides some context for when to use (testing), but does not state when not to use or suggest alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_visualsA
List every visible visual on the active page as [{title, type, x, y, width, height, hasError}]. type is a class-token heuristic (barChart, slicer, card, tableEx, pivotTable, donutChart, …; null when unknown); title from the container/descendant aria-label or .visualTitle; hasError reuses the broken-visual scan. Coordinates are getBoundingClientRect() rounded. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description fully discloses behavioral traits: it explains the heuristic for 'type', the sources for 'title', the rounding of coordinates, and the reuse of the broken-visual scan for 'hasError'. It also declares the tool as 'Read-only', which is crucial since no annotations are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at two sentences, front-loaded with the output format, and efficiently explains each field. No superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite lacking output schema, the description thoroughly explains the output format and each field, covering edge cases like null type. It could mention behavior on empty pages or error states, but overall it is sufficiently complete for a parameterless tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and the input schema is empty with 100% coverage. The description provides no parameter information, but baseline is 3 as per rules for high schema coverage. The description focuses on output, which is not part of this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool lists every visible visual on the active page with a detailed output format including all fields. It distinguishes from sibling tools like pbi_snapshot or pbi_read_cards, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states what the tool does but does not provide explicit guidance on when to use it versus alternatives. Usage is implied from the output description, but no direct comparison or exclusion criteria are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pbi_wait_forB
Poll body innerText until text appears (text) or disappears (textGone). Returns {satisfied, elapsedMs}.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| textGone | No | ||
| timeoutMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions polling and return format but omits critical details such as polling interval, default timeout, behavior when both text and textGone are specified, and error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, conveying core functionality in a single sentence plus return type. No extraneous information, well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters, no output schema, and no annotations, the description leaves significant gaps: no explanation of mutual exclusivity of text/textGone, no default timeout, no behavior on timeout or errors. Insufficient for an agent to use reliably without additional inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description explains the purpose of text and textGone parameters. However, timeoutMs is not mentioned despite being a parameter, leaving its role unclear. Partial compensation but missing one parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool polls body innerText until a specified text appears (text) or disappears (textGone), and returns a result object. It distinctly describes a waiting/polling utility, differentiating it from sibling tools that perform clicks, queries, or other actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when waiting for text conditions but does not explicitly state when to use versus alternatives like pbi_state_probe. No guidance on when not to use or prerequisite conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools have clearly distinct purposes, with detailed descriptions that differentiate similar functionalities (e.g., pbi_eval vs pbi_run_code, pbi_snapshot vs pbi_deep_snapshot). A few pairs could be confused (pbi_type vs pbi_search_slicer) but the descriptions provide enough context to resolve ambiguity.
All tools consistently follow a 'pbi_' prefix with a verb_noun pattern (e.g., pbi_click, pbi_read_cards, pbi_search_slicer). There is no mixing of naming conventions, and the pattern is predictable and clear.
With 33 tools, the server covers a wide range of Power BI automation tasks, but the count feels high for an MCP server. Some tools are noted as inert or very niche (e.g., pbi_emulate_theme), suggesting slight bloat. Still, the domain complexity somewhat justifies the number.
The tool set covers essential operations: launch, navigation, visuals reading, interaction (click, type, slicer, context menu), data query (DAX, TMDL), error scanning, and state probing. Missing are data refresh or structural modifications like adding pages or visuals, but for automation and testing, the set is comprehensive.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
AI-powered web automation. Navigate websites using AI agents for one page or a thousand
AI-powered web automation. Navigate websites using AI agents for one page or a thousand
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI coding assistants to control and inspect a live Chrome browser for automation, debugging, performance analysis, and screenshot capture through Chrome DevTools.263,288,1653Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to control and inspect a live Chrome browser for automated web debugging, performance analysis, and Lighthouse audits. It allows agents to capture screenshots, monitor network requests, and measure Core Web Vitals using plain-English prompts.3,288,165Apache 2.0
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with TradingView Desktop via Chrome DevTools Protocol for automated morning briefs, chart analysis, Pine script development, and trading workflows.552
- AlicenseNot gradedqualityCmaintenanceEnables AI hosts to drive cross-platform desktop GUI automation and browser control, providing tools to read, click, type, send shortcuts, screenshot, and verify GUI elements and web pages.327MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bibiibjorn/pbi-webview2'
If you have feedback or need assistance with the MCP directory API, please join our Discord server