Skip to main content
Glama
steamau

Beeswax Shares MCP Server

by steamau

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BEESWAX_URLNoBase URL of the Beeswax Shares apphttp://localhost:3000
BEESWAX_API_TOKENYesAPI token, sent as Authorization: Bearer <token>

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
whoamiA

Identify the authenticated Beeswax Shares user, the API token's scopes, and the SMSF funds the token can access (with their fund IDs). Call this FIRST in a session to discover fund IDs — almost every other tool needs a fund_id.

list_fundsA

List your SMSF funds with headline figures: total value, cost base, unrealised gain/loss, total income, true return percentages, active holdings count and current financial year. Use when you need fund-level numbers; use whoami if you only need fund IDs.

get_portfolioA

Full portfolio snapshot for one SMSF fund: fund summary (value, cost base, unrealised gain/loss, income, true return), asset allocation percentages, and every active holding with current value and returns. The best single call to answer 'how is the fund doing?' or 'what do we hold?'. All amounts AUD.

list_holdingsA

List holdings in a fund, with filters. Use to find a holding's ID by ticker or name (e.g. before record_cost or update_price), or to review holdings by status. Returns valuation and gain/loss per holding.

get_holding_analysisA

Deep analysis of a single holding: true return (income + growth − costs), annualised return, income totals (dividends, distributions, interest, rent, franking credits), costs to date, CGT discount eligibility, estimated CGT and net proceeds if sold today. Use when asked how a specific investment has really performed, or about the tax impact of selling. All amounts AUD.

search_transactionsA

Search the fund's transaction ledger across all holdings — this is the 'memory recall' tool for your SMSF record-keeping. Use to answer 'did we already record this dividend?', 'what did we buy in FY 2025-26?', or to check for duplicates before proposing a new record. Filter by type, financial year, date range and ticker. Results are newest-first and paginated.

create_holdingA

Create a brand-new holding (security/asset) in the fund — use ONLY when a security was purchased that the fund has never held before (check list_holdings first). For buys of an existing holding, use record_trade instead. Note: unlike the record_* tools, this writes the holding directly; the buy transaction itself should still go through record_trade for human review.

record_tradeA

Record a buy or sell directly to your SMSF ledger. This writes immediately — there is no review step. Use whenever a trade is found in an email, contract note or conversation. Identify the holding by ticker or holding_id; the holding must already exist (use create_holding first if it doesn't). Always pass external_ref when the source has a stable ID (e.g. email message id + ticker + date) — it is an idempotency key, so re-running the same import will not create duplicates. Pass reasoning to record why (it is saved on the ledger entry for the audit trail). Amounts in AUD unless currency says otherwise.

record_incomeA

Record an income event — dividend, distribution, interest or rental income — directly to your SMSF ledger. This writes immediately; there is no review step. Use when a dividend statement, distribution advice or rent receipt is found. Identify the holding by ticker or holding_id (it must already exist). Include franking_credits for franked dividends (important for SMSF tax). Always pass external_ref when the source has a stable ID so repeat imports are idempotent. Pass reasoning to record why (saved for the audit trail). All amounts AUD unless currency says otherwise.

upload_documentA

Upload a local PDF or CSV (broker statement, contract note, dividend statement, annual tax statement) into the fund's document store. Reads the file from disk, base64-encodes it and posts it; the server then automatically extracts statement lines and reconciles them against the ledger — unmatched lines become pending proposals in the Review Queue. Use get_document afterwards to check extraction and match results.

get_documentA

Fetch one uploaded document including its extracted statement lines, each with a match_status (matched / discrepancy / proposed / unmatched) against the ledger. Use after upload_document to check whether extraction finished (status field) and what the reconciliation found. Extraction runs in the background, so poll this if status is still 'processing'.

list_documentsA

List the fund's uploaded documents (statements, contract notes etc.), newest first, with extraction status and reconciliation summaries. Use to check whether a statement was already uploaded before uploading it again, or to find a document ID.

reconcile_documentA

Re-run reconciliation of a document's extracted statement lines against the fund's ledger. Returns the document with refreshed line match statuses plus a summary including matched, discrepancies, proposed, and missing_from_statement. Use after the ledger changed (e.g. proposals were approved) or when you want to re-check a statement.

record_costA

Record a holding-level cost/expense for the SMSF — e.g. property rates, insurance, management fees, registry fees. Writes directly to the holding's cost ledger (costs are low-risk records, unlike trades/income which go through proposals). Mark tax_deductible appropriately — it feeds the fund's true-return and tax calculations. Amounts in AUD.

update_priceA

Record a price observation for a holding (e.g. from a market quote, property valuation or fund unit price). Upserts by date and, if it is the newest observation, also updates the holding's current price so portfolio values refresh. Use when you have an updated valuation or a reliable quoted price. Price in AUD per unit.

list_brokersA

List the brokers known to Beeswax Shares (with broker IDs and CHESS sponsorship info). Use to find a broker_id before create_holding, or to interpret broker references in statements.

list_asset_typesA

List the asset types supported by Beeswax Shares (name, category, and whether the type carries tickers, dividends or franking credits). Use to pick a valid asset_type for create_holding or to understand the fund's asset allocation categories.

list_bank_accountsA

List the SMSF's bank accounts with current balance, opening balance, role and feed status. Use to find a bank_account_id before list_cash_transactions or record_cash_transaction, or to see cash on hand. All amounts AUD.

create_bank_accountA

Create a new cash/bank account under a fund — e.g. a nabtrade cash hub, term deposit or operating account — so its cash ledger can be tracked and reconciled. Use when a statement or CSV belongs to an account the fund doesn't have yet (check list_bank_accounts first to avoid duplicates). Returns the new account with its id; follow up with record_cash_transaction to load its movements. Currency is AUD (v1 is AUD-only). Opening balance defaults to 0.

list_cash_transactionsA

List the cash-ledger movements on a bank account — deposits, withdrawals, contributions, fees, interest, settlements — newest-first and paginated. Filter by category, match status, financial year or date range. Use to review cash flow, check whether a movement was already recorded, or find uncategorised/unmatched items. Amounts are signed (+ in / − out), AUD.

record_cash_transactionA

Record a cash movement directly on a bank account — a contribution, fee, interest, pension/benefit payment, transfer or tax payment — for accounts with no live bank feed, or one-off entries. Writes directly to the cash ledger (low-risk record-keeping, like record_cost; feed-sourced rows arrive automatically instead). Amount is SIGNED: positive = money in (credit), negative = money out (debit), AUD. Contributions and benefit payments require fund_member_id. Pass external_ref as an idempotency key so re-running an import won't duplicate.

update_cash_transactionA

Edit an existing cash-ledger row — most importantly to (re)assign its category (e.g. move a settlement credit from "uncategorised" to "settlement_sell"), but also its description, reference, posted date or amount. Find the row via list_cash_transactions. This is a plain field edit — it does NOT change settlement linkage or match status (use attribute_cash_transaction / detach_cash_transaction for income linkage). Blocked if the row's financial year is locked (reopen the year first).

attribute_cash_transactionA

Link an income credit already sitting on a bank account — e.g. a dividend or distribution that landed via the bank feed — to the holding that earned it. Recognises the income on a NEW security transaction (the single source of truth Holding, Fund and the tax summaries read income & franking from) and marks this cash row as its matched settlement leg, so income is counted exactly once. Unlike record_income this is a DIRECT write, NOT a Review-Queue proposal: the cash has already arrived, you are only saying which holding it belongs to. The row must be a credit (money in) that isn't already linked to a transaction — find candidates with list_cash_transactions (match_status "unmatched", category income_* or uncategorised). Identify the holding by ticker (preferred) or holding_id, and include franking_credits for franked dividends. Undo from the app (Detach) if you pick the wrong holding.

detach_cash_transactionA

Undo an attribution made with attribute_cash_transaction: discard the security transaction it recognised and return the bank credit to the unmatched pool, so it can be re-attributed to the right holding. Use this when income was attributed to the wrong holding or with the wrong details — detach, then attribute_cash_transaction again. Only works on rows YOU attributed (match_status "matched" with a settles_transaction_id); it will not touch auto-matched feed rows, whose transaction pre-existed, and returns an error if the row was never attributed.

get_smsf_returnA

Fetch a fund's SMSF annual return for a financial year: every section and field with its ATO label, computed value, and whether it's calculated/readonly/confirmed, plus per-member statements and the live gap register (what's blocking a complete return). Pass smsf_return_id from list output, or create one first with create_smsf_return. The figures auto-fill from the ledger; edit with update_smsf_return_field.

create_smsf_returnA

Open (or resume) the SMSF annual return for a fund + financial year. Idempotent — returns the existing return if one already exists for that year. Returns the full return with auto-filled figures and gaps.

update_smsf_return_fieldA

Override a single field on the return (e.g. an income or deduction amount). Goes through the same safe write path as the web app: calculated/readonly fields are rejected, totals recompute automatically, and a blank value reverts the field to its ledger-derived figure. Returns the recomputed return.

list_smsf_return_gapsA

List the data/functionality gaps blocking a complete, correct SMSF return (missing franking credits, EOFY valuations, member statements, depreciation, uncategorised expenses, etc.). Each gap is tagged blocking or advisory. Use to see what to fix before confirming sections or finalising.

list_financial_yearsA

List a fund's financial years with their status (open / closed / lodged) and close/lodge dates. Use to find the year label to reconcile, close or lodge.

reconcile_cash_transactionA

Tick a single cash row off against the bank statement (the line-level 'reconciled' flag, recording that it has been checked against the official statement). Writes immediately. Rejected if the row's financial year is already closed/lodged — reconcile before closing the year.

unreconcile_cash_transactionA

Remove the statement-reconciliation tick from a cash row, returning it to 'not yet checked against the statement'. The inverse of reconcile_cash_transaction.

record_statement_balanceA

Record (or correct) a bank statement's closing balance as at a date — the snapshot the year-end balance reconciliation proves the ledger against. One snapshot per date (re-recording the same date updates it). Use the statement's closing balance and its closing date. Amounts in AUD.

run_account_reconciliationA

Run the cash matcher over a bank account's unmatched feed rows — link settlement legs to trades/income, pair internal transfers, and categorise cash-only events (interest, fees). Returns the match summary. Use after recording trades/income to auto-link the matching bank rows.

reconcile_financial_yearB

Run reconciliation for a whole financial year: match cash, then compute a balance proof per bank account (opening + movements vs the statement closing balance). Returns the balance proofs and the run summary. Record statement balances first so accounts can reconcile rather than fall out of scope.

close_financial_yearA

Close a financial year — locks all dated rows in that year against further edits. Only works once the year is reconciled (every bank account has a reconciled or out-of-scope balance proof); otherwise returns an error explaining what's unresolved. Run reconcile_financial_year first.

lodge_financial_yearA

Mark a closed financial year as lodged with the ATO. Only works on a closed year. Use after the SMSF annual return has been submitted.

reopen_financial_yearA

Reopen a closed financial year (back to open), unlocking its rows for edits. Only works on a closed year — to revert a lodged year use unlodge_financial_year first.

unlodge_financial_yearA

Revert a lodged financial year back to closed (e.g. for an ATO amendment). Keeps an audit note. Only works on a lodged year.

attest_accountA

Manually sign off a bank account for a financial year as out of scope (no feed/statement proof) so the year can still close. Use for accounts with no statement to reconcile against.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/steamau/beeswax-desktop'

If you have feedback or need assistance with the MCP directory API, please join our Discord server