
Validate and geocode a US or Canadian address, returning AvaTax-normalized address candidates and the tax jurisdictions that apply to it. Useful before create_transaction to confirm an address resolves cleanly.
List a company's exemption certificates, with optional $filter and pagination.
Retrieve a single exemption certificate by ID. Use list_certificates to find valid IDs.
Create a new exemption certificate for a company. Use discoverexemptionreasons for exemptionreasonid, and discoverentityusecodes if the exemption is tied to a customer usage type. Requires the company be provisioned for exemption certificates first — use getcertificatesetup, and requestcertificate_setup if status is 'NotProvisioned'.
Update an existing exemption certificate. Only provided fields are changed.
Revoke and delete an exemption certificate. This cannot be undone.
List Avalara's supported entity use codes (customer/usage types for tax exemptions). Use this to find valid entityUseCode values for createtransaction line items and createcertificate.
List Avalara's supported certificate exemption reasons. Use this to find the exemptionreasonid required by create_certificate.
Check whether a company is provisioned for AvaTax's exemption certificate module (CertCapture). createcustomer and createcertificate fail until this returns status='Provisioned' — if it returns 'NotProvisioned', call requestcertificatesetup first.
Provision a company for AvaTax's exemption certificate module (CertCapture). Required once per company before createcustomer or createcertificate will work. Use getcertificatesetup to check status; provisioning can take a few minutes to complete after this call.
List companies on this Avalara account, with optional $filter/$orderBy and pagination. Use to find a company's internal id/companyCode before calling getcompany, createnexus, createitem, createtransaction, etc.
Retrieve a single Avalara company by internal ID. Use list_companies to find valid IDs.
Create a new company on this Avalara account. companyCode must be unique on the account.
Update an existing Avalara company. Only provided fields are changed. Use get_company to check current values first.
Delete a company from this Avalara account. This cannot be undone. Use get_company to verify the record first.
List a company's customers, with optional $filter/$orderBy and pagination.
Retrieve a single customer by customer code. Use list_customers to find valid codes.
Create a new customer record for a company. customerCode must be unique within the company. Requires the company be provisioned for exemption certificates first — use getcertificatesetup, and requestcertificatesetup if status is 'NotProvisioned'.
Update an existing customer. Only provided fields are changed.
Delete a customer record. This cannot be undone.
List a company's product/item catalog, with optional $filter/$orderBy and pagination.
Retrieve a single item by internal ID. Use list_items to find valid IDs.
Create a new product/item for a company. Use discovertaxcodes to find the correct taxCode so transactions referencing this item's itemCode calculate tax correctly.
Update an existing item. Only provided fields are changed.
Delete an item. This cannot be undone.
List a company's physical business locations, with optional $filter and pagination.
Retrieve a single location by internal ID. Use list_locations to find valid IDs.
Create a new physical business location for a company. locationCode must be unique within the company.
Update an existing location. Only provided fields are changed.
Delete a location. This cannot be undone.
List a company's nexus declarations (where it has a tax obligation), with optional $filter and pagination.
Retrieve a single nexus declaration by ID. Use list_nexus to find valid IDs.
Declare a new nexus (tax obligation) for a company in a country/region. Use list_companies to find the companyId. For a state/region nexus, AvaTax also requires a parent country-level nexus to exist first (e.g. 'US' before 'US/CA') — this tool declares that automatically if it's missing.
Update an existing nexus declaration. Only provided fields are changed. Use get_nexus to check current values first.
Delete a nexus declaration. This cannot be undone. Use get_nexus to verify the record first.
Browse Avalara's global system tax code library (not company-specific). Use this to find the correct taxCode value for createitem, createtransaction line items, and createtaxcode.
List a company's own custom tax codes (distinct from Avalara's global library — use discovertaxcodes for that).
Retrieve a single company custom tax code by ID. Use listcompanytax_codes to find valid IDs.
Create a new custom tax code for a company. For standard tax codes, prefer discovertaxcodes.
Update an existing company custom tax code. Only provided fields are changed.
Delete a company custom tax code. This cannot be undone.
Calculate tax on a new transaction. Use discovertaxcodes for line taxCode, discoverentityusecodes for exemptions, listcustomers/listitems for customerCode/itemCode. Set commit=true to finalize immediately, or call committransaction later. Use an '...Invoice' type (the default) unless this is a throwaway estimate — '...Order' types aren't saved by AvaTax.
Retrieve a single transaction by company code and transaction code, including line items and per-jurisdiction tax detail. Use listtransactions or createtransaction's response to find the code. Pass document_type matching how it was created (e.g. 'SalesOrder') — AvaTax defaults to looking for 'SalesInvoice' and returns not-found for any other type if this is omitted.
List transactions for a company, with optional $filter/$orderBy and pagination. AvaTax silently limits results to a recent date window when filter is omitted — pass a filter like "date ge '2024-01-01'" to see older transactions.
Commit a transaction for tax reporting. Once committed it counts toward filings; use voidtransaction to reverse it instead of deleting. Pass documenttype matching how it was created — AvaTax defaults to 'SalesInvoice' and returns not-found for any other type if this is omitted.
Void a transaction, cancelling it for tax reporting purposes. Use gettransaction to verify the record first. Pass documenttype matching how it was created — AvaTax defaults to 'SalesInvoice' and returns not-found for any other type if this is omitted.
Correct a previously created transaction by replacing it with new data. Use gettransaction first to see the current state. Pass documenttype matching how it was created — AvaTax defaults to 'SalesInvoice' and returns not-found for any other type if this is omitted.
Create a refund for a previously committed transaction. Pass document_type matching how it was created — AvaTax defaults to 'SalesInvoice' and returns not-found for any other type if this is omitted.
Check whether the stored Avalara Account ID, License Key, and environment are valid by pinging AvaTax.

In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now