Ziptax Sales Tax API

tax.zipPublished by zip.taxv1.0.5Updated Oct 24, 2026

Real-time US and Canadian sales and use tax rates by address or geo coordinates.

VerifiedStreamable HTTPWeb executableFinanceBusiness & Commerce

Overview

AI-generated overview

Remote MCP server that lets an assistant look up real-time US and Canadian sales and use tax rates by address, coordinates or postal code, and check account API

What you can do
Look up sales and use tax rates for a US or Canadian location by street address, latitude/longitude pair, or postal code, with jurisdiction-level breakdowns for state, county, city and district. Request historical rates for a past month, product taxability codes, unincorporated-area adjustments and Tennessee Single Article Tax calculations, subject to plan. Check account usage metrics, request limits and quota for the authenticated key.
When to use it
Useful when an assistant needs current sales or use tax rates for a specific US or Canadian address, ZIP or postal code, or coordinates, for example in quoting, invoicing or tax research, or when you want to monitor remaining API quota.
Requirements
A remote Streamable HTTP endpoint; no local runtime needed. A Ziptax API key is required, sent in the X-API-KEY header (recommended) or as a Bearer token in the Authorization header. A key can be obtained from the Ziptax platform. Some features (Canadian lookups, historical rates, taxability codes) require a Pro or Enterprise plan.
Before you install
The API key is a secret; keep it out of URLs and logs, since keys in URLs can end up in logs. Lookups send the queried address or coordinates to the Ziptax API. Usage is metered against your plan's request limit, and some parameters require a paid plan. Both tools are read-only and do not modify data.

Installation

In SourceWeft

  1. Open Ziptax Sales Tax API in the dashboard and add it to a workspace.
  2. Connect X-API-KEY credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/tax.zip%2Fziptax/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "ziptax-sales-tax-api": {
      "type": "http",
      "url": "https://mcp.zip-tax.com/",
      "headers": {
        "X-API-KEY": "<YOUR_API_KEY>"
      }
    }
  }
}

README

Ziptax MCP Server

An HTTP Model Context Protocol (MCP) server that gives AI agents real-time US and Canadian sales and use tax rates from the Ziptax API.

Once connected, an agent can:

  • Look up sales and use tax rates by street address, latitude/longitude, or postal code.
  • Get jurisdiction-level breakdowns (state, county, city, and district).
  • Check account usage and quota.

Official documentation: docs.zip.tax: MCP Server

Connection Details

Endpointhttps://mcp.zip-tax.com/
MethodPOST
TransportStreamable HTTP (most clients call this HTTP)
SessionsStateless
Server nameZipTax Sales Tax API
Upstream APIZiptax API v60

Authentication

Send a Ziptax API key as an HTTP header. Two header methods are supported:

http
X-API-KEY: your-api-key
http
Authorization: Bearer your-api-key
  • X-API-KEY is recommended. If both headers are present, X-API-KEY takes priority.
  • The Bearer scheme is case-insensitive.
  • Do not pass API keys in the URL. Keys in URLs can end up in logs.

Get an API key at platform.zip.tax.

Client Configuration

Replace your_api_key with your Ziptax API key.

Claude Code

bash
claude mcp add --transport http ziptax https://mcp.zip-tax.com/ --header "X-API-KEY: your_api_key"

Claude Desktop

Add this block to claude_desktop_config.json:

json
{  "mcpServers": {    "ziptax": {      "type": "http",      "url": "https://mcp.zip-tax.com/",      "headers": {        "X-API-KEY": "your_api_key"      }    }  }}

Cursor

Go to Settings → MCP and add a server:

  • Name: Ziptax MCP Server
  • Type: HTTP
  • URL: https://mcp.zip-tax.com/
  • Headers: X-API-KEY: your_api_key

Devin

Add the Ziptax integration from the MCP Marketplace, or configure it under Settings → MCP Marketplace → Add Your Own:

json
{  "mcpServers": {    "ziptax-sales-tax-api": {      "transport": "shttp",      "url": "https://mcp.zip-tax.com/",      "headers": {        "X-API-KEY": "$ZIPTAX_API_KEY"      }    }  }}

Store the key as a secret named ZIPTAX_API_KEY in Devin's Secrets Manager.

Any Other MCP Client

Any client that supports the Streamable HTTP transport can connect:

  • Type: HTTP
  • URL: https://mcp.zip-tax.com/
  • Headers: X-API-KEY: your_api_key

Example Prompts

  • "What's the sales tax rate for ZIP code 90210?"
  • "What's the combined sales tax rate at 200 Spectrum Center Dr, Irvine, CA?"
  • "What's the sales tax rate for Canadian postal code M5V 2T6 in Toronto, Ontario?"
  • "What was the sales tax rate in Nashville, TN (37203) in January of this year?"
  • "How many API requests do I have left on my Ziptax plan this month?"

Tools

The server exposes two read-only tools.

Annotationlookup_tax_rateget_account_metrics
titleLook Up Sales Tax RateGet Account Usage Metrics
readOnlyHinttruetrue
destructiveHintfalsefalse
idempotentHinttruetrue
openWorldHintfalsefalse

lookup_tax_rate

Look up sales and use tax rates for a US or Canadian location. Returns rates broken down by jurisdiction (state, county, city, district).

Location Requirement

Provide one of:

  • address: a full street address, for door-level precision. This is the preferred input.
  • lat and lng: a geographic point, with the same door-level precision as an address.

The input schema declares this as an anyOf constraint. postalcode is the least precise location input; see its description below.

Parameters

All parameters are optional, subject to the location requirement above, and the schema declares each one as a string. lat, lng, historical, and sat_item_total also accept JSON numbers. Every other parameter must be a string. For example, send postalcode as "02134", because a number drops the leading zero.

ParameterDescription
addressFull street address for door-level geocoded lookup. Preferred input.
latLatitude for coordinate-based lookup. Same door-level precision as an address. Use with lng.
lngLongitude for coordinate-based lookup. Same door-level precision as an address. Use with lat.
postalcodeUS ZIP code (5-digit) or Canadian postal code. Least precise option: returns every rate overlapping the ZIP rather than one authoritative rate, with no adjustment for unincorporated areas. Use only when no address or lat/lng is available.
stateTwo-letter US state or Canadian province code (for example CA, ON).
cityCity name.
countyCounty name.
country_codeUS (default) or CA for Canada. CA requires a Pro or Enterprise plan.
historicalHistorical period in YYYYMM format (for example 202601 for January 2026). Lookback is limited to the past 12 months. Requires a Pro or Enterprise plan.
adjustmentSet to auto to enable state-specific unincorporated area adjustments.
taxability_codeProduct taxability code (TIC) for product-specific tax rules. Requires a Pro or Enterprise plan. See How to find a TIC.
sat_item_totalItem total for the Tennessee Single Article Tax calculation.
formatResponse format: json (default) or xml.
Example Call
json
{  "name": "lookup_tax_rate",  "arguments": {    "address": "200 Spectrum Center Dr, Irvine, CA 92618"  }}
Response

The tool returns the Ziptax API v60 response as pretty-printed JSON text, or as the API's XML unchanged when format is xml. It mirrors the REST API by Address response:

json
{  "metadata": {    "version": "v60",    "response": {      "code": 100,      "name": "RESPONSE_CODE_SUCCESS",      "message": "Successful API Request.",      "definition": "http://api.zip-tax.com/request/v60/schema"    }  },  "baseRates": [    {      "rate": 0.0725,      "jurType": "US_STATE_SALES_TAX",      "jurName": "CA",      "jurDescription": "US State Sales Tax",      "jurTaxCode": "06"    },    {      "rate": 0.005,      "jurType": "US_COUNTY_SALES_TAX",      "jurName": "ORANGE",      "jurDescription": "US County Sales Tax",      "jurTaxCode": "30"    }  ],  "taxSummaries": [    {      "rate": 0.0775,      "taxType": "SALES_TAX",      "summaryName": "Total Base Sales Tax",      "displayRates": [        { "name": "Total Rate", "rate": 0.0775 }      ]    }  ],  "addressDetail": {    "normalizedAddress": "200 Spectrum Center Dr, Irvine, CA 92618-5003, United States",    "incorporated": "true",    "geoLat": 33.65253,    "geoLng": -117.74794  }}

metadata.response.code reports the API response code. See Response Codes for the full list.

get_account_metrics

Get usage metrics and quota information for the authenticated Ziptax account. Takes no parameters.

Example Call
json
{  "name": "get_account_metrics",  "arguments": {}}
Response

The tool returns the Ziptax API v60 account metrics response as pretty-printed JSON text:

json
{  "request_count": 4215,  "request_limit": 100000,  "usage_percent": 4.215,  "is_active": true,  "message": "Contact [email protected] to modify your account"}
FieldDescription
request_countRequests made on this key in the current billing period.
request_limitRequests included in the plan. 0 means unmetered.
usage_percentrequest_count / request_limit * 100.
is_activefalse if the key has been disabled.
messageHow to change plan or limits.

See Account Metrics for details.

Error Handling

Errors come back as a tool result with isError: true and a text message, not as a JSON-RPC error.

MessageCause
Missing API key. Send it in the X-API-KEY header or as a Bearer token in the Authorization header. ...The tool call had no API key header.
<parameter> must be a string or <parameter> must be a string or numberA lookup_tax_rate parameter was sent with a type it does not accept.
Provide a location: a full street address, or both lat and lnglookup_tax_rate was called without address, a lat/lng pair, or postalcode.
ZipTax API error: API returned status <code>: <body>The Ziptax API returned a non-200 HTTP status.
ZipTax API error: API request failed: <detail>The Ziptax API could not be reached or did not respond within 15 seconds.

Local Development

bash
# Run the servergo run .
# Run testsgo test -v ./...
# Build and run the Docker imagedocker build -t ziptax-mcp .docker run -p 8080:8080 ziptax-mcp

The server listens on port 8080 by default:

  • POST /: MCP endpoint
  • GET /health: health check, returns {"status":"ok"}

Environment Variables

VariableDefaultDescription
PORT8080Server listen port
ZIPTAX_API_BASE_URLhttps://api.zip-tax.comZiptax API base URL

Infrastructure

The cloudformation.yaml template provisions the complete AWS infrastructure:

  • ECR repository for container images
  • ECS Fargate cluster and service
  • Application Load Balancer with HTTPS
  • ACM certificate for mcp.zip-tax.com
  • Route53 hosted zone and DNS record
  • Security groups and IAM roles

Deployment

CI/CD is handled by GitHub Actions:

  1. test.yml - Runs on PRs and pushes: linting (golangci-lint) and tests (go test)
  2. build.yml - Runs on main: builds Docker image and pushes to ECR
  3. deploy.yml - Runs after build: updates the ECS service with the new image
  4. pages.yml - Runs on main when this README, the LICENSE, or the workflow changes, or on manual dispatch: publishes the README as the documentation site at mcp.zip.tax

build.yml and deploy.yml authenticate to AWS by assuming an IAM role through GitHub OIDC; no workflow uses static AWS keys. The role is defined in ziptax-terraform (github_oidc.tf) and trusts only this repository's main branch. Its ARN is the AWS_DEPLOY_ROLE_ARN repository variable.

Initial Setup

  1. Deploy the CloudFormation stack:

    bash
    aws cloudformation deploy \  --template-file cloudformation.yaml \  --stack-name ziptax-mcp \  --parameter-overrides ImageUri=<ECR_URI>:latest \  --capabilities CAPABILITY_NAMED_IAM \  --region us-east-1
  2. Add NS records from the mcp.zip-tax.com hosted zone to the parent zip-tax.com zone.

  3. Wait for ACM certificate DNS validation to complete.

License

MIT

Source: README.md at commit dd7d844

Tools

2

get_account_metrics

Get Account Usage Metrics

Get account usage metrics and quota information for the authenticated ZipTax account. Returns current request counts, limits, and entitlements. Requires a valid ZipTax API key sent in the X-API-KEY header or Authorization header. Get a key at https://platform.zip.tax

Takes no parameters.

lookup_tax_rate

Look Up Sales Tax Rate

Look up sales and use tax rates for a US or Canadian location. Provide a full street address for door-level accuracy, or a lat/lng pair for a geographic point lookup. Returns tax rates broken down by jurisdiction (state, county, city, district). Requires a valid ZipTax API key sent in the X-API-KEY header or Authorization header. Get a key at https://platform.zip.tax

Parameterslatlngcitystatecountyformataddressadjustmenthistoricalpostalcodecountry_codesat_item_total+1 more

Version history

3
  1. v1.0.5LatestOct 7, 2026
  2. v1.0.2Oct 5, 2026
  3. v1.0.0Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts