MCP serverio.github.WellApp-ai/well-mcp
Connect your AI to your Well financial data - invoices, companies, contacts.
Overview
Score?
UNRATED 0.672
of what a free look can see, on 30 looks
Looks
35
last 16 hr ago
Tools
119
changed 1 day ago
More info
URL
api.wellapp.ai/v1/mcp
streamable-http
Says it is
well-financial-mcp 1.0.0
protocol 2025-06-18
In the record since
32 days ago
Among servers18,413 with a card
0median 0.606 · this server 0.672 · highest on record 0.8561
Toolsfrom sha256:449d60c5db…429f08 · +14 −0 1 day ago
| Tool | Schema |
|---|---|
| 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 matchi |
input · output |
| 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 |
input · output |
| 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 suppli |
input · output |
| 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 |
input · output |
| 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, e |
input · output |
| 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.
REQ |
input · output |
| 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 |
input · output |
| 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 cho |
input · output |
| 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 + |
input · output |
| 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
OPTI |
input · output |
| 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 |
input · output |
| well_define_customer added 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 |
input · output |
| well_define_line_items added 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' |
input · output |
| 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 c |
input · output |
| 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 da |
input · output |
| 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-delet |
input · output |
| 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 on |
input · output |
| well_draft_email added 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, |
input · output |
| 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 U |
input · output |
| 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. Nothi |
input · output |
| well_generate_document added 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 exact |
input · output |
| 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 curre |
input · output |
| 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 |
input · output |
| 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 ques |
input · output |
| 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 somethin |
input · output |
| 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 reco |
input · output |
| well_get_fx_quote added 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 t |
input · output |
| 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, z |
input · output |
| 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() → p |
input · output |
| 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 prefere |
input · output |
| 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 quest |
input · output |
| 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 a |
input · output |
| 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 |
input · output |
| 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 i |
input · output |
| 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 f |
input · output |
| 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 mont |
input · output |
| 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, a |
input · output |
| well_get_workspace_preferences added 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, otherw |
input · output |
| 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 |
input · output |
| 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 con |
input · output |
| well_issue_invoice added 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 |
input · output |
| 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 computin |
input · output |
| 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 com |
input · output |
| 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 su |
input · output |
| 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 alread |
input · output |
| 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" |
input · output |
| 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.
|
input · output |
| 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 |
input · output |
| well_list_customers added 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 thi |
input · output |
| well_list_generative_documents added 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 descr |
input · output |
| 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 |
input · output |
| 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?".
Retu |
input · output |
| 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 inv |
input · output |
| 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-invo |
input · output |
| 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 as |
input · output |
| 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 measure |
input · output |
| 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 stro |
input · output |
| 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 inclusiv |
input · output |
| 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_trun |
input · output |
| 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 |
input · output |
| 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 |
input · output |
| 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 |
input · output |
| 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 |
input · output |
| well_preview_invoice_design added 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 nothi |
input · output |
| 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 fe |
input · output |
| 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 |
input · output |
| 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_step |
input · output |
| 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 che |
input · output |
| 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 ex |
input · output |
| 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).
|
input · output |
| 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 y |
input · output |
| 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 |
input · output |
| 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 |
input · output |
| 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 compute |
input · output |
| 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 |
input · output |
| 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 |
input · output |
| 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 render |
input · output |
| 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. |
input · output |
| 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. Th |
input · output |
| 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 yo |
input · output |
| 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 |
input · output |
| 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` l |
input · output |
| 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.
|
input · output |
| 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 |
input · output |
| 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 |
input · output |
| well_revoke_document_shares added 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_dr |
input · output |
| 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, I |
input · output |
| 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 |
input · output |
| 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 o |
input · output |
| 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 on |
input · output |
| well_send_email_draft added 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 |
input · output |
| 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 L |
input · output |
| 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_rec |
input · output |
| 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 |
input · output |
| 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_transaction |
input · output |
| well_share_canvas added 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 in |
input · output |
| 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 c |
input · output |
| 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. N |
input · output |
| 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 |
input · output |
| 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 whi |
input · output |
| 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 |
input · output |
| 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 |
input · output |
| 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 |
input · output |
| 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 workspace |
input · output |
| 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 |
input · output |
| 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 ren |
input · output |
| 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 selec |
input · output |
| 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 incl |
input · output |
| 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):
- refe |
input · output |
| 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- |
input · output |
| 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 (on |
input · output |
| 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 |
input · output |
| 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 |
input · output |
| 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 sta |
input · output |
| 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 ne |
input · output |
| 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 compute |
input · output |
| well_upsert_preference added 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 |
input · output |
| 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, unles |
input · output |
| 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 "work |
input · output |
Verify it yourself
npx teppi-check https://api.wellapp.ai/v1/mcpcurl -s https://api.teppi.xyz/v1/trust/mcp/mcs_01M1FZ2DNQKBFEF9WRBFJTVF8K