Skip to main content
Glama

List cash scope by account type

well_list_cash_scope
Read-only

List the account types a reader can count as cash, each with what it holds. This is what the cash-scope card offers; it measures nothing well_list_account_balances did not already read.

Each entry in groups is one account type: account_type, account_count, and subtotals — one native amount per currency, never converted and never blended. Sorted with the largest holdings first, so the biggest decision reads first. A type with no accounts is NOT listed: counting it would change nothing, so it is not a choice.

Only proven accounts the workspace owns are folded here. Ownership is settled by a fact about the account, not by a preference, so it is never offered as a choice on this card. excluded_not_owned counts accounts another company owns. estimated_accounts counts self-candidate accounts: they are estimates, stay out of every group, and are never part of proven cash. unsettled_ownership counts accounts whose owner is unanswered; those are NOT in any group, and a non-zero count means the reader has a repair to do before any total is trustworthy. Say when either count is non-zero rather than presenting the groups as the whole picture.

unreadable_balances counts owned accounts whose stored balance could not be read at all; unreadable_currency counts those carrying an amount with no currency code anywhere. Both are in no subtotal, so state them beside any figure rather than presenting one that silently skipped them — and keep them apart, because they are different repairs: a balance that did not arrive against a row that arrived incomplete.

folded_duplicates counts rows left out because they are a second copy of an account already listed, synced once per connector. They are in no group and no count, since the account they copy is counted once. unlinked_accounts counts rows left out by judgment rather than by duplicate collapse. A proven cross-source mirror or a bound alias of an account whose balance is already counted is left out for the same reason. An account whose source connection was removed, with no other live connector link, is left out for a different reason: no live connection keeps it in cash, and no other row counts its balance.

partial: true means the underlying read was cut short before it returned anything, so groups is empty and nothing is known about what the workspace holds. Say the read was cut short and offer to try again, rather than presenting an empty list as a decision.

own_set_truncated: true means the read reached the own-company row cap. The groups and subtotals are still usable; continue to a cash figure and label it partial because an unseen company may add accounts. Pass own_set_truncated: true to well_render_cash_position. This differs from partial: true, which means the read was cut short and must stop.

offered_account_types lists every type this card offers now. stored_choice is an answer a board block stored for this card: pass the block's binding.scope when it carries both counted_account_types and offered_account_types, and omit it otherwise. reuse_stored_choice: true means no type is new since that answer: apply the stored counted_account_types as they stand, and wait for nothing, because the card asks nothing. reuse_stored_choice: false beside a stored choice means new_options names a type the reader never judged: the card shows the stored answer ticked and gives each new type the card's own default, and the answer is awaited as on a first run.

The workspace can keep its own answer to this card: the preference cash_scope. The read compares the types listed now with that saved answer first, and with the stored_choice you pass only when the workspace keeps none: an answer a block or a conversation holds can be older than the saved one, and an older answer must not beat a newer one. stored_choice_source says which stored answer the read compared with: workspace_preference, stored_choice_input (the one you passed), or null with none. stored_counted_account_types holds the types that answer counts, so with reuse_stored_choice: true they are the answer as they stand. choice_savable is true when the caller is an owner or admin of the workspace, the only people who can save an answer for it with well_upsert_preference (key cash_scope). choice_workspace_id is the workspace this read ran in: an answer to its card belongs to that workspace and is saved there, never in another one.

The card records the reader's answer in this session, so wait for it unless the stored choice was reused: call well_wait_for_selection({ kind: "cash_scope" }) in the SAME turn, and read selection.counted_account_types. An EMPTY array there is the answer "nothing is cash" — a resolution that ends the run, never a zero total. Do not settle the scope yourself: on a workspace holding more than one type that is the figure decided on the reader's behalf. A card listing no type at all asks nothing and carries no wait. only_default_types: true means the read completed, no stored answer applies, and every type the card lists is a deposit type, which is cash by any reading and which the card counts by default: the card holds no decision, so it asks nothing and carries no wait. Count the listed types as they stand. Once the answer is in, YOU apply it when you total the balances, then call well_render_cash_position with the types you counted in scope.account_types.

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
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.
stored_choiceNoThe answer a board block stored for this card: the block's `binding.scope`. Omit it outside a board run.
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
groupsYes
partialYes
successYes
next_stepNoWhat to do with the card this result renders. Added by the dispatcher when the card asks for a click.
pre_tickedYesThe options the card starts with ticked.
new_optionsYesOptions listed now that the stored choice did not offer. Empty when no stored choice was passed. Name each one when the card is shown for it.
choice_savableYesTrue when the caller is an owner or admin of the workspace and so can save an answer for it.
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.
folded_duplicatesYes
own_set_truncatedYes
unlinked_accountsYes
estimated_accountsYesSelf-candidate accounts excluded from proven cash and every account-type group.
excluded_not_ownedYes
only_default_typesYesTrue when the read completed, no stored answer applies, and every type listed is the deposit type the card counts by default. The card then asks nothing and no wait is owed on it.
resolved_workspaceNoThe workspace that answered, when the caller named none and the token authorizes several.
choice_workspace_idYesThe workspace this read ran in, where an answer to its card is saved, or null when none resolved.
reuse_stored_choiceYesTrue when a stored choice was passed, the read completed, and no option is new. Apply the stored choice as it stands: the card asks nothing and no wait is owed on it.
unreadable_balancesYes
unreadable_currencyYes
unsettled_ownershipYes
conversation_id_noteNoPresent only when the server opened a fresh lane, stating that no choice recorded earlier was read.
stored_choice_sourceYesThe stored answer the read compared with: the workspace's saved answer, the stored_choice passed in when the workspace keeps none, or null with none.
offered_account_typesYesEvery account type this card offers now, in the order it lists them. The card records it beside the reader's answer, so a board block can store the two together.
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.
stored_counted_account_typesYesThe account types the stored answer counts as cash, or null with no stored answer.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / estimated_accounts
      Added value: +{
      +  "description": "Self-candidate accounts excluded from proven cash and every account-type group.",
      +  "type": "number"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "groups",
      -  "excluded_not_owned",
      -  "unsettled_ownership",
      -  "unreadable_balances",
      -  "unreadable_currency",
      -  "folded_duplicates",
      -  "unlinked_accounts",
      -  "offered_account_types",
      -  "new_options",
      -  "pre_ticked",
      -  "reuse_stored_choice",
      -  "only_default_types",
      -  "stored_choice_source",
      -  "stored_counted_account_types",
      -  "choice_savable",
      -  "choice_workspace_id",
      -  "own_set_truncated",
      -  "partial",
      -  "success"
      -]New value: +[
      +  "groups",
      +  "excluded_not_owned",
      +  "unsettled_ownership",
      +  "estimated_accounts",
      +  "unreadable_balances",
      +  "unreadable_currency",
      +  "folded_duplicates",
      +  "unlinked_accounts",
      +  "offered_account_types",
      +  "new_options",
      +  "pre_ticked",
      +  "reuse_stored_choice",
      +  "only_default_types",
      +  "stored_choice_source",
      +  "stored_counted_account_types",
      +  "choice_savable",
      +  "choice_workspace_id",
      +  "own_set_truncated",
      +  "partial",
      +  "success"
      +]
  2. Changed6 schema fields changed
    • removedOutput schema / properties / choice_workspace_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / choice_workspace_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / own_set_truncated
      Added value: +{
      +  "type": "boolean"
      +}
    • 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"
      +]
    • changedOutput schema / required
      Previous value: -[
      -  "groups",
      -  "excluded_not_owned",
      -  "unsettled_ownership",
      -  "unreadable_balances",
      -  "unreadable_currency",
      -  "folded_duplicates",
      -  "unlinked_accounts",
      -  "offered_account_types",
      -  "new_options",
      -  "pre_ticked",
      -  "reuse_stored_choice",
      -  "only_default_types",
      -  "stored_choice_source",
      -  "stored_counted_account_types",
      -  "choice_savable",
      -  "choice_workspace_id",
      -  "partial",
      -  "success"
      -]New value: +[
      +  "groups",
      +  "excluded_not_owned",
      +  "unsettled_ownership",
      +  "unreadable_balances",
      +  "unreadable_currency",
      +  "folded_duplicates",
      +  "unlinked_accounts",
      +  "offered_account_types",
      +  "new_options",
      +  "pre_ticked",
      +  "reuse_stored_choice",
      +  "only_default_types",
      +  "stored_choice_source",
      +  "stored_counted_account_types",
      +  "choice_savable",
      +  "choice_workspace_id",
      +  "own_set_truncated",
      +  "partial",
      +  "success"
      +]
  3. Changed2 schema fields changed
    • addedOutput schema / properties / only_default_types
      Added value: +{
      +  "description": "True when the read completed, no stored answer applies, and every type listed is the deposit type the card counts by default. The card then asks nothing and no wait is owed on it.",
      +  "type": "boolean"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "groups",
      -  "excluded_not_owned",
      -  "unsettled_ownership",
      -  "unreadable_balances",
      -  "unreadable_currency",
      -  "folded_duplicates",
      -  "unlinked_accounts",
      -  "offered_account_types",
      -  "new_options",
      -  "pre_ticked",
      -  "reuse_stored_choice",
      -  "stored_choice_source",
      -  "stored_counted_account_types",
      -  "choice_savable",
      -  "choice_workspace_id",
      -  "partial",
      -  "success"
      -]New value: +[
      +  "groups",
      +  "excluded_not_owned",
      +  "unsettled_ownership",
      +  "unreadable_balances",
      +  "unreadable_currency",
      +  "folded_duplicates",
      +  "unlinked_accounts",
      +  "offered_account_types",
      +  "new_options",
      +  "pre_ticked",
      +  "reuse_stored_choice",
      +  "only_default_types",
      +  "stored_choice_source",
      +  "stored_counted_account_types",
      +  "choice_savable",
      +  "choice_workspace_id",
      +  "partial",
      +  "success"
      +]
  4. Changed5 schema fields changed
    • addedOutput schema / properties / choice_savable
      Added value: +{
      +  "description": "True when the caller is an owner or admin of the workspace and so can save an answer for it.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / choice_workspace_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The workspace this read ran in, where an answer to its card is saved, or null when none resolved."
      +}
    • addedOutput schema / properties / stored_choice_source
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "stored_choice_input",
      +        "workspace_preference"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The stored answer the read compared with: the workspace's saved answer, the stored_choice passed in when the workspace keeps none, or null with none."
      +}
    • addedOutput schema / properties / stored_counted_account_types
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The account types the stored answer counts as cash, or null with no stored answer."
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "groups",
      -  "excluded_not_owned",
      -  "unsettled_ownership",
      -  "unreadable_balances",
      -  "unreadable_currency",
      -  "folded_duplicates",
      -  "unlinked_accounts",
      -  "offered_account_types",
      -  "new_options",
      -  "pre_ticked",
      -  "reuse_stored_choice",
      -  "partial",
      -  "success"
      -]New value: +[
      +  "groups",
      +  "excluded_not_owned",
      +  "unsettled_ownership",
      +  "unreadable_balances",
      +  "unreadable_currency",
      +  "folded_duplicates",
      +  "unlinked_accounts",
      +  "offered_account_types",
      +  "new_options",
      +  "pre_ticked",
      +  "reuse_stored_choice",
      +  "stored_choice_source",
      +  "stored_counted_account_types",
      +  "choice_savable",
      +  "choice_workspace_id",
      +  "partial",
      +  "success"
      +]
  5. 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."
  6. 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"
      +}
  7. 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"
      +}
  8. Changed6 schema fields changed
    • addedInput schema / properties / stored_choice
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "The answer a board block stored for this card: the block's `binding.scope`. Omit it outside a board run.",
      +  "properties": {
      +    "counted_account_types": {
      +      "description": "The account types the reader counted as cash on the cash-scope card.",
      +      "items": {
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "maxItems": 200,
      +      "type": "array"
      +    },
      +    "offered_account_types": {
      +      "description": "Every account type that card offered when the reader answered.",
      +      "items": {
      +        "maxLength": 200,
      +        "type": "string"
      +      },
      +      "maxItems": 200,
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / new_options
      Added value: +{
      +  "description": "Options listed now that the stored choice did not offer. Empty when no stored choice was passed. Name each one when the card is shown for it.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / offered_account_types
      Added value: +{
      +  "description": "Every account type this card offers now, in the order it lists them. The card records it beside the reader's answer, so a board block can store the two together.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / pre_ticked
      Added value: +{
      +  "description": "The options the card starts with ticked.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / reuse_stored_choice
      Added value: +{
      +  "description": "True when a stored choice was passed, the read completed, and no option is new. Apply the stored choice as it stands: the card asks nothing and no wait is owed on it.",
      +  "type": "boolean"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "groups",
      -  "excluded_not_owned",
      -  "unsettled_ownership",
      -  "unreadable_balances",
      -  "unreadable_currency",
      -  "folded_duplicates",
      -  "unlinked_accounts",
      -  "partial",
      -  "success"
      -]New value: +[
      +  "groups",
      +  "excluded_not_owned",
      +  "unsettled_ownership",
      +  "unreadable_balances",
      +  "unreadable_currency",
      +  "folded_duplicates",
      +  "unlinked_accounts",
      +  "offered_account_types",
      +  "new_options",
      +  "pre_ticked",
      +  "reuse_stored_choice",
      +  "partial",
      +  "success"
      +]
  9. Changed2 schema fields changed
    • addedOutput schema / properties / unlinked_accounts
      Added value: +{
      +  "type": "number"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "groups",
      -  "excluded_not_owned",
      -  "unsettled_ownership",
      -  "unreadable_balances",
      -  "unreadable_currency",
      -  "folded_duplicates",
      -  "partial",
      -  "success"
      -]New value: +[
      +  "groups",
      +  "excluded_not_owned",
      +  "unsettled_ownership",
      +  "unreadable_balances",
      +  "unreadable_currency",
      +  "folded_duplicates",
      +  "unlinked_accounts",
      +  "partial",
      +  "success"
      +]
  10. 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"
      +}
  11. Changed1 schema field changed
    • addedOutput schema / properties / next_step
      Added value: +{
      +  "description": "What to do with the card this result renders. Added by the dispatcher when the card asks for a click.",
      +  "type": "string"
      +}
  12. Changed2 schema fields changed
    • addedOutput schema / properties / folded_duplicates
      Added value: +{
      +  "type": "number"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "groups",
      -  "excluded_not_owned",
      -  "unsettled_ownership",
      -  "unreadable_balances",
      -  "unreadable_currency",
      -  "partial",
      -  "success"
      -]New value: +[
      +  "groups",
      +  "excluded_not_owned",
      +  "unsettled_ownership",
      +  "unreadable_balances",
      +  "unreadable_currency",
      +  "folded_duplicates",
      +  "partial",
      +  "success"
      +]
  13. Added

TDQS

A4.6/5.0
Behavior5/5

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

Despite read-only annotations, the description discloses a great deal beyond them: `partial: true` means the read was cut short, `own_set_truncated: true` means the row cap was reached, excluded/estimated/unsettled/unreadable/folded/unlinked counts are listed and are not in subtotals, and the tool asks the agent to surface those counts rather than presenting groups as the whole picture. It also explains precedence between `stored_choice` and the `cash_scope` workspace preference, and which condition ends the run versus yields a partial figure.

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 purpose is front-loaded, but the description is an extremely long wall of prose with many dense paragraphs and no structural headings. It is much larger than needed for a four-parameter list tool, and several edge-case explanations could be shortened or grouped. The information is mostly relevant, but its length makes correct selective reading harder for an agent.

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 the tool's complexity, output schema, nested parameters, and multi-step card workflow, the description is complete: it explains exclusion counts, truncation versus partial-read behavior, stored-choice precedence, the wait-for-selection step, and how to use the result in `well_render_cash_position`. Since an output schema exists, it does not need to restate return values, and it covers the procedural context an agent needs to invoke the tool correctly.

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 schema already documents all four parameters. The description still adds operational meaning beyond it: `stored_choice` should be the block's `binding.scope` only when it carries both `counted_account_types` and `offered_account_types`, `workspace_id` is required only when the token authorizes several workspaces, `workspace_scope: family` restricts reads to the family, and `conversation_id` must be passed on every call in the same conversation. The added meaning is useful but partially overlaps with the schema's own descriptions.

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 the specific verb and resource ('List the account types a reader can count as cash, each with what it holds') and immediately distinguishes it from `well_list_account_balances` by saying it measures nothing that tool did not already read. An agent can identify the tool and its intended place in the cash workflow without opening the schema.

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 when/when-not guidance across the workflow: call directly when the token authorizes one workspace, pass `workspace_id` when it authorizes several, pass `stored_choice` only when the block's `binding.scope` carries both fields, call `well_wait_for_selection({ kind: "cash_scope" })` in the same turn, and skip the wait when `reuse_stored_choice: true` or `only_default_types: true`. It also names downstream alternatives such as `well_render_cash_position` and `well_upsert_preference`.

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