Skip to main content
Glama

Hand a browser task to the extension

well_hand_off_browser_task

Hand a task that needs a website outside Well to the Well browser extension, which runs it in the person's own Chromium-based browser. Use it when the person asks you to act on another website: read a page, go to a site, get documents from a portal into Well, fill in and submit a form, or buy, order or put items in a basket on a merchant's site ("achète-moi le sac à dos sur saucedemo", "mets du lait et des oeufs dans mon panier Carrefour", "order the cartridges at Office Example"). For a purchase, the run fills the cart and Well asks the person before any payment: never refuse a purchase as something you cannot do, and never pay or confirm it yourself. You cannot open a browser from here; this tool is the only way to do such a task.

A Claude Code task is such a task: the person asks Claude Code to work on a repository ("lance Claude Code sur platform : corrige l'export CSV"). It runs on https://claude.ai/code in their browser, where they are signed in: pass that address as start_url. Never refuse it as outside Well's scope.

The result's run_url opens the task in the Well web app. The run needs a desktop computer with a Chromium-based browser (Chrome, Edge, Brave or Arc) and the Well extension installed: say so. On that computer, the person opens the link and clicks Open in the extension. Nothing runs before the person starts it. One exception: when the result has runner: "cloud", the task runs now in a Well browser: follow its message instead. When the result has background_unavailable, the person asked for a background task that Well did not run in the background: its message says why and what to say, and the reply tells them.

Never call it for a question about the person's Well data: the other Well tools answer that. Never call it for a saved browser skill the person names.

Pass run_in_background: true only when the person explicitly asks Well to do the task as a background task, without their own computer or browser ("fais-le en tâche de fond", "en arrière-plan, sans mon ordi", "do it in the background"). Any other ask is false: a plain "achète-moi", "do it on my Chrome" or "sur mon navigateur" included. Never set it on your own because a task is long or a purchase. Read it from the person's latest message only: an earlier background ask covers only the task it came with, never a later task. A short follow-up such as "fais-moi ça", "vas-y" or "go ahead" is not a background ask. Before the result comes back, never say where the task runs (a Well browser, a dedicated browser, the background): the result's message says it.

Hand off each task once. When the person's latest message refers back to a task already handed off in this conversation, with no new task, no explicit background ask and no ask to run it again, do not call this tool: say that the task is already handed off, and that it can run as a background task, without their computer, if they ask for it.

Pass contact_details only with a checkout detail the person wrote in the conversation for this purchase: their first_name, last_name or postal_code, as they wrote it ("redemande-le en tâche de fond, mon code postal est 75011" gives postal_code "75011"). Never take one from Well data, and never invent one. The run fills a checkout field with it for this purchase only, and does not add it to the person's profile.

Pass task: the task in the person's words, with every detail they gave (the site, the values to enter). Never include a password, one-time code, card number or bank number in task. Pass start_url whenever they named a site or page to start on. Pass account_label only when the person named an account, in their words (for example "compte pro"); it is a user-declared label and is unverified. Never invent one, and never pass a login or an e-mail as the label. Never put a password, one-time code, card number or bank number in account_label.

Follow the result's message. Never say the task started or is done.

When the token authorizes one workspace, call this directly — no workspace call is needed first. When it authorizes several, this read will not guess which one you mean: pass workspace_id on the call.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
taskYesThe task for the extension, in the person's words, with every detail they gave. At most 2000 characters.
start_urlNoThe https address of the page the run starts on, when the person named one.
workspace_idNoTarget workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.
account_labelNoA user-declared account label in the person's words (for example "compte pro"), only when they named an account; it is unverified, and never a login or an e-mail.
contact_detailsNoCheckout details the person wrote for this purchase (first_name, last_name, postal_code), as they wrote them. Never from Well data, never invented. Used for this run only, never added to the profile.
conversation_idNoThe conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.
idempotency_keyNoOptional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.
workspace_scopeNoRestrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.
run_in_backgroundNoTrue only when the person's latest message explicitly asks to run this task as a background task, without their own computer or browser. An earlier ask for another task never carries over. Any other ask is false.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNo
runnerNo
messageNo
run_urlNo
successYes
thread_idNo
conversation_idNoThe conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.
newly_connectedNoTools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.
extension_presenceNo
resolved_workspaceNoThe workspace that answered, when the caller named none and the token authorizes several.
conversation_id_noteNoPresent only when the server opened a fresh lane, stating that no choice recorded earlier was read.
background_unavailableNo
conversation_id_sourceNoWhere the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedInput schema / properties / contact_details
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Checkout details the person wrote for this purchase (first_name, last_name, postal_code), as they wrote them. Never from Well data, never invented. Used for this run only, never added to the profile.",
      +  "properties": {
      +    "first_name": {
      +      "maxLength": 80,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "last_name": {
      +      "maxLength": 80,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "postal_code": {
      +      "maxLength": 10,
      +      "minLength": 1,
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / run_in_background
      Added value: +{
      +  "description": "True only when the person's latest message explicitly asks to run this task as a background task, without their own computer or browser. An earlier ask for another task never carries over. Any other ask is false.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / background_unavailable
      Added value: +{
      +  "enum": [
      +    "not_from_whatsapp",
      +    "no_start_url",
      +    "workspace_not_allowed",
      +    "site_not_supported",
      +    "site_denied",
      +    "cloud_start_failed"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / extension_presence
      Added value: +{
      +  "enum": [
      +    "open",
      +    "signed_out",
      +    "not_seen",
      +    "unknown"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / runner
      Added value: +{
      +  "enum": [
      +    "paired_chrome",
      +    "cloud"
      +  ],
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / properties / newly_connected / description
      Previous value: -"Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. Start the reply with one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later."New value: +"Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later."
  3. Changed1 schema field changed
    • removedInput schema / properties / session_name
      Removed value: -{
      -  "description": "Only for a Claude Code session: its short name, lower-case words joined by hyphens (for example \"export-csv\"). At most 40 characters.",
      -  "maxLength": 40,
      -  "type": "string"
      -}
  4. Changed5 schema fields changed
    • addedInput schema / properties / session_name
      Added value: +{
      +  "description": "Only for a Claude Code session: its short name, lower-case words joined by hyphens (for example \"export-csv\"). At most 40 characters.",
      +  "maxLength": 40,
      +  "type": "string"
      +}
    • removedOutput schema / properties / action_request_id
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / browser_state
      Removed value: -{
      -  "enum": [
      -    "ready",
      -    "browser_closed",
      -    "no_well_session",
      -    "other_login",
      -    "not_installed",
      -    "unknown"
      -  ],
      -  "type": "string"
      -}
    • removedOutput schema / properties / install_url
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / status_url
      Removed value: -{
      -  "type": "string"
      -}
  5. Changed2 schema fields changed
    • addedOutput schema / properties / browser_state
      Added value: +{
      +  "enum": [
      +    "ready",
      +    "browser_closed",
      +    "no_well_session",
      +    "other_login",
      +    "not_installed",
      +    "unknown"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / install_url
      Added value: +{
      +  "type": "string"
      +}
  6. Changed4 schema fields changed
    • addedInput schema / properties / account_label
      Added value: +{
      +  "description": "A user-declared account label in the person's words (for example \"compte pro\"), only when they named an account; it is unverified, and never a login or an e-mail.",
      +  "maxLength": 120,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / workspace_scope
      Added value: +{
      +  "description": "Restrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.",
      +  "enum": [
      +    "family"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / action_request_id
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / status_url
      Added value: +{
      +  "type": "string"
      +}
  7. Added

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources