Tools
Current public tool catalog for Jupid hosted MCP.
Business data is scoped to the authorized user's active Jupid business. Search tools return bounded results with totals and links back to the app. Use IDs from those results when calling detail tools. To connect a client first, follow the quickstart.
Conventions used across all tools:
- Resolve "last month" or "Q1" into explicit dates before calling. Ingestion
requires
YYYY-MM-DD; reports also accept ISO 8601 datetimes. Transaction timestamps use ISO 8601; Stripe billing period timestamps use Unix seconds. - Transaction amounts are signed: negative for outflows, positive for inflows.
Ingestion uses the supplied currency's units, not cents. Read fields named
amountUsdorcurrentBalanceUsdexpose stored amounts without converting currencies; do not treat mixed-currency totals as converted USD. Report summary outflows and expenses are positive magnitudes. - Search
limitaccepts 1–50 and defaults to 20. Ingestion batches accept 1–500 records. Searches have no page cursor: usetotalandhasMoreto detect truncated results, then narrow the filters. - Account numbers are masked and raw provider payloads are excluded. Business data comes only from the business resolved for the authorized user.
| Tool | What it does |
|---|---|
getProfile | Profile, company summary, and data coverage |
listAccounts | Data sources, accounts, and connection status |
listCategories | Available classification categories |
searchTransactions | Search and filter transactions |
getTransaction | Detail for one transaction |
searchCounterparties | Search vendors, clients, and other counterparties |
getCounterparty | Detail for one counterparty |
getCashflowReport | Cash-flow by period, category, counterparty |
getPnlReport | Schedule C P&L report |
listOutstandingIssues | Open questions that need user context |
answerOutstandingIssue | Save an answer to one open issue (write) |
getAgentConnectionInfo | MCP setup details for agent clients |
getBillingStatus | Basic billing status |
upsertAccounts | Create or update API-source accounts (write) |
upsertTransactions | Create or update a batch of transactions (write) |
deleteAccount | Disconnect an account, retaining history (write) |
deleteTransaction | Soft-delete a transaction (write) |
Profile and accounts
getProfile
- Purpose: get the current Jupid profile, company summary, and data coverage.
- Inputs: none.
- Output: the signed-in user's profile, the active business's company summary, data counts, transaction date range, pending count, and app link.
listAccounts
- Purpose: list data sources and their accounts, including connection status.
- Inputs: optional
includeInactive(boolean, defaultfalse). - Output: connections, account names, masked account numbers, statuses, balances, sync timestamps, totals, and app links.
By default, each source contains only active accounts. Set includeInactive
to include other account statuses; deleted accounts remain excluded. Sources
can appear with a revoked status or an empty account list.
Example questions:
- "What data is connected to Jupid?"
- "Which accounts are active?"
- "When did my accounts last sync?"
Categories
listCategories
- Purpose: list the classification categories available to the user.
- Inputs: none.
- Output: enabled public classification ontologies and category nodes with
paths, names, descriptions, and codes, plus ontology mandatory/exclusive
flags. Each category has a
patharray and a dot-separatedpathTextstring.
This tool is read-only. It does not expose category editing or direct recategorization.
Example questions:
- "What categories does Jupid use?"
- "Which categories exist for meals or software?"
Transactions
searchTransactions
- Purpose: search and filter transactions.
- Inputs, all optional:
query(string) — merchant, description, category, or context keywords. Omit it for requests such as "latest 10 transactions".dateFrom,dateTo(ISO date; date-onlydateTois inclusive).dateField—"primary"(default),"authorized", or"processed".amountFrom,amountTo(numbers) — minimum and maximum signed amounts. For expenses over $500 in USD data, useamountTo: -500. Zero bounds are ignored; omit unused bounds.categoryPath(string) — use a category'spathTextfromlistCategories.counterpartyId(string),accountIds(string array) — IDs from other tools.needsAttention(boolean) —truerestricts results to attention items;falseleaves this filter off.limit(1–50, default 20).
- Output: bounded transaction results with category and counterparty names, filing status, context narrative, totals, and per-transaction app links.
getTransaction
- Purpose: get detail for one transaction.
- Inputs: required
transactionId(fromsearchTransactionsresults). - Output: transaction detail, notes, fee and net amounts when present, categories, context narrative, and app link.
Example questions:
- "Show transactions with Stripe last quarter."
- "Find expenses over $500 that need attention."
- "Show me the details of that $1,200 Stripe charge."
For vendor drill-downs, use searchCounterparties first, then call
searchTransactions with the returned counterpartyId.
Counterparties
searchCounterparties
- Purpose: search vendors, clients, investors, contractors, and other counterparties.
- Inputs, all optional:
query(string) — name or public metadata keywords.relationship—client,service,partner,contractor,investor,owner,lifestyle,supplier,utility,landlord,lender,insurer,payment_processor,marketplace,regulator,tax_authority,donation_recipient,payroll, orunknown.type—company,person,government,non-profit,educational,financial,healthcare,religious,charity,association,cooperative,partnership,trust, orestate.limit(1–50, default 20).
- Output: bounded counterparty results, relationship and type fields, transaction stats, enrichment status, confidence level, totals, and links.
getCounterparty
- Purpose: get detail for one counterparty.
- Inputs: required
counterpartyId(fromsearchCounterpartiesresults). - Output: public counterparty metadata, narrative, sources, matching rules, stats, up to 10 recent transactions, and app link.
Example questions:
- "Who are our investors?"
- "List contractors."
- "What do we know about Anthropic?"
Reports
Reports use filed transactions. startDate and endDate accept YYYY-MM-DD
or ISO 8601 datetimes; a date-only endDate includes the whole UTC day.
periodLimit is a positive integer selecting the newest periods, with a
default of 12. Summary totals cover the full requested range even when the
period breakdown is shorter. Check basis.truncated and
basis.totalPeriodsInRange; increase periodLimit when you need the period
values to reconcile with the full-range totals.
getCashflowReport
- Purpose: get filed cash-flow by period, category tree, and counterparty.
- Inputs:
- Required
startDateandendDate(date or datetime strings). dateField—"processed_at"(default) or"authorized_at".periodGrouping—"quarter","month"(default),"week", or"day".periodLimit(default 12).categoryNames(string array) — matches category names within a path.categoryPaths(string[][]) — category-name path prefixes from the report'scategoryTree[].path, including descendants. These are display-name paths, unlike the key paths returned bylistCategories.ontologyIdorontologyKey(string) — defaults to the Schedule C ontology.counterpartyIds(string array) optionally filters counterparties.
- Required
- Output: basis metadata, summary totals, periods, full category tree, counterparty attribution, and app link.
getPnlReport
- Purpose: get a Schedule C P&L report (pinned to the
tax_us_schedule_contology). - Inputs: required
startDateandendDate; optionaldateField,periodGrouping,periodLimit, and category filters — same formats asgetCashflowReport. - Output: revenue, COGS, gross profit, operating expenses, net profit, margins, periods, deductible category tree, and app link.
Example questions:
- "Compare cash flow this month vs last month."
- "Generate a P&L for Q1."
- "Who are my top paying clients this year?"
Outstanding issues
listOutstandingIssues
- Purpose: list open questions that need user context.
- Inputs: optional
objectType—"transaction","counterparty", or"company"— andlimit(1–50, default 20). - Output: issue and related-hook IDs, object summaries, questions, rationale, answer options when present, task references, totals, and app links.
answerOutstandingIssue
- Purpose: save an explicit answer to one open issue.
- Inputs: required
hookId(the issue ID returned bylistOutstandingIssues) andanswer(string); optionalselectedOption(string ornull). - Output:
statusandhookId. A completed answer also returnsrelatedHookIds,objectType,objectId,taskType,taskId, andeventsSent. Other statuses arenot_found,skipped(withcurrentStatus),unsupported(withobjectType), andobject_not_found.
Call this tool only with an answer the user explicitly supplied. It replaces
the object's context narrative and completes the selected hook plus related
open hooks for the same object. A repeated answer to a completed hook returns
skipped. eventsSent: true means the follow-up processing events were sent;
false means the answer was saved but those events were not sent. Completion
does not mean categorization finished, and the tool does not directly edit
categories.
Example questions:
- "What still needs my review?"
- "Answer this issue: it was a business lunch with a client."
Setup and billing
getAgentConnectionInfo
- Purpose: get setup details for connecting external AI agents.
- Inputs: none.
- Output: MCP URL, transport, auth mode, Codex config, Cursor config, and app setup link.
getBillingStatus
- Purpose: get your personal billing status from synced Stripe subscriptions.
- Access: owners and members read their own subscription. Select a business before using the external MCP connection.
- Inputs: none.
- Output: paid flag, status, subscription details when present (including
cancellation flag, period timestamps, and price ID), and billing page link.
Missing billing records produce statuses such as
no_customerorno_subscription;unknowncan have anullpaid flag.
Partner-provided paid access is separate and is not reflected in this response. Billing changes must be made in the Jupid web app. MCP can report status and return a link; it cannot change plans, cards, invoices, or payment methods.
Example questions:
- "How do I connect Jupid to Codex?"
- "What is my billing status?"
- "Where do I manage billing?"
Synchronize data
These four tools use the same validation, writes, and processing as the
HTTP API. Demo users cannot call them. Partner source creation
uses POST /api/v1/auth/partner; MCP has no separate source-creation tool.
upsertAccounts
- Inputs:
source_id(connected API-source UUID) andaccounts(1–500 items). - Each account requires
external_id,name,type,currency, andcurrent_balance. See the account schema. - Output:
accounts, each withidandexternal_id.
upsertTransactions
- Inputs:
account_id(Jupid UUID) andtransactions(1–500 items). - The account must belong to a connected API source in the active business.
- Each transaction requires
external_id,amount,date, anddescription;pendingandcurrencyare optional. See the transaction schema. dateis a UTCYYYY-MM-DDdate.pendingdefaults tofalseandcurrencyto the account's currency.- Output:
transactions, each withidandexternal_id.
Transaction external IDs are unique across all accounts in a source and cannot move between accounts. Repeats update bank fields while preserving Jupid IDs and local filing, notes, categories, and deletion state. Acceptance waits for saving and the background-processing event, not AI completion. Omitted records are left unchanged.
deleteAccount
- Input:
account_id(Jupid UUID). - Requires owner membership in the active business.
- Disconnects the account and preserves transaction history. Revokes its source when no active accounts remain.
- Output:
account_idanddeleted: true. Repeated deletion succeeds.
deleteTransaction
- Input:
transaction_id(Jupid UUID). - Soft-deletes the transaction.
- Output:
transaction_idanddeleted: true. Repeated deletion succeeds.
Not available yet
Jupid MCP does not currently expose direct recategorization, category editing, CSV or file upload, provider pull-sync triggers, direct billing changes, invoice tools, or tax filing tools.
External MCP clients cannot manage company participants or permissions. The Box's delegated access tool is available only through its separate company-bound connection and a verified owner's request. Partner company access is managed by the partner.