Skip to main content
Glama

List workspaces

well_list_workspaces
Read-only

List the workspaces this connection is authorized to access. This draws nothing on the user's screen.

Use this FIRST when a single token may cover more than one workspace, and use it for every case a caller can settle on its OWN: exactly one workspace, a hint that matches one, a pin this conversation already wrote, or none at all. Read the rows and say which workspace you took.

⚠️ TO ASK THE USER WHICH WORKSPACE, CALL well_show_workspace_picker INSTEAD. It draws one tile per workspace and waits for a click. Reach for it only when the token authorizes several AND no hint resolves — a chooser over a set of one asks nothing, and a chooser the caller could have answered itself asks a question it already knows the answer to.

Use this FIRST when a single token may cover more than one workspace. Each entry has:

  • workspace_id: pass this as the workspace_id argument on other tools to target one workspace.

  • workspace_name: human-readable name (null if it can't be resolved).

  • is_primary: true for the token's default workspace (used when you omit workspace_id on a write).

  • own_company_id: the public id of the company this workspace is anchored to, or null. A row that carries it is a company workspace: the close flow runs in one. A row without it is a membership workspace, the container a sign-up mints.

  • lineage_parent_workspace_id: the workspace_id of the membership this workspace was created under, or null when the workspace has no active lineage. A membership workspace (no own_company_id) whose id appears here on other rows is the parent of those company workspaces.

  • identity: the company behind the workspace (registered name, trade name, registry number, country, website, currency, fiscal year start, where the fiscal year start came from, and the jurisdiction's default fiscal year start), so two similarly-named workspaces can be told apart. Every field is null when the workspace has no accounting settings yet. Tax identifiers are deliberately not included.

  • has_bank_transactions: whether a connector the workspace BANKS with has delivered any transaction to it, meaning a bank, a neobank, or a treasury or spend platform whose product is an account. An accounting platform and a payment processor deliver transactions too and do NOT count here. Neither does a transaction whose source connector is unknown, whose install has since been disconnected, or whose catalog entry has been retired. Only true shows that a bank has fed this workspace: false means no such transaction was found and null means the signal could not be read, so an absent value is never a zero and neither value licenses skipping a bank-connection step. Read this before any month read when the flow needs to know whether the workspace banks with anything at all.

The result also carries session, what the user's card clicks have already recorded in this conversation: pinned_workspace_id (null when not switched), workspace_queue (the workspaces to work through next, empty when none), selected_periods (the months picked on the period card, empty when none), and selected_counterparties (the counterparties picked on the missing-invoices card, with the workspace their company ids belong to; null when none was picked). Call this any time you need to resync with clicks you may have missed.

When the token authorizes a single workspace you can omit workspace_id everywhere; when it authorizes several, read tools fan out across all of them unless you pass a workspace_id, and write tools require one.

⚠️ A row without own_company_id is a membership workspace with no company of its own. TO ASK THE USER WHICH COMPANY that workspace IS — to show its detected company candidates and let them pick — CALL well_show_company_candidates, never this read: this list never shows the candidates.

Input Schema

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

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNo
sessionNoWhat this conversation's card clicks recorded so far; null/empty fields when nothing was clicked yet.
successYes
workspacesYes
conversation_idNoThe conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.
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. Changed5 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"
      +}
    • changedOutput schema / properties / session / description
      Previous value: -"What this session's card clicks recorded so far; null/empty fields when nothing was clicked yet."New value: +"What this conversation's card clicks recorded so far; null/empty fields when nothing was clicked yet."
  2. Changed6 schema fields changed
    • addedOutput schema / properties / workspaces / items / properties / identity / properties / country_default_fiscal_year_start_month
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The jurisdiction's default fiscal-year-start month for this country, or null when the country has no single confident default (non-null for France only today)."
      +}
    • addedOutput schema / properties / workspaces / items / properties / identity / properties / fiscal_year_start_month_source
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "derived",
      +        "registry",
      +        "user"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Where fiscal_year_start_month came from: \"registry\" from a company registry, \"derived\" from the country fallback, \"user\" from a human. Null when never set. Tells a confirmed fiscal year from one resting on a default."
      +}
    • changedOutput schema / properties / workspaces / items / properties / identity / required
      Previous value: -[
      -  "registered_name",
      -  "trade_name",
      -  "registered_value",
      -  "country",
      -  "domain",
      -  "base_currency",
      -  "fiscal_year_start_month"
      -]New value: +[
      +  "registered_name",
      +  "trade_name",
      +  "registered_value",
      +  "country",
      +  "domain",
      +  "base_currency",
      +  "fiscal_year_start_month",
      +  "fiscal_year_start_month_source",
      +  "country_default_fiscal_year_start_month"
      +]
    • addedOutput schema / properties / workspaces / items / properties / lineage_parent_workspace_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The workspace_id of the membership this workspace was created under, or null when it has no active lineage. Its parent's own row is the membership whose id this points at."
      +}
    • addedOutput schema / properties / workspaces / items / properties / own_company_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The public id of the company this workspace is anchored to, or null. A row that carries it is a company workspace, the one the close flow runs in; a row without it is a membership workspace."
      +}
    • changedOutput schema / properties / workspaces / items / required
      Previous value: -[
      -  "workspace_id",
      -  "workspace_name",
      -  "is_primary",
      -  "has_bank_transactions",
      -  "identity"
      -]New value: +[
      +  "workspace_id",
      +  "workspace_name",
      +  "is_primary",
      +  "own_company_id",
      +  "lineage_parent_workspace_id",
      +  "has_bank_transactions",
      +  "identity"
      +]
  3. Changed1 schema field changed
    • removedOutput schema / properties / next_step
      Removed value: -{
      -  "description": "What to do with the card this result renders. Added by the dispatcher when the card asks for a click.",
      -  "type": "string"
      -}
  4. 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"
      +}
  5. Changed2 schema fields changed
    • addedOutput schema / properties / workspaces / items / properties / has_bank_transactions
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Whether a connector the workspace BANKS with has delivered any transaction to it: a bank, a neobank, or a treasury or spend platform whose product is an account. An accounting platform and a payment processor deliver transactions too and do NOT count. A transaction whose source connector is unknown, whose install has since been disconnected, or whose catalog entry has been retired does not count either. Only true shows a bank has fed this workspace. false means no such transaction was found; null means the signal could not be read. An absent value is not a zero, and neither false nor null licenses skipping a bank-connection step."
      +}
    • changedOutput schema / properties / workspaces / items / required
      Previous value: -[
      -  "workspace_id",
      -  "workspace_name",
      -  "is_primary",
      -  "identity"
      -]New value: +[
      +  "workspace_id",
      +  "workspace_name",
      +  "is_primary",
      +  "has_bank_transactions",
      +  "identity"
      +]
  6. Changed1 schema field changed
    • changedInput schema / properties / workspace_id / description
      Previous value: -"Target workspace. Omit to use the only authorized workspace, or (for read tools) to query all authorized workspaces grouped by workspace. Required for write tools when the token authorizes more than one workspace."New value: +"Target workspace. Optional: this tool describes the token itself rather than one workspace's data, so omitting it returns the same answer."
  7. Changed2 schema fields changed
    • addedOutput schema / properties / session / properties / selected_counterparties
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "counterparties": {
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "company_id": {
      +                "type": "string"
      +              },
      +              "matched_connector_service_id": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "The connector that can fetch this counterparty's invoices; null when none matched."
      +              }
      +            },
      +            "required": [
      +              "company_id",
      +              "matched_connector_service_id"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "workspace_id": {
      +          "description": "The workspace the picked company ids belong to.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "workspace_id",
      +        "counterparties"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The counterparties picked on the missing-invoices card; null until a pick is recorded."
      +}
    • changedOutput schema / properties / session / required
      Previous value: -[
      -  "pinned_workspace_id",
      -  "workspace_queue",
      -  "selected_periods"
      -]New value: +[
      +  "pinned_workspace_id",
      +  "workspace_queue",
      +  "selected_periods",
      +  "selected_counterparties"
      +]
  8. Changed1 schema field changed
    • addedOutput schema / properties / session
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "What this session's card clicks recorded so far; null/empty fields when nothing was clicked yet.",
      +  "properties": {
      +    "pinned_workspace_id": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "selected_periods": {
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "calendar_month": {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          },
      +          "calendar_year": {
      +            "maximum": 9007199254740991,
      +            "minimum": -9007199254740991,
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "calendar_year",
      +          "calendar_month"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "workspace_queue": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "pinned_workspace_id",
      +    "workspace_queue",
      +    "selected_periods"
      +  ],
      +  "type": "object"
      +}
  9. Changed2 schema fields changed
    • addedOutput schema / properties / workspaces / items / properties / identity
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "base_currency": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "country": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "domain": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "fiscal_year_start_month": {
      +      "anyOf": [
      +        {
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "registered_name": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "registered_value": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "trade_name": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "registered_name",
      +    "trade_name",
      +    "registered_value",
      +    "country",
      +    "domain",
      +    "base_currency",
      +    "fiscal_year_start_month"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / workspaces / items / required
      Previous value: -[
      -  "workspace_id",
      -  "workspace_name",
      -  "is_primary"
      -]New value: +[
      +  "workspace_id",
      +  "workspace_name",
      +  "is_primary",
      +  "identity"
      +]
  10. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds extensive behavioral context: no screen drawing, the semantics of session fields, how workspace_id omission behaves, fan-out across workspaces, and the meaning of has_bank_transactions including null and false caveats. This far exceeds what annotations provide.

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?

The description is long but well-structured with a clear opening directive, warnings, and a field-by-field breakdown. It earns most of its length, though 'Use this FIRST when a single token may cover more than one workspace' appears twice and some guidance about asking the user is repeated in two warning blocks.

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, an output schema exists, and the description explains all returned row fields, session state, edge cases such as null values, and the decision logic for calling this tool vs pickers or candidate tools. An agent has everything needed to call it correctly and interpret results.

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% and the schema already documents both parameters well, so a baseline of 3 is appropriate. The description adds meaningful context beyond the schema: workspace_id is the value to pass to other tools from returned rows, omission behavior is tied to token authorization, and conversation_id must be passed back across the conversation. This elevates it above baseline but some content repeats schema text.

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 opening sentence states a specific verb and resource: 'List the workspaces this connection is authorized to access.' It explicitly notes the tool draws nothing on screen and explicitly distinguishes itself from well_show_workspace_picker and well_show_company_candidates, making sibling differentiation clear.

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-to-use guidance: use this FIRST when a token may cover multiple workspaces, and lists the cases a caller can settle on its own. It also gives exact exclusion rules, naming well_show_workspace_picker and well_show_company_candidates as the alternatives with conditions for choosing them.

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