Reference

MCP server & tools

OpenAccountants runs a Model Context Protocol server that any MCP-compatible AI agent can call for tax data, rate lookups, cross-border planning, and handoff to a warranted accountant. The catalogue below is generated from the live server, so it always matches what the agent can actually call.

Connect

  • Endpoint: POST /api/mcp — Streamable HTTP, JSON-RPC 2.0 (server openaccountants-mcp v1.4.0).
  • Install: add the connector from /connect — it works with any MCP-compatible agent.
  • Auth: tool calls require sign-in (OAuth). Anonymous callers get a 401 with an OAuth challenge. The fully anonymous surface is the HTTP API.
  • Limits: 60 requests/minute per IP; 1,000 requests/day per signed-in account.

36 tools, generated from the live server catalogue. Every call requires sign-in through the connector. * marks a required parameter.

Orientation

Scope a request and discover what's covered.

startAny signed-in caller

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.

ParameterTypeDescription
intent *stringUser 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').
start_helpAny signed-in caller

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)`.

list_jurisdictionsAny signed-in caller

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.

list_verifiersAny signed-in caller

Returns named licensed accountants who have signed off on OpenAccountants jurisdictions. Use ONLY when the user explicitly asks to see the verifier network or 'who verified this skill'. Do NOT use this to check whether a jurisdiction is covered before calling request_accountant_review — just call request_accountant_review directly, it routes to the right person regardless.

ParameterTypeDescription
jurisdictionstringOptional ISO code filter — only return verifiers for this jurisdiction.

Skills — discovery & retrieval

Find and load the cited rules an answer is built from.

list_skillsAny signed-in caller

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.

ParameterTypeDescription
jurisdictionstringFilter by jurisdiction code, e.g. 'US', 'MT', 'DE'
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-wealth-tax, references, sector-guidance, tooling.
rolestringFilter by pipeline role: foundation, compute, orchestrator, reference.
categorystring(Legacy) display label; prefer domain/role.
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).
search_skillsAny signed-in caller

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.

ParameterTypeDescription
query *stringSearch term, e.g. 'home office deduction', 'crypto capital gains', 'reverse charge'
jurisdictionstringOptional ISO 2-letter country code to limit the search
domainstringOptional accounting domain to limit the search (e.g. 'vat-gst', 'payroll', 'income-tax', 'crypto').
get_skillAny signed-in caller

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

ParameterTypeDescription
slug *stringSkill slug, e.g. 'us-schedule-c-and-se-computation'
get_skill_sectionsAny signed-in caller

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.

ParameterTypeDescription
slug *stringSkill slug
section_indexintegerOptional. Return only this section (matches the `index` from get_skill's `section_index`).
section_indicesarrayOptional. Return only these sections.

Rates & cross-border

Indexed numbers and multi-country planning.

get_ratesAny signed-in caller

Returns the machine-readable annual rates for a given jurisdiction + tax year. Covers federal brackets, Social Security wage base, retirement plan limits (401(k), IRA, HSA), FEIE cap, gift/estate exemptions, 1099-K thresholds, mileage rates, supplemental wage rates, capital gains brackets, CTC. Currently US federal for tax years 2025 and 2026. Use this when the user asks specific dollar amounts that change yearly (e.g. '2025 401(k) limit', 'this year's Social Security wage base').

ParameterTypeDescription
jurisdiction *stringJurisdiction code. Currently only 'US' (US federal) is supported.
tax_year *integerTax year (e.g. 2025, 2026).
compare_jurisdictionsAny signed-in caller

Quick SIDE-BY-SIDE loader. Loads the income-tax skills for 2–5 jurisdictions as independent blocks so the agent can produce a static comparison (effective rates at a given income level, headline differences, entity-choice implications). It does NOT sequence events or bridge treaties. Use for 'should I incorporate in X or Y?', 'compare tax in MT vs IE', or any standalone side-by-side. NOTE: if the person's facts actually INTERACT across borders (a US person abroad, a residence change, a foreign trust/company, an expatriation), use `plan_cross_border` instead — that tool returns a sequenced plan and the treaty bridge this one deliberately leaves out. The two are siblings: this one for static compares, plan_cross_border for live cross-border planning.

ParameterTypeDescription
jurisdictions *arrayArray of 2-5 ISO codes (e.g. ['MT', 'IE'] or ['US-CA', 'US-TX', 'US-FL']).
entity_typestringOptional taxpayer/entity type for the comparison context. One of the listed values.
incomestringOptional: income figure with currency, e.g. 'EUR 80000' or 'USD 250000'.
plan_cross_borderAny signed-in caller

THE cross-border tool. Use this — not compare_jurisdictions — whenever a person's facts touch more than one country: a US citizen living abroad, a dual resident, someone changing residence, a non-dom, an expatriating citizen, or an owner of a foreign trust/company. Unlike compare_jurisdictions (which loads each country as an independent block and disclaims treaty/PE interaction), this returns a SEQUENCED plan: it builds the residency/citizenship/domicile map, identifies the country skills AND the international topic skills (FEIE/FTC, FBAR/FATCA, CFC/GILTI, foreign trusts, exit tax) the facts engage, fixes the ORDER of events (order changes the tax — e.g. sever residency before vs. after a sale), names the verifier per country, states the treaty bridge for double-tax relief, and mandates a request_accountant_review hand-off to the lead country's accountant. Always load `cross-border-tax-router` + `cross-border-tax-workflow-base` first (returned in `load_first`). Output is research-grade (tier 2) until a licensed human signs off.

ParameterTypeDescription
citizenshiparrayCitizenship(s) held — ISO codes, slugs, or names (e.g. ['US', 'malta']). Drives citizenship-based taxation (US) and exit-tax tests.
tax_residencesarrayCountry(ies) of tax residence now, and any country being moved to/from. First entry is treated as the primary residence.
domicilestringOptional: domicile, if a remittance-basis country (UK, Malta, Ireland, Cyprus) is involved.
eventstringThe asset/income/event in question and ideally WHEN — e.g. 'sell an Australian discretionary trust in 2026', 'renounce US citizenship', 'exercise founder options before moving'.
assetsarrayOptional: foreign entities/assets owned — companies, trusts, partnerships, pensions, foreign funds. Drives the anti-deferral and reporting skills.
event_timingstringWhen is the key event expected to occur? e.g. 'sale expected to complete in 6 weeks', 'planning to move in 3 months', 'still conceptual'. Drives urgency assessment and scenario feasibility.

Accountant handoff

Route a user to a warranted accountant.

request_accountant_reviewTaxpayers only

THE handoff tool. Call this for ANY jurisdiction whenever (a) the user wants their working paper reviewed before filing, (b) the situation needs professional sign-off, (c) it involves cross-border or high-stakes advice, (d) the user asks to speak to an accountant, or (e) real money is at stake. BEFORE calling this tool: ask the user for their email address (contact_email) and name (contact_name) — the accountant needs these to follow up if the user does not book via Calendly. Do NOT proceed without at least contact_email. Do NOT call list_verifiers first. The network handles coverage. CRITICAL: always pass the full working_paper so the reviewer sees the computation before the call.

ParameterTypeDescription
jurisdiction *stringISO code or slug for the user's tax jurisdiction (e.g. 'ZA', 'US-CA', 'malta'). Required.
scenario *stringBrief description of the situation the user needs reviewed — e.g. '2025 sole-trader Schedule C with home office + crypto disposals + new dependant', 'considering S-corp election', 'multi-state RSU vest'. The verifier reads this before the call.
contact_emailstringUser's email address — REQUIRED. Ask the user for this before calling the tool. The accountant needs it to follow up if the user does not book via Calendly. Do not submit without it.
contact_namestringUser's name — ask for this alongside the email. The accountant uses it to address the user before the call.
tax_yearintegerTax year the review concerns, if relevant.
urgencystringurgent = filing in <2 weeks; standard = current filing season; planning = future-year strategy.
working_paperstringThe full working paper — classified transactions, computation, draft return lines, issue map — as plain markdown. ALWAYS pass this when you have produced any structured tax output. Without it, the accountant walks into the call blind. With it, they can review before the call and the user gets a better outcome. Capped at 512 KB UTF-8; trim if needed. No worksheet JSON required — the prose working paper alone is sufficient to create the consultation request.
working_paper_formatstringFormat hint for the working paper. Default 'markdown'.
worksheetobjectOptional structured worksheet (JSON object) conforming to WORKSHEET_CONTRACT.md: { jurisdiction, tax_type, period, currency, lines:[{net_box,vat_box,net,rate,vat}], boxes:[{box,label,amount,sources:[{label,amount}]}], result:{type,amount} }. Provide for VAT returns where box-level reconciliation can be foot-checked. Not required for income tax or other working papers — the prose working_paper alone is sufficient.
source_urlstringOptional public URL where the working paper can also be viewed (e.g. a Google Doc the user authored, a Notion page).

Feedback & quality

Report issues and grade computed output.

submit_feedbackAny signed-in caller

When the user finds an error in a skill, says rates look outdated, or wants to suggest an improvement, call this to generate a pre-filled GitHub Issue URL. The URL opens in the user's browser with the report partially filled — they review and submit. This creates a public feedback loop that maintains skill quality over time. Use whenever the user says 'this seems wrong', 'the rate is outdated', 'add this rule', or asks how to flag an issue.

ParameterTypeDescription
skill_slug *stringSlug of the skill the feedback relates to (e.g. 'malta-income-tax').
feedback_typestringCategory of feedback.
description *stringWhat's wrong, outdated, or missing — be specific.
user_jurisdictionstringOptional: the user's jurisdiction context for the report.
submit_skill_verdictOnboarded contributors

Call this AFTER the signed-in user has run a skill and reviewed its REAL output (e.g. a computed VAT return), to record their structured quality verdict against the skill and its current version. This is the highest-value feedback the platform collects — especially from accountants, whose verdicts are treated as gold. Use when the user is acting as a REVIEWER grading the AI's output ('that return is wrong', 'the figures came out off', 'rate this', 'here's what the skill got wrong'). This is product-quality QA on the SKILL — NOT a taxpayer handoff (for that, use request_accountant_review) and NOT a generic bug report (that's submit_feedback). Pass the worksheet the skill produced when you have one; the server foot-checks it.

ParameterTypeDescription
skill_slug *stringSlug of the skill that produced the output being judged, e.g. 'malta-vat-return'. Required.
rating *stringThe reviewer's overall verdict on the skill's output. solid = correct and file-ready; minor_issues = small/cosmetic problems; significant_issues = materially wrong figures; dangerous = would cause a wrong filing or a penalty. Required.
scorenumberOptional 0-100 quality score the reviewer may add.
scenariostringWhat was being computed — e.g. 'Q1 2026 Malta VAT3, standard-rated sales + EU acquisitions + a blocked entertainment input'.
output_summarystringProse summary of what the skill actually produced — the figures / return lines the reviewer is judging.
worksheetobjectOptional structured worksheet JSON the skill produced (WORKSHEET_CONTRACT.md shape: { jurisdiction, tax_type, period, currency, lines:[...], boxes:[...], result:{type,amount} }). If provided, the server foot-checks the arithmetic and stores the recon status.
findingsarrayStructured corrections — each item identifies a figure/box and what it was vs. what it should be.
suggestionstringFree-text fix or improvement for the skill.

Workflows

Guided, accountant-authored procedures that wire skills together.

list_workflowsAny signed-in caller

List published OpenAccountants workflows — guided, multi-step procedures (e.g. 'Prepare a Malta VAT return') built from skills. Optionally filter by jurisdiction (e.g. 'MT'), workflow_type ('self-employed' | 'vat' | 'payroll' | 'corporate' | 'cross-border' | 'capital-gains' | 'crypto'), or a free-text query. Paginated.

ParameterTypeDescription
jurisdictionstringJurisdiction code, e.g. 'MT', 'US-CA'
workflow_typestringOne of the 7 workflow types
querystringFree-text match on title/description
limitintegerMax results (default 50, max 100)
offsetintegerPagination offset
get_workflowAny signed-in caller

Fetch a workflow by slug with its ordered nodes (guided steps) and the skills it's built from. Public callers see published content only; verified accountants/admins also see draft nodes for workflows in their jurisdiction (use this to review before publishing).

ParameterTypeDescription
slug *stringWorkflow slug, e.g. 'mt-vat'
inspect_workflowAny signed-in caller

Return a VISUAL map (Mermaid flowchart) of a workflow's nodes wired to their skills, colour-coded by health (green = published + wired, yellow = draft, red = unwired or flagged), plus a structural lint: unwired nodes, tier mismatch (tier-1 workflow on unverified skills), wired skills that are unpublished or wrong-jurisdiction, trigger collisions, and empty published workflows. Use before publishing or licensing a workflow. RENDER the `mermaid` field as a diagram for the user, then summarise the findings.

ParameterTypeDescription
slug *stringWorkflow slug, e.g. 'mt-self-employed'
create_workflowApproved accountants

Design a NEW guided workflow for a jurisdiction + type, optionally seeding it with the skills it's based on. Creates a DRAFT (not public until publish_workflow). Create-or-adopt: if a workflow for that (jurisdiction, workflow_type) already exists it is returned for editing instead of duplicated. Verified accountants only, in their approved jurisdictions.

ParameterTypeDescription
title *stringHuman title, e.g. 'Prepare a Malta VAT return'
jurisdiction *stringJurisdiction code, e.g. 'MT'
workflow_type *stringself-employed | vat | payroll | corporate | cross-border | capital-gains | crypto
descriptionstring
triggersarrayPhrases that route users here
skill_slugsarraySkills to attach, in order (first=intake, last=assembly)
update_workflowApproved accountants

Update a workflow's title, description, or trigger phrases. Jurisdiction, type, and slug are immutable (create a different workflow instead). Verified accountants (in-jurisdiction) + admins.

ParameterTypeDescription
slug *string
titlestring
descriptionstring
triggersarray
add_workflow_skillApproved accountants

Attach a published skill (same jurisdiction) to a workflow's ordered skill set. Recomputes the workflow tier. Verified accountants (in-jurisdiction) + admins.

ParameterTypeDescription
workflow_slug *string
skill_slug *string
step_orderinteger
rolestringintake | content | assembly | foundation | reference
remove_workflow_skillApproved accountants

Detach a skill from a workflow's skill set and recompute tier. Verified accountants (in-jurisdiction) + admins.

ParameterTypeDescription
workflow_slug *string
skill_slug *string
add_workflow_nodeApproved accountants

Add a guided step (node) to a workflow. Creates a DRAFT node. Optionally wire it to the skill that performs its computation (skill_slug). Verified accountants (in-jurisdiction) + admins.

ParameterTypeDescription
workflow_slug *string
title *string
summarystring
key_questionsarray
key_outputsarray
guidancestringHow the agent should run this step
skill_slugstringSkill this node runs (makes it 'implemented')
positionintegerOrder; omit to append
update_workflow_nodeApproved accountants

Edit a node's content, wire it to a skill (skill_slug), or reorder it (position). Editing a PUBLISHED node returns it to draft until re-published. Verified accountants (in-jurisdiction) + admins.

ParameterTypeDescription
node_id *string
titlestring
summarystring
key_questionsarray
key_outputsarray
guidancestring
skill_slugstring
positioninteger
archive_workflow_nodeApproved accountants

Soft-delete a node. Refused if it would leave a published workflow with no published nodes. Verified accountants (in-jurisdiction) + admins.

ParameterTypeDescription
node_id *string
publish_workflow_nodeApproved accountants

Promote a draft node to published (visible on the site). Restricted to the node's creator or an admin.

ParameterTypeDescription
node_id *string
publish_workflowApproved accountants

Make a workflow live on the site. Preconditions: at least one published node, and every wired skill is published and in the same jurisdiction. Restricted to the workflow's creator or an admin.

ParameterTypeDescription
slug *string

Verification & contribution

Contribute new skills and submit accountant verifications.

submit_verificationOnboarded contributors

AUTHENTICATED. Bulk-apply a reviewed set of facts as the 'submission' JSON (the reviewed rows — Status / Corrected value / Source / Notes filled in), carrying each sheet's slug + base_version_id. It's validated (rows reviewed, known/published skill, base version still live), then applied IN-PROCESS: reconciled by fact_key, judged by an advisory reviewer, and the document is regenerated deterministically from facts — no markdown is rewritten by an LLM and nothing touches a git repo. A skill with a live base applies immediately; the reviewer's pushback comes back as non-blocking `warnings`. For a single fact or a quick spot-fix, prefer submit_fact_verification (no base_version bookkeeping). Requires sign-in and completed onboarding.

ParameterTypeDescription
submissionobjectThe reviewed facts as JSON. One sheet per skill; one row per fact.
start_skill_draftOnboarded contributors

AUTHENTICATED. Begin authoring a BRAND-NEW skill to contribute to the OpenAccountants directory (skills are markdown playbooks that teach an AI agent to do a bounded task with cited rules — they need not be tax/accounting). Pass the user's `intent` in natural language. Returns a ready-to-execute `authoring_prompt`: run it directly — its first step interviews the user for the specifics this skill needs (scope, jurisdiction/domain, the exact rules/computations, and the source for each claim), its second authors `skill.md` following the guidelines. Then call submit_skill. This tool does NOT write the skill and does NOT check for duplicates (the reviewer agent dedups on submit). Requires sign-in and completed onboarding.

ParameterTypeDescription
intentstringWhat the user wants the skill to do, in natural language.
jurisdictionstringOptional jurisdiction code (e.g. 'MT', 'US-CA') or 'general' for a domain-agnostic skill.
submit_skillOnboarded contributors

AUTHENTICATED. Submit an authored `skill_markdown` (the full skill, frontmatter + body) for inclusion in the OpenAccountants directory. It's lint-checked (parseable frontmatter, required sections, well-formed slug not colliding with an existing skill, reasonable size); malformed input is rejected synchronously with the reason. Otherwise the skill is CREATED immediately at Q2 (source-cited draft) and published: the prose is deconstructed into facts so the skill enters the same keyed model as a verified one, and the served document is generated from those facts. There is NO human review gate — you are liable for the skill you author; it's clearly marked unverified until a CPA/EA verifies it to Q1. Requires sign-in and completed onboarding.

ParameterTypeDescription
skill_markdown *stringThe complete authored skill (YAML frontmatter + markdown body).
slugstringProposed slug (lowercase kebab). Defaults to the frontmatter `name` if omitted.
namestringHuman-readable skill name (defaults to the frontmatter `name`).
jurisdictionstringJurisdiction code, or 'general'.
categorystringCategory (tax topic or non-tax domain).
depends_onarrayBase/parent skill slugs this loads on top of.

Other tools

search_rulesAny signed-in caller

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.

ParameterTypeDescription
jurisdictionsarrayISO codes to include, e.g. ['MT','US-CA']. Omit for all jurisdictions.
domainsarrayAccounting domains, e.g. ['vat-gst','income-tax']. See list_rule_facets.
rolesarraySkill roles: foundation | compute | orchestrator | reference.
block_typesarrayRule kinds to include. Default = all of these (framing prose + workflow steps are excluded).
statusesarrayVerification statuses to include. Default = all (each rule is tagged).
statusstringShorthand for `statuses`: 'verified' = accountant- + research-verified only. Default 'all'.
tax_yearintegerLimit to a tax year, e.g. 2025.
topicstringFilter by a fact topic.
textstringFree-text search over each rule's label, value, and citation.
limitintegerMax rules to return (default 200, max 500).
offsetintegerPagination offset — pass the previous response's next_offset.
list_rule_facetsAny signed-in caller

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.

retract_skillAny signed-in caller

AUTHENTICATED. Unpublish a skill YOU created (e.g. a submit_skill draft you want to take back). Pass the `slug`. It's hidden from the directory immediately; its facts are kept and an admin can re-publish. You can only retract a skill you contributed (admins can retract any). Requires sign-in and completed onboarding.

ParameterTypeDescription
slug *stringSlug of the skill to retract (unpublish).
list_verification_targetsAny signed-in caller

AUTHENTICATED (approved accountants). Find what needs your review. Call with NO slug for a TRIAGE summary of skills in YOUR approved jurisdiction(s) — each with counts of verified vs. unverified facts, most-unverified first — so you can pick one. Call with a `slug` to get that skill's facts in CHUNKS (default 40) — each fact has a stable `row` number (use it to reference facts in chat) and a `key` (pass to submit_fact_verification). The response includes a `sections` breakdown; for a large skill, review one section at a time by passing `topic`, and page with `offset`. This is the in-chat replacement for exporting a verification workbook. Always scoped to your approved jurisdictions.

ParameterTypeDescription
slugstringReturn one skill's facts (omit for the jurisdiction triage summary).
jurisdictionstringLimit the triage to one of your approved jurisdictions (e.g. 'MT'). Defaults to all of them.
statusstringPass 'unverified' to list only skills (triage) or facts (single-skill) that are still unverified.
querystringTriage: optional free-text filter on skill name/slug.
limitintegerTriage: max skills (default 50, max 200). Single-skill: facts per chunk (default 40, max 200).
topicstringSingle-skill: review only one section (from the `sections` breakdown) at a time.
offsetintegerSingle-skill: page offset into the (optionally topic-filtered) facts.
submit_fact_verificationAny signed-in caller

AUTHENTICATED (approved accountants). Attest or correct one or more individual facts of a skill — directly, no workbook. Pass the skill `slug` and `rows`: one entry per fact you're acting on, each with its `fact_key` (from list_verification_targets) and a `status` — 'correct' (attest as-is), 'needs-correction' (fix the value and/or citation; a `source` is REQUIRED), or 'needs-context' (flag as unsure with a `note`, no fix). Your change applies IMMEDIATELY and the served skill is regenerated from its facts — you carry the liability. An automated reviewer checks each correction; any concern comes back as a non-blocking `warning` and the change STILL applies. Call preview_fact_verification first if you want the reviewer's take before committing. Scoped to your approved jurisdictions.

ParameterTypeDescription
slug *stringSkill slug, e.g. 'us-crypto-tax'.
rows *arrayOne entry per fact you're verifying/correcting.
preview_fact_verificationAny signed-in caller

AUTHENTICATED (approved accountants). Dry-run of submit_fact_verification — IDENTICAL arguments, but writes NOTHING. Returns whether the change would apply and any reviewer `warnings`, so you can see the automated reviewer's take (e.g. 'that citation looks like a placeholder') before committing. Then call submit_fact_verification to apply.

ParameterTypeDescription
slug *stringSkill slug.
rows *arraySame shape as submit_fact_verification.rows.
list_my_verificationsAny signed-in caller

AUTHENTICATED (approved accountants). Your OWN recent verification submissions, newest first — each receipt records which skill(s) you touched, whether the change applied, the fact count, the jurisdiction, and the date. Read-only; not scoped to one jurisdiction (you see all your own work).

ParameterTypeDescription
limitintegerMax receipts to return (default 20, max 100).
Building tax intelligence into a product? The AI-agent guide walks through a typical call sequence, and /for-platforms covers embedding it under your brand.