MCP server
Run your books from chat.
CompanyStack exposes your accounting workspace over the Model Context Protocol, so an assistant can record transactions, raise invoices, and read financial statements the same way the dashboard does — 98 tools over one authenticated endpoint.
Server URL
https://api.companystack.io/mcp- Transport
- Streamable HTTP
- Auth
- OAuth 2.1, browser approval
- Scope
- Your organizations only
Connecting
- Step 1
Create your workspace
Sign up on CompanyStack, create an organization, and finish the basic accounting setup. The MCP server operates an existing workspace — it cannot create one for you.
- Step 2
Add the server to your client
Point Claude, ChatGPT, or any MCP-capable client at the endpoint below. The server speaks streamable HTTP.
- Step 3
Authorize in the browser
The server is OAuth-protected. Your client opens a browser approval flow; once you approve, the connection is scoped to your account's organizations.
How the server behaves
The server ships these rules as MCP instructions, so a connected client follows them without being prompted.
- Organizations are explicit
- Start with list_organizations, then pass organizationId on every organization-scoped call. There is no server-side active organization.
- Drafts by default
- New transactions and journal entries are created as drafts. Posting, voiding, settling, and deleting are final or destructive, and clients are instructed to confirm before running them.
- Dates and currency
- Dates are YYYY-MM-DD. Foreign-currency lines need an exchange rate — look one up with get_exchange_rate and pass it explicitly. A missing rate is an error.
- Check before you create
- Use list_accounts before creating accounts so the assistant does not duplicate an existing ledger account.
- Read the playbook first
- The bookkeeping playbook resource explains how to book common transactions in double entry. Clients are told to read it before posting anything unusual.
Tools
98 tools across 9 areas. Tools markedwriteschange your books; the rest only read.
Organization
Workspace identity, members, and the company details printed on documents.
list_organizationsOrganizations the signed-in user belongs to, with role and organization type. Always the first call.
get_organizationOrganization details including baseCurrency — the reporting currency used for FX conversion.
update_organizationwritesUpdate name, address, email intake, and company details. Owner or admin.
list_organization_membersMembers of the organization with roles.
update_company_detailswritesInvoice letterhead and bank details shown on generated documents.
normalize_addressGoogle Maps address normalization for company details.
get_dashboard_overviewHeadline workspace numbers for a week or month period.
get_subscription_summaryCurrent subscription and billing summary.
list_subscription_invoicesStripe subscription invoices for the organization.
list_currenciesEvery currency supported for accounts, invoices, and transactions.
get_exchange_rateLatest stored rate from one currency to another on or before a date.
Chart of accounts
The ledger's accounts, their balances, and party tax identifiers.
list_accountsPaginated chart of accounts with computed balances.
create_accountwritesCreate a chart-of-accounts entry. Field requirements depend on account type.
create_accountswritesCreate 1–1000 accounts in one call.
get_accountFetch a single account.
update_accountwritesUpdate an account. Contact fields are valid only on party accounts, which must retain a full address.
delete_accountwritesDelete an account. Fails if it already has posted journal lines.
archive_accountwritesArchive an account.
unarchive_accountwritesRestore an archived account.
list_account_tax_identifiersTax identifiers on a party account (sundry debtor or creditor).
create_account_tax_identifierwritesAdd a party tax identifier. GSTIN requires an Indian contact country and passes local validation.
update_account_tax_identifierwritesUpdate a party tax identifier.
delete_account_tax_identifierwritesRemove a party tax identifier.
validate_account_tax_identifierwritesVerify a party VAT number with EU VIES and store the check with its consultation number.
Journal entries
Double-entry postings. Entries are created as drafts and posted explicitly.
list_journal_entriesPaginated journal entries with lines and attachment metadata.
create_journal_entrywritesCreate a draft manual journal.
get_journal_entryFetch a single journal entry.
update_journal_entrywritesUpdate a draft entry only.
delete_journal_entrywritesDelete a draft entry only.
create_journal_entries_bulkwritesCreate 1–1000 draft entries.
post_journal_entries_bulkwritesPost 1–300 draft entries at once.
post_journal_entrywritesMove an entry from draft to posted.
void_journal_entrywritesMove a posted entry to void.
link_journal_attachmentwritesCopy an attachment from another entry in the same organization.
Transactions
Shorthand tools that write a correctly balanced, posted journal entry.
record_incomewritesPost an income entry.
record_expensewritesPost an expense entry.
record_transferwritesPost a transfer between accounts.
record_bulk_incomewritesPost up to 1000 income entries.
record_bulk_expenseswritesPost up to 1000 expense entries.
record_bulk_transferwritesPost up to 1000 transfers.
record_paymentwritesPost a payment or receipt, optionally linked to an invoice.
get_account_transactionsDrill down into posted transactions for one account over a date range.
import_bank_statementwritesCreate bank-statement journal entries from parsed transactions.
Invoices
Sales and purchase invoices, their tax computation, and payment matching.
list_invoicesInvoices with party details.
create_invoicewritesCreate a sales or purchase invoice with tax computation.
create_invoiceswritesCreate 1–100 invoices in one call.
update_invoice_draftwritesEdit a draft invoice. Omitted fields keep their value; lines replace all lines and tax is determined again.
issue_invoicewritesMove a draft invoice to issued: assigns the next gapless number from its series and posts the journal. Cannot be undone, only voided or credited.
get_invoiceFetch a single invoice.
get_invoice_payment_summaryAmounts paid and outstanding.
list_invoice_potential_paymentsUnmatched journal entries touching this invoice's customer or vendor account.
post_invoicewritesCreate and post the invoice's journal entries.
void_invoicewritesVoid the invoice and its linked entries.
settle_invoicewritesSettle an invoice against journal entries.
resolve_invoice_overpaymentwritesResolve an overpaid invoice.
record_invoice_receiptwritesRecord a customer payment against a sales invoice, with an exchange rate when the currency differs from base.
record_invoice_paymentwritesRecord a vendor payment against a purchase invoice, with an exchange rate when the currency differs from base.
delete_invoice_draftwritesDelete a draft invoice, only while every linked entry is still a draft.
record_invoice_e_invoicewritesIndia: record the IRN, acknowledgement, and signed QR code the IRP returned for an issued sales invoice.
create_credit_notewritesIssue a credit note against an issued sales invoice, in full or per line, mirroring the original's tax.
apply_credit_notewritesApply a credit note's unapplied balance to another open sales invoice of the same customer and currency.
refund_credit_notewritesRefund a credit note's unapplied balance to the customer from a bank or cash account.
list_invoice_number_seriesNumber series with the number each would assign next.
create_invoice_number_serieswritesAdd a number series. One series per scope is the default used when issuing.
get_invoice_number_seriesFetch a single number series.
Reports
Financial statements computed from posted entries, plus the month-end FX revaluation.
get_profit_lossIncome versus expense accounts for a date range.
get_trial_balancePosted-journal trial balance.
get_balance_sheetAssets, liabilities, and equity as of a date. Same account-type layout in every market.
list_outstanding_billsFor books that come from Tally: open payables or receivables per party and bill, with payments against each bill and ageing.
list_dimensionsThe dimensions amounts are tagged with across accounts, such as jobs, projects or cost centres, with how many values each has.
get_dimension_reportIncome, expense and net per dimension value, such as job-wise profit. For one value: the accounts behind it and its invoices.
list_custom_fieldsFields kept on accounts, journals and invoices beyond the built-in ones. Journals and invoices can be filtered by them.
query_booksOne read-only SQL statement over this organization's books, for questions the other reports cannot answer in a call or two. Job numbers are the Job No dimension. The financial year starts 1 April.
run_fx_revaluationwritesRevalue foreign-currency balances at the month's closing rate, posting an unrealized FX journal and its reversal. Re-running a month replaces both.
get_sales_by_jurisdictionSales mix for the current financial year, grouped by customer destination country or state.
Tax
Organization tax registrations, tax preview, and India-specific helpers.
list_tax_registrationsOrganization-level registrations — GSTIN, VAT, EIN, and others.
create_tax_registrationwritesRegister a tax ID and provision the matching liability and receivable accounts.
update_tax_registrationwritesUpdate a registration.
delete_tax_registrationwritesRemove a registration.
preview_invoice_taxCompute tax for hypothetical invoice lines without persisting anything.
search_india_hsn_sac_codesHSN/SAC code lookup. India organizations only.
suggest_india_gst_rateAI-assisted GST rate from an HSN/SAC code. India organizations only.
Catalog
Reusable products and services used on sales invoice lines.
list_itemsActive catalog items.
create_itemwritesCreate a catalog item.
create_itemswritesCreate 1–1000 catalog items.
update_itemwritesUpdate a catalog item.
archive_itemwritesSoft-delete a catalog item.
Drive and documents
The workspace's document store and its email intake inbox.
list_driveFolders and files in a folder, or the organization root.
list_drive_foldersFlat folder list for move pickers and breadcrumbs.
create_drive_folderwritesCreate a folder.
update_drive_folderwritesRename or move a folder. Cycles and name clashes are rejected.
delete_drive_folderwritesDelete a folder, only when it is empty.
get_drive_file_textUTF-8 text of a CSV or TXT file for preview.
update_drive_filewritesRename or move a file.
delete_drive_filewritesDelete a file.
get_file_download_urlSigned URL for downloading a file.
list_email_intake_sourcesDocuments received through the organization's email inbox.
get_email_intake_sourceFetch a single intake document.
Resources
The server also exposes documents a client can read for context before it starts posting entries.
doc://companystack/bookkeeping-playbookBookkeeping playbook
How to book common transactions correctly in double entry.
doc://companystack/new-user-playbookNew user setup playbook
Opening balances and first-run setup for a fresh workspace.
doc://companystack/api-referenceAPI reference
Generated index of every tool the server currently exposes.
Prefer a plain HTTP API?
Every MCP tool is generated from the same OpenAPI description that powers the REST API. Browse it at the API reference, authenticated with an organization API key.