Skip to main content
Glama

Show the company candidates

well_show_company_candidates
Read-only

Show the user the detected COMPANY candidates on a card and let them pick which company is theirs: a tile per detected company candidate with its confidence, and a company-registry search at the top for the case where none was detected.

⚠️ ONLY for the zero-company case — a membership workspace with no own company attached — when the user must choose or find the company to create the workspace from. For the values alone, read well_get_own_company, which draws nothing.

⚠️ WAIT ON THE CARD IN THE TURN THAT DREW IT. Write your one line for the user FIRST — the wait holds the turn open for up to a minute, and a user looking at a card with no sentence beside it has been given no reason to click — then call well_wait_for_selection({ kind: "company_pick" }), which this result's next_step also states. The card's own footer mints the company workspace and switches into it on the click, so never mint it yourself after the pick.

⚠️ NEVER PICK THE COMPANY for the user, and never infer it from the workspace name.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
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.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNo
anchorYes
successYes
next_stepNoWhat to do with the card this result renders. Added by the dispatcher when the card asks for a click.
candidatesYes
conversation_idNoThe conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.
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.
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. Changed4 schema fields changed
    • addedInput schema / properties / conversation_id
      Added value: +{
      +  "description": "The 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.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / conversation_id
      Added value: +{
      +  "description": "The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / conversation_id_note
      Added value: +{
      +  "description": "Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / conversation_id_source
      Added value: +{
      +  "description": "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened.",
      +  "enum": [
      +    "host_meta",
      +    "argument",
      +    "minted"
      +  ],
      +  "type": "string"
      +}
  2. Changed7 schema fields changed
    • addedOutput schema / properties / candidates / items / properties / business_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The company's legal form (SAS, Inc, GmbH), when known."
      +}
    • addedOutput schema / properties / candidates / items / properties / confirmable
      Added value: +{
      +  "description": "Whether well_create_company_workspace accepts this candidate now. False for a name-only detected candidate with no groundable identity, or one that has left the surfaced set.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / candidates / items / properties / confirmable_reason
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "not_open",
      +        "not_surfaceable",
      +        "not_primary",
      +        "already_confirmed",
      +        "not_grounded"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Why confirmable is false, null when true. not_grounded: no registry or tax identifier to mint from; ask the user to search the registry and pick the verified entry. not_open: no longer the surfaced candidate; re-read the own-company list before acting. Others: not_primary, already_confirmed, not_surfaceable."
      +}
    • addedOutput schema / properties / candidates / items / properties / country
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The company's country, for a light detail panel."
      +}
    • addedOutput schema / properties / candidates / items / properties / domain
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The company's domain, a logo source and a display fallback."
      +}
    • addedOutput schema / properties / candidates / items / properties / remote_logo_url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "A resolved logo url when one is known; null otherwise."
      +}
    • changedOutput schema / properties / candidates / items / required
      Previous value: -[
      -  "candidate_id",
      -  "company_id",
      -  "registered_name",
      -  "trade_name",
      -  "role",
      -  "state",
      -  "confidence_score"
      -]New value: +[
      +  "candidate_id",
      +  "company_id",
      +  "registered_name",
      +  "trade_name",
      +  "role",
      +  "state",
      +  "confidence_score",
      +  "domain",
      +  "remote_logo_url",
      +  "country",
      +  "business_type",
      +  "confirmable",
      +  "confirmable_reason"
      +]
  3. Added

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses critical behavioral traits beyond the annotations: it draws a card that waits up to a minute, requires the agent to write a sentence first to prompt the user, and specifies that the card's footer mints and switches workspace on click. It also states the `next_step` field carries the wait instruction. These are non-obvious interaction details that an agent must know, and they align with the readOnlyHint and destructiveHint annotations.

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?

Though long, the description is dense with crucial information and each sentence earns its place. It leads with the core purpose, then the critical usage constraint, then the required interaction sequence, then prohibitions. The bullet-style warnings and bolded 'NEVER' items make it scannable and emphasize pitfalls. No fluff.

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 an interactive card tool with a complex flow, the description covers everything an agent needs: the trigger condition, the user interaction, the timing, the sequence, the alternative tool, and the post-selection behavior. Since an output schema exists, return values are already documented. The description is complete and self-contained.

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 coverage is 100%, so the baseline is 3. The description adds meaningful context for `conversation_id` (explains it must be passed on every call, including card-triggered calls, and decides the conversation itself) and clarifies when `workspace_id` can be omitted. This goes beyond the schema's basic descriptions, earning a 4.

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 description states a specific verb ('Show'), resource ('COMPANY candidates on a card'), and the user action ('pick which company is theirs'). It explicitly distinguishes itself from the sibling `well_get_own_company` by clarifying it draws a card for user selection, whereas the sibling returns values alone. This makes its purpose unmistakable and differentiated.

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 provides explicit when-to-use ('ONLY for the zero-company case...'), when-not-to-use ('For the values alone, read well_get_own_company'), and a clear alternative. It also details the required sequence (write a line first, wait, never mint) and prohibitions ('NEVER PICK THE COMPANY', 'never infer it'). This is textbook usage guidance.

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