Skip to main content
Glama
AgentTax

AgentTax MCP Server

Official
by AgentTax

AgentTax MCP Server

Tax compliance for MCP tool developers and AI agents, powered by AgentTax.

For MCP tool developers

If you build MCP tools that charge for usage, you have sales tax obligations in states where your buyers are located. Most payment processors don't handle this correctly for digital services.

Add AgentTax to your MCP setup and call track_payment after every payment. That's it.

{
  "mcpServers": {
    "agenttax": {
      "command": "npx",
      "args": ["@agenttax/mcp-server"],
      "env": {
        "AGENTTAX_API_KEY": "atx_live_your_key"
      }
    }
  }
}

After a payment:

track_payment({
  amount: 49.00,
  buyer_state: "TX",
  buyer_zip: "78701",
  description: "MCP API access — monthly subscription",
  payment_id: "pi_stripe_abc123",
  source: "stripe"
})

Returns your tax liability, compliance status, and logs it to your account. All transactions are viewable in your AgentTax dashboard.

Related MCP server: brasilnfe-mcp

Stripe webhook (fully automated)

For fully automatic tax tracking without calling any tool manually, point your Stripe webhook to AgentTax:

  1. In Stripe Dashboard → Developers → Webhooks, add an endpoint:

    https://agenttax.io/api/v1/webhooks/stripe?key=atx_live_YOUR_KEY
  2. Select events: payment_intent.succeeded, checkout.session.completed, invoice.paid, charge.succeeded

  3. Optional: set metadata.work_type on your Stripe products (compute | research | content | consulting | trading) for precise tax classification

Every payment is automatically classified, taxed, and logged. No code changes required.

Requires a billing address on the Stripe payment. Enable full address collection in your Stripe Checkout settings.


Install

Claude Code

claude mcp add agenttax -- npx @agenttax/mcp-server
export AGENTTAX_API_KEY=atx_live_your_key

Claude Desktop / Cursor / Windsurf

Add to your MCP config file:

{
  "mcpServers": {
    "agenttax": {
      "command": "npx",
      "args": ["@agenttax/mcp-server"],
      "env": {
        "AGENTTAX_API_KEY": "atx_live_your_key"
      }
    }
  }
}

Demo mode works without a key (50 calls/day, no account required).


Tools

track_payment

Track a payment you received and calculate your sales tax liability. The primary tool for MCP tool developers.

track_payment({
  amount: 49.00,
  buyer_state: "TX",
  buyer_zip: "78701",
  description: "MCP tool subscription",
  payment_id: "pi_stripe_abc123",
  source: "stripe"
})

Returns:

{
  "payment_tracked": true,
  "amount": 49.00,
  "buyer_state": "TX",
  "tax_owed": 4.04,
  "tax_rate": 0.0825,
  "taxable": true,
  "work_type": "content",
  "transaction_id": "atx_...",
  "compliance_note": "$4.04 sales tax owed to TX. Remit to the state DOR."
}

Transaction classification is automatic. Set description to what you sold for best results, or pass an explicit work_type via the Stripe metadata field.

calculate_tax

Full tax calculation with complete audit trail. Use this when you need jurisdiction details, confidence scoring, and advisories.

calculate_tax({
  role: "seller",
  amount: 500,
  buyer_state: "TX",
  buyer_zip: "78701",
  transaction_type: "saas",
  work_type: "content",
  counterparty_id: "customer-abc",
  is_b2b: false
})

log_trade

Log a buy or sell for capital gains tracking.

log_trade({
  asset_symbol: "COMPUTE",
  trade_type: "buy",
  quantity: 100,
  price_per_unit: 12.50
})

Sell trades return realized gain/loss with cost basis (FIFO, LIFO, or Specific ID).

get_rates

Get tax rates for all 51 US jurisdictions or a single state.

get_rates({ state: "TX", explain: true })

configure_nexus

Set which states you have economic nexus in. Required for sellers to get non-zero tax results.

configure_nexus({
  nexus: {
    TX: { hasNexus: true, reason: "Economic nexus" },
    NY: { hasNexus: true, reason: "Physical presence" }
  }
})

check_health

Check API health and available endpoints.


Get an API Key

curl -X POST https://agenttax.io/api/v1/auth/signup \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "password": "securepass", "agent_name": "my-mcp-server"}'

Save the api_key.key from the response — it's only shown once.

Pricing

Tier

Price

Calls/month

Free

$0

100

Starter

$25/mo

10,000

Growth

$99/mo

100,000

Pro

$199/mo

1,000,000

x402

~$0.001/call

Pay-per-call, no signup

License

MIT

Available Tools

6 tools
calculate_taxB

Calculate US sales tax or use tax for an AI agent transaction. Returns tax amount, rate, jurisdiction, audit trail, and advisories.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYesYour role in the transaction
amountYesTransaction amount in USD
is_b2bNoBusiness-to-business transaction (affects rates in MD, IA)
buyer_zipNo5-digit US zip code for local rate lookup
work_typeNoWhat the AI agent does — drives per-state tax classification
buyer_stateYes2-letter US state code (e.g. TX, NY, CA)
counterparty_idYesIdentifier for the other party in the transaction
seller_remittingNoWhether the seller is already collecting tax
transaction_typeYesType of transaction

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions returning 'audit trail and advisories' which hints at behavior, but doesn't say whether it's read-only, whether it mutates anything, what permissions are needed, or whether the calculation is deterministic. For a 9-param tax calculation tool this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences with no filler; the purpose is front-loaded and the return contents are summarized compactly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and 9 parameters, the description is minimally adequate but leaves real gaps: it doesn't explain when to prefer siblings, what the 'advisories' mean, or how the audit trail is structured. Given the complexity of multi-jurisdiction tax calculation, more context would help an agent call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all nine parameters including enums and constraints. The description adds no parameter-level detail (e.g., that role affects the calculation direction, or that work_type drives per-state classification in tandem with transaction_type). Baseline 3 is appropriate given the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (calculate) and resource (US sales tax / use tax) with a stated scope tied to AI agent transactions. It doesn't differentiate itself from siblings like get_rates or track_payment, but the purpose is clear and accurate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says what it does but never says when to use it versus get_rates, track_payment, or configure_nexus. There's no mention of prerequisites (e.g., need buyer_state and buyer_zip for accuracy, or that this is the right tool before a transaction completes).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_healthB

Check AgentTax API health, available endpoints, pricing tiers, and registry validation status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state whether this is a read-only operation, what the response format looks like, rate limits, or authentication requirements. While 'check' implies a safe read, that is not explicit and the lack of any behavioral detail is a gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the action and enumerates the outputs. It is appropriately sized for a no-arg health check. Slightly more structure (e.g., specifying return format) could improve it, but there is no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, no output schema, and no annotations, the description is reasonably complete for a status tool but could do more to describe what the health report includes or when to call it. It omits any behavioral details such as whether it is safe to call repeatedly or what a failure response looks like. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which sets the baseline at 4 per the rubric. The description adds no parameter information because none is needed. It correctly lists the categories of information returned, which is relevant to what the agent gets back.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb (check) and resource (AgentTax API health) plus enumerates what the check covers: endpoints, pricing tiers, registry validation status. This distinguishes it from siblings like calculate_tax or get_rates, which perform different operations. It would be a 5 if it explicitly named an alternative context, but the verb+resource is specific enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as get_rates or track_payment. There is no mention of frequency, prerequisites, or exclusions. An agent would have to infer usage from the name and sibling context alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_nexusA

Configure which US states you have economic nexus in. Sellers must configure nexus to get non-zero tax results. Requires API key.

ParametersJSON Schema
NameRequiredDescriptionDefault
nexusYesObject with state codes as keys, e.g. { TX: { hasNexus: true, reason: '...' } }

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses the auth requirement ("Requires API key") and the downstream consequence of skipping the call, but for a mutation tool it never says whether this replaces the entire nexus configuration or merges with existing states, nor whether omitted states are cleared.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: purpose, prerequisite, auth requirement. The primary purpose is front-loaded with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter mutation tool with no annotations and no output schema, the description covers purpose, prerequisite, and auth. The one notable omission is the replace-vs-merge semantics of the nexus object, which matters for a configuration mutation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the nested nexus object, hasNexus flag, reason string, and example format are all documented in the schema. The description adds no syntax or format detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (configure) and resource (US state economic nexus), which is clearly distinct from the sibling tools (track_payment, calculate_tax, get_rates). It stops short of explicitly naming or contrasting a sibling, so it lands at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Sellers must configure nexus to get non-zero tax results" gives a concrete when-to-use condition and prerequisite, which is exactly the context an agent needs before calling calculate_tax. It offers no when-not-to-use guidance or alternatives, keeping it at 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ratesA

Get US sales tax rates. Returns rate, digital taxability, SaaS notes, and verification metadata for all 51 jurisdictions or a single state.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNo2-letter state code for single state lookup. Omit for all states.
formatNoResponse format (default: full, compact: machine-optimized, verified: with verification details)
explainNoInclude human-readable explanations for the rate and taxability

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully enumerates the returned data (rate, digital taxability, SaaS notes, verification metadata), which signals an informational lookup, but it says nothing about data recency, sourcing, rate limits, or whether results are cached.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero padding, and the resource plus return payload are front-loaded in the first clause. Every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes on the job of describing return values and does so concisely, listing the four returned data categories. It stops short of explaining what the format enum variants yield or the granularity of 'verification metadata,' leaving minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in the schema, establishing a baseline of 3. The description only reinforces the state-scoping behavior already present in the schema and adds no new semantics for format or explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('US sales tax rates') with explicit scope ('all 51 jurisdictions or a single state'). It is distinguishable from calculate_tax and track_payment by implication, but never names or contrasts a sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Scope usage is implied by 'for all 51 jurisdictions or a single state,' which hints that omitting state broadens the query. There is no explicit when-to-use guidance, no statement of when to prefer calculate_tax instead, and no prerequisites called out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

log_tradeA

Log a buy or sell trade for capital gains tracking. Sell trades return realized gain/loss with cost basis.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoFree-text notes about the trade
quantityYesNumber of units
trade_typeYesBuy or sell
asset_symbolYesAsset identifier (e.g. COMPUTE, GPU_HOUR, ETH)
price_per_unitYesPrice per unit in USD
resident_stateNo2-letter state code for state capital gains tax estimate
specific_lot_idNoLot ID for specific identification method
accounting_methodNoCost basis method (default: fifo)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it does disclose one real trait beyond the schema: sell trades return realized gain/loss with cost basis. However, it says nothing about persistence, whether logging is idempotent, permission/auth needs, or what a buy trade returns, leaving meaningful gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core action and followed by the one notable behavioral distinction. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation tool with no output schema, the description covers the primary action and one return behavior but omits guidance on the cost-basis/accounting-method options and state tax parameter. It is adequate but leaves the agent to rely entirely on the schema for the more specialized parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all eight parameters are already documented in the schema, which sets the baseline at 3. The description adds no parameter-level meaning (e.g., when to supply specific_lot_id vs accounting_method), so it neither compensates nor detracts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (log) and resource (buy/sell trade) plus the domain purpose (capital gains tracking), which is concrete enough for an agent to act on. It does not differentiate itself from siblings like track_payment or calculate_tax, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for capital gains tracking' implies when the tool is relevant, but there is no explicit when-to-use vs when-not guidance and no sibling alternative named (e.g., track_payment for non-asset transactions). Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

track_paymentA

Track a payment you received and calculate your sales tax liability. Call this after receiving any payment — Stripe, x402, or direct. Automatically classifies the transaction, calculates tax owed, and logs it to your AgentTax account.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesPayment amount in USD
is_b2bNoBuyer is a business (affects rates in MD, IA, NJ)
sourceNoPayment processor used
buyer_zipNoBuyer's 5-digit zip code for local tax rates (more precise)
payment_idNoYour payment reference ID for deduplication (Stripe payment_intent ID, x402 receipt, invoice number, etc.)
buyer_stateYes2-letter US state where the buyer is located (e.g. TX, NY, CA)
descriptionNoWhat you sold — used to classify the transaction (e.g. 'API access', 'MCP tool subscription', 'compute credits', 'AI consulting')

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden. It usefully discloses that the call classifies the transaction, computes tax owed, and writes a record to the AgentTax account, which is meaningful side-effect context. It omits idempotency behavior (dedup is only hinted at via the payment_id schema field), auth/account requirements, and whether the logged liability can be amended or removed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary action and its trigger, with zero filler. The follow-on sentence covers the automatic behaviors compactly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter write tool with no annotations and no output schema, the description is adequate but thin on outcomes: it says tax is calculated and logged but never indicates what the caller gets back (computed liability, classification result, receipt/id). An agent cannot tell whether it must read the result elsewhere or whether the call is safe to retry.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 7 parameters have schema descriptions, so baseline is 3. The prose echoes the source options ('Stripe, x402, or direct') but adds no format, precedence, or default guidance beyond what the schema already states (e.g. it never mentions buyer_state, amount, or the b2b/zip rate effects).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (track) plus the resource (a payment received), and adds the secondary effects: auto-classification, tax calculation, and logging to an AgentTax account. It does not explicitly contrast itself with siblings like calculate_tax, so the agent gets a clear purpose but no differentiation from the tax-only alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger: 'Call this after receiving any payment — Stripe, x402, or direct,' which tells the agent the timing and the covered payment sources. It stops short of naming when not to use it or pointing to calculate_tax for hypothetical or non-received-payment tax estimates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv1.0.0
    • First observedcalculate_tax
    • First observedcheck_health
    • First observedconfigure_nexus
    • First observedget_rates
    • First observedlog_trade
    • First observedtrack_payment

TDQS

A3.6/5.0

Scored across 6 tools

Disambiguation4/5

Most tools target distinct concerns: get_rates fetches rates, configure_nexus sets state configuration, check_health reports status, and log_trade handles capital gains. However, track_payment and calculate_tax overlap significantly, since track_payment also calculates tax owed, making it unclear when an agent should use one versus the other.

Naming Consistency5/5

All six tools follow a clean verb_noun snake_case pattern: track_payment, calculate_tax, get_rates, configure_nexus, check_health, log_trade. The convention is fully predictable and readable.

Tool Count5/5

Six tools is well-scoped for a niche tax/accounting server. Each tool covers a distinct lifecycle step (configure, fetch rates, calculate, track, log, health-check) without bloat.

Completeness3/5

The surface covers configuration, calculation, and logging, but there is no way to retrieve or list previously logged payments or trades, and no update/delete or reporting/filing operations. Logging without a corresponding read-back creates a notable dead end for agents.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    A sovereign, MIT-licensed MCP server for US tax operations, enabling offline-capable and self-hostable tax workflow management.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server that exposes Brazilian tax infrastructure as tools, resources, and prompts, enabling AI agents to emit and manage fiscal documents (NF-e, NFC-e, NFS-e, CT-e, MDF-e, DC-e) through natural language.
    -
  • A
    license
    A
    quality
    B
    maintenance
    Payment infrastructure MCP server enabling AI agents to make gasless USDC payments on Base and JIT single-use virtual card checkouts, with zero-trust card handling, merchant checkout hints, and signed receipts.
    13
    67 npm
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables MCP hosts like Claude, VS Code, Cursor, and others to discover payment methods, create payment links, verify payments, inspect invoices, and manage refunds through focused tools, with a guided safe payment workflow and a restricted generic API escape hatch.
    7
    22 npm
    MIT