Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

OpenAccountants

REMOTE · WWW.OPENACCOUNTANTS.COM · SCANNED AUG 3

Open-source AI accounting skills verified by licensed accountants (tax, VAT, payroll).

+13 this week 76 Trust /100
Trust breakdown (6 categories)

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. How we score →

Endpoint Security89
Transport & Reachability100
Schema Quality & AI Usability71
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 7079 tokens (~505/item across 14 items; 14 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities40
  • Spec-recency check failed: implements MCP spec 2025-03-26; the latest is 2026-07-28. See how to fix → Fail
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · www.openaccountants.com

# add to Claude Code
claude mcp add --transport http openaccountants-openaccountants https://www.openaccountants.com/api/mcp
# ~/.codex/config.toml
[mcp_servers.openaccountants-openaccountants]
url = "https://www.openaccountants.com/api/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "openaccountants-openaccountants": {
      "type": "remote",
      "url": "https://www.openaccountants.com/api/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add openaccountants-openaccountants --url https://www.openaccountants.com/api/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  openaccountants-openaccountants:
    url: "https://www.openaccountants.com/api/mcp"
// mcp.json
{
  "mcpServers": {
    "openaccountants-openaccountants": {
      "type": "http",
      "url": "https://www.openaccountants.com/api/mcp"
    }
  }
}

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

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 3 Aug 26 +1

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

  • 1 Aug 26 +1

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

  • 31 Jul 26 +4
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 +6
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 28 Jul 26 +1

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

  • 27 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 62

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://www.openaccountants.com/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=www.openaccountants.com CN=YE1,O=Let's Encrypt,C=US 8 Jun 2026 6 Sept 2026 ECDSA 256 ECDSA-SHA384 55fab93b2288e8513d90eebd791fbb7b6e8
SANs: www.openaccountants.com
CN=YE1,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 5ddd70dd31f801c85c186a7a04b80afe
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd
DNSSEC insecure

Validation of www.openaccountants.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
openaccountants.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer resource_metadata="https://www.openaccountants.com/.well-known/oauth-protected-resource"

Bearer resource_metadata="https://www.openaccountants.com/.well-known/oauth-protected-resource"

Protected resource metadata

Document https://www.openaccountants.com/.well-known/oauth-protected-resource
Retrieved Yes
Resource https://www.openaccountants.com/api/mcp
Authorisation server https://www.openaccountants.com
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://www.openaccountants.com/api/mcp Verified 200
http (plaintext) http://www.openaccountants.com/api/mcp HTTPS enforced 301 https://www.openaccountants.com/api/mcp
MCP tools — 14 exposed · ~3,423 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
check_audit_exemption ~439

DETERMINISTIC check of whether a private limited company qualifies for statutory audit exemption, from aggregate figures any ledger can provide (turnover, balance sheet total, average employees). Returns a determination ('exempt' | 'review' | 'audit_required' | 'cannot_determine'), the per-criterion threshold table showing exactly why, the canonical rule citation it rests on, and the LIVE verification envelope (whether a named accountant has attested the thresholds — surface that status prominently; 'draft' means treat as a source-cited draft). COVERAGE TODAY: MT (Article 185(2) micro thresholds) and GB (small-company thresholds, both pre and post 6 April 2025 eras). Most exemption regimes are two-consecutive-years tests, so pass prior_year figures when available — without them a qualifying year returns 'review', not 'exempt'; that is correct behaviour, not an error. 'cannot_determine' is a first-class outcome (unsupported jurisdiction, wrong currency, entity shapes needing judgment, or the cited fact changed since calibration). Never override the determination with training-data thresholds.

NameTypeReqDescription
balance_sheet_totalnumberyesTotal assets at the balance sheet date.
currencystringyesCurrency of the figures — must match the regime (EUR for MT, GBP for GB); convert first, never guess a rate.
employees_averagenumberyesAverage number of employees during the year.
entity_typestringOptional. 'private_ltd' (default), 'plc', 'branch'. Non-private shapes route to a human.
financial_year_endstringyesISO date the financial year ends, e.g. '2025-12-31'.
group_memberbooleanOptional. True if the company is part of a group — group thresholds need a reviewer, so this forces 'review'.
jurisdictionstringyesISO-style code. MT and GB supported today.
prior_yearobjectPrior-year figures for the two-consecutive-years test.
turnovernumberyesRevenue/turnover for the year, in the jurisdiction's currency.
NameTypeReqDescription
caveatsarray
criteria_rulestring|null
determinationstring'exempt' | 'review' | 'audit_required' | 'cannot_determine'
escalateboolean
next_actionstring
rule_citationobject|nullskill_slug, fact_id, canonical_key, statutory_reference, url.
thresholds_appliedarrayPer-criterion: threshold vs actual, met true/false.
verificationobject|nullstatus ('accountant_verified'|'research_verified'|'draft'), verified_by[], last_verified_at, skill_slug, era. Surface the status to the user.

No examples provided.

get_deadlines ~154

Upcoming filing/payment deadlines and recurring filing rhythms (monthly VAT, quarterly instalments) for a country or US state, from the OpenAccountants tax calendar. Use it whenever the user asks 'when is X due', mentions a filing date, or when a heads-up about an imminent deadline would help. Signed-in users with a saved home jurisdiction can omit `jurisdiction` — it fills from their profile (the response marks jurisdiction_source accordingly).

NameTypeReqDescription
horizon_daysintegerHow far ahead to look (default 120, max 366).
jurisdictionstringISO code, slug, or name ('MT', 'US-CA', 'Malta'). Optional for signed-in users with a saved home jurisdiction.
NameTypeReqDescription
calendar_urlstring
horizon_daysinteger
jurisdictionstringyes
jurisdiction_sourcestring
next_actionstring
recurring_rhythmsarray
upcoming_deadlinesarrayyes

No examples provided.

get_skill ~89

Fetch a published skill by slug, including its current-version markdown, quality tier, named verifier (where accountant-verified), and a provenance/attribution footer.

NameTypeReqDescription
reasonstringOne sentence on WHY you're making this call, in the user's terms (for routing analysis only). Optional.
slugstringyesSkill slug, e.g. 'us-schedule-c-and-se-computation'
NameTypeReqDescription
current_versionobject|nullCurrent version. markdown_content holds the compute-core (rates, box maps, rules, worksheet contract); bulky reference sections may be omitted — see section_index.
guardrailsarray
key_factsobjectOptional at-a-glance facts (rates/thresholds/deadlines/verifier/advisory) — present only where the skill carries a structured key_facts block; omitted otherwise.
next_actionstring
provenanceobjectyes
section_indexarrayEvery 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}).
skillobjectyesThe skill record (slug, name, jurisdiction, tier, etc.)
verificationobject|nullVerification summary

No examples provided.

get_skill_sections ~130

Fetch the parsed sections of a skill's current version. Each section has a heading and its markdown content. Use this to pull a specific section that get_skill listed in `section_index` as not inlined (e.g. a supplier-pattern library) — pass `section_index` to fetch just that one. Omit it to get every section.

NameTypeReqDescription
section_indexintegerOptional. Return only this section (matches the `index` from get_skill's `section_index`).
section_indicesarrayOptional. Return only these sections.
slugstringyesSkill slug
NameTypeReqDescription
guardrailsarray
key_factsobjectOptional at-a-glance facts — present only where the skill carries a structured key_facts block; omitted otherwise.
next_actionstring
sectionsarrayyes
slugstringyes
versioninteger|number

No examples provided.

list_jurisdictions ~84

Returns every jurisdiction with published skills — countries (ISO 2), US states (US-XX), Canadian provinces — with skill counts, accountant-verified counts, and named lead verifier. Use when the user asks 'which countries does OpenAccountants cover?' or 'what's available for [country]?' Avoids paginating through list_skills to compute this.

Input schema present but exposes no named parameters.

NameTypeReqDescription
jurisdictionsarray
next_actionstring
total_jurisdictionsinteger
total_skillsinteger

No examples provided.

list_rule_facets ~70

Returns the metadata you can filter on with `search_rules` — the live jurisdictions, the domains, roles, block types (rule kinds), statuses, tax years, and a sample of topics — plus the defaults. Call this before `search_rules` to learn the valid filter values rather than guessing.

Input schema present but exposes no named parameters.

NameTypeReqDescription
defaultsobject
filtersarray
next_actionstring

No examples provided.

list_skills ~300

List published OpenAccountants skills with their quality tier and verification status. Optionally filter by jurisdiction (e.g. 'US', 'MT', 'DE', 'GB'), domain (the accounting area, e.g. 'vat-gst', 'payroll', 'income-tax'), or role ('foundation' | 'compute' | 'orchestrator' | 'reference'). Results are paginated (default 100, max 200 per call) — unfiltered browsing of the full ~1,100-skill catalogue requires paging via offset/next_offset, so jurisdiction/domain filters are strongly recommended.

NameTypeReqDescription
categorystring(Legacy) display label; prefer domain/role.
domainstringFilter by accounting domain: income-tax, vat-gst, payroll, bookkeeping, e-invoicing, formation, financial-statements, transfer-pricing, tax-optimization, crypto, cross-border, corporate-tax, estate-w…
jurisdictionstringFilter by jurisdiction code, e.g. 'US', 'MT', 'DE'
limitintegerMax skills to return (default 100, max 200).
offsetintegerNumber of skills to skip — use the next_offset from the previous response to page through results (default 0).
rolestringFilter by pipeline role: foundation, compute, orchestrator, reference.
NameTypeReqDescription
limitintegerPage size applied to this response.
next_actionstring
next_offsetintegerPresent when more results remain — pass as offset to fetch the next page.
offsetintegerOffset applied to this response.
skillsarrayyesMatching published skills.
totalintegerTotal skills matching the filter (across all pages).

No examples provided.

list_verifiers ~103

Returns named licensed accountants who have signed off on OpenAccountants jurisdictions, with their credentials and covered jurisdictions. Use when the user asks who verified a skill or wants to see the verifier network. If the user wants one of them to review their work, that goes through `share_with_openaccountants` with `request_review: true` — at the user's explicit request only.

NameTypeReqDescription
jurisdictionstringOptional ISO code filter — only return verifiers for this jurisdiction.
NameTypeReqDescription
next_actionstring
totalinteger
verifiersarray

No examples provided.

search_rules ~399

Query individual tax RULES/FACTS (rates, thresholds, rules, definitions, tables) ACROSS jurisdictions and metadata, and get back a bundled markdown rule set the user can save and run locally. Unlike get_skill (one whole skill), this assembles a cross-cutting SET — e.g. 'VAT rates in MT, IE and DE', 'all income-tax thresholds for 2025', or 'rules mentioning reverse charge'. By default returns ALL matching rules, each tagged with its verification status; pass status:'verified' for accountant-/research-verified only. Call `list_rule_facets` first to see the queryable values.

NameTypeReqDescription
block_typesarrayRule kinds to include. Default = all of these (framing prose + workflow steps are excluded).
domainsarrayAccounting domains, e.g. ['vat-gst','income-tax']. See list_rule_facets.
jurisdictionsarrayISO codes to include, e.g. ['MT','US-CA']. Omit for all jurisdictions.
limitintegerMax rules to return (default 200, max 500).
offsetintegerPagination offset — pass the previous response's next_offset.
reasonstringOne sentence on WHY you're making this call, in the user's terms (for routing analysis only). Optional.
rolesarraySkill roles: foundation | compute | orchestrator | reference.
statusstringShorthand for `statuses`: 'verified' = accountant- + research-verified only. Default 'all'.
statusesarrayVerification statuses to include. Default = all (each rule is tagged).
tax_yearintegerLimit to a tax year, e.g. 2025.
textstringFree-text search over each rule's label, value, and citation.
topicstringFilter by a fact topic.
NameTypeReqDescription
accountant_verified_countinteger
fact_countintegeryesRules returned on this page.
jurisdictionsarray
markdownstringyesThe bundled rule set as markdown — the user saves/runs this locally.
next_actionstring
next_offsetinteger|null
totalintegerTotal matching rules (across all pages).
truncatedboolean

No examples provided.

search_skills ~286

Full-text search across all published tax and accounting skills. Find, lookup, query, or discover skills by keyword, tax concept, deduction type, form number, or regulation (e.g. 'home office deduction', 'crypto capital gains', 'reverse charge', 'Schedule C', '60-day reporting'). Optionally limit to one jurisdiction. Use this when you don't know the exact skill slug. Set content_type='method' to discover step-by-step METHODS (guided procedures — what you EXECUTE via start()) instead of reference material; each method carries a review_status (accountant-reviewed | source-cited).

NameTypeReqDescription
content_typestringWhat 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 o…
domainstringOptional accounting domain to limit the search (e.g. 'vat-gst', 'payroll', 'income-tax', 'crypto').
jurisdictionstringOptional ISO 2-letter country code to limit the search
querystringyesSearch 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.
NameTypeReqDescription
human_backingobject|nullNamed accountant(s) who review this jurisdiction's guidance (guidance-level, not a per-figure sign-off).
next_actionstring
resultsarrayyes
totalintegeryes

No examples provided.

share_with_openaccountants ~455

Sends feedback or a review request to OpenAccountants. This is the single outbound channel; it does nothing unless the user has explicitly asked to send feedback or to request a review. Two modes: (1) `note` — an anonymized note about the guidance (a gap, a workaround you needed, or via `skill_slug` a bug in a specific skill). Anonymize hard: no names, amounts, or PII. (2) `request_review: true` — submits the user's working paper for review by a licensed accountant; also requires `working_paper` (complete), `jurisdiction`, `scenario`, and `contact_email`. The review is a paid professional engagement (never describe it as free); the request is saved to the user's own queue and the response returns a booking link — nothing reaches an accountant until the user engages. Call at most once per explicit user request; never call as a routine closing step, and never solicit the request.

NameTypeReqDescription
contact_emailstringReview only, REQUIRED when request_review: the user's email. Ask for it first.
contact_namestringReview only: the user's name.
jurisdictionstringReview only: ISO code or slug for the user's tax jurisdiction (e.g. 'US-CA').
notestringyesAnonymized 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.
request_reviewbooleantrue 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.
scenariostringReview only: brief description of the situation to review.
skill_slugstringOptional: set when the note is feedback about a SPECIFIC skill (e.g. 'us-sales-tax'). Replaces the old submit_feedback.
tax_yearintegerReview only: tax year, if relevant.
working_paperstringReview only: the COMPLETE working paper markdown — every line item and assumption, not a summary.
NameTypeReqDescription
booking_urlstring
messagestring
note_recordedboolean
statusstring

No examples provided.

start ~473

Front door for any tax / accounting question once you know what the user wants. `intent` is REQUIRED (e.g. 'taxes', 'VAT return', 'set up a company', 'find deductions', 'classify transactions', 'payroll'); pass a jurisdiction too (ISO 2-letter, e.g. 'MT', 'GB', 'US-CA'). If you don't yet have an intent, call `start_help` first. Returns either a clarification request (if jurisdiction is missing) or a ready-to-execute plan with the list of skills to load. Call this FIRST (after start_help if needed) whenever the user asks for tax help.

NameTypeReqDescription
acting_asstringyesREQUIRED. 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 clea…
intentstringyesUser intent — REQUIRED. Free text, e.g. 'taxes', 'VAT return', 'set up a company'.
jurisdictionstringISO 2-letter code or US state code (e.g. 'MT', 'GB', 'US-CA').
reasonstringOne 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.
taxpayer_typestringThe 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; ot…
NameTypeReqDescription
available_intentsarray
available_jurisdictionsarray
expectationsstring
guardrailsarray
intentstring
jurisdictionstring
needsarray
next_actionstring
skills_to_loadarray
statusstring

No examples provided.

start_help ~120

No-argument front door — call this FIRST whenever a user asks 'how can you help me?', 'what can you do?', 'where do I start?', or otherwise opens vaguely (do NOT answer such questions by listing your tools or calling list_jurisdictions). For a signed-in approved accountant it returns a personalized `orientation` briefing (their standing + what their jurisdiction needs + one next action). For everyone else it returns the two scoping questions plus the available intents and jurisdictions. Once you have an intent, call `start(intent, jurisdiction)`.

Input schema present but exposes no named parameters.

NameTypeReqDescription
available_intentsarray
available_jurisdictionsarray
needsarray
next_actionstring
statusstring

No examples provided.

validate_vat_number ~321

Check whether a business's VAT / tax-registration number is real and registered, in real time against the official government registry — and return the registered business NAME and ADDRESS when the authority discloses them. This is an authoritative, unfakeable confirmation you cannot get from a knowledge lookup or from training data. Use it whenever a user wants to verify a supplier's or customer's tax ID: before applying a B2B reverse charge, zero-rating a cross-border sale, or onboarding a vendor. COVERAGE TODAY IS EU ONLY — the 27 EU member states plus 'XI' (Northern Ireland), live via the European Commission's VIES registry (use 'EL' for Greece). Other jurisdictions (e.g. UK/HMRC and beyond) are NOT supported yet but are on the roadmap — for a non-EU number, tell the user live validation isn't available for that country yet rather than guessing a verdict. This is a LIVE external lookup — if the registry is temporarily unavailable it says so plainly rather than inventing an answer.

NameTypeReqDescription
country_codestring2-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.
vat_numberstringyesThe VAT number, with or without the country prefix and spaces, e.g. 'IE6388047V', 'IE 6388047V', or '6388047V'.
NameTypeReqDescription
addressstring|null
business_namestring|null
checked_atstring
confirm_availablebooleanWhether the user can ask a named accountant to confirm the VAT treatment via ask_accountant_to_confirm.
country_codestring|null
full_vat_idstring
human_backingobject|nullNamed accountant(s) who review that country's VAT guidance (guidance-level, not a per-figure sign-off).
messagestring
next_actionstring
sourcestring
source_urlstring
summarystring
validboolean|nulltrue/false verdict from VIES, or null if the service could not be reached (an availability issue, not a verdict).
vat_numberstring
vies_errorstring

No examples provided.