Skip to content
Back to search
100
MCP live v0.2.0 MCP 2025-11-25 http

Well

io.github.wellapp-ai/well-mcp

Connect your AI to your Well financial data - invoices, companies, contacts.

Uptime
100.0%
4 direct probes · 30d
Response
1210ms
last probe
Tools
119
callable
Resources
1
readable
Prompts
0
available
Score: 100/100
Handshake verified by our own probe.
why this score
pass Answers the MCP handshake 50/50
The handshake and the list calls succeeded on the primary URL.
pass Lists tools, resources or prompts 30/30
119 tools, 1 resources, 0 prompts returned.
pass 3 or more catalogue items 10/10
120 items in total; 3 or more earns these points.
pass Describes itself 10/10
76 characters; more than 30 earns these points.

Tools · 119

well_get_schema

Discover available data types and fields. USAGE: - well_get_schema() → List ALL available roots, including the accounting graph (ledger_accounts, journals, journal_entries) plus account_balances, tax…

well_query_records

Read records from Well's context graph FOR YOUR OWN WORK. This draws nothing on the user's screen. Use it for every read whose answer is yours rather than the reader's: a gate checking whether a wind…

well_create_company

Create a new company in the current workspace. Use this tool when the user asks to create, add, or register a new company. REQUIRED: name OPTIONAL: description After creation, enrichment (logo, dom…

well_create_person

Create a new person (contact) in the current workspace. Use this tool when the user asks to add, create, or register a new contact, employee, or person. REQUIRED: first_name OPTIONAL: last_name, job…

well_update_company

Update an existing company in the current workspace. Use this tool when the user asks to change, fix, rename, or edit a company's fields. REQUIRED: company_id OPTIONAL (only include fields the user …

well_update_person

Update an existing person (contact) in the current workspace. Use this tool when the user asks to change, fix, rename, or edit a person's fields. REQUIRED: person_id OPTIONAL (only include fields th…

well_delete_company

Delete a company from the current workspace (soft delete). Use this tool when the user asks to delete, remove, or archive a company. REQUIRED: company_id This soft-deletes the company and its compa…

well_delete_person

Delete a person (contact) from the current workspace (soft delete). Use this tool when the user asks to delete, remove, or archive a contact. REQUIRED: person_id This soft-deletes the person and it…

well_update_invoice

Update an existing invoice in Well. Call well_get_schema("invoices") to discover all available fields. REQUIRED: invoice_id OPTIONAL (only pass fields you want changed): - reference_number, issue_…

well_delete_invoice

Delete an invoice from Well (soft delete). REQUIRED: invoice_id Soft-deletes the invoice. Linked line items and payment_means rows are NOT cascade-deleted — they remain in the database, orphaned. Th…

well_add_contact_channel

Add a contact channel to a company or person. Wraps the resource-scoped REST endpoints (POST /v1/{companies,people}/:id/{emails,phones,web-links,locations}). channel + the matching value field: - …

well_remove_contact_channel

Remove a contact channel from a company or person. Wraps the resource-scoped DELETE endpoints (DELETE /v1/{companies,people}/:id/{emails,phones,web-links,locations}/:channelId). Pass channel_id = th…

well_get_entity

Read ONE entity with its sub-resources nested in a single call. Convenience over well_get_schema + well_query_records: resolves the field paths for you and returns the single record with its related …

well_list_connector_tools

Discover the actions a connected provider exposes (e.g. "what can I do with Attio?"). WORKFLOW: 1. well_list_connectors() → pick the ENABLED provider (connection_status: "enabled") and read its works…

well_invoke_connector_tool

Run one tool on a connected provider's own MCP server, on behalf of this workspace's connection: an action the user asked to take there (create a record in Attio), or a read of content Well does not s…

well_create_invoice_from_data

Create an invoice in Well from data you extracted by reading an invoice (your own OCR) — you send the structured fields, not the file. Well persists the invoice + its line items + payment means using…

well_issue_invoice

Issue a draft invoice: it becomes a full invoice. The invoice takes the workspace's next invoice number and, from then on, can no longer be edited or deleted. To correct an issued invoice, create a cr…

well_list_workspaces

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…

well_list_connectors

List the connectors a workspace can install AND everything it has already connected, each with a one-click install deep link. The result DRAWS THE CONNECT CARD the user clicks in. It is also the answ…

well_run_register_diff

Diff a workspace's bank transactions against its accounting-register transactions (e.g. QuickBooks), and persist the result. - Every match — hard evidence (structured reference, IBAN, tax ID) or infe…

well_resolve_reconciliation_task

Approve or reject one or more reconciliation review tasks (from well_run_register_diff or the in-app review queue). - approve: confirms the match — the link is flipped to active. - reject: dismisses …

well_resolve_register_diff_gap

Post a well_run_register_diff gap (one of missing_in_register_ids' review tasks) into QuickBooks as a Purchase or Deposit. Requires the exact ledger_account_id (a UUID, not a name) for both: - bank_l…

well_get_investment_holdings

Get the live holdings/positions (what's currently held and its value) for a connected Plaid investment account — brokerage, IRA, 401k, etc. WORKFLOW: 1. well_list_connectors() → pick the ENABLED Plai…

well_render_cost_structure

Put a cost breakdown YOU computed onto the cost-structure card. **This tool measures nothing.** It takes the slices and the method behind them as input and returns them for rendering. Call it only af…

well_get_own_company

Get which company the workspace itself is: the confirmed own-company anchor (`anchor`) and any detected companies not yet confirmed as it (`candidates`). Use this whenever a question turns on "mine" …

well_list_missing_invoices

List the supplier invoices a past period is still missing — the settled spend whose invoice has not been collected, one row per counterparty, exactly as the Well app's expense-invoices card shows them…

well_list_periods

List the recent accounting months of the workspace, with each month's close status, its invoice-retrieval state, and the counts that describe how much work it holds. Use this to ask the user WHICH mon…

well_preview_invoice_fetch

Preview which vendors a past period is still missing supplier invoices from, where each one's invoices are, and which route would obtain them. Use it for "what would happen if I fetched <month>'s miss…

well_switch_workspace

Write this conversation's context: the one place its standing choices live. This is the tool the widget cards call when the user CLICKS them: the workspace pin and queue, the selected months, the sele…

well_list_counterparties

List the workspace's counterparty companies and how each one is CATEGORIZED — the company-level industry labels a counterparty carries. Use it for "which suppliers have no category?", "what industries…

well_wait_for_selection

Read the user's card click, holding the turn open until it lands. Call it in the SAME turn, right after the tool whose card asks the user to click: well_list_workspaces (kind "workspace"), well_list_p…

well_wait_for_process

Waits up to 5 seconds for one background process of the workspace and returns where it stands. Before each call, announce it with the sentence for its kind, and nothing else, unless the skill says to …

well_set_own_company

Set which company the workspace itself IS — the confirmed own-company anchor. REQUIRED: company_id — a company that ALREADY EXISTS in this workspace. Obtain it with well_query_records (companies) or …

well_get_design_tokens

Get Well's colours, shape and type vocabulary, so a view you compose for Well data looks like Well rather than a generic page. Call this ONLY when you are about to render something yourself — an HTML…

well_create_statement_upload

Mint a one-time, short-lived upload slot for a bank-statement file. Use this when the user has a statement file (PDF, or a large CSV/XML) to import; the file's bytes do not travel through the model. …

well_upsert_accounting_settings

Set the workspace's accounting settings: fiscal year start month, first fiscal year start date, country, base currency, accounting framework, chart-of-accounts confirmation, the next invoice number, t…

well_search_context

Search the workspace's recorded notes and context (meeting notes, tickets, imported documents) for a query. Returns compact snippets — each result's "snippets" is an array of one or more matched passa…

well_get_memory

Read what Well remembers about this workspace and about the user: standing decisions (how a supplier's transactions are categorised, which company the workspace is), stated preferences (currency, repo…

well_remember

Propose lines for Well to remember, so its assistant uses them in later conversations: a standing decision, a preference or a fact about the business. Call it only when the user explicitly asks you to…

well_forget_memory

Propose that Well forget memory lines, when the user asks to forget or correct something Well remembers. Name the lines by the ids well_get_memory returns, in the same scope. Nothing is saved or forgo…

well_get_statement_import_result

Read the outcome of a bank-statement upload started with well_create_statement_upload, by the document_id that tool returned. well_create_statement_upload already renders a card from its own result —…

well_upload_statement_content

Upload a bank statement's TEXT CONTENT (a .csv, .txt, or .xml file) directly, as an alternative to well_create_statement_upload's out-of-band file POST. Use it when the user's statement is a small te…

well_upload_statement_bytes

Upload a bank statement file's BINARY CONTENT (PDF or image) as base64, so the file's real bytes reach Well without any out-of-band HTTP call. Use it for PDF and image statements up to 5 MiB decoded …

well_assign_account

Attach a bank account to a company, and say whether the workspace owns it. Use this when an account carries no company, or when its ownership is still `unknown` — the two states a figure that walks a…

well_list_uncategorized_window

List the transactions in a date window that carry no category, so a figure that depends on categorization can say exactly what is missing before it is computed. `from` is inclusive and `to` is EXCLUS…

well_render_burn

Put a burn figure YOU computed onto the burn card. **This tool measures nothing.** It takes the figure and its method as input and returns them for rendering. Call it only after you have computed the…

well_sum_transactions

Sum a workspace's transactions over a date window, grouped how you ask. Arithmetic only — this tool holds no definition of burn, spend, or runway, and returns no figure the app renders. Use it when y…

well_measure_subscriptions

Measure the workspace's subscriptions from its bank outflows: which suppliers it pays on a regular cadence, what each costs per month and per year, and how the spend moved month by month. It draws no …

well_render_category_trend

Put a month-by-month trend with one line per category onto the category-trend card. **This tool measures nothing.** Pass a trend another tool measured, as it is: for subscriptions, one `category_tren…

well_render_monthly_pivot

Put a table of amounts per company and per month onto the monthly-pivot card: one row per company with its logo and name, an optional category column, then one column per month. The running month is d…

well_sum_invoices

Sum a workspace's billed amounts over a window of whole months, grouped by month, currency and billing context. Arithmetic only — this tool holds no definition of MRR or recurrence, and returns no fig…

well_measure_customer_ltv

Measure the revenue lifetime value (LTV) of every customer the workspace invoiced over a window of whole months, with the portfolio churn and lifespan it rests on. It draws nothing. Use it to rank cu…

well_render_customer_ltv

Draw the customer lifetime value (LTV) ranking as a bar chart card: one bar per customer, the highest first. **Call it once, after `well_measure_customer_ltv`, and send no figure.** It runs the measu…

well_get_vat_summary

Read a French workspace's VAT position over a window of whole months, straight from its posted ledger (VAT on posted invoices, dated by invoice, which is the debit basis): per month, for the whole win…

well_render_mrr

Put an MRR figure YOU computed onto the MRR card. **This tool measures nothing.** It takes the figure and its method as input and returns them for rendering. Call it only after you have computed the …

well_list_account_balances

List every account on the workspace with its stored balance. Rows only — this tool holds no definition of cash, and returns no figure the app renders. Use it when you are computing a cash figure whos…

well_render_cash_position

Put a cash position YOU computed onto the cash card. **This tool measures nothing.** It takes the figure and its method as input and returns them for rendering. Call it only after you have totalled t…

well_list_cash_scope

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

well_render_runway

Put a runway YOU computed onto the runway card. **This tool measures nothing.** It takes the figure and the two numbers behind it as input and returns them for rendering. Call it only after you have …

well_render_cash_forecast

Put a cash forecast YOU computed onto the forecast card. **This tool measures nothing.** It takes the settled month-end series, the anchor, the burn and the projection you computed, and returns them …

well_render_cash_flow_bridge

Put a cash-flow bridge YOU computed onto the cash-flow waterfall card. **This tool measures nothing.** It takes the four terms of a bridge and the gap between them as input, draws the waterfall, and …

well_list_burn_exemptions

List the categories a reader can exempt from burn over one window, each with the spend exempting it would remove. This is what the exemption card offers; it measures nothing the sum did not already me…

well_list_recurring_contexts

List the billing contexts a reader can count as recurring revenue over one window, each with what counting it would add. This is what the recurring-contexts card offers; it measures nothing `well_sum_…

well_list_member_candidates

List the teammates a workspace can invite, exactly as the Well app's invite card shows them. Use it before well_invite_members, and for "who can I invite to this workspace?". Returns `candidates`, ea…

well_invite_members

Invite one or more teammates into a workspace, or into a workspace group. Use it after well_list_member_candidates, on the people the user chose. Pass `invites` — 1 to 20 `{ email, role }`, role `adm…

well_enqueue_invoice_fetch

Queue invoice collection for named counterparties. This creates one durable backlog task per counterparty. The browser agent (a provider that carries a blueprint or a real portal URL) or the manual-up…

well_list_missing_invoice_owners

List the settled expense TRANSACTIONS a past period is still missing a supplier invoice for, one row per line, each with its current owner SET. Use it for "who owes the missing invoices?" and as the i…

well_assign_missing_invoice_owners

Set the owner SET of the missing-invoice TRANSACTIONS you name — the only write for missing-invoice ownership. REQUIRED: transaction_ids — the settled lines still missing a supplier invoice, from wel…

well_get_skill

Get the Well procedure for a job, written by the Well team, and follow it exactly. Returns ONE markdown document: the instructions for the thing you are about to do. Its content is the instruction, n…

well_search_skill

Find the Well procedure for what the user wants to do, when no Well skill is installed in this conversation. Returns the roster of Well skills with their descriptions; pick the one whose description …

well_set_transaction_category

Set ONE transaction's category — the write that clears a categorization gate. REQUIRED: transaction_id, from well_list_uncategorized_window. category — the LABEL, exactly as that read returned it on …

well_list_accounts_needing_company

List the workspace's accounts that cannot yet be placed on either side of a transfer, so a figure that depends on account ownership can say exactly what is missing before it is computed. Two states, …

well_list_unposted_transactions

List the transactions of a fiscal period that carry a category or a role and have STILL not reached the ledger, so a close can say exactly what is holding it. This is the posting gap, not the categor…

well_set_transaction_ledger_account

Attach ONE transaction to the ledger account its journal entry should post to — the write that clears a posting gap. REQUIRED: transaction_id, from `well_list_unposted_transactions`. ledger_account_i…

well_show_records

Put a table of records IN FRONT OF THE USER. Use it when the user asked to SEE rows — "show me my invoices", "list my companies", "which suppliers have no category" — and when the answer you owe them …

well_get_worklist_status

Ask whether a repair gate is still OPEN, without drawing its card. Call this BEFORE the worklist read whenever you are checking rather than repairing — the first pass of a gate, and every re-check af…

well_get_connector_coverage

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 a…

well_show_workspace_picker

Ask the user WHICH workspace to work in, on a card: one tile per authorized workspace, with its logo and the company behind it. ⚠️ ONLY when the token authorizes SEVERAL workspaces and no hint resolv…

well_get_session_digest

Get everything a returning person's first answer needs, in one call: what happened in the workspace since they last looked, where the workspace stands now, and the Well skills that can take it forward…

well_propose_next_steps

Put five next steps on a card, as five tiles the person can click. **This tool ranks nothing.** The five skills and their order come from well_get_session_digest's `suggested_steps`; pass them in tha…

well_search_company_registry

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

well_create_company_candidate

Mint a company candidate from a registry hit, the step between finding the company and creating its workspace. This is the deliberate pick the confirm-your-company card makes. REQUIRED: registry_ref …

well_create_company_workspace

Create the company workspace from a candidate, the step that turns a picked company into a workspace the close runs in. This anchors the candidate's company as the new workspace's own company and link…

well_show_company_candidates

Show the user the detected COMPANY candidates on a card and let them pick which company is theirs: a tile per detected company candidate with its confidence, and a company-registry search at the top f…

well_get_accounting_settings

Read the workspace's accounting settings and their provenance WITHOUT showing the user anything: country of incorporation, incorporation date, tax ID, fiscal year start, base currency, and accounting …

well_show_accounting_settings

Draw the accounting-setup card so the USER reviews and confirms the workspace's accounting settings: country of incorporation, incorporation date, tax ID, fiscal year start, base currency, and account…

well_list_retargetable_connectors

Read the connectors on this workspace's lineage parent (its membership workspace) that could follow it here, WITHOUT showing the user anything: each candidate's connector, how strongly it was proved t…

well_show_retargetable_connectors

Draw the connector-retarget card so the USER brings a bank (or other ledger) connector across from the membership workspace to this company workspace. A connector connected on the parent (membership)…

well_retarget_connectors

Retarget (bring across) ledger connectors from this workspace's lineage parent onto this workspace — the write behind the connector-retarget card. For each source connector, a new connector row is cre…

well_upload_document

Upload a document (invoice, receipt, statement) into the workspace by sending its bytes as base64. ⚠️ THIS IS A WIDGET'S WRITE, NOT YOURS. The card's drop zone reads the file the person dropped or ch…

well_get_customer_einvoicing_details

Get one CUSTOMER's e-invoicing identity — the registry values an invoice to that customer is routed on, or that a period aggregate for it is reported under. Use this when the question is about the pa…

well_claim_statement_draft

Claim every bank statement the user dropped on Well's website in one visit, using the ONE claim token from their message or from the /import-statement command argument, or the one claim link from Well…

well_get_graph

Draw the workspace's context graph — its companies, people, accounts, transactions and connectors, and the connections between them — as an interactive canvas the user can orbit, zoom and hover. Use …

well_describe_entity

Get a grounded description of ONE entity — what it is, using its real field values and one hop of its related records, never a guess. Reach for this on a SPECIFIC question about one already-identified…

well_show_record_graph_summary

Draw a selectable, grounded card over one or more already-resolved records — their neighborhood graph plus a written summary of what they have in common (or, for a single record, a rich description of…

well_set_counterparty_default_category

Declare what spend at ONE counterparty is — asked once about the counterparty, instead of once per transaction. REQUIRED: company_id, from well_list_counterparties. category — a LABEL from the closed…

well_list_unposted_journals

List the transactions AND invoices of a fiscal period whose journal entry a posting retry can still clear on its own — the re-triggerable posting gap. An empty list with `scan_truncated: false` means …

well_repost_journals

Re-run (repost) the posting for this fiscal period's ready rows — the workspace's re-triggerable posting gap. This is the ACTION that books the rows `well_list_unposted_journals` lists as ready to pos…

well_list_ledger_accounts

List the workspace's chart of accounts (COA) — every ledger account a counterparty default or a transaction can be assigned to. Use it to name a real `ledger_account_id` in a write instead of guessing…

well_show_canvas

Show one of the workspace's saved canvases as a board — the blocks it holds, at the positions its author put them, exactly as stored. Answers with an ARRANGEMENT, not a measure. NO figure is resolved…

well_upsert_canvas

Write one canvas: create a board, or replace the arrangement of a board that already exists. Writes an ARRANGEMENT — the blocks a canvas holds and where they sit. It never computes a figure and never…

well_preview_provider_export

Show the user what Well can fetch from a provider's own web app, and the Deploy action that fetches it. Draws a "deploy agent" card with one row per provider. Each row lists every file the agent can d…

well_render_canvas

Draw one of the workspace's saved canvases WITH its figures, from the readings you already have. This tool measures nothing. Every figure on the board is one you measured through that block's own ski…

well_show_invoice_design

Draw the invoice-design card so the USER picks the layout an invoice prints in and sets what it prints: the ink, the language, whether a customer-portal address is printed, and which note, tax rate an…

well_update_invoice_design

Set one invoice's design: the layout it prints in, the ink, the language, whether a customer-portal address is printed, and which note, tax rate and payment means back the payment-terms, tax-regime, l…

well_list_generative_documents

List the documents Well can generate for one kind of document, with the values each one takes. Each entry has a document_slug (pass it to well_generate_document), a one-line description of the design…

well_generate_document

Generate a document as a PDF and store it in the workspace. It never emails or sends anything, so a request to email or send a document is not a request to generate one. Pass exactly one source: - `pa…

well_preview_invoice_design

Draw invoice designs with the given settings, as the sheet markup the PDF path prints. The invoice-design card calls this when it opens and when a setting changes; it changes nothing. REQUIRED: layou…

well_create_invoice_document

Render an existing invoice as a print-ready PDF and attach it as the invoice's source document. The invoice shortcut of well_generate_document: it prints the invoice in its own chosen design, ink and …

well_list_customers

List the customers this workspace bills, and the companies it could define as a customer next. Draws the define-customer card. Use it when an invoice needs a customer ("who is this invoice for", "bil…

well_define_customer

Define one company as a customer of this workspace: records that the workspace's own company bills it. REQUIRED: entity_id and entity_kind, both from a row of `well_list_customers`. Call it only afte…

well_draft_email

Show an email draft on a card so the user can read it, edit it and send it. Nothing is sent by this call. The only thing it stores is each linked document's durable download link, which stays the same…

well_send_email_draft

Hand the final text of an email draft to the user's own email app. Well sends nothing itself. The card that `well_draft_email` shows calls this when the user presses Send. Do not call it yourself to …

well_get_workspace_preferences

Get resolved preference values for the caller in this workspace. Each key resolves to the caller's own override when they have set one, otherwise the workspace-wide default, otherwise it is absent fro…

well_upsert_preference

Set a workspace preference. `scope: "workspace"` with no `namespace` sets the workspace-wide default, which only a workspace owner or admin can set; a namespaced workspace value is open to any member.…

well_define_line_items

Read what this workspace has already billed, and flag which of the lines the user just described equal a past line. Use it before `well_create_invoice_from_data`, when the invoice's lines come from th…

well_get_fx_quote

Call this FIRST for any question about an exchange rate or a currency conversion, in any wording or language ("convert 500 EUR to USD", "how much is 2,000 GBP in euros", "EUR USD today", "what's the d…

well_share_canvas

Freeze one of the workspace's saved canvases WITH its figures and return a link that opens it outside Well, with no Well account. Use it when someone asks to send a board to an investor, an accountan…

well_revoke_document_shares

Stop a document download link, so it no longer opens for anyone, including in an email already sent. Call it when the user asks to stop sharing, unshare or revoke a link. `well_draft_email` puts such…

Resources · 1

Well

Branded Well UI rendered inline by MCP-Apps hosts.

ui://well/widget/1dab1a85

How to use

Add to your Claude Desktop / Cursor / Cline MCP config:

{
  "mcpServers": {
    "well": {
      "url": "https://api.wellapp.ai/v1/mcp",
      "transport": "http"
    }
  }
}