Skip to main content
Roveflow ships two kinds of tools the agent calls through MCP:
  1. App-side tools registered at runtime by registerMcpInteractionTools() inside your Flutter app (debug mode only). Defined in lib/core/mcp/mcp_interaction_tools.dart after roveflow init.
  2. flutter-inspector MCP tools provided by the flutter_inspector_mcp binary — process control, screenshots, hot reload.
This page is the authoritative list.

App-side tools

Registered by registerMcpInteractionTools() via MCPToolkitBinding. These run inside your app’s Dart isolate. Pops the current route, bottom sheet, or dialog via your app’s navigate.pop() helper.
  • Arguments: none.
  • Returns: "Navigated back".

tap_by_text

Finds a widget whose visible text matches exactly and dispatches a tap at its center.
  • Arguments:
    • text (string, required) — exact visible text of the widget to tap.
  • Returns: "Tapped text \"<text>\" at (x, y)" on success, "Error: widget with text \"<text>\" not found" otherwise.
The matcher compares RichText.text.toPlainText() against the argument. Partial matches are not supported; pass the full rendered string.

tap_by_key

Finds a widget with a matching ValueKey string and dispatches a tap at its center.
  • Arguments:
    • key (string, required) — the string value of the ValueKey on the widget.
  • Returns: "Tapped key \"<key>\" at (x, y)" on success, "Error: widget with key \"<key>\" not found" otherwise.
Used when a scenario declares preferred_keys. See Using ValueKeys.

scroll_to_text

Scrolls the nearest Scrollable ancestor until a widget with the given text becomes visible.
  • Arguments:
    • text (string, required) — exact visible text to scroll to.
  • Returns: "Scrolled to text \"<text>\"" on success, error string otherwise.

tap_at

Dispatches a tap at raw logical pixel coordinates. Last-resort navigation — flagged as fragile when used.
  • Arguments:
    • x (string, required) — logical x coordinate.
    • y (string, required) — logical y coordinate.
  • Returns: "Tapped at (x, y)".

swipe

Dispatches a swipe gesture from a start point to an end point over N intermediate pointer events. Used for horizontal scrolling of date pickers, carousels, and similar.
  • Arguments:
    • start_x (string, required) — start logical x coordinate.
    • start_y (string, required) — start logical y coordinate.
    • end_x (string, required) — end logical x coordinate.
    • end_y (string, required) — end logical y coordinate.
    • steps (string, optional, default 10) — number of intermediate points.
  • Returns: "Swiped from (start_x, start_y) to (end_x, end_y) in <steps> steps".

flutter-inspector MCP tools

Provided by the flutter_inspector_mcp binary pointed at from .mcp.json. These tools run outside your app process and connect to the live VM service.
ToolPurpose
get_vmPreflight check — confirms the VM service is reachable at the configured port.
hot_reload_flutterTriggers a hot reload. Used once if dynamic tool registration looks incomplete.
runClientResourceInvokes a registered app-side tool (navigate_back, tap_by_text, etc.) by name.
ReadMcpResourceTool (visual://localhost/view/screenshots)Captures a screenshot; returns a blob path the agent adds to its screenshots array.
The roveflow-runner agent declares only the tools it is allowed to call — the full list is in .claude/agents/roveflow-runner.md.

Tool call logging

Every MCP call is written to the scenario’s calls.jsonl with ts, tool, args, and result.