Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Digits MCP server

Vendor MCP
Open markdown

The Digits MCP connector routes your AI agent's tool calls to Digits's own MCP server through Scalekit. Each user signs in to Digits once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 59 tools.

Tools
59
What they doRead · write · destructive
19 · 35 · 519 read35 write5 destructive
Users sign in with
OAuth app
Scalekit's or your own

What you can do

  • Generate financial statements: produce profit and loss, balance sheet, cash flow, and AR/AP aging reports
  • Query transactions: filter individual transactions and summarize them by category, party, or time period
  • Record journal entries: create balanced manual journal entries and delete transactions for a business
  • Look up business details: list businesses, users, categories, departments, and locations, and match names to their canonical form

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Digits MCP connection

    In AgentKit > Connections, create a Digits MCP connection. The name you give it is the connection_name your code passes. See Configure connections.

    Scalekit credentials are available for Digits MCP server, so you don't need to register an OAuth app.

  4. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'digitsmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Digits MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'digitsmcp_list_businesses',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • digitsmcp_dimensional_summarize_transactionsSummarizes transactions and aggregates them into multi-dimensional summaries.Read-only

    Dimensional Summarize Transactions

    Summarizes transactions and aggregates them into multi-dimensional summaries. You can use it to receive timeseries data for that is aggregated and bucketed into dimensions (e.g. Category, Party, Time). # Important Notes - If you are only requesting a Time summary, you must provide a filter (such as category ID/type, party ID/role, etc) - Origin is required. Origin's "index" is 1 based for interval Day, Week, Month, and Quarter; it's the year for interval Year. "IntervalCount" is the number of lookback intervals. All fields in "origin" must be set. - You must include "Time" in the Along dimensions when using intervalCount > 1. - When filtering by balance sheet categories (Assets, Liabilities, Equity), you must set asPermanentAccount to true. - Always resolve the party / category / department / location using search_term first, then use the IDs returned in the filter. - The response may include a "summary" field where the current period amount is zero while prior period is non-zero; do not treat prior amounts as current-period values. - For bill or invoice questions, answer only from explicit fields returned by tools. Do not use expense or income transaction data to approximate bill or invoice amounts.

    Inputs

    business_idstringrequired
    The ID of the business. Use list_businesses to see available IDs.
    originobjectrequired
    Required reporting period. interval, year, index, and interval_count must all be supplied; max_time is optional.
    aggregate_facet_kindstring
    No description.one of UnknownTransactionKindTransactionSourceUserTransactionSourceInstitutionTransactionMatchedStatusTransactionPartyTransactionDepartmentTransactionLocationTransactionNewParty
    alongobject
    Optional dimensions used to group the transaction totals. When supplied, dimensions is required.
    as_permanent_accountboolean
    No description.
    default_category_typestring
    No description.one of UnknownTypeAssetsLiabilitiesEquityIncomeExpensesCostOfGoodsSoldOtherIncomeOtherExpenses
    directionstring
    No description.one of PastFuture
    filterobject
    No description.
    interval_partitionobject
    No description.
    match_bystring
    No description.one of AutomaticCategoryCategoryTypePartyRoleProductArea
    natural_flowstring
    No description.one of UnknownFlowInboundOutbound
    paginationobject
    No description.
  • digitsmcp_financial_statementGenerate complete financial statements: Profit & Loss, Balance Sheet, Cash Flow, AR/AP Aging.Read-only

    Financial Statement

    Generate complete financial statements: Profit & Loss, Balance Sheet, Cash Flow, AR/AP Aging. ## Statement Types (kind) 1. **ProfitAndLoss** - Income Statement showing revenue, expenses, and net income 2. **BalanceSheet** - Financial position with assets, liabilities, and equity 3. **CashFlow** - Cash movements categorized by operating, investing, and financing activities 4. **APAging** - Accounts Payable aging report. ONLY use for questions about total amount currently outstanding or due to vendors. Do NOT use for general bill questions (counts, averages, individual bill details, historical bill amounts). 5. **ARAging** - Accounts Receivable aging report. ONLY use for questions about total amount currently outstanding or due from customers. Do NOT use for general invoice questions (counts, averages, individual invoice details, historical invoice amounts). ## Parameters **Required:** - kind: Statement type ("ProfitAndLoss", "BalanceSheet", "CashFlow", "APAging", "ARAging") - origin: Time period for the statement. Origin's "index" is 1 based for interval Day, Week, Month, and Quarter; it's the year for interval Year. All fields in "origin" must be set. - interval: Time unit (Day, Week, Month, Quarter, Year) - year: Calendar year - index: Position within year (1-12 for Month, 1-4 for Quarter, etc.) - interval_count: Number of periods to include **Optional:** - look_back_count: Number of periods to include in lookback (overrides defaults) - For Month statements: defaults to 12 periods - For Quarter statements: defaults to 4 periods - For Year statements: defaults to 3 periods - show_account_numbers: Include account numbers (bool) - fiscal_year_start_month: Fiscal year start month (1-12 for Jan-Dec) - tax_form: Tax form for display - category_id: Filter to specific category (optional) - department_ids: Filter to specific departments (array of strings) - location_ids: Filter to specific locations (array of strings) ## Example Requests ### Profit & Loss for Q3 2024 { "kind": "ProfitAndLoss", "origin": { "interval": "Quarter", "year": 2024, "index": 3, "interval_count": 1 } } ### Balance Sheet for December 2024 { "kind": "BalanceSheet", "origin": { "interval": "Month", "year": 2024, "index": 12, "interval_count": 1 } } ### Cash Flow Statement for Last 6 Months { "kind": "CashFlow", "origin": { "interval": "Month", "year": 2024, "index": 12, "interval_count": 6 } } ### AP Aging Report with Account Numbers { "kind": "APAging", "origin": { "interval": "Month", "year": 2024, "index": 12, "interval_count": 1 }, "preferences": { "show_account_numbers": true } } ### Department-Specific P&L { "kind": "ProfitAndLoss", "origin": { "interval": "Quarter", "year": 2024, "index": 4, "interval_count": 1 }, "department_ids": ["dept-123", "dept-456"] } ## Common Patterns **"Show me the P&L for last quarter"** -> kind="ProfitAndLoss", origin with Quarter interval **"What's my current cash position?"** -> kind="BalanceSheet", origin with current month **"Show cash flow for the year"** -> kind="CashFlow", origin with Year interval or interval_count=12 **"What is our total outstanding A/R?"** -> kind="ARAging" for total receivable amount **"How much do we currently owe vendors?"** -> kind="APAging" for total payable amount **"Department P&L comparison"** -> Use department_ids to filter

    Inputs

    business_idstringrequired
    The ID of the business. Use list_businesses to see available IDs.
    kindstringrequired
    Required statement type: ProfitAndLoss, BalanceSheet, CashFlow, APAging, or ARAging.one of UnknownExpenseSummaryProfitAndLossBalanceSheetCashFlowAPAgingARAgingTrialBalanceBudget
    originobjectrequired
    Required reporting period. interval, year, index, and interval_count must all be supplied; max_time is optional.
    budget_identifierobject
    No description.
    budget_modestring
    No description.one of VarianceBudgetOnly
    category_idstring
    No description.
    department_idsarray
    No description.
    location_idsarray
    No description.
    look_back_countinteger
    No description.
    preferencesobject
    Optional display preferences. Every field in this object is optional.
    show_otherboolean
    No description.
    show_unassignedboolean
    No description.
  • digitsmcp_list_bill_vendorsFind existing parties eligible to be selected as Digits Bill Pay vendors.Read-only

    List Bill Vendors

    Find existing parties eligible to be selected as Digits Bill Pay vendors. Vendor Management includes parties without a prior vendor role, matching the bill vendor picker. Search by name (default) or email; omit search_text to browse. Use the returned view_party_id or vendor_id with create_bill or update_bill, preserving the field name. Follow next_offset while has_more is true. If more than one vendor matches, ask the user to choose using the names and email addresses; never choose the first match automatically. Use create_bill_vendor when a requested bill needs a vendor that does not exist.

    Inputs

    business_idstringrequired
    The ID of the business. Use list_businesses to see available IDs.
    limitinteger
    Number to return, from 1 to 100; defaults to 50.
    offsetinteger
    Pagination offset; defaults to zero.
    search_bystring
    Defaults to name.one of nameemail
    search_textstring
    Name substring or full email address; omit to browse vendors.
  • digitsmcp_list_billsList Digits Bill Pay bills, newest first, including unpaid drafts.Read-only

    List Bills

    List Digits Bill Pay bills, newest first, including unpaid drafts. This covers native DigitsLedgerPay bills only. Omit status or use "all" for every status; otherwise use an exact bill status such as Draft, New, Assigned, Approved, Paid, or Voided. Filter by the view_party_id or vendor_id returned by list_bill_vendors; supply only one. Use offset and limit to paginate until all total_count results have been read. Use read_bill for line items before making an update.

    Inputs

    business_idstringrequired
    The ID of the business. Use list_businesses to see available IDs.
    limitinteger
    Number to return, from 1 to 200; defaults to 50.
    offsetinteger
    Number of previous results to skip; defaults to 0.
    statusstring
    all (default), or an exact bill status, for example Draft or Approved.
    vendor_idstring
    No description.
    view_party_idstring
    Canonical vendor identity returned by a vendor tool; use instead of vendor_id.
  • digitsmcp_list_business_usersList all users with access to a business.Read-only

    List Business Users

    List all users with access to a business. Requires a business_id from select_business.

    Inputs

    business_idstringrequired
    The ID of the business to list users for. Use list_businesses to see available IDs.
  • digitsmcp_list_businessesList all businesses (legal entities) the authenticated user has access to, including both direct employments and affiliations.Read-only

    List Businesses

    List all businesses (legal entities) the authenticated user has access to, including both direct employments and affiliations.

    Inputs

    This tool takes no inputs.

  • digitsmcp_list_categoriesThis tool is used to list categories.Read-only

    List Categories

    This tool is used to list categories. Use this when you need to review category names, types, or identifiers.

    Inputs

    business_idstringrequired
    The ID of the business. Use list_businesses to see available IDs.
    category_typesarray
    No description.
    querystring
    Account number or name to resolve. Exact account number matches take precedence over case-insensitive name substrings. No matches returns the full list within category_types, with fallback_to_full_list=true. When used as an export_spreadsheet source, zero matches abort the export before upload; refine query or omit it for the full chart.
  • digitsmcp_list_connect_invoicesList accounts-receivable invoices synced in from another accounting provider (e.g.Read-only

    List Connect Invoices

    List accounts-receivable invoices synced in from another accounting provider (e.g. QuickBooks) through Connect, for a business. This is separate from list_invoices, which only covers invoices native to Digits invoicing and never includes these. A request for every invoice this business has, across every source, requires also calling list_invoices; call both and combine the results. Status here is derived rather than stored, since Connect doesn't carry Digits' invoice status: "Paid" once the invoice is fully settled, "Voided" once reversed, or "Created" while still open — there is no draft/sent distinction. Optionally pass paid_since_days to drop paid invoices older than that, while still showing every open one. Each result is a summary — status, dates, amounts, and customer, but not line items or discounts.

    Inputs

    business_idstringrequired
    The ID of the business. Use list_businesses to see available IDs.
    limitinteger
    Maximum number of invoices to return. Defaults to 50. When more exist, open invoices are kept ahead of paid or voided ones, so the cap only trims resolved invoices.
    paid_since_daysinteger
    Optional: drop paid invoices whose payment is older than this many days. Open (unpaid) invoices are always included regardless of age.