OpenAccountants
Server Details
Open-source AI accounting skills verified by licensed accountants (tax, VAT, payroll).
- Status
- Healthy
- Uptime
- 100.0% over 55 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-03-26
- URL
- Repository
- openaccountants/openaccountants
- GitHub Stars
- 432
- Server Listing
- OpenAccountants
TDQS
Scored across 14 tools
Most tools have clearly distinct purposes, and the descriptions actively differentiate the risky pairs (search_rules vs search_skills, start vs start_help, get_skill vs get_skill_sections). However, there is a dense cluster of list_* tools (jurisdictions, rule_facets, skills, verifiers) and two search tools whose boundaries, while explained, still require careful reading to pick correctly.
Every tool uses snake_case with a consistent verb_noun structure (get_skill, list_skills, search_rules, check_audit_exemption, validate_vat_number). The only mild deviations are the single-word 'start' and 'start_help', which still form a coherent pair.
14 tools is well within the ideal 3-15 range and each tool earns its place, covering discovery, retrieval, deterministic computation, live validation, and feedback without redundancy.
The surface covers the full lifecycle for a tax knowledge platform: discovery (list/search), retrieval (get_skill/sections), deterministic checks (audit exemption), live lookups (VAT, deadlines), and an outbound channel (share). Minor gaps exist, e.g. no explicit tool for listing/updating a user's saved jurisdiction profile despite references to it.
Available Tools
14 toolscheck_audit_exemptionCheck statutory audit exemptionRead-onlyIdempotentInspect
Answers 'does my company need an audit?' for a private limited company in Malta (MT, Article 185(2) micro thresholds) or the UK (GB, small-company thresholds before and after 6 April 2025). A deterministic check of turnover, balance sheet total and average employees. Returns 'exempt' | 'review' | 'audit_required' | 'cannot_determine', the per-threshold table, the rule citation, and whether a named accountant has attested the thresholds ('draft' = source-cited draft; say which). Pass prior_year figures: most regimes are two-consecutive-year tests, so without them a qualifying year returns 'review'. 'cannot_determine' is a valid outcome (unsupported jurisdiction, wrong currency, a shape needing judgment). Use the determination as returned, not thresholds from memory.
| Name | Required | Description | Default |
|---|---|---|---|
| currency | Yes | Currency of the figures — must match the regime (EUR for MT, GBP for GB); convert first, never guess a rate. | |
| turnover | Yes | Revenue/turnover for the year, in the jurisdiction's currency. | |
| prior_year | No | Prior-year figures for the two-consecutive-years test. | |
| entity_type | No | Optional. 'private_ltd' (default), 'plc', 'branch'. Non-private shapes route to a human. | |
| group_member | No | Optional. True if the company is part of a group — group thresholds need a reviewer, so this forces 'review'. | |
| jurisdiction | Yes | ISO-style code. MT and GB supported today. | |
| employees_average | Yes | Average number of employees during the year. | |
| financial_year_end | Yes | ISO date the financial year ends, e.g. '2025-12-31'. | |
| balance_sheet_total | Yes | Total assets at the balance sheet date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| caveats | No | |
| escalate | No | |
| next_action | No | |
| verification | No | status ('accountant_verified'|'research_verified'|'draft'), verified_by[], last_verified_at, skill_slug, era. Surface the status to the user. |
| criteria_rule | No | |
| determination | No | 'exempt' | 'review' | 'audit_required' | 'cannot_determine' |
| rule_citation | No | skill_slug, fact_id, canonical_key, statutory_reference, url. |
| thresholds_applied | No | Per-criterion: threshold vs actual, met true/false. |
get_deadlinesTax filing deadlinesRead-onlyIdempotentInspect
Filing and payment deadlines for a country or US state: 'when is my tax return due', 'when do I file VAT', 'when is the next instalment'. Returns upcoming dates and recurring filing rhythms (monthly VAT, quarterly instalments) from the OpenAccountants tax calendar. Signed-in users with a saved home jurisdiction can omit jurisdiction; the response marks jurisdiction_source.
| Name | Required | Description | Default |
|---|---|---|---|
| horizon_days | No | How far ahead to look (default 120, max 366). | |
| jurisdiction | No | ISO code, slug, or name ('MT', 'US-CA', 'Malta'). Optional for signed-in users with a saved home jurisdiction. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next_action | No | |
| calendar_url | No | |
| horizon_days | No | |
| jurisdiction | Yes | |
| recurring_rhythms | No | |
| upcoming_deadlines | Yes | |
| jurisdiction_source | No |
get_skillRead a tax GuideRead-onlyIdempotentInspect
Open a Guide by slug (from start, search_skills or search_rules) to answer the user's question. Returns the Guide's rules and method, its quality tier, the named accountant where one reviewed it, a section_index of sections not inlined, and a provenance footer to keep with the answer.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Skill slug, e.g. 'us-schedule-c-and-se-computation' | |
| reason | No | One sentence on WHY you're making this call, in the user's terms (for routing analysis only). Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| skill | Yes | The skill record (slug, name, jurisdiction, tier, etc.) |
| key_facts | No | Optional at-a-glance facts (rates/thresholds/deadlines/verifier/advisory) — present only where the skill carries a structured key_facts block; omitted otherwise. |
| guardrails | No | |
| provenance | Yes | |
| written_by | No | The accountant who wrote this Guide ({name, profile_url}), when it is accountant-authored; null otherwise. |
| next_action | No | |
| verification | No | Verification summary |
| section_index | No | Every section of the skill with {index, heading, level, chars, priority, included}. For any section with included:false, fetch it via get_skill_sections({slug, section_index}). |
| current_version | No | Current version. markdown_content holds the compute-core (rates, box maps, rules, worksheet contract); bulky reference sections may be omitted — see section_index. |
get_skill_sectionsRead more sections of a GuideRead-onlyIdempotentInspect
Follow-up to get_skill: fetch sections it listed in section_index as not inlined (for example a supplier-pattern library). Pass section_index for one section, or omit it to get every section with its heading and markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Skill slug | |
| section_index | No | Optional. Return only this section (matches the `index` from get_skill's `section_index`). | |
| section_indices | No | Optional. Return only these sections. |
Output Schema
| Name | Required | Description |
|---|---|---|
| slug | Yes | |
| version | No | |
| sections | Yes | |
| key_facts | No | Optional at-a-glance facts — present only where the skill carries a structured key_facts block; omitted otherwise. |
| guardrails | No | |
| next_action | No |
list_jurisdictionsList all jurisdictions coveredRead-onlyIdempotentInspect
Answers 'which countries do you cover?' or 'what is there for [country]?'. Returns every jurisdiction with published Guides (countries as ISO 2, US states as US-XX, Canadian provinces) with Guide counts, accountant-reviewed counts and the named lead accountant where there is one.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| next_action | No | |
| total_skills | No | |
| jurisdictions | No | |
| total_jurisdictions | No |
list_rule_facetsList queryable rule facets (no args)Read-onlyIdempotentInspect
Helper for search_rules: lists the values you can filter on (live jurisdictions, domains, roles, rule kinds, statuses, tax years, a sample of topics) and the defaults. Takes no arguments. Use it when unsure of a filter value rather than guessing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| filters | No | |
| defaults | No | |
| next_action | No |
list_skillsBrowse tax GuidesRead-onlyIdempotentInspect
Browse the Guides for one jurisdiction or domain (for example every Guide for 'MT', or every 'payroll' Guide), each with its quality tier and verification status. For a specific topic, search_skills is quicker. Filter by jurisdiction, domain or role ('foundation' | 'compute' | 'orchestrator' | 'reference'). Paginated (default 100, max 200); page with offset/next_offset.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Filter by pipeline role: foundation, compute, orchestrator, reference. | |
| limit | No | Max skills to return (default 100, max 200). | |
| domain | No | Filter by accounting domain: income-tax, vat-gst, payroll, bookkeeping, e-invoicing, formation, financial-statements, transfer-pricing, tax-optimization, crypto, cross-border, corporate-tax, estate-wealth-tax, references, sector-guidance, tooling. | |
| offset | No | Number of skills to skip — use the next_offset from the previous response to page through results (default 0). | |
| category | No | (Legacy) display label; prefer domain/role. | |
| jurisdiction | No | Filter by jurisdiction code, e.g. 'US', 'MT', 'DE' |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | No | Page size applied to this response. |
| total | No | Total skills matching the filter (across all pages). |
| offset | No | Offset applied to this response. |
| skills | Yes | Matching published skills. |
| next_action | No | |
| next_offset | No | Present when more results remain — pass as offset to fetch the next page. |
list_verifiersList named accountant verifiersRead-onlyIdempotentInspect
Answers 'who reviewed this?' or 'which accountants are behind this?'. Returns the named licensed accountants who have signed off on OpenAccountants jurisdictions, with their credentials and the jurisdictions they cover.
| Name | Required | Description | Default |
|---|---|---|---|
| jurisdiction | No | Optional ISO code filter — only return verifiers for this jurisdiction. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | |
| verifiers | No | |
| next_action | No |
search_rulesLook up tax rates and rulesRead-onlyIdempotentInspect
Look up tax rates, thresholds and rules in one or many jurisdictions, such as 'VAT rates in MT, IE and DE', 'income tax brackets for 2025' or 'rules mentioning reverse charge'. Returns a bundled markdown rule set plus each jurisdiction's official source (official_source). For one specific figure in one jurisdiction a Guide is often more complete (search_skills then get_skill): a figure can sit in a Guide without being a separate rule here, and then this returns related guidance instead. Entries tagged GUIDANCE are text, not values. Figures are not certified current: confirm each against official_source and prefer it when they disagree. By default returns all matching rules, each tagged with its verification status; status:'verified' excludes draft, needs_update and unsure rules; it still includes research-verified (source-cited) rules, so it does not mean accountant-reviewed. list_rule_facets gives the valid filter values.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Free-text search over each rule's label, value, and citation. | |
| limit | No | Max rules to return (default 200, max 500). | |
| roles | No | Skill roles: foundation | compute | orchestrator | reference. | |
| topic | No | Filter by a fact topic. | |
| offset | No | Pagination offset — pass the previous response's next_offset. | |
| reason | No | One sentence on WHY you're making this call, in the user's terms (for routing analysis only). Optional. | |
| status | No | Shorthand for `statuses`: 'verified' = accountant- + research-verified only. Default 'all'. | |
| domains | No | Accounting domains, e.g. ['vat-gst','income-tax']. See list_rule_facets. | |
| statuses | No | Verification statuses to include. Default = all (each rule is tagged). | |
| tax_year | No | Limit to a tax year, e.g. 2025. | |
| block_types | No | Rule kinds to include. Default = all of these (framing prose + workflow steps are excluded). | |
| jurisdictions | No | ISO codes to include, e.g. ['MT','US-CA']. Omit for all jurisdictions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | No | Total matching rules (across all pages). |
| markdown | Yes | The bundled rule set as markdown — the user saves/runs this locally. |
| truncated | No | |
| fact_count | Yes | Rules returned on this page. |
| next_action | No | |
| next_offset | No | |
| jurisdictions | No | |
| accountant_verified_count | No |
search_skillsSearch tax Guides by topicRead-onlyIdempotentInspect
Find the Guide for a specific tax topic by keyword: a deduction, form, regime or rule such as 'home office deduction', 'Schedule C', 'reverse charge', 'crypto capital gains' or 'Beckham regime'. Optionally limit to one jurisdiction or domain. Returns matching Guide slugs to open with get_skill. Set content_type='method' to find step-by-step methods (run them via start), each tagged accountant-reviewed or source-cited.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search term, e.g. 'home office deduction', 'crypto capital gains', 'reverse charge'. With content_type='method', a broad term (or the domain word) lists the available methods. | |
| domain | No | Optional accounting domain to limit the search (e.g. 'vat-gst', 'payroll', 'income-tax', 'crypto'). | |
| content_type | No | What kind of Guide to find. 'method' = step-by-step procedures you EXECUTE via start() (formerly 'workflows'); 'fact' or omitted = reference material (rates/thresholds/rules). A Guide can be either or both. | |
| jurisdiction | No | Optional ISO 2-letter country code to limit the search |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| results | Yes | |
| next_action | No | |
| human_backing | No | Named accountant(s) who review this jurisdiction's guidance (guidance-level, not a per-figure sign-off). |
startAnswer a tax question (call first)Read-onlyIdempotentInspect
Call this first for any tax, VAT/GST, payroll or filing question about a country or US state, such as "how much tax will I pay in Spain", "do I need to register for VAT", "when is my tax return due", "is this deductible", "how is a freelancer or a company taxed in Germany", "sales tax in Texas" or "what changes if I move to Portugal". Pass the user's question as intent and the country or US state as jurisdiction ('DE', 'US-TX', 'Florida'). If no place is named, start infers one when the question makes it clear and says so in jurisdiction_source. Returns the Guides to read next (skills_to_load, open each with get_skill), or what is still needed, usually the country. Covers 190+ jurisdictions; where no Guide exists yet it returns a research_brief naming the official sources.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | Required. The user's question or goal in their own words, e.g. 'how much tax will I pay as a freelancer', 'VAT return', 'set up a company'. | |
| reason | No | One sentence, in the user's own words, on what they actually asked for here — captured only to improve routing. E.g. 'user sold ETH and wants to know what to report'. Optional but helpful. | |
| acting_as | No | Optional. Who the user is: 'self' = a taxpayer handling their own taxes; 'client' = a professional working on a client's behalf. Infer it from the conversation; omit it if unclear. | |
| jurisdiction | No | Country or US state: ISO 2-letter code, US state code or name (e.g. 'MT', 'GB', 'US-CA', 'Florida'). Omit if the user named none; start infers it when the question makes it clear. | |
| taxpayer_type | No | The taxpayer's occupation, when known. Some return-prep workflows fork by it (an employee's Form 1040 is a different guide from a freelancer's). Pass it if the conversation already makes it clear; otherwise omit — start() only asks for it (status:'needs_clarification', needs:['taxpayer_type']) when the guides for this jurisdiction/intent genuinely split by occupation. 'employee' = W-2 wages only; 'self-employed' = freelance / 1099 / sole-proprietor; 'both' = employed AND self-employed; 'company' = a corporate entity. Don't guess — ask the user one short question if unsure. |
Output Schema
| Name | Required | Description |
|---|---|---|
| needs | No | |
| intent | No | |
| status | No | |
| guardrails | No | |
| next_action | No | |
| expectations | No | |
| jurisdiction | No | |
| skills_to_load | No | |
| available_intents | No | |
| available_jurisdictions | No |
start_helpWhat can you help with? (no args)Read-onlyIdempotentInspect
Call when the user has no tax question yet and opens with 'what can you do?', 'how can you help me?' or 'where do I start?'. Takes no arguments. Returns the two scoping questions plus the available intents and jurisdictions; for a signed-in approved accountant, a short personal orientation briefing instead. Once there is a question, call start.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| needs | No | |
| status | No | |
| next_action | No | |
| available_intents | No | |
| available_jurisdictions | No |
validate_vat_numberValidate an EU VAT number (live VIES lookup)Read-onlyIdempotentInspect
Check live whether an EU VAT number is valid and registered, for example before applying a B2B reverse charge, zero-rating an intra-EU sale or onboarding a supplier. Queries the European Commission's VIES registry and returns the verdict plus the registered business name and address where the authority discloses them. Coverage: the 27 EU member states plus 'XI' (Northern Ireland); use 'EL' for Greece. Other countries, including the UK, are not supported yet: say live validation is not available there rather than guessing. If the registry is down the response says so.
| Name | Required | Description | Default |
|---|---|---|---|
| vat_number | Yes | The VAT number, with or without the country prefix and spaces, e.g. 'IE6388047V', 'IE 6388047V', or '6388047V'. | |
| country_code | No | 2-letter EU member-state code of the VAT number, e.g. 'DE', 'IE', 'FR'. Use 'EL' for Greece and 'XI' for Northern Ireland. May be omitted if the country prefix is already part of vat_number. |
Output Schema
| Name | Required | Description |
|---|---|---|
| valid | No | true/false verdict from VIES, or null if the service could not be reached (an availability issue, not a verdict). |
| source | No | |
| address | No | |
| message | No | |
| summary | No | |
| checked_at | No | |
| source_url | No | |
| vat_number | No | |
| vies_error | No | |
| full_vat_id | No | |
| next_action | No | |
| country_code | No | |
| business_name | No | |
| human_backing | No | Named accountant(s) who review that country's VAT guidance (guidance-level, not a per-figure sign-off). |
| confirm_available | No | Always true: if the user asks, the VAT treatment can be sent for checking via share_with_openaccountants with request_review. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
start3 fields changed- changed
Input schema / properties / acting_as / descriptionPrevious value: -"REQUIRED. Who the user is: 'self' = a taxpayer handling their OWN taxes; 'client' = a professional (accountant/advisor) working on behalf of a CLIENT. Establish this before calling — if it isn't clear from the conversation, ask the user one short question ('Are these your own taxes, or are you helping a client?'). Never guess."New value: +"Optional. Who the user is: 'self' = a taxpayer handling their own taxes; 'client' = a professional working on a client's behalf. Infer it from the conversation; omit it if unclear." - changed
Input schema / properties / intent / descriptionPrevious value: -"User intent — REQUIRED. Free text, e.g. 'taxes', 'VAT return', 'set up a company'."New value: +"Required. The user's question or goal in their own words, e.g. 'how much tax will I pay as a freelancer', 'VAT return', 'set up a company'." - changed
Input schema / properties / jurisdiction / descriptionPrevious value: -"ISO 2-letter code or US state code (e.g. 'MT', 'GB', 'US-CA')."New value: +"Country or US state: ISO 2-letter code, US state code or name (e.g. 'MT', 'GB', 'US-CA', 'Florida'). Omit if the user named none; start infers it when the question makes it clear."
3 tool updates
- Changed
list_verifiers1 field changed- removed
Output schema / properties / verifiers / items / properties / calendly_urlRemoved value: -{ - "type": "string" -}
- Changed
share_with_openaccountants3 fields changed- changed
Input schema / properties / contact_email / descriptionPrevious value: -"Review only, REQUIRED when request_review: the user's email. Ask for it first."New value: +"Review only, REQUIRED when request_review: the user's email, so OpenAccountants can reply. Ask for it first." - changed
Input schema / properties / request_review / descriptionPrevious value: -"true only when the user has asked for a licensed accountant to review their figures. Requires working_paper + jurisdiction + scenario + contact_email. Omit/false = just the note."New value: +"true only when the user has asked for a person (an accountant or OpenAccountants) to check their result, file it or do the work. Requires working_paper + jurisdiction + scenario + contact_email. Omit/false = just the note." - changed
Input schema / properties / skill_slug / descriptionPrevious value: -"Optional: set when the note is feedback about a SPECIFIC skill (e.g. 'us-sales-tax'). Replaces the old submit_feedback."New value: +"Optional: set when the note is feedback about a SPECIFIC Guide, by its slug (e.g. 'us-sales-tax'). Replaces the old submit_feedback."
- Changed
validate_vat_number1 field changed- changed
Output schema / properties / confirm_available / descriptionPrevious value: -"Whether the user can ask a named accountant to confirm the VAT treatment via ask_accountant_to_confirm."New value: +"Always true: if the user asks, the VAT treatment can be sent for checking via share_with_openaccountants with request_review."
1 tool update
- Changed
get_skill2 fields changed- changed
Output schema / properties / provenance / properties / tier / enumPrevious value: -[ - "accountant-verified", - "research-verified" -]New value: +[ + "accountant-verified", + "accountant-authored", + "research-verified" +] - added
Output schema / properties / written_byAdded value: +{ + "description": "The accountant who wrote this Guide ({name, profile_url}), when it is accountant-authored; null otherwise.", + "type": [ + "object", + "null" + ] +}
1 tool update
- Changed
start1 field changed- changed
Input schema / requiredPrevious value: -[ - "intent", - "acting_as" -]New value: +[ + "intent" +]
1 tool update
- Changed
share_with_openaccountants2 fields changed- changed
Input schema / properties / note / descriptionPrevious value: -"Anonymized improvement note/DIFF: what the guidance covered vs what you ADDED or worked around and WHY, OR a bug in a specific skill. No names, amounts, or PII. Send whenever the user agrees to help improve."New value: +"Anonymized improvement note: what the guidance covered vs what you added or worked around and why, or a bug in a specific skill. No names, amounts, or PII." - changed
Input schema / properties / request_review / descriptionPrevious value: -"true ONLY if the user WANTS a licensed Partner to review their actual figures. Never mandatory. Requires working_paper + jurisdiction + scenario + contact_email. Omit/false = just the note."New value: +"true only when the user has asked for a licensed accountant to review their figures. Requires working_paper + jurisdiction + scenario + contact_email. Omit/false = just the note."
1 tool update
- Added
check_audit_exemption
Related MCP Connectors
AI-powered bookkeeping and tax filing for entrepreneurs at the heart of the European economy.
AI agents for bookkeeping, reconciliation, and financial close for SMBs.
AI staff accountant for QuickBooks: transactions, reports, receivables, payables, month-end close
EU/UK VAT compliance for AI agents: number validation, rate lookups, reverse-charge checks.
Related MCP Servers
- AlicenseCqualityCmaintenanceAI-powered skills for financial professionals. Comprehensive collection of finance, accounting, audit, and compliance skills for AI agents. IFRS/GAAP compliant with industry-specific applications.10031MIT
- AlicenseBqualityAmaintenanceEnables AI assistants to query and manage self-hosted accounting data—invoices, balances, and books—through natural language, with read-only tools by default and optional scoped write operations.3077 PyPIAGPL 3.0
- AlicenseCqualityCmaintenanceFree, open-source (MIT), local-first Swiss accounting MCP server: an AI agent posts double-entry journal entries, categorises and chases invoices, and prepares the MWST-Abrechnung (the Swiss VAT return), with a minimalist Studio for human oversight. Posted entries are append-only and immutable, corrections are reversing entries, and every query is tenant-scoped.50047 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query a connected accounting platform for organisations, invoices, contacts, chart of accounts, and profit-and-loss reports, supporting bookkeeping, AR/AP, and financial reporting workflows.80 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.