Skip to main content
Glama
510,487 tools. Updated 2026-09-04 05:19

"A tool for analyzing invoices" matching MCP tools:

  • Query records from Well's database. ⚠️ WORKFLOW: 1. To SHOW the user a table of a record type, just omit `fields`. You never choose columns for presentation: the table the user sees is ALWAYS the root's display view in the Well web app's column order, trimmed on the widest roots to what fits a chat-width table. 2. To answer a targeted question, call well_get_schema(root) FIRST to discover available fields, then name in `fields` ONLY the extra values you need (5-15 typically). They are ADDED to the display view in the payload you read — they do not replace, reorder, or trim the columns the user sees. ROOTS (read-only — all 33): companies, people, connectors, invoices, documents, transactions, accounts, payment_means, workspace_connectors, memberships, cards, checks, ledger_accounts, journals, journal_entries, tax_rates, exchange_rates, invoice_transactions, categories, account_balances, tasks, workspaces, invoice_payment_means, chat_conversations, blueprint_runs, workspace_connector_sync_logs, media, emails, phones, web_links, locations, invoice_items, billing_events (The accounting graph — ledger_accounts, journals, journal_entries — and balances/rates are read-only projections owned by the sync/posting pipelines; query them for financial context, you cannot create/update them here. Sub-resources like emails/phones/locations are usually richer when read via their parent company/person.) CATEGORY CATALOGS: "categories" holds two independent taxonomies, separated by `category_type`. Always filter on it — an unfiltered read mixes them: - `whereClause: { category_type: { _eq: "company" } }` is the COMPANY-CATEGORY catalog: the industry labels a counterparty carries, and the ids `well_update_company({ category_ids })` accepts. There is no curated allowlist — the labels are minted during enrichment — so read them here rather than inventing a taxonomy. - `whereClause: { category_type: { _eq: "transaction" } }` is the management/transaction taxonomy. CONNECTED TOOLS: do NOT use this tool to show the user what they have connected — call well_list_connectors instead. It owns that job: connection status, and an install link for anything not connected yet. Query root "workspace_connectors" here only for genuine RECORD-level needs — reading sync timestamps, filtering connections, joining them with other roots. ("connectors" is the installable catalog; "workspace_connector_sync_logs" is per-sync history.) Well already syncs the providers' data into the roots above — invoices, transactions, accounts, the accounting graph. ALWAYS read it from here. well_invoke_connector_tool and a provider's own tools are for an ACTION the user explicitly asked to take on that provider (e.g. "create this record in Attio"), never a way to fetch data Well already holds. EXAMPLE - show the user their invoices (no `fields`, ever): well_query_records({ root: "invoices", limit: 50 }) EXAMPLE - answer "how much is still owed on the unpaid invoices?": well_query_records({ root: "invoices", fields: [["invoices", "balance_due"]], whereClause: { "payment_status": { "_in": ["unpaid", "partial"] } } }) // balance_due arrives in the rows for you to total up; the user still sees the // standard invoices table, with its identity, counterparty and status columns. ⚠️ RULES: - `fields` is ADDITIVE — it widens the data you receive, never the table the user sees - Omitting fields (default view) or naming a few extras both beat allFields - Field paths from schema: "invoices.issuer.name" → ["invoices", "issuer", "name"] - Default 50 records per request, max 500. ONE CALL IS THE ANSWER — do not walk the root: Every response already carries `totalCount` (ALL matches, not just this page) and `records_url` (the full web-app table, with your filter and sort already applied). So a request to see a record type is ONE call: the user gets a table of the first page, the count tells them how many there are, and the link takes them to the rest. "Show me all my invoices" is answered by one call + the link — NOT by fetching 483 rows into this conversation. - A non-null `nextCursor` is NOT a to-do. It means more rows exist, which `totalCount` already told you and the link already covers. - Never paginate to compute a total, count, average or breakdown: aggregate over the filtered set instead. Summing a paginated sample produces a wrong number. - Never paginate to "be thorough". Large roots will exhaust the output limit mid-walk, and the user ends up with nothing legible. - Paginate ONLY for per-row work over every match that no aggregate can express, and tell the user the cost before starting. Then: pass the returned `nextCursor` as `cursor`; `nextCursor: null` is the last page. FILTERING (whereClause): - Uses Hasura-style operators on field names. - Safe operators (work on ALL field types): _eq, _neq, _in, _nin, _is_null - Numeric/date only: _gt, _gte, _lt, _lte - Text only: _like, _ilike - When unsure of a field's type, prefer _eq or _in (they always work). - Combine with _and, _or, _not - For relationship fields, use nested syntax: { "issuer": { "company_id": { "_eq": "<company_id>" } } } - NEVER select the workspace's OWN records by matching a company name. One legal entity appears under several labels — a registered name, a trade name, a bank-issued label — so a name filter silently drops rows and the total reads as complete. On the invoices root, pass `partyScope` instead: it resolves the workspace's own side on the server, so this query needs no id lookup and no extra call. Call well_get_own_company for the id only when a root has no `partyScope` and you must filter on issuer_pk / receiver_pk or the nested company_id yourself. - Match a counterparty by id too whenever you have one. Reach for _ilike on a name only to DISCOVER candidates to show the user, never to compute a figure you will report. Examples: { "status": { "_eq": "unpaid" } } { "grand_total": { "_gt": 1000 } } { "local_currency": { "_eq": "EUR" } } { "_and": [{ "status": { "_eq": "unpaid" } }, { "grand_total": { "_gte": 500 } }] } { "issuer": { "company_id": { "_eq": "<company_id from well_get_own_company>" } } } SORTING (orderBy): - Sort by any field: { field: "grand_total", direction: "desc" } - Default sort is by primary key ascending. Returns { rows, totalCount, nextCursor, success }.
    Connector
  • 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_rates, exchange_rates — query these for real financial statements (compte de résultat / balance sheet) instead of reconstructing them from raw invoices - well_get_schema({ root: "invoices" }) → List all available fields for invoices WORKFLOW: 1. Call well_get_schema(root) to see available fields 2. Pick the fields you need for your task (typically 5-15) 3. Call well_query_records with those specific fields Returns fields with path, type, and (when documented) semantic context: - { path: "invoices.grand_total", type: "numeric", context: "Total invoice amount incl. tax in the document currency...", enrichment: "AI extraction" } → use _eq, _gt, _lt, etc. - { path: "invoices.local_currency", type: "enum" } → use ONLY _eq, _neq, _in, _nin, _is_null - { path: "invoices.issuer.name", type: "text" } → use _eq, _like, _ilike, etc. - "context" (when present) explains what the field MEANS in the domain and how it's used — read it to pick the right field and write correct filters. - "enrichment" (when present) is the value's provenance (e.g. "Bank sync", "AI extraction", "System generated", "Derived", "Manual"). Use the type to choose the right whereClause operators in well_query_records. To use in well_query_records, convert path to array: "invoices.issuer.name" → ["invoices", "issuer", "name"]
    Connector
  • Validates a Brazilian CPF (Cadastro de Pessoas Físicas) using the official Receita Federal checksum algorithm. Use this tool when processing Brazilian user registrations, invoices, tax forms, e-commerce orders, or any document requiring a valid Brazilian individual taxpayer number. Input must be an 11-digit string (with or without formatting). Returns whether the CPF is mathematically valid, along with the cleaned CPF. Does not verify if the CPF exists in the Receita Federal database — only validates the format and checksum.
    Connector
  • Validates a Brazilian CNPJ (Cadastro Nacional da Pessoa Jurídica) using the official Receita Federal checksum algorithm. Use this tool when processing Brazilian company registrations, B2B invoices, supplier onboarding, e-commerce orders, or any document requiring a valid Brazilian company taxpayer number. Input must be a 14-digit string (with or without formatting). Returns whether the CNPJ is mathematically valid, along with the cleaned CNPJ. Does not verify if the CNPJ is active in the Receita Federal database.
    Connector
  • Calculate the survey sample size needed for a confidence level and margin. FREE. Uses maximum variance (p=0.5) with a finite-population correction when population is given. Typical input {"population": 5000, "confidence_pct": 95, "margin_pct": 5} returns {"required_sample": 357, "assumptions": "p=0.5 (max variance), random sampling"}. Use before collecting data, to size a survey. Not for analyzing data already collected (stats_describe, confidence_interval). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "confidence_pct must be 90, 95, or 99"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
    Connector
  • Build a UTM-tagged URL for campaign tracking. FREE. Typical input {"url": "https://example.com/pricing", "source": "newsletter", "medium": "email", "campaign": "spring-launch"} returns {"tagged_url": "https://example.com/pricing?utm_source=newsletter& utm_medium=email&utm_campaign=spring-launch"}. Use to build one tagged tracking URL. Not for analyzing campaign results and not for anything that belongs in the message body (audit_copy). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "url must start with http(s)://"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
    Connector

Matching MCP Servers

Matching MCP Connectors

  • Calculate the survey sample size needed for a confidence level and margin. FREE. Uses maximum variance (p=0.5) with a finite-population correction when population is given. Typical input {"population": 5000, "confidence_pct": 95, "margin_pct": 5} returns {"required_sample": 357, "assumptions": "p=0.5 (max variance), random sampling"}. Use before collecting data, to size a survey. Not for analyzing data already collected (stats_describe, confidence_interval). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "confidence_pct must be 90, 95, or 99"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
    Connector
  • Get a Stripe billing portal URL for managing payment methods and invoices. Returns a URL (not a redirect) that the human can open in a browser. Requires: API key with read scope. Args: flow: Optional. Set to "payment_method_update" to go directly to the payment method update page. Returns: {"url": "https://billing.stripe.com/p/session/..."}
    Connector
  • Check whether a receiver is registered on the Peppol network and accepts BIS Billing 3.0 invoices, via the official SML/SMP discovery route when enabled (otherwise an honest mock that says so). Only status registered/not_registered is definitive; unavailable/not_configured are truthful and never a hidden "no". Provide vatId or endpointId (at least one) plus the receiver country. Lookup only — never a send action, and no send tool exists here. Validation and readiness only; never sends a Peppol invoice and gives no legal, fiscal or compliance guarantee.
    Connector
  • Build a UTM-tagged URL for campaign tracking. FREE. Typical input {"url": "https://example.com/pricing", "source": "newsletter", "medium": "email", "campaign": "spring-launch"} returns {"tagged_url": "https://example.com/pricing?utm_source=newsletter& utm_medium=email&utm_campaign=spring-launch"}. Use to build one tagged tracking URL. Not for analyzing campaign results and not for anything that belongs in the message body (audit_copy). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "url must start with http(s)://"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
    Connector
  • Get the historical EPSS time series for a specific CVE. ## What this tool does Returns the historical EPSS score, percentile, and model version available for a CVE across time, ordered by date. Useful for analyzing how exploitability likelihood has evolved over time. ## When to use this tool Use this tool when the user asks about: - EPSS trend over time - how exploitability probability changed - whether EPSS spiked or dropped - historical comparison of risk If the user only wants the current EPSS score, use `vulnerability_score` instead. ## Inputs - **cve_id**: valid CVE identifier (`CVE-YYYY-NNNNN`). ## Outputs - **series**: array of objects, each containing: - `date`: measurement date in ISO format - `score`: EPSS score - `percentile`: EPSS percentile - `model`: EPSS model version ## LLM usage guidelines - Never guess EPSS values-use this tool for all EPSS time-series questions. - If `cve_id` is malformed or incomplete, ask the user to correct it before calling. - If the user mentions multiple CVEs, call the tool once per CVE as needed. - If no historical data is available, return an empty series and state that no EPSS history was found.
    Connector
  • Validates a Mexican RFC (Registro Federal de Contribuyentes) format for both individuals (13 characters) and companies (12 characters). Use this tool when processing Mexican invoices (CFDI), tax forms, supplier registrations, or any document requiring a valid Mexican taxpayer identifier. Returns whether the RFC format is valid, the detected type (individual or company), and the cleaned RFC. Note: validates format only, does not verify against the SAT registry.
    Connector
  • Validates an Argentine CUIT (Código Único de Identificación Tributaria) using the official AFIP checksum algorithm. CUIT is used by companies, self-employed workers, and other entities for tax purposes. Use this tool when processing Argentine invoices, supplier registrations, B2B transactions, or any document requiring a valid Argentine tax identifier. Accepts CUIT with or without formatting (dashes). Returns whether the CUIT is valid, the entity type detected, and the cleaned CUIT.
    Connector
  • Delete a DRAFT invoice. Only invoices that have never been sent can be deleted; otherwise use void_invoice.
    Connector
  • Check the status of a submitted job. Call this after submit_query to see if your job is ready. Status progression: submitted -> analyzing -> fetching -> clustering -> enriching -> completed/failed IMPORTANT: Jobs take several minutes to process. First check after ~1-2 minutes, then poll every 30-60 seconds. Broad searches can take 10-30+ minutes; for long jobs, poll every 60-120 seconds. Do NOT call this tool in a tight loop. Stop polling when status is `completed` or `failed`. Treat `submitted`, `analyzing`, `fetching`, `clustering`, and `enriching` as active states and continue polling. You don't need to wait for completion to pull results. Partial results are available during `enriching` — call pull_results after ~2 minutes, then poll status every 30-60 seconds and pull again for fresher results. Do not stop pulling just because an intermediate pull is empty/unchanged. Use `progress_validated` vs `candidate_records` to track whether more results may still appear (`progress_validated < candidate_records`). If transport/session fails, resume using the same `job_id`.
    Connector
  • Returns what Curagent currently supports: which US states, which document types, and how analysis is priced. Call this before analyzing to confirm the property's state is in scope. Curagent currently supports Florida real estate transactions only.
    Connector
  • Compact replay summary for analysis. Returns replay metadata (totals, passed/failed/skipped counts) + one row per step with status, action, duration, diff scores, and a short error excerpt. Always small — call this first when analyzing a replay, then use flow_replay_step for full per-step detail.
    Connector
  • Report feedback about the META COUNCIL PLATFORM itself — a noticeable performance failure, a lacking/missing capability, a bug, or a UX/docs gap in Meta Council's tools, councils, workflows, or MCP surface. Platform feedback only: do NOT use this for anything about your own business, customers, deals, invoices, or other data Meta Council manages on your behalf — use the relevant business tool for that instead (e.g. create_deal, create_invoice). Use it the moment a tool result, council run, or workflow falls short. Stored per-user and visible only to platform admins — the response returns an id + acknowledgement and submissions cannot be read back. Include machine context (tool name, session id, model) in the context object.
    Connector
  • Deletes a customer of this company that has no invoices. - **What deleting means:** the customer is retained internally for tax record-keeping purposes, but is no longer exposed by the API: subsequent requests to it return `404`, and it is never included in the customer list, under any value of the `active` filter. - **Identifier released:** its NIF or alternative identifier is freed, so a new customer may be created with the same identifier. - **Customers with invoices:** they cannot be deleted and the request answers `409` `CLIENT_HAS_INVOICES`. To stop using a customer, update it with `active` set to `false` instead of deleting it. Endpoint: DELETE /v1/companies/{company_id}/customers/{customer_id}
    Connector
  • Returns the invoices previously generated from this recurring template, including their status and generation dates, newest first. **Paginated** with the usual `page`/`limit`, and the usual defaults: without them you get the 20 most recent generations, not the whole history — which grows with every cycle the template runs. Read `data.pagination` to walk the rest. The deprecated flat alias `GET /v1/recurring-invoices/{recurring_invoice_id}/history` does **not** paginate: it is frozen as it shipped until its `Sunset` date, and returns the whole history with no `pagination`. Only this route pages. Endpoint: GET /v1/companies/{company_id}/recurring-invoices/{recurring_invoice_id}/history ⚠️ Fiscal guardrails — read before calling: - How BeeL derives the AEAT invoice type, and the rules each type imposes. (resource: beel://guardrails/invoice-types) - What regime_key means, where it lives, and which combinations are rejected. (resource: beel://guardrails/regime-keys) For the exhaustive rules and worked examples, call beel_docs_search.
    Connector