Skip to main content
Glama

Search the company registry

well_search_company_registry
Read-only

Search the public company registries for a company by name, to find the one a workspace IS before you create its company workspace. This draws nothing on the user's screen.

Use it in the zero-company case: a membership workspace has no company attached and no detected candidate, so you search the registry for the user's company. Use it too when the user says the company set on this workspace is wrong: the pick makes a new workspace and the set one is untouched. Each hit carries an id — the registry ref — that you pass to well_create_company_candidate as registry_ref to mint a candidate from that hit, then well_create_company_workspace to make it the company workspace.

Pass purpose: "own_company" when the person is picking their own company, to create its company workspace. On WhatsApp Well then sends the hits to the phone as numbered choices after your line, so write none of them; the person's pick comes back as the next message and names the hit. Omit it for any other search, such as a customer, a supplier or an address.

Pass country when the user names one, to scope the search to that jurisdiction. The result carries degraded: true when a provider was unreachable and the hits are partial. Confirm the exact company with the user before you create anything from a hit; never pick one from a name alone.

Input Schema

NameRequiredDescriptionDefault
qYesThe company name to search for. At least 2 characters.
countryNoScope the search to this jurisdiction. Omit to search across registries.
purposeNoown_company when the person is picking their own company to create its company workspace; omit for any other search.
workspace_idNoTarget workspace. Optional: this tool describes the token itself rather than one workspace's data, so omitting it returns the same answer.
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
hitsYes
errorNo
successYes
degradedYesTrue when a registry provider was unreachable and the hits are partial; the search still returned what it could.
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.
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. Changed22 schema fields changed
    • removedOutput schema / properties / hits / items / properties / attributes / properties / address_text / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / hits / items / properties / attributes / properties / address_text / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / hits / items / properties / attributes / properties / legal_form / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / hits / items / properties / attributes / properties / legal_form / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / hits / items / properties / attributes / properties / legal_name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / hits / items / properties / attributes / properties / legal_name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / hits / items / properties / attributes / properties / registry_number / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / hits / items / properties / attributes / properties / registry_number / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / hits / items / properties / attributes / properties / siren / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / hits / items / properties / attributes / properties / siren / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / hits / items / properties / attributes / properties / siret / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / hits / items / properties / attributes / properties / siret / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / hits / items / properties / attributes / properties / source_url / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / hits / items / properties / attributes / properties / source_url / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / hits / items / properties / attributes / properties / trade_name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / hits / items / properties / attributes / properties / trade_name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / hits / items / properties / attributes / properties / unverified_vat_number / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / hits / items / properties / attributes / properties / unverified_vat_number / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / hits / items / properties / attributes / properties / vat_number / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / hits / items / properties / attributes / properties / vat_number / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / hits / items / properties / attributes / properties / website / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / hits / items / properties / attributes / properties / website / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  2. Changed1 schema field changed
    • addedInput schema / properties / purpose
      Added value: +{
      +  "description": "own_company when the person is picking their own company to create its company workspace; omit for any other search.",
      +  "enum": [
      +    "own_company"
      +  ],
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedOutput schema / properties / hits / items / properties / attributes / properties / provider / enum
      Previous value: -[
      -  "RECHERCHE_ENTREPRISES",
      -  "PAPPERS",
      -  "OPENCORPORATES",
      -  "EXA",
      -  "EXA_ANSWER"
      -]New value: +[
      +  "RECHERCHE_ENTREPRISES",
      +  "VIES",
      +  "PAPPERS",
      +  "OPENCORPORATES",
      +  "EXA",
      +  "EXA_ANSWER"
      +]
  4. 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."
  5. Changed1 schema field changed
    • 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"
      +}
  6. Changed1 schema field changed
    • addedOutput schema / properties / newly_connected
      Added value: +{
      +  "description": "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.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "name": {
      +        "type": "string"
      +      },
      +      "service_id": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name",
      +      "service_id"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  7. 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"
      +}
  8. Added

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past the readOnly/openWorld annotations: discloses the `degraded: true` partial-result behavior, that results are not rendered to the user, that WhatsApp surfaces hits as numbered choices the agent must not write out, and that confirmation is required before creating from a hit.

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

Conciseness4/5

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

Purpose is front-loaded in the first sentence and the branching cases are ordered logically. Some sentences are dense and slightly convoluted ('the pick makes a new workspace and the set one is untouched'), and the purpose/country semantics are partly duplicated from the schema.

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?

With annotations, a full output schema, and a downstream tool chain, the description supplies everything an agent needs: when to call, when not to, degraded handling, the confirmation rule, and the handoff to candidate/workspace creation.

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 baseline is 3, but the description adds genuine semantic value the schema lacks: the WhatsApp numbered-choice consequence of `purpose: own_company` and how the person's reply names the hit. It largely restates `country` scoping, so not a full 5.

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?

States a specific verb and resource ('Search the public company registries for a company by name') plus its role in the onboarding flow, clearly separating it from sibling searches like well_search_web/well_search_places. The follow-on framing ('draws nothing on the user's screen') further disambiguates it.

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?

Names both triggering cases explicitly (zero-company workspace; user says the company is wrong) and an explicit exclusion ('Omit it for any other search, such as a customer, a supplier or an address'). It also chains forward to well_create_company_candidate and well_create_company_workspace.

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