Calculate sales tax & VAT, record transactions and refunds, manage products and customers.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Calculate sales tax / VAT for an order — a STATELESS quote that persists nothing (record it later with numeral_create_transaction using the returned calculation id). Returns per-jurisdiction rates, total_tax_amount, and totals. Provide a customer address and one or more line items (each needs reference_product_id OR product_category). Amounts are in the currency's smallest unit (cents). Numeral: POST /tax/calculations.
Customer details — address is required.
Order details.
Arbitrary string key/value metadata.
The address a product ships from. Optional on 2024-09-01; required on API version 2025-05-12+.
Calculate sales tax / VAT for an order — a STATELESS quote that persists nothing (record it later with numeral_create_transaction using the returned calculation id). Returns per-jurisdiction rates, total_tax_amount, and totals. Provide a customer address and one or more line items (each needs reference_product_id OR product_category). Amounts are in the currency's smallest unit (cents). Numeral: POST /tax/calculations.
| Argument | Type | Description |
|---|---|---|
| customer* | object | Customer details — address is required. |
| metadata | object | Arbitrary string key/value metadata. |
| order_details* | object | Order details. |
| origin_address | object | The address a product ships from. Optional on 2024-09-01; required on API version 2025-05-12+. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"customer",
"order_details"
],
"properties": {
"customer": {
"type": "object",
"required": [
"address"
],
"properties": {
"id": {
"type": "string",
"description": "A Numeral customer id (cus_...) for order tracking / exemptions."
},
"address": {
"type": "object",
"required": [
"address_line_1",
"address_city",
"address_province",
"address_postal_code",
"address_country",
"address_type"
],
"properties": {
"address_city": {
"type": "string",
"description": "City."
},
"address_type": {
"enum": [
"shipping",
"billing"
],
"type": "string",
"description": "Address type: \"shipping\" for physical goods, \"billing\" for software/digital goods."
},
"address_line_1": {
"type": "string",
"description": "Street address, line 1."
},
"address_line_2": {
"type": "string",
"description": "Street address, line 2 (optional)."
},
"address_country": {
"type": "string",
"description": "Country — a valid ISO 3166-1 alpha-2 code (e.g. \"US\")."
},
"address_province": {
"type": "string",
"description": "State/province/region — a valid 2-letter ISO 3166-2 subdivision code (e.g. \"CA\")."
},
"address_postal_code": {
"type": "string",
"description": "Postal/ZIP code."
}
},
"description": "Customer address (required)."
}
},
"description": "Customer details — address is required."
},
"metadata": {
"type": "object",
"description": "Arbitrary string key/value metadata.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"order_details": {
"type": "object",
"required": [
"customer_currency_code",
"tax_included_in_amount",
"line_items"
],
"properties": {
"line_items": {
"type": "array",
"items": {
"type": "object",
"required": [
"amount",
"quantity"
],
"properties": {
"amount": {
"type": "number",
"description": "Line-item price in the currency's SMALLEST unit (e.g. USD 2000 = $20.00). Tax is calculated against this."
},
"quantity": {
"type": "number",
"description": "Quantity of this product being sold."
},
"product_category": {
"type": "string",
"description": "A tax category from Numeral's taxonomy, e.g. \"GENERAL_MERCHANDISE\", \"SAAS_GENERAL\" (required if no reference_product_id)."
},
"reference_product_id": {
"type": "string",
"description": "Your product id (required if no product_category)."
},
"reference_line_item_id": {
"type": "string",
"description": "Your line-item id (optional; for record keeping)."
},
"fallback_product_category": {
"type": "string",
"description": "Fallback tax category used when reference_product_id has no matching product in Numeral."
}
}
},
"minItems": 1,
"description": "Order line items (one per product type)."
},
"customer_currency_code": {
"type": "string",
"description": "Currency code. For API version 2024-09-01: \"USD\" or \"CAD\"."
},
"tax_included_in_amount": {
"type": "boolean",
"description": "Do the line-item amounts already include tax? Typically false for North America."
}
},
"description": "Order details."
},
"origin_address": {
"type": "object",
"required": [
"address_line_1",
"address_city",
"address_province",
"address_postal_code",
"address_country"
],
"properties": {
"address_city": {
"type": "string",
"description": "City."
},
"address_line_1": {
"type": "string",
"description": "Street address, line 1."
},
"address_line_2": {
"type": "string",
"description": "Street address, line 2 (optional)."
},
"address_country": {
"type": "string",
"description": "Country — a valid ISO 3166-1 alpha-2 code (e.g. \"US\")."
},
"address_province": {
"type": "string",
"description": "State/province/region — a valid 2-letter ISO 3166-2 subdivision code (e.g. \"CA\")."
},
"address_postal_code": {
"type": "string",
"description": "Postal/ZIP code."
}
},
"description": "The address a product ships from. Optional on 2024-09-01; required on API version 2025-05-12+."
}
}
}CREATES a customer record — this WRITES to your Numeral customer list (used for order tracking and tax exemptions). Numeral: POST /tax/customers.
| Argument | Type | Description |
|---|---|---|
| name | string | Customer name. |
| email* | string | Customer email (required). |
| is_tax_exempt | boolean | Whether this customer is tax exempt. |
| reference_customer_id | string | Your own id for this customer (for reference-based lookups). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"email"
],
"properties": {
"name": {
"type": "string",
"description": "Customer name."
},
"email": {
"type": "string",
"description": "Customer email (required)."
},
"is_tax_exempt": {
"type": "boolean",
"description": "Whether this customer is tax exempt."
},
"reference_customer_id": {
"type": "string",
"description": "Your own id for this customer (for reference-based lookups)."
}
}
}CREATES (or upserts) a product with its tax category — this WRITES to your Numeral product catalog, which drives future tax calculations. Numeral: POST /tax/products.
| Argument | Type | Description |
|---|---|---|
| product_category* | string | A tax category from Numeral's taxonomy, e.g. "GENERAL_MERCHANDISE", "SAAS_GENERAL". |
| reference_product_id* | string | Your product id (used to reference this product in calculations). |
| reference_product_name* | string | Human-readable product name. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"reference_product_id",
"reference_product_name",
"product_category"
],
"properties": {
"product_category": {
"type": "string",
"description": "A tax category from Numeral's taxonomy, e.g. \"GENERAL_MERCHANDISE\", \"SAAS_GENERAL\"."
},
"reference_product_id": {
"type": "string",
"description": "Your product id (used to reference this product in calculations)."
},
"reference_product_name": {
"type": "string",
"description": "Human-readable product name."
}
}
}RECORDS a refund against a transaction — this WRITES a live tax/compliance record (adjusts tax owed). Use type="full" to refund the whole transaction, or type="partial" with line_items (each keyed by reference_product_id) for a partial refund. Numeral: POST /tax/refunds.
| Argument | Type | Description |
|---|---|---|
| type* | string | "full" refunds the whole transaction; "partial" requires line_items. |
| line_items | array | Required for type="partial": the line items to refund. |
| transaction_id* | string | The transaction id (tr_...) to refund. |
| refund_processed_at | number | Unix timestamp (SECONDS) the refund was made. Defaults to now if omitted. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"transaction_id",
"type"
],
"properties": {
"type": {
"enum": [
"full",
"partial"
],
"type": "string",
"description": "\"full\" refunds the whole transaction; \"partial\" requires line_items."
},
"line_items": {
"type": "array",
"items": {
"type": "object",
"required": [
"reference_product_id"
],
"properties": {
"reference_product_id": {
"type": "string",
"description": "Product id to apply the refund against (matches the original transaction line item)."
},
"sales_amount_refunded": {
"type": "number",
"description": "Sale amount refunded for this line, in the currency's smallest unit (cents)."
},
"reference_line_item_id": {
"type": "string",
"description": "Your line-item id (optional; for reporting)."
}
}
},
"description": "Required for type=\"partial\": the line items to refund."
},
"transaction_id": {
"type": "string",
"description": "The transaction id (tr_...) to refund."
},
"refund_processed_at": {
"type": "number",
"description": "Unix timestamp (SECONDS) the refund was made. Defaults to now if omitted."
}
}
}RECORDS a completed sale as a transaction — this WRITES a live tax/compliance record used for filings. Supply the `calculation_id` returned by numeral_calculate_tax and your `reference_order_id`. Numeral: POST /tax/transactions.
| Argument | Type | Description |
|---|---|---|
| metadata | object | Arbitrary string key/value metadata. |
| calculation_id* | string | The calculation id returned by numeral_calculate_tax. |
| reference_order_id* | string | Your order id for this sale (used for record keeping / dedupe). |
| transaction_processed_at | number | Unix timestamp (SECONDS) the sale was processed. Defaults to now if omitted. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"calculation_id",
"reference_order_id"
],
"properties": {
"metadata": {
"type": "object",
"description": "Arbitrary string key/value metadata.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"calculation_id": {
"type": "string",
"description": "The calculation id returned by numeral_calculate_tax."
},
"reference_order_id": {
"type": "string",
"description": "Your order id for this sale (used for record keeping / dedupe)."
},
"transaction_processed_at": {
"type": "number",
"description": "Unix timestamp (SECONDS) the sale was processed. Defaults to now if omitted."
}
}
}Get a customer by id. By default `customer_id` is the Numeral id (cus_...); set id_type to "reference" to look up by your own reference_customer_id. Returns name, email, and tax-exempt status. Numeral: GET /tax/customers/{customer_id}.
| Argument | Type | Description |
|---|---|---|
| id_type | string | Which id space `customer_id` is in (default: numeral). |
| customer_id* | string | The customer id — a Numeral id (cus_...) by default, or your reference id when id_type="reference". |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"customer_id"
],
"properties": {
"id_type": {
"enum": [
"numeral",
"reference"
],
"type": "string",
"description": "Which id space `customer_id` is in (default: numeral)."
},
"customer_id": {
"type": "string",
"description": "The customer id — a Numeral id (cus_...) by default, or your reference id when id_type=\"reference\"."
}
}
}Get a single product by its reference_product_id (your id). Returns the product's name, product_category, and timestamps. Numeral: GET /tax/products/{reference_product_id}.
| Argument | Type | Description |
|---|---|---|
| reference_product_id* | string | Your product id (the reference_product_id used when the product was created). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"reference_product_id"
],
"properties": {
"reference_product_id": {
"type": "string",
"description": "Your product id (the reference_product_id used when the product was created)."
}
}
}Get a recorded transaction by its Numeral id (tr_...). Returns the transaction with its line items, currencies, and metadata. Numeral: GET /tax/transactions/{transaction_id}.
| Argument | Type | Description |
|---|---|---|
| transaction_id* | string | The Numeral transaction id (tr_...). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"transaction_id"
],
"properties": {
"transaction_id": {
"type": "string",
"description": "The Numeral transaction id (tr_...)."
}
}
}List your Numeral products (up to 50 per page), each with its reference id, name, and product_category. Use `cursor` (the last_product_id from a previous page) to paginate; has_more indicates more pages. Numeral: GET /tax/products.
| Argument | Type | Description |
|---|---|---|
| cursor | string | Pagination cursor — pass the last_product_id from the previous page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cursor": {
"type": "string",
"description": "Pagination cursor — pass the last_product_id from the previous page."
}
}
}List all refunds recorded against a transaction. Returns {refunds:[...]}. Numeral: GET /tax/transactions/{transaction_id}/refunds.
| Argument | Type | Description |
|---|---|---|
| transaction_id* | string | The Numeral transaction id (tr_...). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"transaction_id"
],
"properties": {
"transaction_id": {
"type": "string",
"description": "The Numeral transaction id (tr_...)."
}
}
}Health check — verifies the API key works and reports the environment (test/prod), api_version, and server timestamp. Numeral: GET /tax/ping.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}