Skip to main content
Glama

Control browser

control_browser
Destructive

Use this when the target is a debuggable Chromium page and the task needs tabs, navigation, DOM/accessibility inspection, element search/actions, waits, or explicit JavaScript evaluation. Snapshot, find, and wait operations observe page state; navigation, clicks, typing, uploads, and JavaScript evaluation can change page or remote-site state. Choose one operation and pass only its validated parameters. Use control_computer for browser chrome or other native desktop/non-CDP applications.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
deviceYesReMCP device id returned by list_devices.
operationYesConcrete runtime operation to perform inside this domain.
parametersNoArguments for the selected operation. The selected operation keeps its original closed input schema.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
dataNoOptional structured result data for follow-up reasoning and tool calls.
textYesConcise human-readable result of the tool call.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / allOf
      Previous value: -[
      -  {
      -    "if": {
      -      "properties": {
      -        "operation": {
      -          "const": "browser_tabs"
      -        }
      -      },
      -      "required": [
      -        "operation"
      -      ]
      -    },
      -    "then": {
      -      "properties": {
      -        "parameters": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "endpoint": {
      -              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      -              "type": "string"
      -            },
      -            "target_id": {
      -              "description": "Page target id returned by browser_tabs.",
      -              "type": "string"
      -            },
      -            "timeout_ms": {
      -              "description": "Timeout in milliseconds.",
      -              "type": "number"
      -            },
      -            "title": {
      -              "description": "Choose a page whose title contains this text.",
      -              "type": "string"
      -            },
      -            "url_contains": {
      -              "description": "Choose a page whose URL contains this text.",
      -              "type": "string"
      -            }
      -          },
      -          "type": "object"
      -        }
      -      }
      -    }
      -  },
      -  {
      -    "if": {
      -      "properties": {
      -        "operation": {
      -          "const": "browser_navigate"
      -        }
      -      },
      -      "required": [
      -        "operation"
      -      ]
      -    },
      -    "then": {
      -      "properties": {
      -        "parameters": {
      -          "additionalProperties": false,
      -          "allOf": [
      -            {
      -              "if": {
      -                "properties": {
      -                  "action": {
      -                    "enum": [
      -                      "url",
      -                      "new_tab"
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "action"
      -                ]
      -              },
      -              "then": {
      -                "required": [
      -                  "url"
      -                ]
      -              }
      -            }
      -          ],
      -          "properties": {
      -            "action": {
      -              "description": "Default url when url is provided, otherwise reload. new_tab creates the first page target when needed.",
      -              "enum": [
      -                "url",
      -                "new_tab",
      -                "back",
      -                "forward",
      -                "reload"
      -              ],
      -              "type": "string"
      -            },
      -            "endpoint": {
      -              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      -              "type": "string"
      -            },
      -            "ignore_cache": {
      -              "description": "Reload without cache when action=reload.",
      -              "type": "boolean"
      -            },
      -            "target_id": {
      -              "description": "Page target id returned by browser_tabs.",
      -              "type": "string"
      -            },
      -            "timeout_ms": {
      -              "description": "Timeout in milliseconds.",
      -              "type": "number"
      -            },
      -            "title": {
      -              "description": "Choose a page whose title contains this text.",
      -              "type": "string"
      -            },
      -            "url": {
      -              "description": "Destination URL for action=url or action=new_tab.",
      -              "type": "string"
      -            },
      -            "url_contains": {
      -              "description": "Choose a page whose URL contains this text.",
      -              "type": "string"
      -            },
      -            "wait": {
      -              "description": "Wait for the page load event; default true.",
      -              "type": "boolean"
      -            }
      -          },
      -          "type": "object"
      -        }
      -      }
      -    }
      -  },
      -  {
      -    "if": {
      -      "properties": {
      -        "operation": {
      -          "const": "browser_snapshot"
      -        }
      -      },
      -      "required": [
      -        "operation"
      -      ]
      -    },
      -    "then": {
      -      "properties": {
      -        "parameters": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "endpoint": {
      -              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      -              "type": "string"
      -            },
      -            "include_screenshot": {
      -              "description": "Attach a real CDP-rendered viewport PNG screenshot; default false.",
      -              "type": "boolean"
      -            },
      -            "max_nodes": {
      -              "description": "Maximum AX nodes; default 1500.",
      -              "type": "number"
      -            },
      -            "selector": {
      -              "description": "When include_screenshot=true, center this CSS-selected element before capture and report its viewport bounds.",
      -              "type": "string"
      -            },
      -            "target_id": {
      -              "description": "Page target id returned by browser_tabs.",
      -              "type": "string"
      -            },
      -            "timeout_ms": {
      -              "description": "Timeout in milliseconds.",
      -              "type": "number"
      -            },
      -            "title": {
      -              "description": "Choose a page whose title contains this text.",
      -              "type": "string"
      -            },
      -            "url_contains": {
      -              "description": "Choose a page whose URL contains this text.",
      -              "type": "string"
      -            }
      -          },
      -          "type": "object"
      -        }
      -      }
      -    }
      -  },
      -  {
      -    "if": {
      -      "properties": {
      -        "operation": {
      -          "const": "browser_find"
      -        }
      -      },
      -      "required": [
      -        "operation"
      -      ]
      -    },
      -    "then": {
      -      "properties": {
      -        "parameters": {
      -          "additionalProperties": false,
      -          "anyOf": [
      -            {
      -              "required": [
      -                "selector"
      -              ]
      -            },
      -            {
      -              "required": [
      -                "text"
      -              ]
      -            },
      -            {
      -              "required": [
      -                "role"
      -              ]
      -            }
      -          ],
      -          "properties": {
      -            "endpoint": {
      -              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      -              "type": "string"
      -            },
      -            "limit": {
      -              "description": "Maximum number of results to return.",
      -              "type": "number"
      -            },
      -            "role": {
      -              "description": "ARIA role.",
      -              "type": "string"
      -            },
      -            "selector": {
      -              "description": "CSS selector.",
      -              "type": "string"
      -            },
      -            "target_id": {
      -              "description": "Page target id returned by browser_tabs.",
      -              "type": "string"
      -            },
      -            "text": {
      -              "description": "Visible text substring.",
      -              "type": "string"
      -            },
      -            "timeout_ms": {
      -              "description": "Timeout in milliseconds.",
      -              "type": "number"
      -            },
      -            "title": {
      -              "description": "Choose a page whose title contains this text.",
      -              "type": "string"
      -            },
      -            "url_contains": {
      -              "description": "Choose a page whose URL contains this text.",
      -              "type": "string"
      -            }
      -          },
      -          "type": "object"
      -        }
      -      }
      -    }
      -  },
      -  {
      -    "if": {
      -      "properties": {
      -        "operation": {
      -          "const": "browser_action"
      -        }
      -      },
      -      "required": [
      -        "operation"
      -      ]
      -    },
      -    "then": {
      -      "properties": {
      -        "parameters": {
      -          "additionalProperties": false,
      -          "allOf": [
      -            {
      -              "if": {
      -                "properties": {
      -                  "action": {
      -                    "enum": [
      -                      "click",
      -                      "focus",
      -                      "type",
      -                      "set_value",
      -                      "select",
      -                      "scroll_into_view"
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "action"
      -                ]
      -              },
      -              "then": {
      -                "anyOf": [
      -                  {
      -                    "required": [
      -                      "selector"
      -                    ]
      -                  },
      -                  {
      -                    "required": [
      -                      "text"
      -                    ]
      -                  }
      -                ]
      -              }
      -            },
      -            {
      -              "if": {
      -                "properties": {
      -                  "action": {
      -                    "const": "upload"
      -                  }
      -                },
      -                "required": [
      -                  "action"
      -                ]
      -              },
      -              "then": {
      -                "anyOf": [
      -                  {
      -                    "required": [
      -                      "path"
      -                    ]
      -                  },
      -                  {
      -                    "required": [
      -                      "paths"
      -                    ]
      -                  }
      -                ],
      -                "required": [
      -                  "selector"
      -                ]
      -              }
      -            },
      -            {
      -              "if": {
      -                "properties": {
      -                  "action": {
      -                    "const": "press"
      -                  }
      -                },
      -                "required": [
      -                  "action"
      -                ]
      -              },
      -              "then": {
      -                "required": [
      -                  "key"
      -                ]
      -              }
      -            }
      -          ],
      -          "properties": {
      -            "action": {
      -              "description": "Operation to perform; choose the narrowest action that directly matches the requested outcome.",
      -              "enum": [
      -                "click",
      -                "focus",
      -                "type",
      -                "set_value",
      -                "select",
      -                "scroll_into_view",
      -                "upload",
      -                "press",
      -                "set_viewport"
      -              ],
      -              "type": "string"
      -            },
      -            "device_scale_factor": {
      -              "description": "Device scale factor for set_viewport; default 1.",
      -              "type": "number"
      -            },
      -            "endpoint": {
      -              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      -              "type": "string"
      -            },
      -            "height": {
      -              "description": "CSS viewport height for set_viewport.",
      -              "type": "number"
      -            },
      -            "key": {
      -              "description": "Single key name such as Enter, Escape, Tab or A.",
      -              "type": "string"
      -            },
      -            "mobile": {
      -              "description": "Enable mobile emulation for set_viewport.",
      -              "type": "boolean"
      -            },
      -            "option": {
      -              "description": "Option value to select in a browser select element.",
      -              "type": "string"
      -            },
      -            "path": {
      -              "description": "Permitted local filesystem path.",
      -              "type": "string"
      -            },
      -            "paths": {
      -              "description": "List of permitted local filesystem paths.",
      -              "items": {
      -                "type": "string"
      -              },
      -              "minItems": 1,
      -              "type": "array"
      -            },
      -            "selector": {
      -              "description": "CSS selector for the target element; prefer the reusable selector returned by browser_find.",
      -              "type": "string"
      -            },
      -            "target_id": {
      -              "description": "Page target id returned by browser_tabs.",
      -              "type": "string"
      -            },
      -            "text": {
      -              "description": "For action=type, Unicode text to insert. For element actions without selector, visible text may identify the target.",
      -              "type": "string"
      -            },
      -            "text_value": {
      -              "description": "Compatibility alias for the type/set_value text value.",
      -              "type": "string"
      -            },
      -            "timeout_ms": {
      -              "description": "Timeout in milliseconds.",
      -              "type": "number"
      -            },
      -            "title": {
      -              "description": "Choose a page whose title contains this text.",
      -              "type": "string"
      -            },
      -            "url_contains": {
      -              "description": "Choose a page whose URL contains this text.",
      -              "type": "string"
      -            },
      -            "value": {
      -              "description": "Value for action=set_value; also accepted as a compatibility fallback for action=type.",
      -              "type": "string"
      -            },
      -            "width": {
      -              "description": "CSS viewport width for set_viewport.",
      -              "type": "number"
      -            }
      -          },
      -          "required": [
      -            "action"
      -          ],
      -          "type": "object"
      -        }
      -      },
      -      "required": [
      -        "parameters"
      -      ]
      -    }
      -  },
      -  {
      -    "if": {
      -      "properties": {
      -        "operation": {
      -          "const": "browser_wait"
      -        }
      -      },
      -      "required": [
      -        "operation"
      -      ]
      -    },
      -    "then": {
      -      "properties": {
      -        "parameters": {
      -          "additionalProperties": false,
      -          "allOf": [
      -            {
      -              "if": {
      -                "not": {
      -                  "required": [
      -                    "condition"
      -                  ]
      -                }
      -              },
      -              "then": {
      -                "required": [
      -                  "selector"
      -                ]
      -              }
      -            },
      -            {
      -              "if": {
      -                "properties": {
      -                  "condition": {
      -                    "const": "selector"
      -                  }
      -                },
      -                "required": [
      -                  "condition"
      -                ]
      -              },
      -              "then": {
      -                "required": [
      -                  "selector"
      -                ]
      -              }
      -            },
      -            {
      -              "if": {
      -                "properties": {
      -                  "condition": {
      -                    "const": "text"
      -                  }
      -                },
      -                "required": [
      -                  "condition"
      -                ]
      -              },
      -              "then": {
      -                "required": [
      -                  "text"
      -                ]
      -              }
      -            },
      -            {
      -              "if": {
      -                "properties": {
      -                  "condition": {
      -                    "const": "url_contains"
      -                  }
      -                },
      -                "required": [
      -                  "condition"
      -                ]
      -              },
      -              "then": {
      -                "anyOf": [
      -                  {
      -                    "required": [
      -                      "value"
      -                    ]
      -                  },
      -                  {
      -                    "required": [
      -                      "text"
      -                    ]
      -                  }
      -                ]
      -              }
      -            }
      -          ],
      -          "properties": {
      -            "condition": {
      -              "description": "Semantic condition to wait for; choose the condition that directly proves the requested state transition.",
      -              "enum": [
      -                "selector",
      -                "text",
      -                "url_contains",
      -                "load",
      -                "navigation",
      -                "network_idle"
      -              ],
      -              "type": "string"
      -            },
      -            "endpoint": {
      -              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      -              "type": "string"
      -            },
      -            "idle_ms": {
      -              "description": "Required zero-in-flight network quiet window for network_idle; default 500 ms.",
      -              "type": "number"
      -            },
      -            "poll_ms": {
      -              "description": "Polling interval in milliseconds.",
      -              "type": "number"
      -            },
      -            "selector": {
      -              "description": "CSS selector identifying a web element.",
      -              "type": "string"
      -            },
      -            "target_id": {
      -              "description": "Page target id returned by browser_tabs.",
      -              "type": "string"
      -            },
      -            "text": {
      -              "description": "Text required by the selected action.",
      -              "type": "string"
      -            },
      -            "timeout_ms": {
      -              "description": "Timeout in milliseconds.",
      -              "type": "number"
      -            },
      -            "title": {
      -              "description": "Choose a page whose title contains this text.",
      -              "type": "string"
      -            },
      -            "url_contains": {
      -              "description": "Choose a page whose URL contains this text.",
      -              "type": "string"
      -            },
      -            "value": {
      -              "description": "Value required by the selected action.",
      -              "type": "string"
      -            }
      -          },
      -          "type": "object"
      -        }
      -      }
      -    }
      -  },
      -  {
      -    "if": {
      -      "properties": {
      -        "operation": {
      -          "const": "browser_evaluate"
      -        }
      -      },
      -      "required": [
      -        "operation"
      -      ]
      -    },
      -    "then": {
      -      "properties": {
      -        "parameters": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "await_promise": {
      -              "description": "Await a returned Promise; default true.",
      -              "type": "boolean"
      -            },
      -            "endpoint": {
      -              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      -              "type": "string"
      -            },
      -            "expression": {
      -              "description": "JavaScript expression.",
      -              "type": "string"
      -            },
      -            "target_id": {
      -              "description": "Page target id returned by browser_tabs.",
      -              "type": "string"
      -            },
      -            "timeout_ms": {
      -              "description": "Timeout in milliseconds.",
      -              "type": "number"
      -            },
      -            "title": {
      -              "description": "Choose a page whose title contains this text.",
      -              "type": "string"
      -            },
      -            "url_contains": {
      -              "description": "Choose a page whose URL contains this text.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "expression"
      -          ],
      -          "type": "object"
      -        }
      -      },
      -      "required": [
      -        "parameters"
      -      ]
      -    }
      -  }
      -]New value: +[
      +  {
      +    "if": {
      +      "properties": {
      +        "operation": {
      +          "const": "browser_tabs"
      +        }
      +      },
      +      "required": [
      +        "operation"
      +      ]
      +    },
      +    "then": {
      +      "properties": {
      +        "parameters": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "endpoint": {
      +              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      +              "type": "string"
      +            },
      +            "target_id": {
      +              "description": "Page target id returned by browser_tabs.",
      +              "type": "string"
      +            },
      +            "timeout_ms": {
      +              "description": "Timeout in milliseconds.",
      +              "type": "number"
      +            },
      +            "title": {
      +              "description": "Choose a page whose title contains this text.",
      +              "type": "string"
      +            },
      +            "url_contains": {
      +              "description": "Choose a page whose URL contains this text.",
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      }
      +    }
      +  },
      +  {
      +    "if": {
      +      "properties": {
      +        "operation": {
      +          "const": "browser_navigate"
      +        }
      +      },
      +      "required": [
      +        "operation"
      +      ]
      +    },
      +    "then": {
      +      "properties": {
      +        "parameters": {
      +          "additionalProperties": false,
      +          "allOf": [
      +            {
      +              "if": {
      +                "properties": {
      +                  "action": {
      +                    "enum": [
      +                      "url",
      +                      "new_tab"
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "action"
      +                ]
      +              },
      +              "then": {
      +                "required": [
      +                  "url"
      +                ]
      +              }
      +            }
      +          ],
      +          "properties": {
      +            "action": {
      +              "description": "Default url when url is provided, otherwise reload. new_tab creates the first page target when needed.",
      +              "enum": [
      +                "url",
      +                "new_tab",
      +                "back",
      +                "forward",
      +                "reload"
      +              ],
      +              "type": "string"
      +            },
      +            "endpoint": {
      +              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      +              "type": "string"
      +            },
      +            "ignore_cache": {
      +              "description": "Reload without cache when action=reload.",
      +              "type": "boolean"
      +            },
      +            "target_id": {
      +              "description": "Page target id returned by browser_tabs.",
      +              "type": "string"
      +            },
      +            "timeout_ms": {
      +              "description": "Timeout in milliseconds.",
      +              "type": "number"
      +            },
      +            "title": {
      +              "description": "Choose a page whose title contains this text.",
      +              "type": "string"
      +            },
      +            "url": {
      +              "description": "Destination URL for action=url or action=new_tab.",
      +              "type": "string"
      +            },
      +            "url_contains": {
      +              "description": "Choose a page whose URL contains this text.",
      +              "type": "string"
      +            },
      +            "wait": {
      +              "description": "Wait for the page load event; default true.",
      +              "type": "boolean"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      }
      +    }
      +  },
      +  {
      +    "if": {
      +      "properties": {
      +        "operation": {
      +          "const": "browser_snapshot"
      +        }
      +      },
      +      "required": [
      +        "operation"
      +      ]
      +    },
      +    "then": {
      +      "properties": {
      +        "parameters": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "endpoint": {
      +              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      +              "type": "string"
      +            },
      +            "include_screenshot": {
      +              "description": "Attach a real CDP-rendered viewport PNG screenshot; default false.",
      +              "type": "boolean"
      +            },
      +            "max_nodes": {
      +              "description": "Maximum AX nodes; default 1500.",
      +              "type": "number"
      +            },
      +            "selector": {
      +              "description": "When include_screenshot=true, center this CSS-selected element before capture and report its viewport bounds.",
      +              "type": "string"
      +            },
      +            "target_id": {
      +              "description": "Page target id returned by browser_tabs.",
      +              "type": "string"
      +            },
      +            "timeout_ms": {
      +              "description": "Timeout in milliseconds.",
      +              "type": "number"
      +            },
      +            "title": {
      +              "description": "Choose a page whose title contains this text.",
      +              "type": "string"
      +            },
      +            "url_contains": {
      +              "description": "Choose a page whose URL contains this text.",
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      }
      +    }
      +  },
      +  {
      +    "if": {
      +      "properties": {
      +        "operation": {
      +          "const": "browser_find"
      +        }
      +      },
      +      "required": [
      +        "operation"
      +      ]
      +    },
      +    "then": {
      +      "properties": {
      +        "parameters": {
      +          "additionalProperties": false,
      +          "anyOf": [
      +            {
      +              "required": [
      +                "selector"
      +              ]
      +            },
      +            {
      +              "required": [
      +                "text"
      +              ]
      +            },
      +            {
      +              "required": [
      +                "role"
      +              ]
      +            }
      +          ],
      +          "properties": {
      +            "endpoint": {
      +              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      +              "type": "string"
      +            },
      +            "limit": {
      +              "description": "Maximum number of results to return.",
      +              "type": "number"
      +            },
      +            "role": {
      +              "description": "ARIA role.",
      +              "type": "string"
      +            },
      +            "selector": {
      +              "description": "CSS selector.",
      +              "type": "string"
      +            },
      +            "target_id": {
      +              "description": "Page target id returned by browser_tabs.",
      +              "type": "string"
      +            },
      +            "text": {
      +              "description": "Visible text substring.",
      +              "type": "string"
      +            },
      +            "timeout_ms": {
      +              "description": "Timeout in milliseconds.",
      +              "type": "number"
      +            },
      +            "title": {
      +              "description": "Choose a page whose title contains this text.",
      +              "type": "string"
      +            },
      +            "url_contains": {
      +              "description": "Choose a page whose URL contains this text.",
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      }
      +    }
      +  },
      +  {
      +    "if": {
      +      "properties": {
      +        "operation": {
      +          "const": "browser_action"
      +        }
      +      },
      +      "required": [
      +        "operation"
      +      ]
      +    },
      +    "then": {
      +      "properties": {
      +        "parameters": {
      +          "additionalProperties": false,
      +          "allOf": [
      +            {
      +              "if": {
      +                "properties": {
      +                  "action": {
      +                    "enum": [
      +                      "click",
      +                      "focus",
      +                      "set_value",
      +                      "select",
      +                      "scroll_into_view"
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "action"
      +                ]
      +              },
      +              "then": {
      +                "anyOf": [
      +                  {
      +                    "required": [
      +                      "selector"
      +                    ]
      +                  },
      +                  {
      +                    "required": [
      +                      "text"
      +                    ]
      +                  },
      +                  {
      +                    "required": [
      +                      "browser_text"
      +                    ]
      +                  }
      +                ]
      +              }
      +            },
      +            {
      +              "if": {
      +                "properties": {
      +                  "action": {
      +                    "const": "type"
      +                  }
      +                },
      +                "required": [
      +                  "action"
      +                ]
      +              },
      +              "then": {
      +                "anyOf": [
      +                  {
      +                    "required": [
      +                      "selector"
      +                    ]
      +                  },
      +                  {
      +                    "required": [
      +                      "browser_text"
      +                    ]
      +                  },
      +                  {
      +                    "required": [
      +                      "value"
      +                    ]
      +                  },
      +                  {
      +                    "required": [
      +                      "text_value"
      +                    ]
      +                  }
      +                ],
      +                "required": [
      +                  "text"
      +                ]
      +              }
      +            },
      +            {
      +              "if": {
      +                "properties": {
      +                  "action": {
      +                    "const": "scroll"
      +                  }
      +                },
      +                "required": [
      +                  "action"
      +                ]
      +              },
      +              "then": {
      +                "anyOf": [
      +                  {
      +                    "required": [
      +                      "delta_x"
      +                    ]
      +                  },
      +                  {
      +                    "required": [
      +                      "delta_y"
      +                    ]
      +                  },
      +                  {
      +                    "required": [
      +                      "delta"
      +                    ]
      +                  },
      +                  {
      +                    "required": [
      +                      "direction"
      +                    ]
      +                  }
      +                ]
      +              }
      +            },
      +            {
      +              "if": {
      +                "properties": {
      +                  "action": {
      +                    "const": "upload"
      +                  }
      +                },
      +                "required": [
      +                  "action"
      +                ]
      +              },
      +              "then": {
      +                "anyOf": [
      +                  {
      +                    "required": [
      +                      "path"
      +                    ]
      +                  },
      +                  {
      +                    "required": [
      +                      "paths"
      +                    ]
      +                  }
      +                ],
      +                "required": [
      +                  "selector"
      +                ]
      +              }
      +            },
      +            {
      +              "if": {
      +                "properties": {
      +                  "action": {
      +                    "const": "press"
      +                  }
      +                },
      +                "required": [
      +                  "action"
      +                ]
      +              },
      +              "then": {
      +                "required": [
      +                  "key"
      +                ]
      +              }
      +            }
      +          ],
      +          "properties": {
      +            "action": {
      +              "description": "Operation to perform; choose the narrowest action that directly matches the requested outcome.",
      +              "enum": [
      +                "click",
      +                "focus",
      +                "type",
      +                "set_value",
      +                "select",
      +                "scroll",
      +                "scroll_into_view",
      +                "upload",
      +                "press",
      +                "set_viewport"
      +              ],
      +              "type": "string"
      +            },
      +            "browser_text": {
      +              "description": "Visible text used only to locate a DOM element; use this instead of overloading text for action=type.",
      +              "type": "string"
      +            },
      +            "clear": {
      +              "description": "For action=type, clear the current value before inserting text.",
      +              "type": "boolean"
      +            },
      +            "delta": {
      +              "description": "Alias for delta_y.",
      +              "type": "number"
      +            },
      +            "delta_x": {
      +              "description": "Horizontal scroll delta; positive means right.",
      +              "type": "number"
      +            },
      +            "delta_y": {
      +              "description": "Vertical scroll delta; positive means down.",
      +              "type": "number"
      +            },
      +            "device_scale_factor": {
      +              "description": "Device scale factor for set_viewport; default 1.",
      +              "type": "number"
      +            },
      +            "direction": {
      +              "description": "Human-readable scroll direction used with wheel_times instead of explicit deltas.",
      +              "enum": [
      +                "up",
      +                "down",
      +                "left",
      +                "right"
      +              ],
      +              "type": "string"
      +            },
      +            "endpoint": {
      +              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      +              "type": "string"
      +            },
      +            "height": {
      +              "description": "CSS viewport height for set_viewport.",
      +              "type": "number"
      +            },
      +            "key": {
      +              "description": "Single key name such as Enter, Escape, Tab or A.",
      +              "type": "string"
      +            },
      +            "mobile": {
      +              "description": "Enable mobile emulation for set_viewport.",
      +              "type": "boolean"
      +            },
      +            "option": {
      +              "description": "Option value to select in a browser select element.",
      +              "type": "string"
      +            },
      +            "path": {
      +              "description": "Permitted local filesystem path.",
      +              "type": "string"
      +            },
      +            "paths": {
      +              "description": "List of permitted local filesystem paths.",
      +              "items": {
      +                "type": "string"
      +              },
      +              "minItems": 1,
      +              "type": "array"
      +            },
      +            "selector": {
      +              "description": "CSS selector for the target element; prefer the reusable selector returned by browser_find.",
      +              "type": "string"
      +            },
      +            "target_id": {
      +              "description": "Page target id returned by browser_tabs.",
      +              "type": "string"
      +            },
      +            "text": {
      +              "description": "For action=type, Unicode text to insert. For non-type element actions without selector/browser_text, visible text may identify the target.",
      +              "type": "string"
      +            },
      +            "text_value": {
      +              "description": "Compatibility alias for the type/set_value text value.",
      +              "type": "string"
      +            },
      +            "timeout_ms": {
      +              "description": "Timeout in milliseconds.",
      +              "type": "number"
      +            },
      +            "title": {
      +              "description": "Choose a page whose title contains this text.",
      +              "type": "string"
      +            },
      +            "url_contains": {
      +              "description": "Choose a page whose URL contains this text.",
      +              "type": "string"
      +            },
      +            "value": {
      +              "description": "Value for action=set_value; also accepted as a legacy type payload when text is used as the locator.",
      +              "type": "string"
      +            },
      +            "wheel_times": {
      +              "description": "Number of 120-unit wheel steps for direction; 1..50.",
      +              "type": "number"
      +            },
      +            "width": {
      +              "description": "CSS viewport width for set_viewport.",
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "action"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "parameters"
      +      ]
      +    }
      +  },
      +  {
      +    "if": {
      +      "properties": {
      +        "operation": {
      +          "const": "browser_wait"
      +        }
      +      },
      +      "required": [
      +        "operation"
      +      ]
      +    },
      +    "then": {
      +      "properties": {
      +        "parameters": {
      +          "additionalProperties": false,
      +          "allOf": [
      +            {
      +              "if": {
      +                "not": {
      +                  "required": [
      +                    "condition"
      +                  ]
      +                }
      +              },
      +              "then": {
      +                "required": [
      +                  "selector"
      +                ]
      +              }
      +            },
      +            {
      +              "if": {
      +                "properties": {
      +                  "condition": {
      +                    "const": "selector"
      +                  }
      +                },
      +                "required": [
      +                  "condition"
      +                ]
      +              },
      +              "then": {
      +                "required": [
      +                  "selector"
      +                ]
      +              }
      +            },
      +            {
      +              "if": {
      +                "properties": {
      +                  "condition": {
      +                    "const": "text"
      +                  }
      +                },
      +                "required": [
      +                  "condition"
      +                ]
      +              },
      +              "then": {
      +                "required": [
      +                  "text"
      +                ]
      +              }
      +            },
      +            {
      +              "if": {
      +                "properties": {
      +                  "condition": {
      +                    "const": "url_contains"
      +                  }
      +                },
      +                "required": [
      +                  "condition"
      +                ]
      +              },
      +              "then": {
      +                "anyOf": [
      +                  {
      +                    "required": [
      +                      "value"
      +                    ]
      +                  },
      +                  {
      +                    "required": [
      +                      "text"
      +                    ]
      +                  }
      +                ]
      +              }
      +            }
      +          ],
      +          "properties": {
      +            "condition": {
      +              "description": "Semantic condition to wait for; choose the condition that directly proves the requested state transition.",
      +              "enum": [
      +                "selector",
      +                "text",
      +                "url_contains",
      +                "load",
      +                "navigation",
      +                "network_idle"
      +              ],
      +              "type": "string"
      +            },
      +            "endpoint": {
      +              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      +              "type": "string"
      +            },
      +            "idle_ms": {
      +              "description": "Required zero-in-flight network quiet window for network_idle; default 500 ms.",
      +              "type": "number"
      +            },
      +            "poll_ms": {
      +              "description": "Polling interval in milliseconds.",
      +              "type": "number"
      +            },
      +            "selector": {
      +              "description": "CSS selector identifying a web element.",
      +              "type": "string"
      +            },
      +            "target_id": {
      +              "description": "Page target id returned by browser_tabs.",
      +              "type": "string"
      +            },
      +            "text": {
      +              "description": "Text required by the selected action.",
      +              "type": "string"
      +            },
      +            "timeout_ms": {
      +              "description": "Timeout in milliseconds.",
      +              "type": "number"
      +            },
      +            "title": {
      +              "description": "Choose a page whose title contains this text.",
      +              "type": "string"
      +            },
      +            "url_contains": {
      +              "description": "Choose a page whose URL contains this text.",
      +              "type": "string"
      +            },
      +            "value": {
      +              "description": "Value required by the selected action.",
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      }
      +    }
      +  },
      +  {
      +    "if": {
      +      "properties": {
      +        "operation": {
      +          "const": "browser_evaluate"
      +        }
      +      },
      +      "required": [
      +        "operation"
      +      ]
      +    },
      +    "then": {
      +      "properties": {
      +        "parameters": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "await_promise": {
      +              "description": "Await a returned Promise; default true.",
      +              "type": "boolean"
      +            },
      +            "endpoint": {
      +              "description": "Loopback Chrome DevTools endpoint. Defaults to REMCP_CDP_URL or http://127.0.0.1:9222.",
      +              "type": "string"
      +            },
      +            "expression": {
      +              "description": "JavaScript expression.",
      +              "type": "string"
      +            },
      +            "target_id": {
      +              "description": "Page target id returned by browser_tabs.",
      +              "type": "string"
      +            },
      +            "timeout_ms": {
      +              "description": "Timeout in milliseconds.",
      +              "type": "number"
      +            },
      +            "title": {
      +              "description": "Choose a page whose title contains this text.",
      +              "type": "string"
      +            },
      +            "url_contains": {
      +              "description": "Choose a page whose URL contains this text.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "expression"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "parameters"
      +      ]
      +    }
      +  }
      +]
  2. Added

TDQS

A4.4/5.0
Behavior4/5

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

Annotations are blunt (destructiveHint=true for the whole tool), but the description adds per-operation nuance the annotations cannot: snapshot/find/wait observe, while navigation, clicks, typing, uploads and JS evaluation can change page or remote-site state. It also warns to pass only one operation's validated parameters. It does not cover permissions or rate limits, but the safety-relevant split is genuinely useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Three sentences, each earning its place: selection criteria first, behavioral split second, sibling routing last. No filler and the most decision-relevant content is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-operation umbrella tool with nested conditional schemas and an output schema, the description supplies enough to pick the right operation and understand what each class of operation does to state. It does not itself enumerate the operation enum or per-operation argument shape, but the schema and output schema carry that load.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every field, including enum values and aliases. The description only adds the rule 'choose one operation and pass only its validated parameters,' which is structurally useful but not parameter-level semantics. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource (control a debuggable Chromium page) and enumerates the capability surface (tabs, navigation, DOM/accessibility inspection, element search/actions, waits, JS evaluation). It explicitly contrasts itself with control_computer, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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

States the precondition ('target is a debuggable Chromium page') and the task shape that selects it, plus an explicit exclusion: use control_computer for browser chrome or native desktop/non-CDP applications. When/when-not are both covered.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources