operagx-connector-plus
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OPERAGX_CDP_URL | Yes | The URL of the Chrome DevTools Protocol endpoint for Opera GX (e.g., http://localhost:9222). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| operagx_list_tabsA | Lists every open tab with a stable tabId usable by every other tool in this server. This complements the read-only Args: none. Returns: { "tabs": [ { "tabId": string, "url": string, "title": string, "index": number } ] } Examples:
|
| operagx_map_elementsA | Scans the page for clickable/fillable elements (links, buttons, inputs, selects, ARIA widgets) and returns each with a small integer id, role, text, CSS selector, and viewport coordinates. By default it also draws numbered badges on the live page — call the base connector's
Args:
Returns: { "count": number, // elements actually returned (<= limit) "totalFound": number, // elements matched before truncation "truncated": boolean, // true if totalFound > count "elements": [ { "id": number, // pass this as elementId to other tools "tag": string, // e.g. "input", "button", "a" "role": string | null, // ARIA role, if set "text": string, // visible text / placeholder / aria-label, truncated to 120 chars "selector": string, // CSS selector (fallback addressing) "rect": { "x": number, "y": number, "width": number, "height": number }, "center": { "x": number, "y": number }, "attributes": { [name: string]: string } // id/class/name/type/role/placeholder/aria-label/value/href } ] } Examples:
Error Handling:
|
| operagx_clear_annotationsA | Removes the numbered overlay badges left behind by operagx_map_elements. Args:
Returns: { "ok": true } Examples:
|
| operagx_clickA | Clicks a real point in the browser via CDP mouse input (Input.dispatchMouseEvent), not a JS-level element.click(), so native behaviors (custom canvas controls, drag handles, popups, focus/blur listeners) fire exactly as they would for a human click. Args:
Exactly one of elementId, selector, or x+y must be given. Returns: { "ok": true, "clickedAt": { "x": number, "y": number, "selector"?: string } } Examples:
Error Handling:
|
| operagx_hoverA | Moves the mouse over an element or point without clicking, e.g. to reveal a hover-triggered menu or tooltip before interacting with it. Args:
Returns: { "ok": true, "hoveredAt": { "x": number, "y": number, "selector"?: string } } Examples:
|
| operagx_type_textA | Focuses an element (by clicking it) and types text using real per-character key events (CDP Input.dispatchKeyEvent), so JS keydown/input listeners, IME composition, and masked inputs behave like real typing rather than a value assignment. Args:
Returns: { "ok": true, "typedInto": { "x": number, "y": number, "selector"?: string } } Examples:
|
| operagx_press_keyA | Sends a key or chord to the focused element or page, e.g. "Enter", "Escape", "Tab", "Control+A", "Control+Shift+ArrowLeft". If a target is given, it is clicked/focused first. Args:
Returns: { "ok": true } Examples:
|
| operagx_fill_formA | Fills multiple fields in one call and optionally submits at the end. Each field targets an element the same way as operagx_click (elementId/selector/x+y). Args:
Returns: { "ok": true, "fields": [ { "filledAt": { "x": number, "y": number, "selector"?: string }, "value": string } ] } Examples:
|
| operagx_select_optionA | Chooses an option in a native dropdown by value, label, or index. Args:
Returns: { "ok": true, "selected": string[] } // the value(s) selected, per the DOM API Examples:
Error Handling:
|
| operagx_drag_and_dropA | Performs a real mouse-down / move / mouse-up drag between two points or elements, so drag handlers relying on genuine mousemove events (sortable lists, sliders, canvas handles) receive the motion they expect. Args:
Returns: { "ok": true, "from": { "x": number, "y": number, "selector"?: string }, "to": { "x": number, "y": number, "selector"?: string } } Examples:
|
| operagx_scrollA | Scrolls the page with a real mouse-wheel event, or scrolls a specific element into view. Args:
Returns: Either { "ok": true, "scrolledTo": { "x": number, "y": number, "selector"?: string } } or { "ok": true, "delta": { "x": number, "y": number } } Examples:
|
| operagx_wait_forA | Waits until a selector reaches a given state, or times out. Args:
Returns: { "ok": true } Examples:
Error Handling:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 12 tools
Each tool targets a distinct user interaction: typing, clicking, hovering, key presses, form filling, option selection, drag-and-drop, scrolling, waiting, and element mapping. Even the overlapping type_text and fill_form are clearly differentiated by scope (single field vs. multi-field with submit).
All tools share the 'operagx_' prefix and use clear snake_case verb-based names (type_text, list_tabs, clear_annotations, drag_and_drop). Single-word verbs like 'click' and 'scroll' are still consistent with the action-oriented pattern and do not cause confusion.
12 tools is a well-scoped set for a browser interaction extension. Each tool covers a distinct, commonly needed automation primitive without redundancy, fitting comfortably within the ideal 3-15 tool range.
The interaction surface is strong: click, type, hover, key press, form fill, select, drag-and-drop, scroll, wait, and element mapping. Minor gaps exist like file upload or iframe switching, but these are likely left to the base connector, so the extension's purpose is well covered.