Alpaca Trading API integration for Model Context Protocol (MCP)
Qbo Multicompany is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Unofficial read-only MCP server for several QuickBooks Online company files in one AI session.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user qbo-multicompany-mcp '--' uvx qbo-multicompany-mcp --entities '<entities>'
# 2 — ask your agent for something these tools do
# list_vendors, list_customers, list_transactions and 16 more
Put your own value in place of <entities> before you run this.
Qbo Multicompany costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts Qbo Multicompany as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need uv (docs.astral.sh/uv): uvx comes with it. Put your own value in place of <entities> before you run this. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user qbo-multicompany-mcp '--' uvx qbo-multicompany-mcp --entities '<entities>'Reconnect, or start a new session, and the tools appear in the model’s tool list.
Nothing is required, but it can take QBO_CLIENT_ID (Client ID of your own Intuit app, here or in the --env-file file. A value set here, even a blank one, overrides --env-file.), QBO_CLIENT_SECRET (Client Secret of your own Intuit app, here or in the --env-file file. A value set here, even a blank one, overrides --env-file.), QBO_ENV (sandbox or production; sandbox when unset. A value set here, even a blank one, overrides --env-file.), QBO_TOKEN_KEY_SOURCE (Where the token store key lives: keychain (the default, macOS only) or env (QBO_TOKEN_KEY). A value set here, even a blank one, overrides --env-file.), QBO_TOKEN_KEY (The store key when QBO_TOKEN_KEY_SOURCE=env: 32 bytes as 44 characters of base64 or 64 of hex. A value set here, even a blank one, overrides --env-file.), QBO_TOKEN_STORE (Token store directory. Defaults to $XDG_STATE_HOME/qbo-multicompany-mcp, else ~/.local/state/qbo-multicompany-mcp. A git working copy or a cloud-sync folder is refused. A value set here, even a blank one, overrides --env-file.), QBO_ALLOW_DOCUMENTS (Set to 1 to register get_attachment, which fetches nothing until QBO_ATTACHMENT_HOSTS pins a host. Off by default. A value set here, even a blank one, overrides --env-file.), QBO_ATTACHMENT_HOSTS (Comma-separated storage hosts attachment downloads may contact. Empty refuses every download. A value set here, even a blank one, overrides --env-file.) if you want to set them.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
19 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Read from its source code. A server that builds its tool list when it starts can list more tools than this.
List a company's vendors with the 1099 flag, balance, and whether a tax identifier is on file (never the value). Use this for the vendor list and the 1099 flag; use summarize_vendor_payments for candidate totals of what was paid and report_aging for what is owed by age. Pass active=null to include…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| active | boolean | no | null includes inactive vendors; true or false filters. |
| vendor_1099 | boolean | no | Filter on the company's own 1099 flag. |
| updated_since | string | no | Only rows changed since: {_TIMESTAMP_HELP}. |
| limit | integer | no | Rows returned; the walk still runs to the end. |
List a company's customers with their balances. Use this for the customer list; use report_aging for receivables by age and run_query for filters this tool lacks. Carries no tax ids, notes or contact fields. Pass active=null to include inactive. Read-only. Data this tool returns goes to the AI…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| active | boolean | no | null includes inactive. |
| updated_since | string | no | Only rows changed since: {_TIMESTAMP_HELP}. |
| limit | integer | no | Rows returned; the walk still runs to the end. |
Read TransactionList report rows for a date window of at most six calendar months, one flat row per transaction. Use this to find transactions and their ids; use report_general_ledger for postings by account and run_report for TransactionList grouped by customer or by vendor, or with splits;…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| start_date | yes | YYYY-MM-DD, inclusive. | |
| end_date | yes | YYYY-MM-DD, inclusive. | |
| transaction_type | no | A THIRD vocabulary -- not the display labels in the txn_type column, and not the entity names used by run_query and get_transaction. 'JournalEntry' works, 'Journal Entry' does not; 'Purchase' and 'Bil | |
| vendor | no | Vendor ids; sent as one comma-separated value. | |
| customer | no | Customer ids; sent as one comma-separated value. | |
| cleared | no | One of Cleared, Uncleared, Reconciled, Deposited. | |
| source_account_type | no | The AccountType enum WITH THE SPACES REMOVED. 'AccountsPayable' filters; 'Accounts Payable' is refused. The chart of accounts -- including list_accounts here -- reports the SPACED form, so the value y | |
| docnum | string | no | Document number, matched as free text. |
| memo | string | no | Memo text, matched as free text. |
| columns | array | no | Column keys to request, from the allowlist; tx_date and txn_type are always added, and a request of 25 or more columns is refused. Omitted: QuickBooks's own nine defaults. |
| max_rows | integer | no | Rows returned after flattening; the rest are trimmed locally and disclosed. |
Read one transaction and its projected lines by type and id. Both come from a list_transactions row, whose label is a display name: Expense, Cash Expense, Check and the Credit Card labels are Purchase, the Bill Payment labels are BillPayment, Refund is RefundReceipt, and the rest drop their…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| transaction_type | string | yes | One of: {', '.join(TRANSACTION_TYPES)} |
| id | string | yes | The transaction's QuickBooks id. |
Run one parsed SELECT against a served entity. Use this for filters the list tools lack and for COUNT(*); for plain lists use list_accounts, list_vendors, list_customers, list_reference_data or list_attachments. Supports SELECT * and SELECT COUNT(*), WHERE with AND, ORDERBY, STARTPOSITION and…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| statement | string | yes | The SELECT to run. |
| with_count | boolean | no | Also return COUNT(*) for the same WHERE. |
Per-vendor CANDIDATE payment totals for a calendar year, for cross-checking against a bank ledger. Use this for candidate totals of what was paid; use list_vendors for the 1099 flag and report_aging for what is owed by age. Walks Purchase and BillPayment; JournalEntry lines touching a vendor are…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| year | integer | yes | The calendar year, such as 2025. |
| vendor | string | no | Restrict to one vendor id. |
| include_card | boolean | no | Show card detail rows. Card totals are reported either way. |
| detail | string | no | 'summary' or 'rows'. |
List objects changed or deleted since a timestamp within the last 30 days, for supported types. Use this for changes and deletions on list objects, and the list tools for the current objects; run_query on a timestamp cannot see deletions, and transactions, tax codes and tax rates are outside this…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| since | string | yes | ISO timestamp, within 30 days. |
| types | array | no | Account, Attachable, Class, Customer, Department, Item, PaymentMethod, Term or Vendor; defaults to Vendor, Customer and Account. |
| full | boolean | no | Include the projected object. |
| limit | integer | no | Changed objects returned; the rest are trimmed locally and disclosed. |
Read one company's ProfitAndLoss report for a date range or a date macro, flattened with its section tree kept: every header, child and total keeps its row_id and parent_row_id, and each total names its scope. Use this for income and expense totals; use report_balance_sheet for balances as of a…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| start_date | no | YYYY-MM-DD, inclusive. Not with date_macro. | |
| end_date | no | YYYY-MM-DD, inclusive. Not with date_macro. | |
| date_macro | no | A documented QuickBooks date range. Not with start_date or end_date. | |
| accounting_method | no | Defaults to the company's ReportBasis. | |
| summarize_column_by | no | Days needs a window of at most 200 days: explicit dates or a macro, which is resolved first. An entity grouping returns one column per entity keyed by its id. | |
| customer | no | Customer ids; sent as one comma-separated value. | |
| vendor | no | Vendor ids; sent as one comma-separated value. | |
| class_ | no | Class ids; requires class tracking. | |
| department | no | Department ids; requires department tracking. | |
| max_rows | no | — |
Read one company's BalanceSheet as of a date, flattened with its section tree kept to every depth; each total names its scope. Use this for balances as of a date; use report_profit_and_loss for a period and list_accounts for account ids. Give as_of (the balance sheet date, sent as end_date) or…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| as_of | no | YYYY-MM-DD: the balance sheet date (sent as end_date). Not with date_macro. | |
| date_macro | no | A documented QuickBooks date range; its end is the balance sheet date. Not with as_of or start_date. | |
| start_date | no | YYYY-MM-DD, optional with as_of; needed with summarize_column_by=Days unless a macro gives the window. | |
| accounting_method | no | Defaults to the company's ReportBasis. | |
| summarize_column_by | no | Days needs a window of at most 200 days: start_date with as_of, or a macro, which is resolved first. An entity grouping returns one column per entity keyed by its id. | |
| class_ | no | Class ids; requires class tracking. | |
| department | no | Department ids; requires department tracking. | |
| max_rows | no | — |
Read one company's GeneralLedger for a window of at most six calendar months: postings grouped by account with running balances, one section per account whose header cell carries the account id, and each posting row keeping its transaction type and id for get_transaction. Use this for the postings…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| start_date | yes | YYYY-MM-DD, inclusive. | |
| end_date | yes | YYYY-MM-DD, inclusive; at most six calendar months after start_date. | |
| account | no | Account ids to include; sent as one comma-separated value. | |
| account_type | no | The AccountType enum WITH THE SPACES REMOVED, plus NonPosting. | |
| columns | array | no | Column keys to request; restricted to the allowlist. tx_date and txn_type are always included. |
| accounting_method | no | Defaults to the company's ReportBasis. | |
| class_ | no | Class ids; requires class tracking. | |
| department | no | Department ids; requires department tracking. | |
| max_rows | no | — |
Read one company's open payables or receivables by aging bucket, as a summary (one row per vendor or customer; bucket columns keyed current/0/1/2/3/total, the human label on each cell) or as detail (one row per open transaction, keeping its type and id). Use this for what is owed and how old it…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| side | yes | Accounts payable or accounts receivable. | |
| detail | no | One row per party, or one row per open transaction. | |
| aging_method | no | Summaries and the receivables detail. Not the payables detail. | |
| report_date | no | YYYY-MM-DD as-of date. Summaries: not with date_macro. | |
| date_macro | no | Summaries only; not with report_date. | |
| sort_order | no | Summaries only. | |
| department | no | Summaries only: department ids; requires department tracking. | |
| vendor | no | payables only: vendor ids; sent as one comma-separated value. | |
| customer | no | receivables only: customer ids; sent as one comma-separated value. | |
| accounting_method | no | payables detail only; defaults to the company's ReportBasis there. | |
| start_duedate | no | Detail only. YYYY-MM-DD; with end_duedate, at most six calendar months. | |
| end_duedate | no | Detail only. YYYY-MM-DD; with start_duedate. | |
| past_due | integer | no | Detail only: minimum days past due. |
| aging_period | integer | no | Detail only: days per aging period. |
| num_periods | integer | no | Detail only: number of aging periods. |
| columns | array | no | Detail only: column keys, restricted to the side's allowlist. |
| max_rows | no | — |
List every QuickBooks company this server is configured for, with its authorisation state and refresh freshness. Reads the local token store only; makes no request to QuickBooks. Use this to discover the 'entity' key the company tools require; use server_info for this server's own build and…
Takes no parameters.
Report this server's own state: build, environment, read-only status, token-store protection, whether documents are enabled and app credentials are set, and which companies have gone over an hour without a refresh (normal between keepalive runs). Reads only local state: it makes no request to…
Takes no parameters.
Read one company's CompanyInfo and its accounting settings (report basis, fiscal-year start, book-close date, currency, multi-currency, class and department tracking), plus the capabilities derived from them. Use this for one company's settings; use list_entities for the configured keys and their…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — |
Read one company's chart of accounts with balances, walked to the end; active accounts unless 'active' says otherwise, optionally one account_type or classification. Each account carries both its own balance and its balance including sub-accounts; the second already contains the first, so never…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| active | boolean | no | null includes inactive accounts; true or false filters. |
| account_type | no | The Account entity's type, WITH spaces ('Accounts Payable'), as each row's account_type reads; the report filters take the same values WITHOUT spaces ('AccountsPayable') and refuse this spelling. | |
| classification | no | Asset, Equity, Expense, Liability or Revenue. |
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| report | yes | The report, by its documented name. | |
| start_date | no | YYYY-MM-DD, inclusive. Not with date_macro. | |
| end_date | no | YYYY-MM-DD, inclusive. Not with date_macro. Detail reports: at most six calendar months after start_date. | |
| date_macro | no | A documented QuickBooks date range; each report admits its page's own list. Not with explicit dates. Resolved here before the window rules are checked. | |
| report_date | no | YYYY-MM-DD as-of date, on the balance and valuation reports. Not with date_macro on an as-of report. | |
| start_duedate | no | CustomerBalanceDetail and VendorBalanceDetail: with end_duedate, a due-date window of at most six calendar months. | |
| end_duedate | no | With start_duedate. | |
| accounting_method | no | Where the report takes it; defaults to the company's ReportBasis there. | |
| summarize_column_by | no | Where the report takes it. Days needs a window of at most 200 days. An entity grouping returns one column per entity keyed by its id. | |
| aging_method | no | CustomerBalanceDetail only. | |
| customer | no | Customer ids, where the report takes them; sent as one comma-separated value. | |
| vendor | no | Vendor ids, where the report takes them; sent as one comma-separated value. | |
| class_ | no | Class ids; requires class tracking. | |
| department | no | Department ids; requires department tracking. | |
| item | no | Item ids, where the report takes them. | |
| employee | no | ProfitAndLossDetail: employee ids. | |
| account | no | ProfitAndLossDetail: account ids to include. | |
| account_type | no | AccountListDetail and ProfitAndLossDetail: the AccountType enum WITH THE SPACES REMOVED, plus NonPosting. | |
| payment_method | string | no | A payment method's name as the report pages list them (Cash, Check, Visa and the like), where the report takes it. |
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| transaction_type | string | no | With transaction_id: one of {', '.join(TRANSACTION_TYPES)}. |
| transaction_id | string | no | With transaction_type: the transaction's id. |
| limit | integer | no | Rows returned; the walk still runs to the end. |
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| attachable_id | string | yes | The attachment's id, from list_attachments. |
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entity | yes | — | |
| kind | yes | Which reference list to walk. | |
| active | boolean | no | null includes inactive rows; true or false filters. |
| limit | integer | no | Rows returned; the walk still runs to the end. |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Qbo Multicompany or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| verification-discount | repo | publisher verification (public source) — no provenance, but the source is public and inspectable | −1 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
Tools were statically extracted from the published source (19 recovered), not enumerated from a running server. Tool-poisoning, Unicode-smuggling, capability and toxic-flow analysis ran on this inferred surface, but a mis-parsed registration could be missed or mis-attributed, so tool-derived findings are capped below “confirmed”. To grade the real runtime surface, scan the running server: --command "npx -y <package>".
1 of the 19 recovered tools are registered only when not settings.allow_documents is false (src/qbo_multicompany_mcp/tools_attachments.py:203) — typically when a key or option is configured. They are part of the server's surface and were analysed; a server started without that configuration exposes only the other 18.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
18 tools are registered unconditionally · 1 more only when not settings.allow_documents is false (src/qbo_multicompany_mcp/tools_attachments.py:203) — typically when a key or option is configured. All 19 are in the table below and were analysed; the conditional ones are marked.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| list_entities | no tags | |
| server_info | no tags | |
| get_company_info | no tags | |
| list_accounts | no tags | |
| list_attachments | no tags | |
| get_attachment conditional | untrusted-input | untrusted-input: keyword "fetch" |
| list_vendors | no tags | |
| list_customers | no tags | |
| list_transactions | no tags | |
| get_transaction | no tags | |
| run_query | no tags | |
| summarize_vendor_payments | no tags | |
| list_changes | no tags | |
| list_reference_data | no tags | |
| report_profit_and_loss | no tags | |
| report_balance_sheet | no tags | |
| report_general_ledger | no tags | |
| report_aging | no tags | |
| run_report | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 0.1.1. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Qbo Multicompany can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.