Skip to main content
Glama

Get connector coverage

well_get_connector_coverage
Read-only

Read what a workspace has CONNECTED and what it can connect. This draws nothing on the user's screen.

Use it for every coverage CHECK: a data skill confirming a bank is connected before it measures anything, a step that needs a workspace_connector_id, a health read on a connector the user asked about. Read each row's state and hand the answer back in your own words, in the same turn — there is no card to wait on here, and no acknowledgement to ask for.

⚠️ FOR A CONNECT STEP, CALL well_list_connectors INSTEAD. Same scope arguments, and its result draws the card with the install links and the Continue the user clicks. This tool cannot draw one, so a connect step run here leaves the user with prose and no way to act.

Do NOT read workspace_connectors records to work out connection coverage; this tool is that answer.

To tell whether the user has connected an AI app to Well over MCP, pass kind: "ai_client". A row with is_connected true is a connected AI app. On this one scope the two tools do not answer over the same set: a client Well does not recognise records its connection against a generic row, which this read carries and the install card leaves out. So ask this tool, not well_list_connectors, whether an AI app is connected.

Which rows come back: at most 14 rows, and fewer when the rows are long, kept in this order: connected rows, then rows with an unfinished, disabled or broken connection or a connect attempt that ended, then rows that carry evidence, then the rows install_all_url installs, then the other catalog rows. Connections the page did not hold can be added at the top of the first page (a browse, a slug read, or a search scoped to a kind). omitted_row_count counts every row of the page left out. connection_omitted_count counts the rows with a connection or an ended connect attempt that this result leaves out. It is 0 unless the scope holds more such rows than one result holds. When it is above 0, a kind with no connected row in this result is unchecked: say you could not check it, never that it is missing. A second read of the same scope returns the same rows, so do not repeat it; a read by slug of one tool the user names returns that tool's row. evidence_omitted_count counts the rows of this page that carry evidence and that this result leaves out. The bound keeps the evidence rows in the catalog's order, so the evidence rows returned are the first ones. A cut evidence row is unchecked, not missing: never say that Well has no reason to suggest a tool because its row is absent, and offer no install link for a tool whose row this result does not hold. To check a tool the user names whose row this result does not hold, read that tool by slug: the slug read returns its row, evidence and install link included, so answer about that tool from that row. Paging does not reach a cut row: offset + page_count moves past the whole page. When evidence_complete is true and connection_omitted_count is 0, an omitted row has no connection and no ended connect attempt, so it never changes the state of a kind: answer each kind from the rows returned, and a kind with no row that has a connection is missing. When evidence_complete is false on a catalog read (no scope, or a kind of "bank", "accounting" or "invoicing"), Well may not have read the workspace's connections: a kind with no connected row is then unchecked, so say you could not check it, never that it is missing. A kind is connected when a row whose connection_status is "enabled" or "processing" lists it in data_domains, whatever that tool is: answer yes and name that tool as the one that brings that data in (for "bank", the cash movements), also when no bank's own connector is connected. A row in "need_reconnect" or "error" that lists the kind brings that data only once the user repairs it: say so, and do not answer a plain yes. A row in "to_configure" or "disabled" does not cover the kind. install_all_omitted names the service ids install_all_url does not carry: one link names a bounded number of connectors, and the row bound of this read can cut a row the link would install. This read can leave the rows those ids name out of connectors, so offer no install link for them from this result: their install links come from well_list_connectors, whose card is the connect step. On this read the list names at most 10 ids; install_all_omitted_count counts them all. To read one tool by name, pass slug. Page with offset + page_count.

The rows carry the fields of well_list_connectors, field for field. Its description carries the field reference, and this description does not repeat it, except for one rule. When the user asks what Well reads or changes in a tool, answer from the row's reads and writes only and name only their items, never data_domains, invoice_source, category_id or the tool's name. An empty reads means you do not know yet ("je ne sais pas encore" in French), and an empty writes means Well changes nothing in that tool from the chat. For a tool with is_connected false, give ONE install link, once, raw: the top-level install_all_url when it is non-null, else the row's install_url.

Before a step that runs in the user's own browser (a hand-off to the Well extension), read the top-level extension_installed. Present on a well_get_connector_coverage read only. Whether the person who asks has the Well browser extension in THIS workspace: installed, missing or unknown. The catalog rows never carry the extension, so read this field, never a records query on workspace_connectors. installed: this person opened this workspace in Well with the extension in their Chrome. Well cannot see an uninstall, so a browser hand-off can still stop; report that stop as it happens. missing: nobody has opened this workspace in Well with the extension, so a step that runs in a browser cannot run for this person yet; say so before you hand it off. unknown: Well cannot tell for this caller, for example when another member's extension is on record and this person has none; never say the extension is installed or missing, run the step and report what happens. The answer is for this person in this workspace only: another member's extension never counts as this person's, and the same person can read missing in another workspace.

A row's move is null when Well is not moving that connection to a company workspace. Otherwise it is { phase, blocker }: the step the move is at and, when the move is parked, what holds it. A row with a move is in progress and never done: say the connection is being moved and takes a while, never that it moved or is ready in the new workspace. When blocker is set, say it is waiting and name the reason in plain words.

Before promising an invoice payment link, read the top-level payment_link_providers. Present on a well_get_connector_coverage read only. The providers (stripe, qonto) whose connection in THIS workspace can make an invoice payment link today, read from what each connection's token can reach. A connected, synced row that is missing here cannot make a link: never promise one for it. An absent field means the read did not run, which is not a provider that can make a link.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qNoName search across the full catalog (e.g. a specific bank). With a `kind` of "bank", "accounting" or "invoicing", the first page also carries the tools of that kind the workspace already has. Omit for the curated view, which lists the tools with evidence first.
kindNoScope the card server-side. Three financial domains: "bank" (every bank and neobank, including the long tail of open-banking institutions, plus the platforms that hold an account like Qonto and Pennylane — never a payroll or billing tool that merely reports transactions), "accounting", and "invoicing". Plus two scopes the server resolves from display categories rather than from a financial domain: "upload_surface", the places invoices ARRIVE (mailboxes, messaging apps, file drives), and "storage", the drives Well FILES INTO (Google Drive, Dropbox, OneDrive). The last two are opposite directions on the same drives, so a workspace can hold both connections and each is offered on its own card. And "ai_client", the AI apps that read Well over MCP (Claude, Codex, the Well CLI and the like): read it to tell whether any AI app is connected. Its rows carry no install_url, since an AI app connects from its own settings. Use this for a connect-a-bank, a connect-where-invoices-arrive or a connect-where-Well-files step instead of filtering the default view yourself. Omit for every connectable connector.
slugNoExact connector slug: resolves the ONE named connector, of any kind (e.g. "notion" for a connect-Notion request). Use it when the request names a single connector, instead of `q` which name-searches. With a `kind` of "bank", "accounting" or "invoicing" (e.g. slug "pennylane" with kind "accounting"), the result also carries the tools of that kind the workspace already has, so one read answers "this tool, plus what I already have". An unknown slug returns an empty list; retry with `q` on the name then. Cannot be combined with `q`, `from_selection`, `counterparty_ids`, or any other `kind`.
limitNoMax connectors to return (1-100, default 50).
slugsNoExact connector slugs, one per tool the person named in one request (e.g. ["qonto", "pennylane"] for "connect Qonto and Pennylane"): resolves each named connector, and the result carries one `install_all_url` that installs every one of them that is not connected yet, in one browser tab. Use it instead of one call per tool when the request names two to 10 tools. A slug that matches nothing adds no row; retry that one tool with `q` on its name. Cannot be combined with `slug`, `q`, `kind`, `from_selection` or `counterparty_ids`.
offsetNoNumber of connectors to skip, for paging (default 0).
countryNoThe company's country as an ISO 3166-1 alpha-2 code (e.g. "FR"). When set, the connectors that serve that country sort first, then the ones that serve its region, then the rest — the order only, no row is dropped. Use it on a connect-a-bank or a connect-an-accounting-tool step so the banks or accounting tools that fit the company appear first; take it from the workspace identity's country. Omit when the country is unknown, and the order is left unchanged.
suggestNoThe tools you suggest from something the person told you, which only you can read (their notes, your memory of them, what they said earlier): each a catalog service_id and a one-line reason in the person's language ("You told me you bank with Qonto"). Those rows gain note evidence, rank with the other tools that have evidence, and carry your reason as their suggestion_reason. Never name a tool here from a guess, an email domain or a category alone. At most 10.
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.
from_selectionNoScope the card to the connectors behind the counterparties the user picked on the missing-invoices card in this conversation, each installable one pre-checked. Use it for the connect step that FOLLOWS a vendor pick. It returns those vendors' connectors and NOTHING else: a picked connector that brings no invoices in is dropped, and no accounting or invoicing tool the user did not pick is offered here: that offer is its own step, scoped with `kind`. Cannot be combined with `q` or `kind`: those name a catalog to browse, and this names a set already decided. Returns an empty list when this conversation holds no pick for this workspace, or when no picked counterparty matched a connector.
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.
counterparty_idsNoScope the card to the connectors behind these counterparties, copied from the `company_id` of the missing-invoices rows. The explicit form of `from_selection`, for a caller holding the picked ids itself instead of a card click recorded in this session: it resolves the same connectors and filters them the same way. Passing counterparty_ids alone already scopes the card to the pick — from_selection is not needed alongside it; it cannot be combined with `q` or `kind`.
include_unsent_countsNoAdd the top-level `unsent_document_counts`: every tool Well forwards this workspace's documents to, each with how many documents it has not received yet. That array is the whole answer — it holds every one of the workspace's outbound connections, whatever catalog page was requested, and the rows carry no count at all. Off by default, because it costs an extra read. The figure is the workspace's whole backlog, not a period's.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNo
limitNoThe page size that was REQUESTED. The catalog may return fewer.
scopeNoWhat this result is a list OF: the requested kind, the picked vendors' connectors, or the curated catalog when neither was asked for. The card words itself from this, so it never describes the rows as a domain that was not requested.
totalNoEvery connector matching the query, across all pages — NOT the length of `connectors`.
offsetNoHow many catalog rows this page skipped.
successYes
row_countNoHow many rows this result returns, prepended rows included; omitted_row_count counts the rest of the page. Not a paging cursor: page_count is.
connectorsNo
page_countNoThe catalog page's own length, and the ONLY safe paging cursor: advance by `offset + page_count`. `connectors` can be longer (connections the page did not hold can be prepended on the first page) or shorter (omitted_row_count rows left out), so never page by the array's length.
conversation_idNoThe conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.
install_all_urlYesOne link that installs every installable connector in this result. Null when the result offers nothing to install, or when its scope names a set the reader has not chosen. When it is non-null it is the ONLY install link the answer offers — do not list the rows' own install_url beside it. When it is null, the rows' own install_url is the offer instead.
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.
evidence_completeNoFalse when Well could not read every source of evidence for this workspace. A row with empty `evidence` is then UNCHECKED, not clean: say you could not check, and never say there is no sign yet. True or absent means every source was read. Only a catalog read (no scope, or a `kind` of `bank`, `accounting` or `invoicing`, with or without `q` or `slug`) reads evidence: the picked-vendor (`from_selection`, `counterparty_ids`), `upload_surface`, `storage` and `ai_client` scopes read no workspace evidence. A row holds only a note you passed in `suggest`, otherwise empty `evidence`. These scopes always report false.
omitted_row_countNoHow many rows of this catalog page the result leaves out, every group included. When evidence_complete is true and connection_omitted_count is 0, an omitted row has no connection and no ended connect attempt, so it never changes the state of a kind: answer each kind from the rows returned, and a kind with no row that has a connection is missing. When evidence_complete is false on a catalog read (no scope, or a kind of "bank", "accounting" or "invoicing"), Well may not have read the workspace's connections: a kind with no connected row is then unchecked, so say you could not check it, never that it is missing.
resolved_workspaceNoThe workspace that answered, when the caller named none and the token authorizes several.
extension_installedNoPresent on a `well_get_connector_coverage` read only. Whether the person who asks has the Well browser extension in THIS workspace: `installed`, `missing` or `unknown`. The catalog rows never carry the extension, so read this field, never a records query on workspace_connectors. `installed`: this person opened this workspace in Well with the extension in their Chrome. Well cannot see an uninstall, so a browser hand-off can still stop; report that stop as it happens. `missing`: nobody has opened this workspace in Well with the extension, so a step that runs in a browser cannot run for this person yet; say so before you hand it off. `unknown`: Well cannot tell for this caller, for example when another member's extension is on record and this person has none; never say the extension is installed or missing, run the step and report what happens. The answer is for this person in this workspace only: another member's extension never counts as this person's, and the same person can read `missing` in another workspace.
install_all_omittedYesinstall_all_omitted names the service ids install_all_url does not carry: one link names a bounded number of connectors, and the row bound of this read can cut a row the link would install. This read can leave the rows those ids name out of connectors, so offer no install link for them from this result: their install links come from `well_list_connectors`, whose card is the connect step. On this read the list names at most 10 ids; install_all_omitted_count counts them all.
unfinished_connectsNoConnect attempts in this workspace the person has not been told about yet, newest first. `outcome` is `stopped` (the person closed the connect before it finished), `timed_out` (nobody finished it within the hour), or `still_connecting` (it is still open). An empty array means there is nothing to tell; an absent field means nothing was read. Name a tool by its `name`. For each entry, say one short line in the reply: on `stopped` or `timed_out`, offer to connect it again or to skip it for now; on `still_connecting`, offer to wait or to skip it for now. Once the reply says the lines, call `well_mark_connects_told` with the `workspace_connector_id` of each entry it said, so a later read does not repeat them. An entry the reply did not say stays unmarked and comes back on the next read.
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.
evidence_omitted_countNoevidence_omitted_count counts the rows of this page that carry evidence and that this result leaves out. The bound keeps the evidence rows in the catalog's order, so the evidence rows returned are the first ones. A cut evidence row is unchecked, not missing: never say that Well has no reason to suggest a tool because its row is absent, and offer no install link for a tool whose row this result does not hold. To check a tool the user names whose row this result does not hold, read that tool by slug: the slug read returns its row, evidence and install link included, so answer about that tool from that row. Paging does not reach a cut row: offset + page_count moves past the whole page.
payment_link_providersNoPresent on a `well_get_connector_coverage` read only. The providers (`stripe`, `qonto`) whose connection in THIS workspace can make an invoice payment link today, read from what each connection's token can reach. A connected, synced row that is missing here cannot make a link: never promise one for it. An absent field means the read did not run, which is not a provider that can make a link.
unsent_document_countsNoEvery tool this workspace forwards documents to, each with the documents it has not received yet, biggest backlog first. Present only when `include_unsent_counts` was set. THIS IS THE ONLY PLACE THE BACKLOG IS REPORTED: it is not a page, it carries the workspace's whole set of outbound connections whether or not the requested catalog page holds their rows, and the catalog rows carry no count. An empty array means the workspace forwards to nothing; an absent field means nothing was measured. `unsent_document_count_is_upper_bound: true` means a document filter applies to that connection, so the count is a maximum and reads as `up to <n>`. Every count is read off Well's own forward record, so it measures what Well wrote down rather than what the tool confirmed. Name a tool by its `name`. An entry reading `0` is a tool that is up to date: say nothing about it.
picked_vendors_filteredNoHow many of the picked vendors' connectors were dropped for bringing no invoices in. Present on the `picked_vendors` scope only. Above zero means the card is SHORTER than the pick: say that those vendors' tools cannot deliver an invoice, rather than letting the gap read as a pick the user never made.
connection_omitted_countNoconnection_omitted_count counts the rows with a connection or an ended connect attempt that this result leaves out. It is 0 unless the scope holds more such rows than one result holds. When it is above 0, a kind with no connected row in this result is unchecked: say you could not check it, never that it is missing. A second read of the same scope returns the same rows, so do not repeat it; a read by slug of one tool the user names returns that tool's row.
install_all_omitted_countYesHow many service ids install_all_url does not carry, the ids install_all_omitted leaves out included.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / connectors / items / properties / move
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "blocker": {
      +          "anyOf": [
      +            {
      +              "enum": [
      +                "run_open",
      +                "fence_lost",
      +                "member_custody_lost",
      +                "bank_slot_over_limit",
      +                "bank_limit_unreadable",
      +                "holder_survivor_gone",
      +                "target_outside_lineage",
      +                "unique_blocked",
      +                "merge_chain",
      +                "books_not_voidable",
      +                "verify_failed",
      +                "check_failed",
      +                "not_authorized",
      +                "third_target_present",
      +                "rollback_conflict"
      +              ],
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "phase": {
      +          "enum": [
      +            "capacity",
      +            "parties",
      +            "accounts",
      +            "payment_means",
      +            "documents",
      +            "transactions",
      +            "invoices",
      +            "statements",
      +            "followers",
      +            "links",
      +            "keyed",
      +            "owed",
      +            "books",
      +            "verify",
      +            "flip",
      +            "repost",
      +            "settle"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "phase",
      +        "blocker"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / connectors / items / properties / reconnect_reason / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "auth_revoked",
      -      "auth_missing",
      -      "scope_insufficient",
      -      "login_required",
      -      "account_choice_required",
      -      "provider_identity_collision",
      -      "provider_identity_missing",
      -      "credential_rejected",
      -      "owner_not_member",
      -      "connector_replaced",
      -      "unknown"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "auth_revoked",
      +      "auth_missing",
      +      "scope_insufficient",
      +      "login_required",
      +      "account_choice_required",
      +      "provider_identity_collision",
      +      "provider_identity_missing",
      +      "credential_rejected",
      +      "owner_not_member",
      +      "connector_replaced",
      +      "access_ending_soon",
      +      "unknown"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  2. Changed8 schema fields changed
    • addedOutput schema / properties / connection_omitted_count
      Added value: +{
      +  "description": "connection_omitted_count counts the rows with a connection or an ended connect attempt that this result leaves out. It is 0 unless the scope holds more such rows than one result holds. When it is above 0, a kind with no connected row in this result is unchecked: say you could not check it, never that it is missing. A second read of the same scope returns the same rows, so do not repeat it; a read by slug of one tool the user names returns that tool's row.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / evidence_omitted_count
      Added value: +{
      +  "description": "evidence_omitted_count counts the rows of this page that carry evidence and that this result leaves out. The bound keeps the evidence rows in the catalog's order, so the evidence rows returned are the first ones. A cut evidence row is unchecked, not missing: never say that Well has no reason to suggest a tool because its row is absent, and offer no install link for a tool whose row this result does not hold. To check a tool the user names whose row this result does not hold, read that tool by slug: the slug read returns its row, evidence and install link included, so answer about that tool from that row. Paging does not reach a cut row: offset + page_count moves past the whole page.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / install_all_omitted / description
      Previous value: -"The service ids install_all_url could not carry, because one link names a bounded number of connectors. Offer these rows their own install_url instead of promising the batch link covers them."New value: +"install_all_omitted names the service ids install_all_url does not carry: one link names a bounded number of connectors, and the row bound of this read can cut a row the link would install. This read can leave the rows those ids name out of connectors, so offer no install link for them from this result: their install links come from `well_list_connectors`, whose card is the connect step. On this read the list names at most 10 ids; install_all_omitted_count counts them all."
    • addedOutput schema / properties / install_all_omitted_count
      Added value: +{
      +  "description": "How many service ids install_all_url does not carry, the ids install_all_omitted leaves out included.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • addedOutput schema / properties / omitted_row_count
      Added value: +{
      +  "description": "How many rows of this catalog page the result leaves out, every group included. When evidence_complete is true and connection_omitted_count is 0, an omitted row has no connection and no ended connect attempt, so it never changes the state of a kind: answer each kind from the rows returned, and a kind with no row that has a connection is missing. When evidence_complete is false on a catalog read (no scope, or a kind of \"bank\", \"accounting\" or \"invoicing\"), Well may not have read the workspace's connections: a kind with no connected row is then unchecked, so say you could not check it, never that it is missing.",
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedOutput schema / properties / page_count / description
      Previous value: -"The catalog page's own length, and the ONLY safe paging cursor: advance by `offset + page_count`. `connectors` can be LONGER — on the first page of an unsearched browse the workspace's already-connected rows are prepended so they cannot be lost to the catalog's ordering — so paging by the array's length silently skips exactly that many catalog rows on every later request."New value: +"The catalog page's own length, and the ONLY safe paging cursor: advance by `offset + page_count`. `connectors` can be longer (connections the page did not hold can be prepended on the first page) or shorter (omitted_row_count rows left out), so never page by the array's length."
    • changedOutput schema / properties / row_count / description
      Previous value: -"How many rows this result puts ON THE CARD, prepended rows included. `0` on a `picked_vendors` scope means the pick has no connector behind it that can bring an invoice in: the card carries nothing to tick, so say so in half a sentence and move on. Not a paging cursor — `page_count` is."New value: +"How many rows this result returns, prepended rows included; omitted_row_count counts the rest of the page. Not a paging cursor: page_count is."
    • changedOutput schema / required
      Previous value: -[
      -  "install_all_url",
      -  "install_all_omitted",
      -  "success"
      -]New value: +[
      +  "install_all_url",
      +  "install_all_omitted",
      +  "success",
      +  "install_all_omitted_count"
      +]
  3. Changed7 schema fields changed
    • changedInput schema / properties / q / description
      Previous value: -"Name search across the full catalog (e.g. a specific bank). Omit for the curated view, which lists the tools with evidence first."New value: +"Name search across the full catalog (e.g. a specific bank). With a `kind` of \"bank\", \"accounting\" or \"invoicing\", the first page also carries the tools of that kind the workspace already has. Omit for the curated view, which lists the tools with evidence first."
    • changedInput schema / properties / slug / description
      Previous value: -"Exact connector slug: resolves the ONE named connector, of any kind (e.g. \"notion\" for a connect-Notion request). Use it when the request names a single connector, instead of `q` which name-searches. An unknown slug returns an empty list; retry with `q` on the name then. Cannot be combined with `q`, `kind`, `from_selection` or `counterparty_ids`."New value: +"Exact connector slug: resolves the ONE named connector, of any kind (e.g. \"notion\" for a connect-Notion request). Use it when the request names a single connector, instead of `q` which name-searches. With a `kind` of \"bank\", \"accounting\" or \"invoicing\" (e.g. slug \"pennylane\" with kind \"accounting\"), the result also carries the tools of that kind the workspace already has, so one read answers \"this tool, plus what I already have\". An unknown slug returns an empty list; retry with `q` on the name then. Cannot be combined with `q`, `from_selection`, `counterparty_ids`, or any other `kind`."
    • addedOutput schema / properties / connectors / items / properties / borrowed_from_workspace_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / connectors / items / properties / connection_paths
      Added value: +{
      +  "items": {
      +    "enum": [
      +      "direct",
      +      "native_mcp",
      +      "open_banking"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / connectors / items / properties / lender_last_successful_sync_at
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / connectors / items / required
      Previous value: -[
      -  "service_id",
      -  "slug",
      -  "name",
      -  "category_id",
      -  "status",
      -  "direction",
      -  "data_domains",
      -  "reads",
      -  "writes",
      -  "domain",
      -  "country_codes",
      -  "invoice_source",
      -  "reason",
      -  "logo_url",
      -  "popularity_score",
      -  "is_matched",
      -  "is_selected",
      -  "match_score",
      -  "match_source",
      -  "evidence",
      -  "suggestion_reason",
      -  "is_connected",
      -  "connection_status",
      -  "connect_failure_cause",
      -  "last_connect_outcome",
      -  "sync_health",
      -  "reconnect_reason",
      -  "scope_coverage",
      -  "workspace_connector_id",
      -  "last_successful_sync_at",
      -  "sync_in_progress",
      -  "is_preselected",
      -  "install_url",
      -  "reinstall_url",
      -  "countries",
      -  "direct_connector_service_id"
      -]New value: +[
      +  "service_id",
      +  "slug",
      +  "name",
      +  "category_id",
      +  "status",
      +  "direction",
      +  "data_domains",
      +  "reads",
      +  "writes",
      +  "domain",
      +  "country_codes",
      +  "invoice_source",
      +  "reason",
      +  "logo_url",
      +  "popularity_score",
      +  "is_matched",
      +  "is_selected",
      +  "match_score",
      +  "match_source",
      +  "evidence",
      +  "suggestion_reason",
      +  "is_connected",
      +  "connection_status",
      +  "connect_failure_cause",
      +  "last_connect_outcome",
      +  "sync_health",
      +  "reconnect_reason",
      +  "scope_coverage",
      +  "workspace_connector_id",
      +  "last_successful_sync_at",
      +  "sync_in_progress",
      +  "is_preselected",
      +  "install_url",
      +  "reinstall_url",
      +  "countries",
      +  "direct_connector_service_id",
      +  "connection_paths"
      +]
    • 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."
  4. Changed1 schema field changed
    • addedOutput schema / properties / payment_link_providers
      Added value: +{
      +  "description": "Present on a `well_get_connector_coverage` read only. The providers (`stripe`, `qonto`) whose connection in THIS workspace can make an invoice payment link today, read from what each connection's token can reach. A connected, synced row that is missing here cannot make a link: never promise one for it. An absent field means the read did not run, which is not a provider that can make a link.",
      +  "items": {
      +    "enum": [
      +      "lago",
      +      "qonto",
      +      "stripe"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / slugs
      Added value: +{
      +  "description": "Exact connector slugs, one per tool the person named in one request (e.g. [\"qonto\", \"pennylane\"] for \"connect Qonto and Pennylane\"): resolves each named connector, and the result carries one `install_all_url` that installs every one of them that is not connected yet, in one browser tab. Use it instead of one call per tool when the request names two to 10 tools. A slug that matches nothing adds no row; retry that one tool with `q` on its name. Cannot be combined with `slug`, `q`, `kind`, `from_selection` or `counterparty_ids`.",
      +  "items": {
      +    "maxLength": 120,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 10,
      +  "minItems": 2,
      +  "type": "array"
      +}
  6. Changed6 schema fields 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"
      +}
    • addedOutput schema / properties / connectors / items / properties / reconnect_reason
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "auth_revoked",
      +        "auth_missing",
      +        "scope_insufficient",
      +        "login_required",
      +        "account_choice_required",
      +        "provider_identity_collision",
      +        "provider_identity_missing",
      +        "credential_rejected",
      +        "owner_not_member",
      +        "connector_replaced",
      +        "unknown"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / connectors / items / properties / reinstall_url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / connectors / items / properties / scope_coverage
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "missing_scopes": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "reconnect_url": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "state": {
      +          "enum": [
      +            "complete",
      +            "missing",
      +            "unknown"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "state",
      +        "missing_scopes",
      +        "reconnect_url"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / connectors / items / required
      Previous value: -[
      -  "service_id",
      -  "slug",
      -  "name",
      -  "category_id",
      -  "status",
      -  "direction",
      -  "data_domains",
      -  "reads",
      -  "writes",
      -  "domain",
      -  "country_codes",
      -  "invoice_source",
      -  "reason",
      -  "logo_url",
      -  "popularity_score",
      -  "is_matched",
      -  "is_selected",
      -  "match_score",
      -  "match_source",
      -  "evidence",
      -  "suggestion_reason",
      -  "is_connected",
      -  "connection_status",
      -  "connect_failure_cause",
      -  "last_connect_outcome",
      -  "sync_health",
      -  "workspace_connector_id",
      -  "last_successful_sync_at",
      -  "sync_in_progress",
      -  "is_preselected",
      -  "install_url",
      -  "countries",
      -  "direct_connector_service_id"
      -]New value: +[
      +  "service_id",
      +  "slug",
      +  "name",
      +  "category_id",
      +  "status",
      +  "direction",
      +  "data_domains",
      +  "reads",
      +  "writes",
      +  "domain",
      +  "country_codes",
      +  "invoice_source",
      +  "reason",
      +  "logo_url",
      +  "popularity_score",
      +  "is_matched",
      +  "is_selected",
      +  "match_score",
      +  "match_source",
      +  "evidence",
      +  "suggestion_reason",
      +  "is_connected",
      +  "connection_status",
      +  "connect_failure_cause",
      +  "last_connect_outcome",
      +  "sync_health",
      +  "reconnect_reason",
      +  "scope_coverage",
      +  "workspace_connector_id",
      +  "last_successful_sync_at",
      +  "sync_in_progress",
      +  "is_preselected",
      +  "install_url",
      +  "reinstall_url",
      +  "countries",
      +  "direct_connector_service_id"
      +]
    • addedOutput schema / properties / extension_installed
      Added value: +{
      +  "description": "Present on a `well_get_connector_coverage` read only. Whether the person who asks has the Well browser extension in THIS workspace: `installed`, `missing` or `unknown`. The catalog rows never carry the extension, so read this field, never a records query on workspace_connectors. `installed`: this person opened this workspace in Well with the extension in their Chrome. Well cannot see an uninstall, so a browser hand-off can still stop; report that stop as it happens. `missing`: nobody has opened this workspace in Well with the extension, so a step that runs in a browser cannot run for this person yet; say so before you hand it off. `unknown`: Well cannot tell for this caller, for example when another member's extension is on record and this person has none; never say the extension is installed or missing, run the step and report what happens. The answer is for this person in this workspace only: another member's extension never counts as this person's, and the same person can read `missing` in another workspace.",
      +  "enum": [
      +    "installed",
      +    "missing",
      +    "unknown"
      +  ],
      +  "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. Changed10 schema fields changed
    • changedInput schema / properties / q / description
      Previous value: -"Name search across the full catalog (e.g. a specific bank). Omit for the curated, matched-first view."New value: +"Name search across the full catalog (e.g. a specific bank). Omit for the curated view, which lists the tools with evidence first."
    • addedInput schema / properties / suggest
      Added value: +{
      +  "description": "The tools you suggest from something the person told you, which only you can read (their notes, your memory of them, what they said earlier): each a catalog service_id and a one-line reason in the person's language (\"You told me you bank with Qonto\"). Those rows gain note evidence, rank with the other tools that have evidence, and carry your reason as their suggestion_reason. Never name a tool here from a guess, an email domain or a category alone. At most 10.",
      +  "items": {
      +    "properties": {
      +      "reason": {
      +        "maxLength": 120,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "service_id": {
      +        "maxLength": 120,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "service_id",
      +      "reason"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 10,
      +  "type": "array"
      +}
    • addedOutput schema / properties / connectors / items / properties / direct_connector_service_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / connectors / items / properties / evidence
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "count": {
      +        "anyOf": [
      +          {
      +            "maximum": 9007199254740991,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "count_is_lower_bound": {
      +        "type": "boolean"
      +      },
      +      "kind": {
      +        "enum": [
      +          "open_task",
      +          "payments",
      +          "invoices",
      +          "user_pick",
      +          "note"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "kind",
      +      "count",
      +      "count_is_lower_bound"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / connectors / items / properties / reads
      Added value: +{
      +  "items": {
      +    "enum": [
      +      "company",
      +      "people",
      +      "invoice",
      +      "transaction",
      +      "account",
      +      "ledger_account",
      +      "journal",
      +      "journal_entry",
      +      "journal_entry_line",
      +      "account_balance",
      +      "invoice_item",
      +      "email",
      +      "payment_means",
      +      "invoice_transaction",
      +      "document",
      +      "invoice_payment",
      +      "note",
      +      "payslip",
      +      "employment_contract",
      +      "payslip_line"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / connectors / items / properties / suggestion_reason
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / connectors / items / properties / writes
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / connectors / items / required
      Previous value: -[
      -  "service_id",
      -  "slug",
      -  "name",
      -  "category_id",
      -  "status",
      -  "direction",
      -  "data_domains",
      -  "domain",
      -  "country_codes",
      -  "invoice_source",
      -  "reason",
      -  "logo_url",
      -  "popularity_score",
      -  "is_matched",
      -  "is_selected",
      -  "match_score",
      -  "match_source",
      -  "is_connected",
      -  "connection_status",
      -  "connect_failure_cause",
      -  "last_connect_outcome",
      -  "sync_health",
      -  "workspace_connector_id",
      -  "last_successful_sync_at",
      -  "sync_in_progress",
      -  "is_preselected",
      -  "install_url",
      -  "countries"
      -]New value: +[
      +  "service_id",
      +  "slug",
      +  "name",
      +  "category_id",
      +  "status",
      +  "direction",
      +  "data_domains",
      +  "reads",
      +  "writes",
      +  "domain",
      +  "country_codes",
      +  "invoice_source",
      +  "reason",
      +  "logo_url",
      +  "popularity_score",
      +  "is_matched",
      +  "is_selected",
      +  "match_score",
      +  "match_source",
      +  "evidence",
      +  "suggestion_reason",
      +  "is_connected",
      +  "connection_status",
      +  "connect_failure_cause",
      +  "last_connect_outcome",
      +  "sync_health",
      +  "workspace_connector_id",
      +  "last_successful_sync_at",
      +  "sync_in_progress",
      +  "is_preselected",
      +  "install_url",
      +  "countries",
      +  "direct_connector_service_id"
      +]
    • addedOutput schema / properties / evidence_complete
      Added value: +{
      +  "description": "False when Well could not read every source of evidence for this workspace. A row with empty `evidence` is then UNCHECKED, not clean: say you could not check, and never say there is no sign yet. True or absent means every source was read. Only a catalog read (no scope, or a `kind` of `bank`, `accounting` or `invoicing`, with or without `q` or `slug`) reads evidence: the picked-vendor (`from_selection`, `counterparty_ids`), `upload_surface`, `storage` and `ai_client` scopes read no workspace evidence. A row holds only a note you passed in `suggest`, otherwise empty `evidence`. These scopes always report false.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / unfinished_connects
      Added value: +{
      +  "description": "Connect attempts in this workspace the person has not been told about yet, newest first. `outcome` is `stopped` (the person closed the connect before it finished), `timed_out` (nobody finished it within the hour), or `still_connecting` (it is still open). An empty array means there is nothing to tell; an absent field means nothing was read. Name a tool by its `name`. For each entry, say one short line in the reply: on `stopped` or `timed_out`, offer to connect it again or to skip it for now; on `still_connecting`, offer to wait or to skip it for now. Once the reply says the lines, call `well_mark_connects_told` with the `workspace_connector_id` of each entry it said, so a later read does not repeat them. An entry the reply did not say stays unmarked and comes back on the next read.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "at": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "outcome": {
      +        "enum": [
      +          "stopped",
      +          "timed_out",
      +          "still_connecting"
      +        ],
      +        "type": "string"
      +      },
      +      "service_id": {
      +        "type": "string"
      +      },
      +      "workspace_connector_id": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "workspace_connector_id",
      +      "service_id",
      +      "name",
      +      "outcome",
      +      "at"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  9. Changed5 schema fields changed
    • addedOutput schema / properties / connectors / items / properties / connect_failure_cause
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / connectors / items / properties / last_connect_outcome
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "at": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "cause": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "cause",
      +        "at"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / connectors / items / properties / match_source
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "email",
      +        "bank",
      +        "tool",
      +        "accounting",
      +        "transaction",
      +        "scoring",
      +        "invoice",
      +        "crm",
      +        "enrichment",
      +        "user"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / connectors / items / properties / sync_health
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "reading": {
      +          "enum": [
      +            "data_incomplete",
      +            "runs_failing",
      +            "no_recent_sync"
      +          ],
      +          "type": "string"
      +        },
      +        "summary": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "reading",
      +        "summary"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / connectors / items / required
      Previous value: -[
      -  "service_id",
      -  "slug",
      -  "name",
      -  "category_id",
      -  "status",
      -  "direction",
      -  "data_domains",
      -  "domain",
      -  "country_codes",
      -  "invoice_source",
      -  "reason",
      -  "logo_url",
      -  "popularity_score",
      -  "is_matched",
      -  "is_selected",
      -  "match_score",
      -  "is_connected",
      -  "connection_status",
      -  "workspace_connector_id",
      -  "last_successful_sync_at",
      -  "sync_in_progress",
      -  "is_preselected",
      -  "install_url",
      -  "countries"
      -]New value: +[
      +  "service_id",
      +  "slug",
      +  "name",
      +  "category_id",
      +  "status",
      +  "direction",
      +  "data_domains",
      +  "domain",
      +  "country_codes",
      +  "invoice_source",
      +  "reason",
      +  "logo_url",
      +  "popularity_score",
      +  "is_matched",
      +  "is_selected",
      +  "match_score",
      +  "match_source",
      +  "is_connected",
      +  "connection_status",
      +  "connect_failure_cause",
      +  "last_connect_outcome",
      +  "sync_health",
      +  "workspace_connector_id",
      +  "last_successful_sync_at",
      +  "sync_in_progress",
      +  "is_preselected",
      +  "install_url",
      +  "countries"
      +]
  10. Changed2 schema fields changed
    • addedInput schema / properties / slug
      Added value: +{
      +  "description": "Exact connector slug: resolves the ONE named connector, of any kind (e.g. \"notion\" for a connect-Notion request). Use it when the request names a single connector, instead of `q` which name-searches. An unknown slug returns an empty list; retry with `q` on the name then. Cannot be combined with `q`, `kind`, `from_selection` or `counterparty_ids`.",
      +  "maxLength": 120,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • changedOutput schema / properties / connectors / items / properties / reason / enum
      Previous value: -[
      -  "catalog",
      -  "picked_vendor"
      -]New value: +[
      +  "catalog",
      +  "picked_vendor",
      +  "named_connector"
      +]
  11. Changed4 schema fields changed
    • addedOutput schema / properties / connectors / items / properties / country_codes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / connectors / items / properties / domain
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / connectors / items / properties / slug
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / connectors / items / required
      Previous value: -[
      -  "service_id",
      -  "name",
      -  "category_id",
      -  "status",
      -  "direction",
      -  "data_domains",
      -  "invoice_source",
      -  "reason",
      -  "logo_url",
      -  "popularity_score",
      -  "is_matched",
      -  "is_selected",
      -  "match_score",
      -  "is_connected",
      -  "connection_status",
      -  "workspace_connector_id",
      -  "last_successful_sync_at",
      -  "sync_in_progress",
      -  "is_preselected",
      -  "install_url",
      -  "countries"
      -]New value: +[
      +  "service_id",
      +  "slug",
      +  "name",
      +  "category_id",
      +  "status",
      +  "direction",
      +  "data_domains",
      +  "domain",
      +  "country_codes",
      +  "invoice_source",
      +  "reason",
      +  "logo_url",
      +  "popularity_score",
      +  "is_matched",
      +  "is_selected",
      +  "match_score",
      +  "is_connected",
      +  "connection_status",
      +  "workspace_connector_id",
      +  "last_successful_sync_at",
      +  "sync_in_progress",
      +  "is_preselected",
      +  "install_url",
      +  "countries"
      +]
  12. Changed5 schema fields changed
    • addedInput schema / properties / counterparty_ids
      Added value: +{
      +  "description": "Scope the card to the connectors behind these counterparties, copied from the `company_id` of the missing-invoices rows. The explicit form of `from_selection`, for a caller holding the picked ids itself instead of a card click recorded in this session: it resolves the same connectors and filters them the same way. Passing counterparty_ids alone already scopes the card to the pick — from_selection is not needed alongside it; it cannot be combined with `q` or `kind`.",
      +  "items": {
      +    "format": "uuid",
      +    "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +    "type": "string"
      +  },
      +  "maxItems": 200,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedInput schema / properties / country / description
      Previous value: -"The company's country as an ISO 3166-1 alpha-2 code (e.g. \"FR\"). When set, the connectors that serve that country sort first, then the ones that serve its region, then the rest — the order only, no row is dropped. Use it on a connect-a-bank step so the banks that fit the company appear first; take it from the workspace identity's country. Omit when the country is unknown, and the order is left unchanged."New value: +"The company's country as an ISO 3166-1 alpha-2 code (e.g. \"FR\"). When set, the connectors that serve that country sort first, then the ones that serve its region, then the rest — the order only, no row is dropped. Use it on a connect-a-bank or a connect-an-accounting-tool step so the banks or accounting tools that fit the company appear first; take it from the workspace identity's country. Omit when the country is unknown, and the order is left unchanged."
    • changedInput schema / properties / kind / description
      Previous value: -"Scope the card server-side. Three financial domains: \"bank\" (every bank and neobank, including the long tail of open-banking institutions, plus the platforms that hold an account like Qonto and Pennylane — never a payroll or billing tool that merely reports transactions), \"accounting\", and \"invoicing\". Plus two scopes the server resolves from display categories rather than from a financial domain: \"upload_surface\", the places invoices ARRIVE (mailboxes, messaging apps, file drives), and \"storage\", the drives Well FILES INTO (Google Drive, Dropbox, OneDrive). The last two are opposite directions on the same drives, so a workspace can hold both connections and each is offered on its own card. Use this for a connect-a-bank, a connect-where-invoices-arrive or a connect-where-Well-files step instead of filtering the default view yourself. Omit for every connectable connector."New value: +"Scope the card server-side. Three financial domains: \"bank\" (every bank and neobank, including the long tail of open-banking institutions, plus the platforms that hold an account like Qonto and Pennylane — never a payroll or billing tool that merely reports transactions), \"accounting\", and \"invoicing\". Plus two scopes the server resolves from display categories rather than from a financial domain: \"upload_surface\", the places invoices ARRIVE (mailboxes, messaging apps, file drives), and \"storage\", the drives Well FILES INTO (Google Drive, Dropbox, OneDrive). The last two are opposite directions on the same drives, so a workspace can hold both connections and each is offered on its own card. And \"ai_client\", the AI apps that read Well over MCP (Claude, Codex, the Well CLI and the like): read it to tell whether any AI app is connected. Its rows carry no install_url, since an AI app connects from its own settings. Use this for a connect-a-bank, a connect-where-invoices-arrive or a connect-where-Well-files step instead of filtering the default view yourself. Omit for every connectable connector."
    • changedInput schema / properties / kind / enum
      Previous value: -[
      -  "bank",
      -  "accounting",
      -  "invoicing",
      -  "upload_surface",
      -  "storage"
      -]New value: +[
      +  "bank",
      +  "accounting",
      +  "invoicing",
      +  "upload_surface",
      +  "storage",
      +  "ai_client"
      +]
    • changedOutput schema / properties / scope / enum
      Previous value: -[
      -  "catalog",
      -  "bank",
      -  "accounting",
      -  "invoicing",
      -  "upload_surface",
      -  "storage",
      -  "picked_vendors"
      -]New value: +[
      +  "catalog",
      +  "bank",
      +  "accounting",
      +  "invoicing",
      +  "upload_surface",
      +  "storage",
      +  "ai_client",
      +  "picked_vendors"
      +]
  13. Changed7 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"
      +}
    • changedInput schema / properties / from_selection / description
      Previous value: -"Scope the card to the connectors behind the counterparties the user picked on the missing-invoices card this session, each installable one pre-checked. Use it for the connect step that FOLLOWS a vendor pick. It returns those vendors' connectors and NOTHING else: a picked connector that brings no invoices in is dropped, and no accounting or invoicing tool the user did not pick is offered here — that offer is its own step, scoped with `kind`. Cannot be combined with `q` or `kind` — those name a catalog to browse, and this names a set already decided. Returns an empty list when the session holds no pick for this workspace, or when no picked counterparty matched a connector."New value: +"Scope the card to the connectors behind the counterparties the user picked on the missing-invoices card in this conversation, each installable one pre-checked. Use it for the connect step that FOLLOWS a vendor pick. It returns those vendors' connectors and NOTHING else: a picked connector that brings no invoices in is dropped, and no accounting or invoicing tool the user did not pick is offered here: that offer is its own step, scoped with `kind`. Cannot be combined with `q` or `kind`: those name a catalog to browse, and this names a set already decided. Returns an empty list when this conversation holds no pick for this workspace, or when no picked counterparty matched a connector."
    • addedInput schema / properties / include_unsent_counts
      Added value: +{
      +  "const": true,
      +  "description": "Add the top-level `unsent_document_counts`: every tool Well forwards this workspace's documents to, each with how many documents it has not received yet. That array is the whole answer — it holds every one of the workspace's outbound connections, whatever catalog page was requested, and the rows carry no count at all. Off by default, because it costs an extra read. The figure is the workspace's whole backlog, not a period's.",
      +  "type": "boolean"
      +}
    • 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"
      +}
    • addedOutput schema / properties / unsent_document_counts
      Added value: +{
      +  "description": "Every tool this workspace forwards documents to, each with the documents it has not received yet, biggest backlog first. Present only when `include_unsent_counts` was set. THIS IS THE ONLY PLACE THE BACKLOG IS REPORTED: it is not a page, it carries the workspace's whole set of outbound connections whether or not the requested catalog page holds their rows, and the catalog rows carry no count. An empty array means the workspace forwards to nothing; an absent field means nothing was measured. `unsent_document_count_is_upper_bound: true` means a document filter applies to that connection, so the count is a maximum and reads as `up to <n>`. Every count is read off Well's own forward record, so it measures what Well wrote down rather than what the tool confirmed. Name a tool by its `name`. An entry reading `0` is a tool that is up to date: say nothing about it.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "name": {
      +        "type": "string"
      +      },
      +      "service_id": {
      +        "type": "string"
      +      },
      +      "unsent_document_count": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "unsent_document_count_is_upper_bound": {
      +        "type": "boolean"
      +      },
      +      "workspace_connector_id": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "service_id",
      +      "name",
      +      "workspace_connector_id",
      +      "unsent_document_count",
      +      "unsent_document_count_is_upper_bound"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  14. Changed5 schema fields changed
    • changedInput schema / properties / kind / description
      Previous value: -"Scope the card server-side. Three financial domains: \"bank\" (every bank and neobank, including the long tail of open-banking institutions, plus the platforms that hold an account like Qonto and Pennylane — never a payroll or billing tool that merely reports transactions), \"accounting\", and \"invoicing\". Plus \"upload_surface\": the places invoices ARRIVE — mailboxes, messaging apps, file drives — which is a set of display categories rather than a financial domain, resolved by the server. Use this for a connect-a-bank or a connect-where-invoices-arrive step instead of filtering the default view yourself. Omit for every connectable connector."New value: +"Scope the card server-side. Three financial domains: \"bank\" (every bank and neobank, including the long tail of open-banking institutions, plus the platforms that hold an account like Qonto and Pennylane — never a payroll or billing tool that merely reports transactions), \"accounting\", and \"invoicing\". Plus two scopes the server resolves from display categories rather than from a financial domain: \"upload_surface\", the places invoices ARRIVE (mailboxes, messaging apps, file drives), and \"storage\", the drives Well FILES INTO (Google Drive, Dropbox, OneDrive). The last two are opposite directions on the same drives, so a workspace can hold both connections and each is offered on its own card. Use this for a connect-a-bank, a connect-where-invoices-arrive or a connect-where-Well-files step instead of filtering the default view yourself. Omit for every connectable connector."
    • changedInput schema / properties / kind / enum
      Previous value: -[
      -  "bank",
      -  "accounting",
      -  "invoicing",
      -  "upload_surface"
      -]New value: +[
      +  "bank",
      +  "accounting",
      +  "invoicing",
      +  "upload_surface",
      +  "storage"
      +]
    • changedOutput schema / properties / connectors / items / properties / connection_status / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "enabled",
      -      "processing",
      -      "error",
      -      "need_reconnect",
      -      "to_configure",
      -      "suspended",
      -      "disabled"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "enabled",
      +      "processing",
      +      "error",
      +      "need_reconnect",
      +      "to_configure",
      +      "disabled"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / row_count
      Added value: +{
      +  "description": "How many rows this result puts ON THE CARD, prepended rows included. `0` on a `picked_vendors` scope means the pick has no connector behind it that can bring an invoice in: the card carries nothing to tick, so say so in half a sentence and move on. Not a paging cursor — `page_count` is.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / scope / enum
      Previous value: -[
      -  "catalog",
      -  "bank",
      -  "accounting",
      -  "invoicing",
      -  "upload_surface",
      -  "picked_vendors"
      -]New value: +[
      +  "catalog",
      +  "bank",
      +  "accounting",
      +  "invoicing",
      +  "upload_surface",
      +  "storage",
      +  "picked_vendors"
      +]
  15. Changed8 schema fields changed
    • changedInput schema / properties / from_selection / description
      Previous value: -"Scope the card to the connectors behind the counterparties the user picked on the missing-invoices card this session, each installable one pre-checked. Use it for the connect step that FOLLOWS a vendor pick, where the user has already chosen and the card must offer only what they chose. Cannot be combined with `q` or `kind` — those name a catalog to browse, and this names a set already decided. Returns an empty list when the session holds no pick for this workspace, or when no picked counterparty matched a connector."New value: +"Scope the card to the connectors behind the counterparties the user picked on the missing-invoices card this session, each installable one pre-checked. Use it for the connect step that FOLLOWS a vendor pick. It returns those vendors' connectors and NOTHING else: a picked connector that brings no invoices in is dropped, and no accounting or invoicing tool the user did not pick is offered here — that offer is its own step, scoped with `kind`. Cannot be combined with `q` or `kind` — those name a catalog to browse, and this names a set already decided. Returns an empty list when the session holds no pick for this workspace, or when no picked counterparty matched a connector."
    • changedInput schema / properties / kind / description
      Previous value: -"Scope the catalog to one financial domain: \"bank\" (every bank and neobank, including the long tail of open-banking institutions, plus the platforms that hold an account like Qonto and Pennylane — never a payroll or billing tool that merely reports transactions), \"accounting\", or \"invoicing\". Use this for a connect-a-bank or connect-an-accounting-tool step instead of filtering the default view yourself. Omit for every connectable connector."New value: +"Scope the card server-side. Three financial domains: \"bank\" (every bank and neobank, including the long tail of open-banking institutions, plus the platforms that hold an account like Qonto and Pennylane — never a payroll or billing tool that merely reports transactions), \"accounting\", and \"invoicing\". Plus \"upload_surface\": the places invoices ARRIVE — mailboxes, messaging apps, file drives — which is a set of display categories rather than a financial domain, resolved by the server. Use this for a connect-a-bank or a connect-where-invoices-arrive step instead of filtering the default view yourself. Omit for every connectable connector."
    • changedInput schema / properties / kind / enum
      Previous value: -[
      -  "bank",
      -  "accounting",
      -  "invoicing"
      -]New value: +[
      +  "bank",
      +  "accounting",
      +  "invoicing",
      +  "upload_surface"
      +]
    • addedOutput schema / properties / connectors / items / properties / invoice_source
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / connectors / items / properties / reason
      Added value: +{
      +  "enum": [
      +    "catalog",
      +    "picked_vendor"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / connectors / items / required
      Previous value: -[
      -  "service_id",
      -  "name",
      -  "category_id",
      -  "status",
      -  "direction",
      -  "data_domains",
      -  "logo_url",
      -  "popularity_score",
      -  "is_matched",
      -  "is_selected",
      -  "match_score",
      -  "is_connected",
      -  "connection_status",
      -  "workspace_connector_id",
      -  "last_successful_sync_at",
      -  "sync_in_progress",
      -  "is_preselected",
      -  "install_url",
      -  "countries"
      -]New value: +[
      +  "service_id",
      +  "name",
      +  "category_id",
      +  "status",
      +  "direction",
      +  "data_domains",
      +  "invoice_source",
      +  "reason",
      +  "logo_url",
      +  "popularity_score",
      +  "is_matched",
      +  "is_selected",
      +  "match_score",
      +  "is_connected",
      +  "connection_status",
      +  "workspace_connector_id",
      +  "last_successful_sync_at",
      +  "sync_in_progress",
      +  "is_preselected",
      +  "install_url",
      +  "countries"
      +]
    • addedOutput schema / properties / picked_vendors_filtered
      Added value: +{
      +  "description": "How many of the picked vendors' connectors were dropped for bringing no invoices in. Present on the `picked_vendors` scope only. Above zero means the card is SHORTER than the pick: say that those vendors' tools cannot deliver an invoice, rather than letting the gap read as a pick the user never made.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / scope / enum
      Previous value: -[
      -  "catalog",
      -  "bank",
      -  "accounting",
      -  "invoicing",
      -  "picked_vendors"
      -]New value: +[
      +  "catalog",
      +  "bank",
      +  "accounting",
      +  "invoicing",
      +  "upload_surface",
      +  "picked_vendors"
      +]
  16. Changed3 schema fields changed
    • addedInput schema / properties / country
      Added value: +{
      +  "description": "The company's country as an ISO 3166-1 alpha-2 code (e.g. \"FR\"). When set, the connectors that serve that country sort first, then the ones that serve its region, then the rest — the order only, no row is dropped. Use it on a connect-a-bank step so the banks that fit the company appear first; take it from the workspace identity's country. Omit when the country is unknown, and the order is left unchanged.",
      +  "enum": [
      +    "AD",
      +    "AE",
      +    "AF",
      +    "AG",
      +    "AI",
      +    "AL",
      +    "AM",
      +    "AO",
      +    "AQ",
      +    "AR",
      +    "AS",
      +    "AT",
      +    "AU",
      +    "AW",
      +    "AX",
      +    "AZ",
      +    "BA",
      +    "BB",
      +    "BD",
      +    "BE",
      +    "BF",
      +    "BG",
      +    "BH",
      +    "BI",
      +    "BJ",
      +    "BL",
      +    "BM",
      +    "BN",
      +    "BO",
      +    "BQ",
      +    "BR",
      +    "BS",
      +    "BT",
      +    "BV",
      +    "BW",
      +    "BY",
      +    "BZ",
      +    "CA",
      +    "CC",
      +    "CD",
      +    "CF",
      +    "CG",
      +    "CH",
      +    "CI",
      +    "CK",
      +    "CL",
      +    "CM",
      +    "CN",
      +    "CO",
      +    "CR",
      +    "CU",
      +    "CV",
      +    "CW",
      +    "CX",
      +    "CY",
      +    "CZ",
      +    "DE",
      +    "DJ",
      +    "DK",
      +    "DM",
      +    "DO",
      +    "DZ",
      +    "EC",
      +    "EE",
      +    "EG",
      +    "EH",
      +    "ER",
      +    "ES",
      +    "ET",
      +    "FI",
      +    "FJ",
      +    "FK",
      +    "FM",
      +    "FO",
      +    "FR",
      +    "GA",
      +    "GB",
      +    "GD",
      +    "GE",
      +    "GF",
      +    "GG",
      +    "GH",
      +    "GI",
      +    "GL",
      +    "GM",
      +    "GN",
      +    "GP",
      +    "GQ",
      +    "GR",
      +    "GS",
      +    "GT",
      +    "GU",
      +    "GW",
      +    "GY",
      +    "HK",
      +    "HM",
      +    "HN",
      +    "HR",
      +    "HT",
      +    "HU",
      +    "ID",
      +    "IE",
      +    "IL",
      +    "IM",
      +    "IN",
      +    "IO",
      +    "IQ",
      +    "IR",
      +    "IS",
      +    "IT",
      +    "JE",
      +    "JM",
      +    "JO",
      +    "JP",
      +    "KE",
      +    "KG",
      +    "KH",
      +    "KI",
      +    "KM",
      +    "KN",
      +    "KP",
      +    "KR",
      +    "KW",
      +    "KY",
      +    "KZ",
      +    "LA",
      +    "LB",
      +    "LC",
      +    "LI",
      +    "LK",
      +    "LR",
      +    "LS",
      +    "LT",
      +    "LU",
      +    "LV",
      +    "LY",
      +    "MA",
      +    "MC",
      +    "MD",
      +    "ME",
      +    "MF",
      +    "MG",
      +    "MH",
      +    "MK",
      +    "ML",
      +    "MM",
      +    "MN",
      +    "MO",
      +    "MP",
      +    "MQ",
      +    "MR",
      +    "MS",
      +    "MT",
      +    "MU",
      +    "MV",
      +    "MW",
      +    "MX",
      +    "MY",
      +    "MZ",
      +    "NA",
      +    "NC",
      +    "NE",
      +    "NF",
      +    "NG",
      +    "NI",
      +    "NL",
      +    "NO",
      +    "NP",
      +    "NR",
      +    "NU",
      +    "NZ",
      +    "OM",
      +    "PA",
      +    "PE",
      +    "PF",
      +    "PG",
      +    "PH",
      +    "PK",
      +    "PL",
      +    "PM",
      +    "PN",
      +    "PR",
      +    "PS",
      +    "PT",
      +    "PW",
      +    "PY",
      +    "QA",
      +    "RE",
      +    "RO",
      +    "RS",
      +    "RU",
      +    "RW",
      +    "SA",
      +    "SB",
      +    "SC",
      +    "SD",
      +    "SE",
      +    "SG",
      +    "SH",
      +    "SI",
      +    "SJ",
      +    "SK",
      +    "SL",
      +    "SM",
      +    "SN",
      +    "SO",
      +    "SR",
      +    "SS",
      +    "ST",
      +    "SV",
      +    "SX",
      +    "SY",
      +    "SZ",
      +    "TC",
      +    "TD",
      +    "TF",
      +    "TG",
      +    "TH",
      +    "TJ",
      +    "TK",
      +    "TL",
      +    "TM",
      +    "TN",
      +    "TO",
      +    "TR",
      +    "TT",
      +    "TV",
      +    "TW",
      +    "TZ",
      +    "UA",
      +    "UG",
      +    "UM",
      +    "US",
      +    "UY",
      +    "UZ",
      +    "VA",
      +    "VC",
      +    "VE",
      +    "VG",
      +    "VI",
      +    "VN",
      +    "VU",
      +    "WF",
      +    "WS",
      +    "YE",
      +    "YT",
      +    "ZA",
      +    "ZM",
      +    "ZW"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / connectors / items / properties / countries
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / connectors / items / required
      Previous value: -[
      -  "service_id",
      -  "name",
      -  "category_id",
      -  "status",
      -  "direction",
      -  "data_domains",
      -  "logo_url",
      -  "popularity_score",
      -  "is_matched",
      -  "is_selected",
      -  "match_score",
      -  "is_connected",
      -  "connection_status",
      -  "workspace_connector_id",
      -  "last_successful_sync_at",
      -  "sync_in_progress",
      -  "is_preselected",
      -  "install_url"
      -]New value: +[
      +  "service_id",
      +  "name",
      +  "category_id",
      +  "status",
      +  "direction",
      +  "data_domains",
      +  "logo_url",
      +  "popularity_score",
      +  "is_matched",
      +  "is_selected",
      +  "match_score",
      +  "is_connected",
      +  "connection_status",
      +  "workspace_connector_id",
      +  "last_successful_sync_at",
      +  "sync_in_progress",
      +  "is_preselected",
      +  "install_url",
      +  "countries"
      +]
  17. Added

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources