Tokenbooks - crypto and fiat accounting and payments
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Crypto and fiat on one double-entry ledger: sync wallets, reconcile, cost basis, audit-ready close.
| Author | io.tokenbooks |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 352 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Tokenbooks - crypto and fiat accounting and payments": {
"url": "https://api.tokenbooks.io/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (36)
get_server_inforead-onlyLearn what this accounting server covers before connecting: supported blockchains and fiat sources, accounting standards, plans with their capacity limits and what each tier adds, how to sign up, connection endpoint and authentication methods, and what it deliberately leaves out. Needs no credentials, so call it first when evaluating a connection, answering what Tokenbooks costs or includes, or debugging a connection.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_accounting_referenceread-onlyLook up valid accounting values—including operation types, transaction statuses, cost-basis methods, and lot event kinds—before classifying or filtering; use the returned exact values instead of guessing.
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_workspacesread-onlyList workspaces available to the authenticated Tokenbooks user, or search by name or slug.
Parameters:
query— string — Optional workspace name or slug search query
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_portfoliosread-onlyList portfolios available in a workspace, or search by name or slug.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugpage— integer — Page number, starting at 1limit— Maximum items to return, maximum 100. Preferred MCP pagination field.query— string — Optional portfolio name or slug search querypageSize— Deprecated alias for limit, maximum 100. Prefer limit for new MCP calls.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_portfolioread-onlyRead one portfolio's settings and accounting policy by exact name or slug, including its financial reporting framework and legal entity type. If legalEntityType is omitted, it is unset.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slug
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_portfolio_balancesread-onlyCheck whether each wallet's computed token balances match its latest synchronized snapshot; returns per-wallet match status, token count, last transaction time, and an overall match flag.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slug
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_accounting_rulesread-onlyFind saved accounting rules, filter them, or recover the exact ruleRef needed to preview, edit, or delete one rule.
Parameters:
workspaceRef(required) — string — Workspace name or slug. Call list_workspaces to resolve it.portfolioRef(required) — string — Portfolio name or slug inside that workspace. Call list_portfolios to resolve it.limit— integer — Requested number of resources to return. Oversized values are clamped to the route limit.search— string — Free-text match against rule names.enabled— boolean — Keep only enabled rules, or only disabled ones. Omit to return both.ruleRef— string — Saved rule handle, from list_accounting_rules.wallets— array — Wallet selectors as chainId:walletAddress values.assetIds— array — Asset ids as CSV or repeated query values.pageToken— string — Opaque token returned by the previous list response.actionTypes— array — Action types as CSV or repeated query values.accountNumbers— array — Ledger account numbers as CSV or repeated query values.conditionFields— array — Condition fields as CSV or repeated query values.counterpartyNames— array — Counterparty names as CSV or repeated query values.
Hints: read-only yes · destructive no · idempotent yes · open-world no
edit_accounting_rulesdestructiveCreate, update, enable/disable, reorder, or delete saved accounting rules -- the rule's whole authoring lifecycle. Pass preview: true on any of those to see the impact without saving; use operation: current to preview the saved ruleset as it stands. Results report when a scan is truncated.
Parameters:
workspaceRef(required) — string — Workspace name or slug. Call list_workspaces to resolve it.portfolioRef(required) — string — Portfolio name or slug inside that workspace. Call list_portfolios to resolve it.operation(required) — string — create: Create a new rule, or preview creating one (preview: true). update: Change the name, conditions, or actions of an existing rule, or preview the change (preview: true). Provide at least one of name, conditions, action. set_enabled: Turn an existing rule on or off without changing it, or preview the change (preview: true). reorder: Set the evaluation order of every rule in the portfolio, or preview it (preview: true). delete: Remove one saved rule from active use, or preview removing it (preview: true). current: Preview the saved rules as they stand, changing nothing.name— string — Human-readable rule name, shown in the rules list. Only for operation create, update; required for operation create.action— object — Only for operation create, update; required for operation create.enabled— Whether the rule evaluates. A disabled rule is kept but never fires. Only for operation create, set_enabled; required for operation set_enabled.preview— boolean — When true, evaluate the change and return its impact without saving it. Not for operation current.ruleRef— string — Saved rule handle, from list_accounting_rules. Only for operation update, set_enabled, delete; required for each.conditions— object — Only for operation create, update; required for operation create.maxAffected— integer — Preview only: how many affected transactions to sample, at most 25. affectedCount in the result equals this sample size; check candidateCount for the true total match count.orderedRuleRefs— array — Every rule handle in the portfolio, in the order they should evaluate. Rules apply in order, so earlier rules win. Only for operation reorder; required for each.
Hints: read-only no · destructive yes · idempotent no · open-world yes
apply_accounting_rulesdestructiveRe-run the current saved rules and default assignments for vendors, people, or organizations (counterparty defaults) across eligible existing accounting transactions; this destructive bulk job ignores unsaved edits, so preview first, then track its requestId with get_request_status.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slug
Hints: read-only no · destructive yes · idempotent no · open-world yes
list_walletsread-onlyList wallets in a portfolio with sync status and transaction counts. Pass chainId and walletAddress to check one wallet instead — safe codes/messages show whether to retry or reconnect credentials. EVM addresses are normalized; other networks may be case-sensitive.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slugpage— integer — Page number, starting at 1limit— Maximum items to return, maximum 100. Preferred MCP pagination field.chainId— string — Optional chain filter, or with walletAddresspageSize— Deprecated alias for limit, maximum 100. Prefer limit for new MCP calls.walletAddress— string — Look up one wallet; requires chainId
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_journal_line_assignment_optionsread-onlyFind the ledger accounts, saved counterparties, or responsibility centers (departments, projects, or other reporting groups) that can be assigned to an accounting entry line. Pass type to choose the lookup: ledger_account returns each account's accountNumber, counterparty returns the counterparty name, and responsibility_center returns its type key and center name.
Parameters:
workspaceRef(required) — string — Workspace name or slug. Call list_workspaces to resolve it.portfolioRef(required) — string — Portfolio name or slug inside that workspace. Call list_portfolios to resolve it.type(required) — string — ledger_account: Ledger accounts assignable to a journal line. counterparty: Saved vendors, people, or organizations assignable to a journal line. responsibility_center: Departments, projects, or other reporting groups (responsibility centers) assignable to a journal line.page— integer — Page number, starting at 1 Only for type counterparty.limit— integer — Maximum items to return, maximum 100. Preferred MCP pagination field. Only for type counterparty.search— string — Filter by name (also matches account number for ledger accounts)pageSize— integer — Deprecated alias for limit, maximum 100. Prefer limit for new MCP calls. Only for type counterparty.
Hints: read-only yes · destructive no · idempotent yes · open-world no
edit_transactionCreate manual source transactions (signed wallet movements; duplicate hashes refused; accounting asynchronous), or change one accounting transaction: memo/tags/type, journal lines or unit fair market value. Read line numbers/list_journal_line_assignment_options first. Track requestIds or waitForCompletion for fields/FMV edits.
Parameters:
workspaceRef(required) — string — Workspace name or slug. Call list_workspaces to resolve it.portfolioRef(required) — string — Portfolio name or slug inside that workspace. Call list_portfolios to resolve it.operation(required) — string — create_manual: Create manual sources. update_fields: Edit memo/tags/type. update_journal_line: Assign journal line. set_fmv_override: Override unit FMV.memo— string — New memo; pass null to clear it Only for operation update_fields.tags— array — Replace ALL tags. Only for operation update_fields.reason— string — Immutable root reason whose nonempty bytes are preserved exactly; use ptx:<uuid> for transaction references Only for operation set_fmv_override.wallet— object — Only for operation create_manual; required for each.assetId— string — Asset ID from read tools (e.g. eth_1). Only for operation set_fmv_override; required for each.subType— string — New operation sub-type (requires operationType) Only for operation update_fields.timeoutMs— integer — Wait ms; default 30000. Only for operation update_fields, set_fmv_override.lineNumber— integer — Journal entry line number (1-based) Only for operation update_journal_line; required for each.quoteSource— string — Price source/reason. Only for operation set_fmv_override.transactions— array — valueQuote: signed TOTAL FMV, not unit price Only for operation create_manual; required for each.accountNumber— string — Account number from list_journal_line_assignment_options (ledger_account). Only for operation update_journal_line.newValueQuote— string — Exact unit price in base currency. Only for operation set_fmv_override; required for each.operationType— string — New accounting operation type Only for operation update_fields.quoteCurrency— string — Currency; default base currency. Only for operation set_fmv_override.transactionId— string — Portfolio transaction ID Only for operation update_fields, update_journal_line, set_fmv_override; required for each.pollIntervalMs— integer — Poll ms; default 500. Only for operation update_fields, set_fmv_override.counterpartyName— string — Counterparty name to assign; pass null to unset Only for operation update_journal_line.waitForCompletion— boolean — Wait for final state. Only for operation update_fields, set_fmv_override.responsibilityCenterAssignments— array — Replace assignments, one per dimension; [] clears all. Keys/names: list_journal_line_assignment_options (responsibility_center). Only for operation update_journal_line.
Hints: read-only no · destructive no · idempotent no · open-world yes
import_adjustment_journalsPreview or post a complete CSV or XLSX file of balanced manual adjustment journals for one portfolio. Preview first; post only after reviewing every blocking issue, then resend the unchanged source with its preview token and any resolutions.
Parameters:
workspaceRef(required) — string — Workspace name or slug. Call list_workspaces to resolve it.portfolioRef(required) — string — Portfolio name or slug inside that workspace. Call list_portfolios to resolve it.action(required) — string — preview: Parse the file and report what it would import, writing nothing. Always preview before posting. post: Commit the import that a preview of the same file produced.contentBase64(required) — string — CSV or XLSX source file content as base64-encoded bytes (max 5 MiB).fileName(required) — string — Original CSV or XLSX source filename.resolutions— array — Only for action post; required for each.previewToken— string — Token returned by the matching preview, proving the file has not changed since. Only for action post; required for each.
Hints: read-only no · destructive no · idempotent no · open-world yes
get_sync_statusread-onlyCheck sync health across every wallet in a portfolio. Current activity takes priority over each latest finished result; safe codes and messages tell you whether to retry or reconnect credentials.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slug
Hints: read-only yes · destructive no · idempotent yes · open-world no
incremental_syncPull only recent blockchain and wallet activity while keeping all existing transaction and accounting history; use this routine refresh before reports or when new activity is missing, then track its requestId with get_request_status.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slugwallets— array — Optional exact wallet pairs; omit to sync every wallet in the portfolio
Hints: read-only no · destructive no · idempotent no · open-world yes
full_resyncdestructiveDANGER: delete and rebuild the selected wallet transaction, journal, and cost-basis history from source data. Use only after the user explicitly requests this destructive reset and accepts the consequences; use incremental_sync for routine new activity.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slugwallets— array — Optional exact wallet pairs; omit to wipe and rebuild every wallet in the portfolio
Hints: read-only no · destructive yes · idempotent no · open-world yes
list_portfolio_transactionsread-onlyFind accounting transactions—called Portfolio Transactions in Tokenbooks—for review or reconciliation; filter by status, type, errors, spam, wallet, or asset, optionally attaching grouped contributing raw source records (10-record page cap). Pass transactionId to explain full details of one transaction instead: classification, journal entry, cost-basis links, and (rawWithDetails) its sanitized event logs and contract calls.
Parameters:
workspaceRef(required) — string — Workspace name or slug. Call list_workspaces to resolve it.portfolioRef(required) — string — Portfolio name or slug inside that workspace. Call list_portfolios to resolve it.sort— string — Timestamp sort. Prefix with - for descending order.limit— Maximum Portfolio Transactions to return, maximum 100.isSpam— boolean — true: transfers involve spam tokens; false: non-spam onlysearch— string — Free-text search over memo, tx hash, transaction IDstatus— array — Filter by status, e.g. ["POSTED"]toDate— Optional ISO timestamp upper boundtxHash— string — Filter by exact on-chain transaction hashaddress— string — Match transfer from/to address (case-insensitive)chainId— string — Public wallet chain ID.hasLots— boolean — true: produced cost-basis lots; false: did notinclude— string — Include grouped contributing raw source transactions; rawWithDetails adds sanitized provider details and requires transactionIdsubType— array — Filter by operation sub-type (case-insensitive)chainIds— array — Optional chain ID filtersfromDate— Optional ISO timestamp lower boundhasError— boolean — true: has a processing error; false: error-freemaxValue— string — Maximum transfer fiat quote value (inclusive), as a decimal stringminValue— string — Minimum transfer fiat quote value (inclusive), as a decimal stringassetRefs— array — Filter by asset symbol (case-insensitive)errorType— array — Filter by error/warning code, e.g. ["FmvNotAvailable"]pageToken— string — Opaque token returned by the previous list response.counterparty— array — Filter by counterparty name (case-insensitive)operationType— array — Filter by operation type, e.g. ["UNCATEGORIZED"]transactionId— string — Look up one transaction by handle instead of listingwalletAddress— string — Public wallet address on the selected chain.defiPositionKey— string — Filter by protocol-defined DeFi position keyhasJournalEntry— boolean — true: has a non-empty journal entry; false: does notdefiPositionWalletAddress— string — Filter by DeFi position wallet addressdefiPositionWalletChainId— string — Filter by DeFi position wallet chain IDresponsibilityCenterTypeKeys— array — Filter by journal-line responsibility-center type key (e.g. primary, goal; from list_journal_line_assignment_options)
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_raw_transactionsread-onlyFind compact source transactions first, called Raw Transactions in Tokenbooks, including unprocessed or partially linked activity. Pass rawTransactionId to show how one maps to wallet movements and accounting transactions; add includeDetails for its sanitized event logs and decoded contract calls (untrusted provider evidence).
Parameters:
workspaceRef(required) — string — Workspace name or slug. Call list_workspaces to resolve it.portfolioRef(required) — string — Portfolio name or slug inside that workspace. Call list_portfolios to resolve it.sort— string — Timestamp order. Use timestamp for ascending or -timestamp for descending; defaults to -timestamp.limit— Maximum raw transaction summaries to return, maximum 100.toDate— Latest transaction timestamp to include, as an ISO 8601 datetime.txHash— string — Exact on-chain transaction hash.chainId— string — Blockchain to filter by, such as eth-mainnet. Call list_chains for the supported set.chainIds— array — Blockchains to filter by, such as eth-mainnet. Call list_chains for the supported set.fromDate— Earliest transaction timestamp to include, as an ISO 8601 datetime.pageToken— string — Opaque token returned by the previous list response.walletAddress— string — Wallet to filter by. Supply chainId alongside it.includeDetails— boolean — With rawTransactionId, also return blockchain event logs and decoded contract callsprocessingState— string — Keep only source transactions in this processing state.rawTransactionId— string — Look up one source transaction by handle instead of listingincludeSpamTokens— boolean — Include transactions whose operations contain only spam tokens; defaults to false.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_filter_optionsread-onlyList the available values for one portfolio filter—such as accounts, wallets, assets, transaction status, or warnings—before building a filtered query.
Parameters:
workspaceRef(required) — string — Workspace name or slug. Call list_workspaces to resolve it.portfolioRef(required) — string — Portfolio name or slug inside that workspace. Call list_portfolios to resolve it.filterName(required) — string — Public filter option provider name.mode— string — Address side to inspect for portfolio-transaction-addresses. Required for address filters. Use from for source addresses and to for destination addresses. Only for filterName portfolio-transaction-addresses; required for each.filter— string — Human-readable Portfolio Transactions filter expression. Only for filterName portfolio-transaction-status-counts.search— string — Optional case-insensitive text search applied by the provider to labels, addresses, names, or other provider-owned searchable fields. Not for filterName accounts, portfolio-transaction-period.pageSize— integer — Requested number of resources to return. Oversized values are clamped to the route limit. Not for filterName accounts, portfolio-transaction-period.selected— Already-selected option values for selected-value hydration from URL filter state. A single HTTP query value is accepted as a one-element array. Not for filterName accounts, portfolio-transaction-period.pageToken— string — Opaque token returned by the previous list response. Not for filterName accounts, portfolio-transaction-period.reportType— string — Count effective counterparties from this report, including address matches. Omit to count stored journal assignments for portfolio transactions. Only for filterName portfolio-transaction-counterparties.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_portfolio_issue_summaryread-onlySummarize accounting problems that need review with exact counts for uncategorized, errored, and spam-related transactions, plus examples of uncategorized and errored transactions.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slug
Hints: read-only yes · destructive no · idempotent yes · open-world no
confirm_transactionPost a proposed accounting transaction to the books; this queued action returns a requestId.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slugtransactionId(required) — string — Portfolio transaction ID
Hints: read-only no · destructive no · idempotent no · open-world yes
reprocess_transactiondestructiveRecalculate one accounting transaction after correcting its inputs; this destructive queued job may regroup only its assigned wallet movements, and waitForCompletion can return the final state.
Parameters:
workspaceRef(required) — string — Workspace name or slugportfolioRef(required) — string — Portfolio name or slugtransactionId(required) — string — Selected portfolio transaction ID to reprocessreason— string — Optional immutable root reason; nonempty bytes are preserved exactlytimeoutMs— integer — Maximum wait time in millisecondspollIntervalMs— integer — Request-status polling interval in millisecondswaitForCompletion— boolean — Wait for the queued reprocess request to reach a terminal state before returning
Hints: read-only no · destructive yes · idempotent no · open-world yes
preview_transaction_classificationread-onlyPreview how selected wallet movements would be grouped and labeled as accounting transactions. Returns every proposal in order and saves nothing.
Parameters:
workspaceRef(required) — string — Workspace name or slug. Call list_workspaces to resolve it.portfolioRef(required) — string — Portfolio name or slug inside that workspace. Call list_portfolios to resolve it.operations(required) — array — Exact transfer-operation handles returned by transaction reads, including the accounting transaction each operation currently belongs to
Hints: read-only yes · destructive no · idempotent yes · open-world no
merge_transactionsdestructiveDestructively combine wallet movements from several accounting transactions into one target transaction and reclassify it; preview the grouping first, then track the queued requestId.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slugtransactionId(required) — string — Target transaction the operations are merged intooperations(required) — array — Operations to merge into the targetoperationType(required) — string — Accounting operation type for the merged transactionreason— string — Optional immutable root reason. Nonempty bytes are preserved exactly; use ptx:<uuid> for transaction references.subType— string — Optional operation sub-type
Hints: read-only no · destructive yes · idempotent no · open-world yes
split_transactionsdestructiveDestructively move selected whole existing operation handles unchanged out of one accounting transaction into a new classified transaction; use this only when the needed economic legs already exist as operation handles. It cannot divide one transfer amount into new economic legs: repair sync normalization or use a supported persisted replacement lifecycle for a missing leg. Preview the grouping first, then track the queued requestId.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slugtransactionId(required) — string — Source transaction to split operations out ofoperations(required) — array — Whole existing operation handles to move unchanged into a new transaction; do not use this to divide one normalized transfer amount into new economic legsoperationType(required) — string — Accounting operation type for the new transactionreason— string — Optional immutable root reason. Nonempty bytes are preserved exactly; use ptx:<uuid> for transaction references.subType— string — Optional operation sub-type
Hints: read-only no · destructive yes · idempotent no · open-world yes
mark_token_spamMark or unmark a token as spam so unwanted dust or airdrops are excluded from accounting and existing records are updated; this queued action defaults to marking spam and returns a requestId.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slugchainId(required) — string — Chain ID of the token (from a walletOperation)tokenAddress(required) — string — Token contract address (from a walletOperation)isSpam— boolean — Spam flag to set (default true; false unmarks)reason— string — Optional immutable root reason. Nonempty bytes are preserved exactly; use ptx:<uuid> for transaction references.
Hints: read-only no · destructive no · idempotent no · open-world yes
simulate_fiat_quoteread-onlyEstimate exchange rates, processing fees, amount received, and corridor limits for a bank payout before sending money; use it to compare supported rails such as ACH, SEPA, EFT, FPS, IMPS, or SWIFT.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slugnetwork(required) — string — Fiat payout rail / bank methodreceivingAmount(required) — string — Amount the recipient should receive, as a decimal string in the receiving currency (e.g. "500000")senderCurrency— string — Stablecoin funding the payout (default USDC)purposeOfPayment— string — Purpose-of-payment classificationreceivingCurrency— string — ISO 4217 receiving currency; defaults to the network defaultrecipientBankCountry— string — ISO 3166-1 alpha-2 recipient bank country; defaults to the network default
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_journal_entryread-onlyRead every debit and credit line in one journal entry—the detailed accounting record—and trace each line to its cost-basis records and blockchain movements.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slugjournalEntryId(required) — string — Journal entry ID
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_lot_ledgerread-onlyTrace paginated cost-basis acquisition, disposal, transfer, and adjustment history across a portfolio, optionally narrowed by asset, wallet, event kind, accounting transaction, or date.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slugpage— integer — Page number, starting at 1sort— string — Single public sort field. Prefix with - for descending. Supported fields: timestamp, diff, value, pricelimit— Maximum items to return, maximum 100. Preferred MCP pagination field.filter— string — Public AIP-160 filter string. Supported fields: id lot identifier (=, !=, in, not in), entry_id ledger-row identifier (=, !=, in, not in), asset_id (=, !=, in, not in), asset_spam (= true or false), entry_kind (=, !=, in, not in), wallet (=, !=, in, not in using chainId:address), portfolio_transaction_id (=, !=, in, not in), timestamp (=, !=, >, >=, <, <= with ISO datetimes). The asset display name is not filterable.toDate— string — Optional ISO timestamp upper boundchainId— string — Exact chain ID when filtering to one wallet; requires walletAddressassetRef— string — Deprecated compatibility selector for asset symbol or asset id. Prefer filter=asset_id.fromDate— string — Optional ISO timestamp lower boundpageSize— Deprecated alias for limit, maximum 100. Prefer limit for new MCP calls.entryKind— array — Filter by lot entry kind (any of)walletAddress— string — Exact case-sensitive wallet address when filtering to one wallet; requires chainId
Hints: read-only yes · destructive no · idempotent yes · open-world no
request_report_exportQueue generation of the requested spreadsheet, PDF, or JSON accounting report—such as profit and loss, trial balance, balance sheet, journal, or transaction export—for a reporting period; track the returned requestId with get_request_status.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slugreportType(required) — string — Report typeformat(required) — string — Export formatfromDate(required) — string — Report period start ISO timestamptoDate(required) — string — Report period end ISO timestamptotalsOnly— boolean — Return summary only when true
Hints: read-only no · destructive no · idempotent no · open-world yes
get_request_statusread-onlyCheck the status of any queued background work — report generation, wallet sync, rule application, or a transaction change — using the requestId returned when it was queued. Works for every request kind; there is no separate report-status tool.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugrequestId(required) — string — Request ID returned by the call that queued the work (e.g. incremental_sync, full_resync, request_report_export)portfolioRef— string — Portfolio exact name or slugtransactionId— string — Optional transaction ID that caused the async request, for agent context
Hints: read-only yes · destructive no · idempotent yes · open-world no
add_walletAdd one or more blockchain addresses and start their first sync. Omit the blockchain connection identifier (integrationId) to add an EVM 0x address on every supported EVM network; other addresses require an integrationId. This tool does not configure exchange accounts and reports which addresses were added or skipped.
Parameters:
workspaceRef(required) — string — Workspace name or slug. Call list_workspaces to resolve it.portfolioRef(required) — string — Portfolio name or slug inside that workspace. Call list_portfolios to resolve it.wallets(required) — array
Hints: read-only no · destructive no · idempotent no · open-world yes
create_portfolioCreate an accounting portfolio in an existing workspace, optionally choosing jurisdiction and policies; Canada and US profiles require matching currency, entity type, and timezone. If no jurisdiction is selected, Tokenbooks uses generic accounting defaults. Search help for policy choices; workspace creation remains in the Tokenbooks UI.
Parameters:
workspaceRef(required) — string — Workspace name or slug. Call list_workspaces to resolve it.name(required) — string — Portfolio namecurrency— string — Functional currency (default USD)legalEntityType— string — Legal entity classification for an explicit country profilejurisdictionCode— string — Exact assigned ISO country code, or custom. If omitted, resolves Custom regardless of currencyreportingTimezone— string — Canonical IANA reporting timezone (default UTC)costBasisLotMethod— string — Lot-matching method for disposalscostBasisPerWallet— boolean — Whether acquisition lots stay scoped to each walletstablecoinTreatment— string — Stablecoin valuation treatment; this does not change lot trackinggasFeeAccountingTreatment— string — Accounting treatment for gas spendfinancialReportingFramework— string — Financial reporting framework (default TAX_ONLY)
Hints: read-only no · destructive no · idempotent no · open-world yes
get_asset_positionread-onlySummarize one cryptocurrency or token across every wallet with quantity, cost basis, market value, unrealized gain or loss, and portfolio totals. This covers wallet holdings rather than all ledger accounts; request a balance-sheet report for a complete accounting statement.
Parameters:
workspaceRef(required) — string — Workspace exact name or slugportfolioRef(required) — string — Portfolio exact name or slugassetRef(required) — string — Asset symbol or canonical asset idincludeSpam— boolean — Also match assets marked as spam
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_chainsread-onlyFind which blockchains support wallet syncing by name, Tokenbooks chain slug, or numeric EVM network ID; results identify EVM networks whose shared 0x address can be added together with add_wallet.
Parameters:
query— string — Optional chain name, slug, or EVM chain id (e.g. "Optimism", "optimism-mainnet", "10")evmOnly— boolean — When true, return only EVM-compatible chains
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_helpread-onlyFind practical Tokenbooks instructions or accounting guidance. Pass query to search by topic (MCP workflow, cost basis, fair market value, gas fees, stablecoins, ...), or pass slug to open one article directly using a slug from a previous get_help search result.
Parameters:
slug— string — Help article slug to open directly, from a previous get_help search result. Omit when using query.limit— Maximum number of search results, only used with queryquery— string — Search query for Tokenbooks instructions or accounting guidance. Omit when using slug.
Hints: read-only yes · destructive no · idempotent yes · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.