Skip to main content
Glama

Check supplier bank details

well_check_supplier_bank_details
Read-only

Check one bank account (IBAN) against what Well knows of one supplier: the supplier's known bank accounts, the day each first appeared, and the payments made to each. It draws no card. Use it when a person forwards new or changed bank details for a supplier ("our supplier changed bank", "nouveau RIB"), from a mail, an invoice or a typed message, before they pay.

Pass the supplier's company_id and the IBAN as given; spaces and lower case are fine. The IBAN is compared exactly, across every currency pocket of the account.

status:

  • never_seen: the supplier is known and none of its known accounts has this IBAN.

  • already_paid_there: the IBAN is a known account of the supplier and payments to it are on file.

  • known_never_paid: the IBAN is a known account of the supplier, with no payment to it on file.

  • own_account: the IBAN is one of the workspace's own accounts, not a supplier's.

  • unknown_supplier: the company_id names no company this workspace can read. Nothing is known about its accounts.

  • invalid_iban: the value is not a valid IBAN. Nothing was read.

checked_iban gives the checked IBAN's first-seen day and payment count when the supplier has it. accounts lists every known account of the supplier by the last four characters of its IBAN, the checked one first: the day it first appeared (its first payment, or the day Well recorded it when that is earlier), the payment count, the totals per currency and the 10 most recent payments. known_payment_count is every payment to the supplier Well knows; a small number means a thin history, so say how many payments the answer rests on. payments_without_known_account counts payments to the supplier with no known account. accounts_truncated: true means the oldest accounts were not read; the checked IBAN is always read, so never_seen still holds.

The check gives facts and never blocks a payment. Never call new bank details safe from this answer alone.

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
ibanYesThe IBAN to check, as given. Spaces and lower case are fine.
company_idYesThe supplier's company_id.
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
statusYes
successYes
accountsYes
supplierYes
iban_last4Yes
checked_ibanYes
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.
accounts_truncatedYes
resolved_workspaceNoThe workspace that answered, when the caller named none and the token authorizes several.
known_payment_countYes
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.
payments_without_known_accountYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changed
    • changedOutput schema / properties / accounts / items / properties / confirmed_by_phone / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "confirmed_by": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "confirmed_on": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "confirmed_on",
      -      "confirmed_by"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "confirmed_by": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "confirmed_on": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "confirmed_on",
      +      "confirmed_by"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / accounts / items / properties / last_paid_on / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / accounts / items / properties / last_paid_on / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / accounts / items / properties / recent_payments / items / properties / amount / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / accounts / items / properties / recent_payments / items / properties / amount / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / accounts / items / properties / recent_payments / items / properties / currency / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / accounts / items / properties / recent_payments / items / properties / currency / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / accounts / items / properties / totals / items / properties / currency / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / accounts / items / properties / totals / items / properties / currency / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • changedOutput schema / properties / checked_iban / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "confirmed_by_phone": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "confirmed_by": {
      -                "anyOf": [
      -                  {
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "confirmed_on": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "confirmed_on",
      -              "confirmed_by"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "first_seen_on": {
      -        "type": "string"
      -      },
      -      "last_paid_on": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "payment_count": {
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "first_seen_on",
      -      "payment_count",
      -      "last_paid_on",
      -      "confirmed_by_phone"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "confirmed_by_phone": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "confirmed_by": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "confirmed_on": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "confirmed_on",
      +              "confirmed_by"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "first_seen_on": {
      +        "type": "string"
      +      },
      +      "last_paid_on": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "payment_count": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "first_seen_on",
      +      "payment_count",
      +      "last_paid_on",
      +      "confirmed_by_phone"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / iban_last4 / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / iban_last4 / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • 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"
      +]
  2. Changed3 schema fields changed
    • addedOutput schema / properties / accounts / items / properties / confirmed_by_phone
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "confirmed_by": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "confirmed_on": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "confirmed_on",
      +        "confirmed_by"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / accounts / items / required
      Previous value: -[
      -  "iban_last4",
      -  "is_checked_iban",
      -  "currencies",
      -  "first_seen_on",
      -  "payment_count",
      -  "totals",
      -  "last_paid_on",
      -  "recent_payments"
      -]New value: +[
      +  "iban_last4",
      +  "is_checked_iban",
      +  "currencies",
      +  "first_seen_on",
      +  "payment_count",
      +  "totals",
      +  "last_paid_on",
      +  "recent_payments",
      +  "confirmed_by_phone"
      +]
    • changedOutput schema / properties / checked_iban / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "first_seen_on": {
      -        "type": "string"
      -      },
      -      "last_paid_on": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "payment_count": {
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "first_seen_on",
      -      "payment_count",
      -      "last_paid_on"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "confirmed_by_phone": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "confirmed_by": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "confirmed_on": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "confirmed_on",
      +              "confirmed_by"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "first_seen_on": {
      +        "type": "string"
      +      },
      +      "last_paid_on": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "payment_count": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "first_seen_on",
      +      "payment_count",
      +      "last_paid_on",
      +      "confirmed_by_phone"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  3. Added

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark this as read-only/non-destructive, and the description adds real behavioral context beyond that: exact IBAN comparison across every currency pocket, the six possible status outcomes, truncation behavior and its guarantee that the checked IBAN is always read, and the thin-history caveat on known_payment_count.

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?

Front-loaded with the core action and trigger, then organized into discrete status/return blocks. It is long, but nearly every sentence (status definitions, truncation caveat, workspace rule) carries information an agent needs to interpret the result; a little tightening would earn a 5.

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?

Given five parameters, rich annotations, and an output schema, the description covers everything an agent needs: when to call, how to pass IBAN/workspace_id, all status meanings, the truncated/never_seen interaction, and the safety caveat against over-trusting the answer.

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, and the description adds meaning on top: 'pass the IBAN as given; spaces and lower case are fine', exact-match comparison semantics, and an explicit rule for when workspace_id must be supplied. It does not explain conversation_id or workspace_scope, which the schema alone carries.

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 (check one IBAN against what Well knows of one supplier) plus scope ('one supplier', 'one bank account'). It is clearly distinguishable from siblings like well_update_supplier_bank_account (mutates) or well_search_company_registry (looks up companies), and the 'draws no card' note contrasts it with payment tools.

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?

Explicit trigger: 'Use it when a person forwards new or changed bank details for a supplier ... before they pay', including the mail/invoice/typed-message contexts. It also names the boundary ('never blocks a payment', 'never call new bank details safe from this answer alone') and the workspace_id selection rule.

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