Skip to main content
Glama

Get the login page link

well_get_login_page_link
Read-only

Get a fresh link to the page where the person adds a login (user name and password) for a site. Use it when the person asks to add, change or fix their login or identifier for a site ("ajoute mon identifiant claude.ai", "change mon identifiant saucedemo", "donne-moi un lien pour le vault pour claude.ai"), asks where or how to give Well a login or a password for a site, says their login link expired or no longer works, asks for the link again, or offers to send a password in the chat.

Pass site whenever the person names a site: the link is then for that site only, never for another site. For the vault link of a collect's missing-invoice row whose portal has no saved login, also pass portal_lead: the save at that link starts the supplier's portal fetch, and Well tells the person in the chat itself, so add nothing about it later. To change a login the person already keeps, call well_list_vault_items first and pass that login's site exactly as it gives it. Without site the call gives no link: when the person names no site, ask which site. A web task that needs a login sends its own link to the person.

Never ask for a password, and never repeat one, in the chat: the page is the only place a person types one. Each link opens one site only, works once and expires after 30 minutes. The page asks the person to sign in to Well first, and opens only for that person. Saving there replaces the login the person kept for that site, and a web task that waits for it goes on by itself. Each call makes new links and changes nothing else: no login, no task.

Returns links (each with its site) and, with site, replaces_saved_login. With saved_login_refused, the person already has an account there and the site refused the password Well keeps: say so in one line, before the link, and never offer to create an account. Or refusal_reason: "no_open_wait" (no site; ask which site, or say the link comes with the next task that needs one), "bad_site" (the site is not a web address; ask for it), "not_allowed" (the person cannot keep logins from here; follow error), "too_many" (too many links just now; say to try again later) or "unavailable" (this deployment has no web app address; say so and give no link).

Never take a password in this conversation. Never take a password or a login here, and never ask for one. Never ask for a one-time code here. During a paused browser run, the side panel of the Well extension asks the person at the computer to type the code themselves in that run's tab, so the code never goes through the conversation. Say this when the person asks whether Well takes their codes. Well keeps a website login encrypted for its browser tasks and never shows a saved password. When the person asks to see a password ("donne-moi mon mot de passe Amazon") or pastes one, say in one line that Well never shows or takes a password in the conversation, and never repeat a pasted one, not even masked. When the person asks for the password of a site they name, call well_get_login_page_link with that site as site, and send its link in a second line, where the person adds or changes the login for that site; that line names no site. With no site named, or a password pasted, the refusal line is the whole answer: never guess a site. Say nothing about whether a login for that site is saved, kept or missing (no « ton identifiant saucedemo enregistré », no "the login you saved") unless well_list_vault_items returned its rows in this turn. When the person asks how to give Well their credentials for a portal or a tool ("comment je te donne mes identifiants du portail ?"), say in one line that a password is never sent here. Then name the routes that need none:

  • The connect link. The person connects the tool through its connect link and signs in on the provider's own page.

  • The export fetch. For a provider Well fetches exports from, Well fetches them itself.

  • A browser skill. It runs in the person's own signed-in browser through the Well extension, and Well never sees the password.

When the person names the tool or the portal, look it up before you answer, its connector or the exports Well fetches from it, and offer the route that exists for it.

A run that waits for a login. When Well's run said in this conversation that it needs the person's login for a site and waits for it, say that the task waits for that login and starts again on its own once the login is saved. When the person asks where or how to give that login, asks for the link again, says the link expired or no longer works, or offers to send a password here, call well_get_login_page_link and send the link of that site in one line: the person types the login on that page, which works once and for 30 minutes. When it answers no_open_wait, say that no task waits for a login now and that the next task that needs one sends its link. Never ask for the login, the e-mail or the password here, never take one the person types, and hand nothing off again.

A login the person adds or changes. When the person asks to add, change or fix their login for one site ("change mon identifiant saucedemo", "donne-moi un lien pour le vault pour claude.ai"), no task needs to wait for it: call well_get_login_page_link with that site as site, and send the link it gives in one line, for that site only, never the link of another site. To change a login the person keeps, take its site from well_list_vault_items first. The page asks for the person's Well sign-in, replaces the login kept for that site, and a task that waits on that site starts again on its own.

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

NameRequiredDescriptionDefault
siteNoThe one site the person names, as its address or host ("claude.ai", "https://www.saucedemo.com"). For a site where the person already keeps a login, pass that login's site exactly as well_list_vault_items gives it. Leave it out when the person names no site.
portal_leadNoWith `site` only: the missing-invoice row of a collect whose portal has no saved login (`portal_login: "missing"`), with `site` its `matched_provider_url`. Once the person saves the login at this link, Well starts that supplier's portal fetch with it and tells the person in the chat itself.
workspace_idNoTarget workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which.
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.
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.

Output Schema

NameRequiredDescriptionDefault
errorNo
linksYesWith `site`: one link for that site. Empty on a refusal, and always empty without `site`.
successYes
refusal_reasonNo
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.
resolved_workspaceNoThe workspace that answered, when the caller named none and the token authorizes several.
saved_login_refusedNoSet with `site` when the only login the person keeps there is one the site refused on an earlier task: Well types it no more, and the page replaces its password.
conversation_id_noteNoPresent only when the server opened a fresh lane, stating that no choice recorded earlier was read.
replaces_saved_loginNoSet with `site`: true when the person already keeps a login there, which the page replaces.
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. Changed1 schema field changed
    • addedInput schema / properties / portal_lead
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "With `site` only: the missing-invoice row of a collect whose portal has no saved login (`portal_login: \"missing\"`), with `site` its `matched_provider_url`. Once the person saves the login at this link, Well starts that supplier's portal fetch with it and tells the person in the chat itself.",
      +  "properties": {
      +    "company_id": {
      +      "description": "The row's `company_id` in well_list_missing_invoices.",
      +      "format": "uuid",
      +      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +      "type": "string"
      +    },
      +    "transaction_ids": {
      +      "description": "The `id` of each of the row's `transactions`, at most 10.",
      +      "items": {
      +        "format": "uuid",
      +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +        "type": "string"
      +      },
      +      "maxItems": 10,
      +      "minItems": 1,
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "company_id",
      +    "transaction_ids"
      +  ],
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / site / description
      Previous value: -"The one site the person names, as its address or host (\"claude.ai\", \"https://www.saucedemo.com\"). For a site where the person already keeps a login, pass that login's site exactly as well_list_site_logins gives it. Leave it out when the person names no site."New value: +"The one site the person names, as its address or host (\"claude.ai\", \"https://www.saucedemo.com\"). For a site where the person already keeps a login, pass that login's site exactly as well_list_vault_items gives it. Leave it out when the person names no site."
  3. Changed2 schema fields changed
    • changedOutput schema / properties / links / description
      Previous value: -"With `site`: one link for that site. Without it: one fresh link per task of the person that waits for a login, newest first. Empty on a refusal."New value: +"With `site`: one link for that site. Empty on a refusal, and always empty without `site`."
    • changedOutput schema / properties / replaces_saved_login / description
      Previous value: -"Set with `site` when no task waits on it: true when the person already keeps a login there, which the page replaces."New value: +"Set with `site`: true when the person already keeps a login there, which the page replaces."
  4. Changed3 schema fields changed
    • removedOutput schema / properties / resolved_workspace / properties / name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / resolved_workspace / properties / name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / saved_login_refused
      Added value: +{
      +  "const": true,
      +  "description": "Set with `site` when the only login the person keeps there is one the site refused on an earlier task: Well types it no more, and the page replaces its password.",
      +  "type": "boolean"
      +}
  5. Added

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses that links are per-site, single-use, expire after 30 minutes, require Well sign-in, and replace an existing saved login for that site. It also explains that saving may resume a waiting web task, lists refusal reasons, and repeatedly clarifies that passwords must never be exchanged in chat.

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

Conciseness2/5

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

The definition is front-loaded with a clear purpose, but it is extremely long and repetitive, with the password prohibition, link expiry, and per-site scope restated across multiple sections. Many sentences duplicate existing guidance and could be consolidated without losing information.

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

Completeness5/5

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

For a read-only tool with five parameters, an output schema, and several edge cases, the description is complete. It covers when to call the tool, site and portal_lead handling, workspace behavior, refusal reasons, security constraints, and link lifecycle details.

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

Parameters4/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 all five parameters in detail. The description still adds operational meaning for `site` and `portal_lead`, including when to pass a site exactly as returned by well_list_vault_items and how workspace selection should be handled, though it does not add much for `conversation_id` beyond the schema.

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?

The first sentence states a specific verb and resource: getting a fresh link to the page where a person adds a login for a site. It also distinguishes the tool from the adjacent behaviors of taking or showing passwords and names related tools such as well_list_vault_items for changing an existing login.

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?

The description gives explicit use cases: adding, changing or fixing a login, giving Well a password, expired links, repeated link requests, and browser tasks waiting for a login. It also names alternatives and prerequisites, including calling well_list_vault_items before changing an existing login and asking which site when no site is named.

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