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 85 tools.

Tools
85
What they doRead · write · destructive
24 · 55 · 624 read55 write6 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. index names the LAST interval in the range, counting from 1 within year, and interval_count counts backward from it, inclusive. So {interval:"Month", year:2025, index:12, interval_count:12} is all of calendar 2025, while index:1 with the same count is February 2024 through January 2025. For a single period use interval_count:1, as in {interval:"Month", year:2025, index:3, interval_count:1} for March 2025.
    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
    Optional transaction filters. Every field in this object is optional; include only the filters needed for the query.
    interval_partitionobject
    No description.
    match_bystring
    No description.one of AutomaticCategoryCategoryTypePartyRoleProductArea
    natural_flowstring
    No description.one of UnknownFlowInboundOutbound
    paginationobject
    Optional sorting and pagination for a single grouping dimension. For top N by amount, set page.limit=N, sort_field=Amount, and sort_direction=Descending. Without Time, ranking uses whole-window activity totals, or closing balances when as_permanent_account=true. A limited result is not an overall total.
    party_filterobject
    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 ProfitAndLossBalanceSheetCashFlowAPAgingARAging
    originobjectrequired
    Required reporting period. interval, year, index, and interval_count must all be supplied; max_time is optional. index names the LAST interval in the range, counting from 1 within year, and interval_count counts backward from it, inclusive. So {interval:"Month", year:2025, index:12, interval_count:12} is all of calendar 2025, while index:1 with the same count is February 2024 through January 2025. For a single period use interval_count:1, as in {interval:"Month", year:2025, index:3, interval_count:1} for March 2025.
    category_idstring
    No description.
    department_idsarray
    No description.
    location_idsarray
    No description.
    look_back_countinteger
    ProfitAndLoss historical intervals to request; distinct from origin.interval_count, which sets the aggregate width. Use interval_count=1 for monthly comparisons and compare only exact returned period labels.
    preferencesobject
    Optional display preferences. Every field in this object is optional.
    projectionstring
    Compact exact per-row period evidence, including canonical identity, hierarchy, normalized decimal_amount display, source snapshot and coverage. Omit for the original statement.one of analysis
    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_budget_versionsList one budget's version history, oldest first, with the newest marked is_latest.Read-only

    List Budget Versions

    List one budget's version history, oldest first, with the newest marked is_latest. A budget is revised by uploading a new version rather than by editing it in place, so this is how to see when it last changed and what to pass as version_number to read_budget or read_budget_statement. version_number is the 1-based position in that order. A version's name is optional; when it is empty the product shows "v" followed by the version number.

    Inputs

    budget_idstringrequired
    The budget whose versions to list. Use list_budgets to resolve a name to this id.
    business_idstringrequired
    The ID of the business. Use list_businesses to see available IDs.
  • digitsmcp_list_budgetsList the entity's budgets: each one's name, id, period, interval and current version number.Read-only

    List Budgets

    List the entity's budgets: each one's name, id, period, interval and current version number. Start here for any budget question — it resolves a budget name to the budget_id that read_budget and read_budget_statement need. Omit origin to list every budget; supply one to list only budgets whose period overlaps it. Each entry reports its latest version; use list_budget_versions to see a budget's history. A budget covers a fixed period at a fixed interval, and neither can change: a revision is a new version of the same budget, not a new budget.

    Inputs

    business_idstringrequired
    The ID of the business. Use list_businesses to see available IDs.
    originobject
    Optional period filter. Omit it to list every budget. Supply it to list only budgets whose own period overlaps this one, in which case interval, year, index and interval_count must all be set. index names the last interval in the range and interval_count counts backward from it, so {interval:"Month", year:2026, index:12, interval_count:12} covers all of 2026.
  • 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.