Server definition
- Hash
- sha256:72a22cafbd92334ba34af0e24104d0d548910cf74f1120abb60a7134ad2a81de
- What it is
- What a remote MCP server returned when asked what it offers: 23 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "Calculate the correct tax rate/amount for a sale given the customer's location and product. This is Quaderno's flagship endpoint — it applies the right VAT / GST / US sales-tax rules per jurisdiction. READ-ONLY (no record is created). Quaderno API: GET /tax_rates/calculate. Returns { name, rate, country, region, county, city, tax_code, status (taxable|non_taxable|not_registered|reverse_charge), tax_amount, subtotal, total_amount }.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"amount": {
"description": "Transaction amount to compute the tax on.",
"type": "number"
},
"currency": {
"description": "ISO 4217 currency code (e.g. \"USD\").",
"type": "string"
},
"date": {
"description": "Transaction date (YYYY-MM-DD); defaults to today.",
"type": "string"
},
"from_country": {
"description": "The seller's country (2-letter ISO); defaults to the account country.",
"type": "string"
},
"from_postal_code": {
"description": "The seller's postal code.",
"type": "string"
},
"product_type": {
"description": "Whether the product is a good or a service.",
"enum": [
"good",
"service"
],
"type": "string"
},
"tax_behavior": {
"description": "Whether the amount includes tax or not.",
"enum": [
"inclusive",
"exclusive"
],
"type": "string"
},
"tax_code": {
"description": "Product tax code, e.g. \"standard\", \"reduced\", \"exempt\", \"eservice\", \"ebook\", \"saas\", \"consulting\".",
"type": "string"
},
"tax_id": {
"description": "The customer's tax ID / VAT number (may trigger reverse-charge).",
"type": "string"
},
"to_city": {
"description": "The customer's city (recommended for US sales tax).",
"type": "string"
},
"to_country": {
"description": "The customer's country — 2-letter ISO code (e.g. \"US\", \"DE\"). Required.",
"type": "string"
},
"to_postal_code": {
"description": "The customer's ZIP / postal code (recommended for US sales tax).",
"type": "string"
},
"to_street": {
"description": "The customer's street address (recommended for US sales tax).",
"type": "string"
}
},
"required": [
"to_country"
],
"type": "object"
},
"name": "calculate_tax",
"outputSchema": null
},
{
"description": "MUTATES Quaderno data — create a contact (customer or vendor). Provide kind plus a name; use `fields` for any other Quaderno contact attribute (phone_1, region, postal_code, city, street_line_1/2, tax_status, language, discount, notes, processor/processor_id). Quaderno API: POST /contacts. Returns the created contact.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"contact_name": {
"description": "The contact person's name at a company (companies only).",
"type": "string"
},
"country": {
"description": "2-letter ISO country code.",
"type": "string"
},
"email": {
"description": "Contact email address.",
"type": "string"
},
"fields": {
"additionalProperties": {},
"description": "Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"first_name": {
"description": "For a person: their first name. For a company: the company name (Quaderno stores it here).",
"type": "string"
},
"kind": {
"description": "Contact kind.",
"enum": [
"company",
"person"
],
"type": "string"
},
"last_name": {
"description": "The person's last name (persons only).",
"type": "string"
},
"tax_id": {
"description": "The contact's tax ID / VAT number.",
"type": "string"
}
},
"required": [
"kind"
],
"type": "object"
},
"name": "create_contact",
"outputSchema": null
},
{
"description": "MUTATES Quaderno data — create an invoice for a contact. Provide contact_id (or a contact via `fields`) and items; use `fields` for any other attribute (currency, issue_date, due_date, po_number, notes, tag_list, custom_metadata, payment_details). Each item = { description, quantity, unit_price, tax_1_name?, tax_1_rate?, discount_rate?, … }. Quaderno API: POST /invoices. Returns the created invoice (incl. permalink, pdf).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"contact_id": {
"description": "The id of an existing contact to invoice. Omit only if you pass a full `contact` object via `fields`.",
"type": "string"
},
"currency": {
"description": "ISO 4217 currency code.",
"type": "string"
},
"due_date": {
"description": "Due date (YYYY-MM-DD).",
"type": "string"
},
"fields": {
"additionalProperties": {},
"description": "Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"issue_date": {
"description": "Issue date (YYYY-MM-DD).",
"type": "string"
},
"items": {
"description": "Line items, e.g. [{ description, quantity, unit_price, tax_1_name, tax_1_rate }].",
"items": {
"additionalProperties": {},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"type": "array"
},
"notes": {
"description": "Free-text notes on the invoice.",
"type": "string"
},
"po_number": {
"description": "Purchase-order number.",
"type": "string"
}
},
"type": "object"
},
"name": "create_invoice",
"outputSchema": null
},
{
"description": "MUTATES Quaderno data — create a product/item in the catalog. Provide name + unit_cost; use `fields` for any other attribute (code, description, tax_class, tax_type, currency, country, stock). Quaderno API: POST /items. Returns the created item.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"code": {
"description": "SKU / product code.",
"type": "string"
},
"currency": {
"description": "ISO 4217 currency code.",
"type": "string"
},
"fields": {
"additionalProperties": {},
"description": "Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"kind": {
"description": "Whether it is a one-off or a subscription product.",
"enum": [
"one_off",
"subscription"
],
"type": "string"
},
"name": {
"description": "Product name.",
"type": "string"
},
"product_type": {
"description": "Whether the product is a good or a service.",
"enum": [
"good",
"service"
],
"type": "string"
},
"unit_cost": {
"description": "Unit price of the product.",
"type": "number"
}
},
"required": [
"name",
"unit_cost"
],
"type": "object"
},
"name": "create_item",
"outputSchema": null
},
{
"description": "MUTATES Quaderno data — record a sale or refund transaction (Quaderno computes tax and produces the compliant document). Provide the customer, items, and payment. Use `fields` for any other attribute (date, currency, shipping_address, evidence, processor, processor_id, processor_fee_cents, exchange_rate, po_number, notes, tags, custom_metadata). Quaderno API: POST /transactions. Returns the created invoice/credit-note object.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"currency": {
"description": "ISO 4217 currency code.",
"type": "string"
},
"customer": {
"additionalProperties": {},
"description": "The customer contact object (or reference), e.g. { first_name, last_name, email, country, tax_id }.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"fields": {
"additionalProperties": {},
"description": "Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"items": {
"description": "Required. Transaction line items, e.g. [{ description, amount, quantity, tax_code, product_type }].",
"items": {
"additionalProperties": {},
"propertyNames": {
"type": "string"
},
"type": "object"
},
"type": "array"
},
"payment": {
"additionalProperties": {},
"description": "Payment object, e.g. { payment_method, amount, date }.",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"type": {
"description": "Transaction type (default \"sale\").",
"enum": [
"sale",
"refund"
],
"type": "string"
}
},
"required": [
"items"
],
"type": "object"
},
"name": "create_transaction",
"outputSchema": null
},
{
"description": "Fetch a single contact by id. Quaderno API: GET /contacts/{id}.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "The resource id.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_contact",
"outputSchema": null
},
{
"description": "Fetch a single credit note by id. Quaderno API: GET /credit_notes/{id}.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "The resource id.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_credit_note",
"outputSchema": null
},
{
"description": "Fetch a single expense by id. Quaderno API: GET /expenses/{id}.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "The resource id.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_expense",
"outputSchema": null
},
{
"description": "Fetch a single invoice by id (full object incl. items, taxes, payments, permalink, pdf). Quaderno API: GET /invoices/{id}.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "The resource id.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_invoice",
"outputSchema": null
},
{
"description": "Fetch a single product/item by id. Quaderno API: GET /items/{id}.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "The resource id.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_item",
"outputSchema": null
},
{
"description": "Fetch a single receipt by id. Quaderno API: GET /receipts/{id}.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"id": {
"description": "The resource id.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_receipt",
"outputSchema": null
},
{
"description": "List contacts (customers/vendors), newest first. Quaderno API: GET /contacts. Returns contact objects (id, kind, first_name, last_name, contact_name, email, country, tax_id, tax_status, …), wrapped as { data, pagination } when more pages exist.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"created_before": {
"description": "Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).",
"type": "string"
},
"page": {
"description": "Page number (legacy pagination; prefer created_before).",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"per_page": {
"description": "Entries per page (1-100, default 25).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"q": {
"description": "Search by contact name, email, or tax ID.",
"type": "string"
}
},
"type": "object"
},
"name": "list_contacts",
"outputSchema": null
},
{
"description": "List credit notes (refund documents), newest first. Quaderno API: GET /credit_notes. Wrapped as { data, pagination } when more pages exist.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"contact": {
"description": "Filter by customer (contact) id.",
"type": "string"
},
"created_before": {
"description": "Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).",
"type": "string"
},
"date": {
"description": "Date range filter, e.g. \"2026-01-01,2026-12-31\".",
"type": "string"
},
"page": {
"description": "Page number (legacy pagination; prefer created_before).",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"per_page": {
"description": "Entries per page (1-100, default 25).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"q": {
"description": "Search by number, customer name, or PO number.",
"type": "string"
}
},
"type": "object"
},
"name": "list_credit_notes",
"outputSchema": null
},
{
"description": "List expenses (bills you received), newest first. Quaderno API: GET /expenses. Wrapped as { data, pagination } when more pages exist.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"contact": {
"description": "Filter by vendor (contact) id.",
"type": "string"
},
"created_before": {
"description": "Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).",
"type": "string"
},
"date": {
"description": "Date range filter, e.g. \"2026-01-01,2026-12-31\".",
"type": "string"
},
"page": {
"description": "Page number (legacy pagination; prefer created_before).",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"per_page": {
"description": "Entries per page (1-100, default 25).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"q": {
"description": "Search by number or vendor name.",
"type": "string"
}
},
"type": "object"
},
"name": "list_expenses",
"outputSchema": null
},
{
"description": "List invoices, newest first, with optional filters. Quaderno API: GET /invoices. Returns invoice objects (id, number, issue_date, due_date, currency, contact, items, taxes, payments, state, total_cents, subtotal_cents), wrapped as { data, pagination } when more pages exist.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"contact": {
"description": "Filter by customer (contact) id.",
"type": "string"
},
"created_before": {
"description": "Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).",
"type": "string"
},
"date": {
"description": "Date range filter, e.g. \"2026-01-01,2026-12-31\".",
"type": "string"
},
"page": {
"description": "Page number (legacy pagination; prefer created_before).",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"per_page": {
"description": "Entries per page (1-100, default 25).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"q": {
"description": "Search by invoice number, customer name, or PO number.",
"type": "string"
},
"state": {
"description": "Filter by invoice state.",
"enum": [
"outstanding",
"late",
"uncollectible",
"paid"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_invoices",
"outputSchema": null
},
{
"description": "List products/items in the catalog, newest first. Quaderno API: GET /items. Returns item objects (id, code, name, kind, product_type, unit_cost, tax_class, tax_type, currency, stock, …), wrapped as { data, pagination } when more pages exist.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"created_before": {
"description": "Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).",
"type": "string"
},
"page": {
"description": "Page number (legacy pagination; prefer created_before).",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"per_page": {
"description": "Entries per page (1-100, default 25).",
"maximum": 100,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "list_items",
"outputSchema": null
},
{
"description": "List the tax jurisdictions (id, name, country, region) where the account is registered to collect tax. Quaderno API: GET /jurisdictions.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_jurisdictions",
"outputSchema": null
},
{
"description": "List receipts, newest first. Quaderno API: GET /receipts. Wrapped as { data, pagination } when more pages exist.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"contact": {
"description": "Filter by customer (contact) id.",
"type": "string"
},
"created_before": {
"description": "Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).",
"type": "string"
},
"date": {
"description": "Date range filter, e.g. \"2026-01-01,2026-12-31\".",
"type": "string"
},
"page": {
"description": "Page number (legacy pagination; prefer created_before).",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"per_page": {
"description": "Entries per page (1-100, default 25).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"q": {
"description": "Search by number or customer name.",
"type": "string"
}
},
"type": "object"
},
"name": "list_receipts",
"outputSchema": null
},
{
"description": "List the product tax codes Quaderno supports (id, name, description) — used as the tax_code on products / tax calculations. Quaderno API: GET /tax_codes.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_tax_codes",
"outputSchema": null
},
{
"description": "List the account's configured webhooks (id, url, events). Quaderno API: GET /webhooks.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_webhooks",
"outputSchema": null
},
{
"description": "Verify the API key and connection by pinging Quaderno. Returns account/authentication status. Quaderno API: GET /ping.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "ping",
"outputSchema": null
},
{
"description": "Power-user escape hatch: GET any Quaderno API path not wrapped by a dedicated tool. READ-ONLY — only GET is allowed. Path is taken after /api (e.g. \"/tax_ids\", \"/evidence\"). Quaderno API: GET {path}.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"path": {
"description": "API path after /api, starting with a slash, e.g. \"/tax_ids\".",
"type": "string"
},
"query": {
"additionalProperties": {},
"description": "Optional query params object.",
"propertyNames": {
"type": "string"
},
"type": "object"
}
},
"required": [
"path"
],
"type": "object"
},
"name": "quaderno_request",
"outputSchema": null
},
{
"description": "MUTATES Quaderno data — update an existing contact. Only the fields you pass are changed; use `fields` for any attribute not typed here. Quaderno API: PUT /contacts/{id}. Returns the updated contact.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"contact_name": {
"description": "Contact person at a company.",
"type": "string"
},
"country": {
"description": "2-letter ISO country code.",
"type": "string"
},
"email": {
"description": "Contact email address.",
"type": "string"
},
"fields": {
"additionalProperties": {},
"description": "Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).",
"propertyNames": {
"type": "string"
},
"type": "object"
},
"first_name": {
"description": "Person first name / company name.",
"type": "string"
},
"id": {
"description": "The resource id.",
"type": "string"
},
"last_name": {
"description": "Person last name.",
"type": "string"
},
"tax_id": {
"description": "Tax ID / VAT number.",
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "update_contact",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:72a22cafbd92334ba34af0e24104d0d548910cf74f1120abb60a7134ad2a81de | sha256sum