# AccountsOS (remote · accounts-os.com)

Query your live AccountsOS books: balances, transactions, VAT, deadlines, invoices.

- Trust score: 68/100 (medium)
- Change this week: −10
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

> **Recent critical change**: Authorization (2026-11-02). See the changelog below before you install this server.

## Components

- remote · `accounts-os.com`: 68/100 (this document), [markdown](https://verifymcp.io/servers/paulgosnell-accountsos-mcp/api-mcp-plugin.md), [page](https://verifymcp.io/servers/paulgosnell-accountsos-mcp/api-mcp-plugin)
- npm · `@thriveventurelabs/accountsos-mcp`: 38/100, [markdown](https://verifymcp.io/servers/paulgosnell-accountsos-mcp/thriveventurelabs-accountsos-mcp.md), [page](https://verifymcp.io/servers/paulgosnell-accountsos-mcp/thriveventurelabs-accountsos-mcp)

## Channel facts

- Endpoint: `https://accounts-os.com/api/mcp/plugin`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.3.2`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (update_company).
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 81/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 13863 tokens (~159/item across 87 items; 82 tools + 5 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 26/100
  - Stability check failed: schema churn in the 8 days we've observed: 0 tool removals, 0 breaking changes, 1 auth/transport breaks, 0 additions.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "deel_calculate_take_home_pay" implies "pay" and declares readOnlyHint instead, contradicting what its own name says it does.
  - An AI judge read all 84 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 60/100
  - Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28.

## Install

### How do I install the AccountsOS MCP server?

AccountsOS is a hosted endpoint at https://accounts-os.com/api/mcp/plugin, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http paulgosnell-accountsos-mcp 'https://accounts-os.com/api/mcp/plugin'
```

### Cursor

```json
{
  "mcpServers": {
    "paulgosnell-accountsos-mcp": {
      "url": "https://accounts-os.com/api/mcp/plugin"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "paulgosnell-accountsos-mcp": {
      "type": "http",
      "url": "https://accounts-os.com/api/mcp/plugin"
    }
  }
}
```

### Codex

```toml
[mcp_servers.paulgosnell-accountsos-mcp]
url = "https://accounts-os.com/api/mcp/plugin"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "paulgosnell-accountsos-mcp": {
      "type": "remote",
      "url": "https://accounts-os.com/api/mcp/plugin",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add paulgosnell-accountsos-mcp --url 'https://accounts-os.com/api/mcp/plugin' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  paulgosnell-accountsos-mcp:
    url: "https://accounts-os.com/api/mcp/plugin"
```

### Netclaw

```json
{
  "McpServers": {
    "paulgosnell-accountsos-mcp": {
      "Transport": "http",
      "Url": "https://accounts-os.com/api/mcp/plugin"
    }
  }
}
```

### Vellum

```bash
assistant mcp add paulgosnell-accountsos-mcp -t streamable-http -u 'https://accounts-os.com/api/mcp/plugin'
```

### Other

```json
{
  "mcpServers": {
    "paulgosnell-accountsos-mcp": {
      "type": "http",
      "url": "https://accounts-os.com/api/mcp/plugin"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 19 to 23.

### 2026-11-02 (score 67, −12)

- [critical regression] Authorization: pass → fail
- [security regression] Stability: 0.13 → fail
- [security] The server rewrote its instructions, which are the text every model session reads
- [cosmetic] “list_tax_rules” added an optional parameter “country”
- [cosmetic] “lookup_tax_rule” added an optional parameter “country”

### 2026-11-01 (score 79, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-30 (score 78, 0)

- [functional] New resource “ACCOUNTS.md”
- [cosmetic] “get_bills” reworded the description of “status”
- [cosmetic] “get_invoices” reworded the description of “status”

### 2026-10-29 (score 78, +1)

- [functional improvement] Stability: unverified → 0.03

### 2026-10-28 (score 77)

First indexed and scored.

## MCP tools (82)

### `list_companies` (~56 tokens)

List Companies

List the companies this AccountsOS account can see (for an accountancy practice, its clients), with the default one marked. Call this first when the user has more than one company, then pass `company` to the other tools.

### `update_company` (~727 tokens)

Set Up Company

Save the user's answers about their own business to their AccountsOS company: what kind of business it is (entity_type, for example sole_trader or ltd), the country it is registered in (ISO code such as GB, IE, US), the company or registration number, the name, what it does, the currency, the year-end month and VAT registration. Use it during setup, and when the user corrects one of these details. For a UK or Irish limited company with a registration number, call lookup_company and then link_company instead, which fills everything from the official register. Only pass what the user told you; never guess.

Input parameters:

- `business_summary` (string): What the business does, in one plain sentence in the user's own words, e.g. "Mobile dog groomer" or "Two-person web design agency". Save it whenever the user says what they do: it tells categorisatio…
- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `company_number` (string): Company/registration number (e.g. UK Companies House number, IE CRO number, DK CVR number). Setting this lets us sync filing deadlines from the registry.
- `country` (string): ISO 3166-1 alpha-2 country code where the business is registered (for example GB, IE, US, AU, AE). Sets which tax rules apply. Refused once the company has bookkeeping entries.
- `default_currency` (string): ISO 4217 default currency code, e.g. GBP, EUR, USD, AED, DKK. Uppercased automatically.
- `entity_type` (string): Business structure (e.g. "ltd" for a UK limited company, "sole_trader", "llp", "fzco" for a UAE free-zone company). Use the value appropriate to the company's country. Drives which tax rules apply.
- `financial_year_end_month` (number): Month (1-12) the financial year ends. Only set when the user tells you their year-end; do not guess.
- `incorporation_date` (string): Date the company was incorporated, YYYY-MM-DD. Pass it whenever the user tells you, and ALWAYS for a UK limited company with no company number yet (just incorporated, or not on Companies House yet):…
- `name` (string): Registered/legal company name (the business being kept books for).
- `trading_name` (string): Trading name / "doing business as", if different from the registered name.
- `vat_number` (string): VAT/GST registration number. Providing a number also marks the company VAT registered unless vat_registered is explicitly false.
- `vat_registered` (boolean): Whether the business is VAT/GST registered. Set true when the user confirms they are registered, false when they confirm they are not. Also false for a business whose sales are all VAT-exempt and tha…

### `link_company` (~144 tokens)

Link Company From Register

Save a UK (Companies House) or Irish (CRO) company from its official register onto the user's AccountsOS company: registered name, number, status, address, directors, year-end and filing deadlines. Call it only after lookup_company found the company and the user confirmed it is theirs. Returns the year-end and the deadlines it set up: tell the user what they are.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `company_number` (string, required): The confirmed Companies House number to link and save.

### `add_document` (~178 tokens)

Add Document

Add a file the user attached in this chat to their AccountsOS books: a bank statement, a receipt, a supplier bill or a sales invoice. AccountsOS reads it the same way as an emailed document: a bank statement is imported into a bank account (created if it does not exist yet), a receipt or bill is read and matched. Use it whenever the user attaches or mentions a financial document and wants it in their books. The result says what was found and what happened.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `file` (object, required): The file the user attached: a bank statement (PDF, CSV or spreadsheet), a receipt, a bill or an invoice.

### `get_transactions` (~310 tokens)

Get Transactions

Get transactions for the company with optional filters. Returns currency, amount_gbp and exchange_rate. A row with expected_income: true is an uploaded sales invoice still waiting to be paid, NOT money received: leave it out of any cash, income received or bank balance figure. For currency-split income totals prefer get_income_by_currency.

Input parameters:

- `category` (string): Filter by category
- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `direction` (string): in = income; out = expense
- `from_date` (string): Start date (YYYY-MM-DD)
- `limit` (number): Max results (default 50, max 100)
- `max_amount` (number): Maximum amount
- `max_confidence` (number): Only lines whose categorisation confidence is below this percentage (0 to 100). Lines with no confidence score are included.
- `min_amount` (number): Minimum amount
- `needs_review` (boolean): Only the lines Finn could not place with confidence: the same set as the 'transactions need a look' count.
- `offset` (number): Skip this many rows (default 0) for pagination
- `search` (string): Search in description
- `to_date` (string): End date (YYYY-MM-DD)
- `uncategorised` (boolean): Only lines with no category.

### `get_balance` (~67 tokens)

Get Balance

Get current account balance

Input parameters:

- `account_id` (string): Specific account (optional)
- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `get_deadlines` (~111 tokens)

Get Deadlines

Get upcoming tax and filing deadlines. Each carries support (files, prepares, workpaper, reminder_only, or null for a payment) and support_note: what AccountsOS does for it. reminder_only means AccountsOS does not produce the form.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `include_completed` (boolean): Include completed deadlines

### `get_vat_summary` (~127 tokens)

Get Vat Summary

Get VAT summary for a calendar quarter, or for any VAT period with start_date and end_date

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `end_date` (string): Last day of the VAT period, YYYY-MM-DD
- `quarter` (string): Calendar quarter (e.g., "Q1 2025")
- `start_date` (string): First day of the VAT period, YYYY-MM-DD

### `search_documents` (~146 tokens)

Search Documents

Search uploaded documents (receipts, invoices). Can also list documents by status without a query — status ["pending", "error"] is the Incoming queue. Called with no arguments it lists the newest uploads (up to 25).

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `query` (string): Search query (optional when filtering by status or type)
- `status` (array): Filter by status: pending, error, processed, matched
- `type` (string): Document type (receipt, invoice, statement)

### `read_wiki` (~144 tokens)

Read Wiki

Read a page from Finn's knowledge base — compiled UK (and US) tax and accounting guidance: rules, cross-references, edge cases, plain-English advice for company directors. Call with page="index" first to list all available pages.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `page` (string, required): Wiki page name (e.g. "index", "corporation-tax", "vat", "ir35", "us-sales-tax-nexus"). Use "index" to see all pages.

### `search_wiki` (~102 tokens)

Search Wiki

Search Finn's knowledge base by keyword. Returns matching page names and excerpts. Use when unsure which page covers a topic.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `query` (string, required): Search keyword (e.g. "marginal relief", "employment allowance", "flat rate scheme")

### `read_company_wiki` (~117 tokens)

Read Company Wiki

Read a page from this company's private memory wiki — Finn's long-term per-company notes (preferences, decisions, people, recurring Q&A). Call with slug="index" first to list available pages.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `slug` (string): Page slug (e.g. "index", or a specific topic). Defaults to "index".

### `search_company_wiki` (~80 tokens)

Search Company Wiki

Search this company's private memory wiki by keyword. Returns matching page slugs, titles and excerpts.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `query` (string, required): Search keyword

### `get_tax_facts` (~170 tokens)

Get Tax Facts

Look up current UK tax rates, thresholds and allowances (income_tax, national_insurance, corporation_tax, dividends, capital_allowances, vat, pensions, mileage, self_assessment, home_office, mtd). Returns the figure plus its source.

Input parameters:

- `category` (string, required): Tax category (e.g. "income_tax", "dividends", "mileage")
- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `item` (string): Specific item within the category (optional — omit for all items)
- `tax_year` (string): Tax year (e.g. "2025-26"). Defaults to current.

### `search_tax_facts` (~110 tokens)

Search Tax Facts

Search UK tax knowledge by keyword when unsure which category/item to look up. Returns matching tax facts across all categories.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `query` (string, required): Search query (e.g. "employment allowance", "dividend tax")
- `tax_year` (string): Tax year. Defaults to current.

### `list_categories` (~78 tokens)

List Categories

List available transaction categories for categorization

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `type` (string): Filter by type: income, expense, asset, liability, equity

### `get_dla_balance` (~100 tokens)

Get Dla Balance

Get the Director's Loan Account (DLA) balance and recent transactions. Shows if director owes company or vice versa, with section 455 tax warnings.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `limit` (number): Max number of transactions to return (default 10)

### `get_invoices` (~141 tokens)

Get Invoices

Get invoices the user has raised, with summary stats on outstanding and overdue amounts. Use when user asks about invoices, outstanding payments, or money owed to them.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `contact_id` (string): Filter by client/contact ID
- `search` (string): Search by invoice number
- `status` (string): Filter by status: outstanding (every unpaid invoice), overdue (unpaid and past due), draft, sent, paid, cancelled, all

### `get_contacts` (~130 tokens)

Get Contacts

List contacts (clients, suppliers, leads). Use when user asks about customers, suppliers, or contacts.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `limit` (number): Max results (default 50)
- `search` (string): Search by name or email
- `sort` (string): Order: name (default) or newest first
- `type` (string): Filter by type: client, supplier, lead, other

### `get_bills` (~124 tokens)

Get Bills

Get supplier bills/invoices owed by the company. Shows what you owe to suppliers.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `contact_id` (string): Filter by supplier contact ID
- `limit` (number): Max results (default 50)
- `status` (string): Filter: outstanding (every unpaid bill), overdue (unpaid and past due), draft, received, paid, all

### `get_estimates` (~103 tokens)

Get Estimates

Get estimates/quotes sent to clients.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `contact_id` (string): Filter by client contact ID
- `limit` (number): Max results (default 50)
- `status` (string): Filter: draft, sent, accepted, declined, all

### `get_profit_and_loss` (~93 tokens)

Get Profit And Loss

Get Profit and Loss (income statement) report for a period.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `from_date` (string): Start date (YYYY-MM-DD)
- `to_date` (string): End date (YYYY-MM-DD)

### `get_balance_sheet` (~79 tokens)

Get Balance Sheet

Get Balance Sheet report as at a given date.

Input parameters:

- `as_at` (string): Report date (YYYY-MM-DD). Default: today
- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `get_trial_balance` (~87 tokens)

Get Trial Balance

Get Trial Balance showing all account balances.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `from_date` (string): Start date (YYYY-MM-DD)
- `to_date` (string): End date (YYYY-MM-DD)

### `get_tasks` (~100 tokens)

Get Tasks

Get tasks and to-dos for the company.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `completed` (boolean): Filter by completion status
- `limit` (number): Max results (default 20)
- `priority` (string): Filter: low, medium, high, urgent

### `get_expense_claims` (~92 tokens)

Get Expense Claims

Get expense claims and reimbursement requests.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `limit` (number): Max results (default 20)
- `status` (string): Filter: draft, submitted, approved, reimbursed, rejected

### `get_bank_accounts` (~59 tokens)

Get Bank Accounts

List bank accounts connected to the company.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `get_journal_entries` (~104 tokens)

Get Journal Entries

Get General Ledger journal entries. Double-entry accounting records.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `from_date` (string): Start date (YYYY-MM-DD)
- `limit` (number): Max results (default 50)
- `to_date` (string): End date (YYYY-MM-DD)

### `list_opportunities` (~159 tokens)

List Opportunities

List sales pipeline opportunities/deals. Shows prospects, their stage, value, and next actions.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `limit` (number): Max results (default 50)
- `stage` (string): Filter by pipeline stage name
- `status` (string): Which deals to return, judged by the pipeline stage: "active" = still in play (default), "won" = in a closed-won stage, "lost" = in a closed-lost stage, "all" = every deal. This is NOT the project de…

### `get_opportunity` (~79 tokens)

Get Opportunity

Get detailed information about a specific pipeline opportunity/deal, including notes and activity history.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `opportunity_id` (string, required): Opportunity/project ID

### `get_income_by_currency` (~266 tokens)

Get Income By Currency

Currency-split income (or expense) totals in ONE compact call: face totals grouped by each transaction currency (e.g. EUR face vs GBP face) PLUS the company functional-currency total for the same set. Use when the user asks "total income in EUR and in GBP", "how much came in in euros vs pounds", "income by currency", or wants face vs converted figures before an FX check. Do NOT page get_transactions to sum — this returns aggregates only (no transaction dump). Defaults to money-in (income); pass direction "out" for spend. Covers bank lines only: invoices and ledger revenue are NOT included, and a company with no bank account returns nothing here, which is not "no income". For income as the books record it, use get_profit_and_loss.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `direction` (string): in = income / money in (default); out = spend / money out
- `from_date` (string): Start date (YYYY-MM-DD), inclusive
- `to_date` (string): End date (YYYY-MM-DD), inclusive

### `get_financial_snapshot` (~181 tokens)

Get Financial Snapshot

Get the headline money figures in one call: cash, what the company is owed (open invoices), what it owes (open bills), and net profit this month, the EXACT numbers on the user's Home dashboard. Use for "how am I doing", "how much am I owed", "what do I owe", "what's my position", a quick business health check, or any quick headline-figure question. For how a past month went, use get_profit_and_loss for that month. For invoice/bill line-level detail use get_invoices/get_bills; for ageing use get_aged_debtors/get_aged_creditors.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `get_integration_status` (~304 tokens)

Get Integration Status

See every integration for this company and user in one call: what's connected (banks, HMRC MTD, Stripe, Deel, Gmail, WhatsApp, Telegram, Slack, Xero and the rest), what's available but not connected, and whether data is actually FLOWING through each connected feed (flowing / quiet / error, last event, 7-day event count, error message). Use when the user asks about connections or channels, when something they need for the task at hand is not connected, or when their data looks stale or missing — a dead feed is often the real cause. To OFFER to set one up, end your message with [[connect: provider_id]] on its own line (use the provider id from this tool's result, e.g. [[connect: slack]] or [[connect: mercury]]): it renders a card. OAuth providers start sign-in; API-key providers (Mercury, Stripe, Wise, Qonto, Airwallex, Starling) collect the key on a masked in-thread field. Offer at most one connection per message. Never ask the user to paste an API key into the chat box — the card collects it, and the key is never returned to you (you only see connected true/false).

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `get_gst_hst_return` (~210 tokens)

Get Gst Hst Return

Canada: prepare the GST/HST return (GST34) for a period: 'GST return', 'HST return', 'GST report', 'what do I owe CRA', 'my Q3 GST'. Returns every line (101 to 113C), the balance owing or refund, the due date and any warnings. Defaults to the last completed reporting period. Always use this tool for a Canadian GST/HST figure; never add up a return yourself. AccountsOS prepares the return, it does not file it with CRA.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `end` (string): Last day of the reporting period, YYYY-MM-DD. Omit for the last completed period.
- `start` (string): First day of the reporting period, YYYY-MM-DD. Omit for the last completed period.

### `get_gifi_status` (~159 tokens)

Get Gifi Status

Canada: is my GIFI ready for the T2, which accounts are not mapped or need review, and do the balance checks pass. 'is my GIFI ready', 'GIFI mapping', 'T2 schedule 100 / 125'. Maps any new accounts first. AccountsOS prepares the GIFI trial balance for the accountant's T2 software, it does not prepare or file the T2.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `year_end` (string): The fiscal year end, YYYY-MM-DD. Omit for the last completed fiscal year.

### `get_vat_periods` (~193 tokens)

Get Vat Periods

List the company's VAT return periods and their status (open, locked, submitted, failed, overdue), with the net VAT due, due date, and HMRC receipt for any submitted ones. Use this FIRST when the user asks about VAT returns, "which quarters are outstanding", "have I filed Q1", or before calculating/locking/submitting — it gives you the period_id you need for the other VAT tools.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `limit` (number): Max periods to return (default 12).
- `status` (string): Optional filter: open, ready, locked, submitted, overdue, failed.
- `year` (string): Optional 4-digit year filter (e.g. "2026").

### `get_hmrc_vat_obligations` (~209 tokens)

Get Hmrc Vat Obligations

Read the company's VAT obligations (the returns HMRC expects, with their period keys, start/end dates, due dates, and whether they are Open or Fulfilled) directly from HMRC MTD. Use when the user asks "what does HMRC say I owe a return for", "when is my next VAT return due according to HMRC", or to reconcile our periods against HMRC's record. Requires HMRC MTD connected.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `from` (string): Start date (YYYY-MM-DD). Defaults to 12 months ago. A range longer than about a year is capped to the year ending at the end date, so ask in yearly chunks for anything older.
- `to` (string): End date (YYYY-MM-DD). Defaults to today.

### `get_hmrc_vat_liabilities` (~177 tokens)

Get Hmrc Vat Liabilities

Read the company's VAT liabilities (amounts HMRC says are owed and when they are due) directly from HMRC MTD. Use when the user asks "how much VAT do I owe HMRC", "what's outstanding on my VAT account". Requires HMRC MTD connected.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `from` (string): Start date (YYYY-MM-DD). Defaults to 12 months ago. A range longer than about a year is capped to the year ending at the end date, so ask in yearly chunks for anything older.
- `to` (string): End date (YYYY-MM-DD). Defaults to today.

### `get_hmrc_vat_payments` (~167 tokens)

Get Hmrc Vat Payments

Read the VAT payments HMRC has received on the company's account directly from HMRC MTD. Use when the user asks "has HMRC received my VAT payment", "what VAT have I paid". Requires HMRC MTD connected.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `from` (string): Start date (YYYY-MM-DD). Defaults to 12 months ago. A range longer than about a year is capped to the year ending at the end date, so ask in yearly chunks for anything older.
- `to` (string): End date (YYYY-MM-DD). Defaults to today.

### `check_vat_number` (~224 tokens)

Check Vat Number

Check a UK VAT registration number against HMRC's live Check-a-UK-VAT-number register and return the registered trader name and address. GB only. A "not registered" answer is a real answer from HMRC, not an error. Use this when the user asks whether a VAT number is valid, when adding or editing a supplier or customer with a VAT number, and when a VAT number appears on a document and the user wants it confirmed. Report the registered name back to the user, and point out when it does NOT match the contact's name: a mismatch is the actual thing worth flagging.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `contact_id` (string): Optional. The contact this VAT number belongs to, so the result can be reported against them.
- `vat_number` (string, required): UK VAT registration number, 9 digits, with or without the GB prefix.

### `get_incoming_messages` (~221 tokens)

Get Incoming Messages

Read the company's Incoming inbox: messages that arrived by email, WhatsApp, Slack or Telegram (sender, subject, preview, attachments and their processing status), plus a count of documents still processing or failed. Use whenever the user asks what is waiting in Incoming, whether anything came in, about an email or message someone sent, or before saying Incoming is clear. Documents alone are not the whole inbox: a waiting email with a statement attached is a message.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `include_processed` (boolean): Also include messages already marked processed (default false: waiting only)
- `limit` (number): Max messages (default 20, max 50)
- `source` (string): Filter by channel: email, whatsapp, slack, telegram, gmail. Omit for all.
- `unread_only` (boolean): Only messages not yet opened (default false)

### `get_gov_guidance` (~143 tokens)

Get Gov Guidance

Search official GOV.UK tax and business guidance. Use when the user asks "what does HMRC say about X?", asks about tax rules, filing requirements, or wants to know the official guidance on a topic like VAT, corporation tax, dividends, or director responsibilities.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `topic` (string, required): The topic to search for, e.g. "VAT returns", "corporation tax", "dividends", "director loans", "expenses"

### `get_aged_debtors` (~216 tokens)

Get Aged Debtors

Aged debtors report: outstanding invoices grouped by contact, bucketed by days past due (current/not-yet-due, 1-30, 31-60, 61-90, 90+). Use when the user asks "who owes me money", "what's in our debtors book", "show aged receivables", or wants to pick which clients to chase. Read-only.

Input parameters:

- `as_of_date` (string): Ages TODAY's open invoices as at this date (YYYY-MM-DD). It is not a historical snapshot: invoices paid since that date are not included. Defaults to the end of the user's working period, which is to…
- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `contact_id` (string): Optional contact ID to scope the report to a single client

### `get_aged_creditors` (~204 tokens)

Get Aged Creditors

Aged creditors report: outstanding bills grouped by supplier, bucketed by days past due (current/not-yet-due, 1-30, 31-60, 61-90, 90+). Use when the user asks "who do I owe", "what bills are due", "show aged payables", or is planning supplier payments. Read-only.

Input parameters:

- `as_of_date` (string): Ages TODAY's open bills as at this date (YYYY-MM-DD). It is not a historical snapshot: bills paid since that date are not included. Defaults to the end of the user's working period, which is today wh…
- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `contact_id` (string): Optional supplier contact ID to scope the report

### `get_goals` (~140 tokens)

Get Goals

Get active business/financial goals and their progress. Use when user asks about their goals, targets, or how they are tracking against objectives.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `goal_type` (string): Filter by type: revenue_target, expense_reduction, savings_target, profit_margin, cash_reserve, debt_reduction, client_acquisition, invoice_collection, custom
- `status` (string): Filter by status: active, completed, all (default: active)

### `list_employees` (~93 tokens)

List Employees

List active employees for the company. Use when the user asks about their employees, staff, team members, or headcount.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `include_inactive` (boolean): Include terminated/on_leave employees (default false)

### `get_payroll_summary` (~178 tokens)

Get Payroll Summary

Get year-to-date payroll figures, last run date, and next payment due. Use when user asks about payroll costs, total salary spend, or when the next payroll run is. For a salary, drawings or "what have I paid myself" question read list_employees (the configured salary), this (whether payroll has run) and get_transactions (what left the bank) together: a configured salary with no payroll runs means nothing was paid through payroll, so say that and show what the bank shows.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `tax_year` (string): Tax year (e.g. "2025-26"). Defaults to current tax year.

### `get_projects` (~111 tokens)

Get Projects

List projects (pipeline, active, completed). Use when the user asks about their projects, deals, or pipeline.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `search` (string): Search by project name
- `status` (string): Filter by status: pitched, won, in_progress, completed, lost, all (default: all)

### `get_project_pnl` (~181 tokens)

Get Project Pnl

Get a deal/project's mini P&L: income, costs by category, and net margin, computed from bank transactions linked to it, plus invoice/bill/expense-claim commitment summaries. Use for "how is project X doing", "project profit", "mini P&L for a project", and for the final report when a project completes. Pass project_id if known, or project_name to resolve it by name.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `project_id` (string): Project ID (preferred if known)
- `project_name` (string): Project name to resolve if project_id is not known. Case-insensitive; errors with candidate names if ambiguous.

### `get_chart_of_accounts` (~106 tokens)

Get Chart Of Accounts

List account categories (chart of accounts). Use when the user asks about their chart of accounts, account codes, or available categories for categorizing transactions.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `type` (string): Filter by type: income, expense, asset, liability, equity, cost_of_sales

### `get_filed_accounts_history` (~203 tokens)

Get Filed Accounts History

The year-by-year figures from the accounts this company has filed at Companies House, newest first: balance sheet lines (fixed assets, current assets, creditors, net assets, capital and reserves), average employees, turnover and profit after tax where the filing includes a profit and loss, and the movement in reserves against the previous year (profit after tax less dividends). Use when the user asks how last year or an earlier year went, how the business has grown, what was filed, or wants past figures beside the current books. These are the registry's snapshots, not the ledger: say "as filed" and never blend them with live ledger figures. A micro-entity filing has no turnover or profit; say so rather than treating a null as zero.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `get_year_on_year` (~153 tokens)

Get Year On Year

How this year compares with last year and the years before: are we up or down on last year, revenue and profit trend, margin, cash at year end, year on year, same time last year, how did last year go. Returns the completed years (from the ledger or the filed accounts), the current year to date against the same months last year, and Finn's read of the trend. Use it before any 'how are we doing', planning or forecasting answer when the company has history.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `get_budget_vs_actual` (~261 tokens)

Get Budget Vs Actual

Budget vs actual: how the company is doing against its budget. Use when the user asks about budget, against budget, over budget, under budget, budget vs actual, budget variance, are we on track, or how a month, quarter or the year compares with the plan. Returns, for each income, cost of sales and expense account, the budget, the actual from the ledger, the variance (actual minus budget) and the variance percent, plus totals and net profit. Income above budget is good, costs below budget are good. hasBudget false means the company has not set a budget: say so and point them to /reports/budget, never present zeros as a result. Budgets are set on the Reports page, Budget vs actual tab. Quote figures from the result only.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `from_month` (string): First month of the period (YYYY-MM). Defaults to the start of the current financial year.
- `to_month` (string): Last month of the period, inclusive (YYYY-MM). Defaults to the current month.

### `get_fx_rates` (~284 tokens)

Get Fx Rates

Exchange rates: the closing rate for a currency pair on a date, or a series over a range. Use when the user asks for an exchange rate, FX, a currency conversion, what the euro to dirham or pound to dollar rate is, what a currency move cost us, or whether it is cheaper to buy in one currency or another. With one date it returns that day's closing rate. With a range of 62 days or less it returns the daily closing series and the percentage change. Over 62 days it returns monthly averages (up to 36 months). Read-only, needs no company data. Quote rates from the result only.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `date` (string): A single date (YYYY-MM-DD). Defaults to today when no range is given.
- `end_date` (string): End of a range (YYYY-MM-DD). Use with start_date.
- `from` (string, required): Currency to convert from, three-letter code, for example EUR.
- `start_date` (string): Start of a range (YYYY-MM-DD). Use with end_date.
- `to` (string, required): Currency to convert to, three-letter code, for example AED.

### `get_fixed_assets` (~116 tokens)

Get Fixed Assets

List fixed assets on the register with cost, net book value, monthly depreciation and status. Use when the user asks about their asset register, depreciation schedules, NBV, or capital items tracked per asset. Filter by active, disposed, or all.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `status` (string): Filter by asset status. Defaults to active.

### `get_capital_allowance_hint` (~130 tokens)

Get Capital Allowance Hint

Get a tax capital allowance hint for a fixed asset (book depreciation vs tax relief). GB companies get AIA/WDA guidance from official rates; other countries get a jurisdiction note. Use when the user asks about capital allowances, AIA, or tax relief on a specific asset — not a filing computation.

Input parameters:

- `asset_id` (string, required): Fixed asset ID from get_fixed_assets
- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `get_reconciliation_status` (~295 tokens)

Get Reconciliation Status

Reconciliation per bank account: every uploaded statement with its own opening and closing balance as printed, the books' balance at its end date, the difference and whether they agree (month by month), plus the unreconciled transaction count and the newest unreconciled lines. Use it for "does the bank agree?", "what was the closing balance in March?", before quoting any reconciliation difference, when the user asks to check the books against the bank statements, or about reconciliation progress. This tool only reads: to actually reconcile ("reconcile what you can", "match the receipts", "reconcile my bank") call auto_match_receipts, which does the matching. Never say everything is reconciled without a result from this tool, get_attention or auto_match_receipts. Never say you cannot read balances off statements. Each statement row carries period_start, period_end, opening_balance, closing_balance, book_balance_at_end, difference, agrees and document_id. Pass bank_account_id to look at one account. It also gives the link to download the reconciliation report (PDF or Excel), the report to give an accountant who asks for one.

Input parameters:

- `bank_account_id` (string): Limit to one bank account (optional).
- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `get_cash_flow_forecast` (~139 tokens)

Get Cash Flow Forecast

13-week cash-flow forecast. Returns current bank balance, projected weekly inflows/outflows/running balance for the next 13 weeks, projected low point, recurring patterns detected from history, outstanding invoices expected to clear, recurring invoice projections, and tax deadlines that could draw cash. Use when the user asks about cashflow, runway, "can I afford X", "when will I run out", or wants to plan ahead.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `get_dividends` (~105 tokens)

Get Dividends

List dividend records. Use when user asks about dividends paid, dividend history, or shareholder payments.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `limit` (number): Max results (default 20)
- `tax_year` (string): Filter by tax year (e.g. "2025/26")

### `get_recurring_invoices` (~87 tokens)

Get Recurring Invoices

List recurring invoice templates. Use when user asks about recurring invoices, scheduled invoices, or subscription billing.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `status` (string): Filter by status (default: active)

### `deel_list_contracts` (~109 tokens)

Deel List Contracts

List contracts from the user's Deel account. Use when the user asks about their Deel contracts, contractors, or team members managed through Deel.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `limit` (number): Max results (default 20)
- `statuses` (string): Comma-separated statuses: active, completed, cancelled

### `deel_get_invoices` (~110 tokens)

Deel Get Invoices

Get invoices from the user's Deel account. Shows contractor payment invoices. Use when the user asks about Deel payments, contractor invoices, or payment history.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `limit` (number): Max results (default 20)
- `statuses` (string): Filter by status: paid, pending, overdue

### `deel_get_payment_receipts` (~91 tokens)

Deel Get Payment Receipts

Get payment receipts from Deel showing payments made to contractors. Use when the user asks about specific Deel payments or needs payment proof.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `limit` (number): Max results (default 20)

### `deel_calculate_employment_cost` (~158 tokens)

Deel Calculate Employment Cost

Calculate the total cost of hiring someone in a specific country through Deel EOR. Use when the user asks "how much would it cost to hire in [country]?" or about employment costs abroad.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `country` (string, required): Full country name (e.g., "Portugal", "Germany", "Ireland"). Must be the full name, not a code.
- `currency` (string, required): Currency code (e.g., "EUR", "USD")
- `salary` (number, required): Annual gross salary in the country's currency

### `deel_calculate_take_home_pay` (~132 tokens)

Deel Calculate Take Home Pay

Calculate take-home pay for a given salary in a specific country. Use when the user asks about net pay, take-home salary, or deductions in a country.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `country` (string, required): Two-letter ISO country code (e.g., "IE" for Ireland, "PT" for Portugal)
- `currency` (string, required): Currency code
- `salary` (number, required): Annual gross salary

### `deel_get_people` (~94 tokens)

Deel Get People

List people (contractors and employees) in the user's Deel organization. Use when the user asks about their Deel team, workforce, or contractor list.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `limit` (number): Max results (default 20)

### `get_document_links` (~217 tokens)

Get Document Links

Get the documents linked to ONE entity (transaction, invoice, bill, estimate, contact, project, expense claim), or the entities linked to ONE document. Every call needs either document_id, or entity_type together with entity_id: there is no "list all links" call, and a call with neither returns nothing but an error. Look the id up first (get_transactions, get_invoices, search_documents), then call once per id. Use when user asks "what documents are attached to this invoice?" or "show me what's linked to that receipt".

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `document_id` (string): Document ID to get links for
- `entity_id` (string): Entity ID to get linked documents for
- `entity_type` (string): Entity type: transaction, invoice, bill, estimate, contact, project, expense_claim

### `find_related_documents` (~146 tokens)

Find Related Documents

Find documents that might be related to an entity based on amount, vendor, date, and reference matching. Shows both already-linked documents and AI-suggested matches. Use when user asks "are there any receipts for this transaction?" or "find documents related to this invoice".

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `entity_id` (string, required): Entity ID to find related documents for
- `entity_type` (string, required): Entity type: transaction, invoice, bill, estimate, contact, project, expense_claim

### `get_accounts_status` (~99 tokens)

Get Accounts Status

Get the status of annual accounts preparation for the current company. Returns the current accounting period, preparation status, and next steps. Use when the user asks about their annual accounts, Companies House filing, year-end accounts, or corporation tax deadline.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `get_attention` (~165 tokens)

Get Attention

Return the proactive, ranked list of everything that currently needs the user's attention across their whole account: missing bank statements, unreconciled transactions, upcoming tax/filing deadlines, a month-end ready to close, annual accounts ready to file, overdue invoices to chase, and open tasks. Use whenever the user asks what they need to do, what's outstanding, what's missing, whether anything needs them, for a status check or 'what should I focus on'. Each item includes a plain-English reason and where to fix it. Proactively offer to help with the most important ones.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `get_risk_flags` (~146 tokens)

Get Risk Flags

List the entries Finn flagged for a second look before they reach a VAT return: suspect or duplicate receipts and invoices, VAT added to a zero-rated purchase, VAT that does not fit the total, personal-looking purchases and amounts out of line with a supplier. Use when the user asks about flagged, suspect, duplicate or odd entries, or when get_attention shows entries needing a second look. Each flag has entity_type, entity_id, label, severity, title and detail.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `lookup_company` (~346 tokens)

Lookup Company

Look up a company on its official register: search by name to find candidates, or fetch a single company by its number to get the full public record. UK companies come from Companies House (registered name, number, status, incorporation date, registered office address, SIC codes, directors/officers, and filing deadlines). Irish companies come from the CRO (registered name, CRO number, status, company type, incorporation date, registered address and the annual return date); a CRO number is digits only. Use this during onboarding to find and confirm the user's company ("is this your company?"). Read-only: it does NOT save anything; use link_company to save the confirmed company. If the result says the lookup is not available, tell the user plainly and take their company details directly with update_company. French companies come from the Annuaire des Entreprises (registered name, SIREN, status, legal form, incorporation date, registered address, activity code and officers); search by name or by SIREN (9 digits). Other countries have no register lookup; ask the user for their company details directly.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `company_number` (string): Exact company number to fetch the full record + directors + deadlines. Use once you know the number (e.g. after the user confirms a search candidate).
- `query` (string): Company name to search for (returns up to ~10 candidates with number, status, and address). Use when you have a name but not a number.

### `find_duplicate_bank_accounts` (~201 tokens)

Find Duplicate Bank Accounts

Find manual bank accounts that look like the same real-world account as a live bank feed (Revolut Business, Starling, Wise, Mercury, Qonto, Airwallex, Stripe Treasury) already connected — the classic case where a user uploaded statements into a manual account, then later connected the live feed for the same account, leaving duplicate transactions that double-count cash and inflate the P&L. Returns candidate pairs with matched/unmatched transaction counts, date ranges, sample matched pairs, and an AI same-account verdict. Use when the user says their cash or balance looks wrong after connecting a bank, mentions a duplicate account, or asks why a P&L looks inflated. Read-only — use merge_bank_accounts to actually merge a pair.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `lookup_tax_rule` (~631 tokens)

Lookup Tax Rule

Look up a verified tax or accounting rule by its key. The system automatically routes to the active company's own country library: every live country has one (e.g. India: gst-rate-slabs, personal-income-tax-slabs-new-regime), so never tell a user you only know UK rules. Use this for ANY question about specific deadlines, thresholds, notice periods, regulatory dates, or rules where being wrong would mislead the user. UK examples: vat-registration-threshold, ct-filing-deadline, mtd-itsa-mandatory-50k, dividend-allowance-2026-27, mileage-rates-2026-27. UAE examples: ct-rates, ct-filing-deadline, vat-rate, free-zone-qfzp, no-personal-income-tax. Returns the exact answer + an official source URL you MUST cite in your reply, and where the rule has a validity period, the dates it applies between. ALWAYS prefer this over stating a rule from memory. Apply the rule to the user's facts: when the answer turns on a fact only the user knows (when goods were delivered, when work was finished, when money arrived), ask for that fact, never for the conclusion (ask "when did you deliver it?", not "does it belong in Q3 or October?"). Once the user gives the fact, that is the fact: state the result the rule gives for it, with the source, and do not add that you cannot check it or that their accountant should confirm it. Point to an accountant only when the rule itself leaves the question open. For a question about a PAST period, or a FUTURE one (next year's rates where a budget has already set them), pass as_of so you get the rule for that date rather than the current one. If you do not know the exact key, call list_tax_rules first.

Input parameters:

- `as_of` (string): Optional ISO date (YYYY-MM-DD) the answer must be true for. Pass this whenever the question is about a PAST period - a prior-year return, an old invoice, a historic filing - or a FUTURE one such as n…
- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `country` (string): ISO country code of the business, such as GB, IE or US. Pass it when the user has not connected AccountsOS. Once connected, leave it out and their company's country is used.
- `key` (string, required): The rule key. Use list_tax_rules to see all available keys for the active company's country.

### `get_qfzp_status` (~171 tokens)

Get Qfzp Status

Get the active company's QFZP (Qualifying Free Zone Person) status for UAE Corporate Tax. Returns the qualifying/non-qualifying income split, de minimis status (ok / warning / breach), free zone name, substance declaration state, and per-zone smart hints (e.g. audited accounts requirement, designated zone VAT, trade license expiry). Returns `applicable: false` for UK or UAE mainland companies. Use when the user asks about QFZP status, whether they still qualify, their de minimis headroom, or whether they'll owe 9% CT.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `list_tax_rules` (~228 tokens)

List Tax Rules

List all available verified tax/accounting rule keys for the active company's country (every live country has a library), optionally filtered by category. Use this when you need to find the right key for lookup_tax_rule.

Input parameters:

- `category` (string): Optional category filter. UK categories: vat, corporation_tax, self_assessment, paye, mtd, companies_house, dividends, directors, expenses, capital_gains, capital_allowances, pensions, income_tax, na…
- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `country` (string): ISO country code of the business, such as GB, IE or US. Pass it when the user has not connected AccountsOS. Once connected, leave it out and their company's country is used.

### `recall_conversations` (~247 tokens)

Recall Conversations

Recall what you and the user discussed in PAST conversations (across earlier sessions, including voice and video calls). Call this whenever the user asks "what were we talking about last time?", "remind me what we discussed", "where did we leave off?", "what did we cover yesterday?", or refers back to an earlier chat. Returns recent conversation summaries newest-first — each with a short summary, the key topics, any decisions made, and open action items, plus when it happened. ALWAYS call this before saying you don't remember — you DO have access to past conversations through this tool. (Distinct from read_company_wiki, which is curated durable facts, not the back-and-forth of past chats.)

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `limit` (number): How many recent conversations to recall (default 5, max 15).
- `query` (string): Optional keyword to filter to conversations about a topic (e.g. "VAT", "payroll", "the Acme invoice").

### `get_month_close` (~195 tokens)

Get Month Close

Check how 'closed' a month's books are. Returns a close-confidence percentage (share of the month's transactions that are categorised AND reconciled) plus exactly what still needs the founder — uncategorised transactions, categorisations you're unsure about, unreconciled lines, payments missing a receipt, and open VAT. Use when the user asks "is my month done?", "close my books", "what's left for May?", "month-end", or any close/period-end question. Defaults to the last complete month. Surface the returned message; offer to help clear each exception.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `period_start` (string): First day of the month to check, YYYY-MM-01. Omit for the last complete month.

### `calculate_vat_period` (~158 tokens)

Calculate Vat Period

Preview the 9-box VAT breakdown for a period WITHOUT locking it. Computes the boxes from the period's transactions using the same logic as the VAT page, so the user can review the figures before locking. Use when the user says "what's my VAT for this quarter", "show me the 9 boxes", or before lock_vat_period so they can check first. Read-only: does not change anything.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `period_id` (string, required): VAT period ID (UUID). Use get_vat_periods to find it.

### `get_expenses` (~113 tokens)

Get Expenses

List expense claims. Use when the user asks about expenses, expense claims, reimbursements, or receipts they have submitted.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `limit` (number): Max results (default 50)
- `status` (string): Filter by status: pending, approved, rejected, reimbursed, all (default: all)

### `get_statement_checks` (~136 tokens)

Get Statement Checks

Each imported bank statement against the books: the statement's period, its opening and closing balance as printed, the book balance on the statement's end date, the difference and whether they agree. Use this to answer 'does the bank agree?', 'what was the closing balance in March?', or before quoting any reconciliation difference. Optional bank_account_id.

Input parameters:

- `bank_account_id` (string): Limit to one bank account (optional).
- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.

### `month_close_summary` (~215 tokens)

Month Close Summary

Composite read returning everything needed to close a month in one call: P&L for the period, balance-sheet snapshot at period end, VAT summary if registered, unreconciled transaction count, outstanding invoices, and overdue deadlines. Use when the user asks about month-end, "how did we do in [month]", a period close, or wants a one-shot business health view. It saves several round-trips compared to calling each report tool separately.

Input parameters:

- `company` (string): Which company to read, by name or id, when the account has more than one (see list_companies). Leave it out to use the only company, or the default.
- `period_end` (string): YYYY-MM-DD end of the period (e.g. 2026-05-31). Defaults to the last day of the previous calendar month.
- `period_start` (string): YYYY-MM-DD start of the period (e.g. 2026-05-01). Defaults to the first day of the previous calendar month.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/paulgosnell-accountsos-mcp/api-mcp-plugin#diagnostics

## Score history

- 2026-11-05: 68
- 2026-11-04: 68
- 2026-11-03: 67
- 2026-11-02: 67
- 2026-11-01: 79
- 2026-10-31: 78
- 2026-10-30: 78
- 2026-10-29: 78
- 2026-10-28: 77

## Common questions

### What is the AccountsOS MCP server?

AccountsOS is an MCP server listed in the public MCP registry as io.github.paulgosnell/accountsos-mcp. Query your live AccountsOS books: balances, transactions, VAT, deadlines, invoices. This page covers its hosted endpoint (https://accounts-os.com/api/mcp/plugin).

### Is the AccountsOS MCP server safe to use?

AccountsOS scores 68 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the AccountsOS MCP server expose?

AccountsOS exposes 82 tools: list_companies, update_company, link_company, add_document, get_transactions, and 77 more. Their descriptions and schemas cost roughly 13,681 tokens of context every time the server is loaded.

### Does the AccountsOS MCP server require authentication?

No. We connected to AccountsOS without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the AccountsOS MCP server still maintained?

AccountsOS is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the AccountsOS MCP server?

VerifyMCP ran 13 checks on AccountsOS, covering TLS certificate, Authorization, HTTPS, HSTS header and 9 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://accounts-os.com/api/mcp/plugin
- Repository: https://github.com/thriveventurelabs/accountsos-mcp-server
- Website: https://accounts-os.com/
- Changelog RSS feed: https://verifymcp.io/servers/paulgosnell-accountsos-mcp/api-mcp-plugin.xml
- Changelog JSON feed: https://verifymcp.io/servers/paulgosnell-accountsos-mcp/api-mcp-plugin/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/paulgosnell-accountsos-mcp/api-mcp-plugin.json
- HTML version of this page: https://verifymcp.io/servers/paulgosnell-accountsos-mcp/api-mcp-plugin
