Serveur MCP

quaderno

io.usefulapi/quaderno
Entreprise et opérations Paiements et fintech Public et accessible MCP 2026-07-28

Ce que fait ce MCP

Calculates sales tax and manages Quaderno contacts, products, invoices, transactions, receipts, expenses, and tax records.

calculate_tax
Calculate tax rate
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 }.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['to_country'], 'properties': {'date': {'type': 'string', 'description': 'Transaction date (YYYY-MM-DD); defaults to today.'}, 'amount': {'type': 'number', 'description': 'Transaction amount to compute the tax on.'}, 'tax_id': {'type': 'string', 'description': "The customer's tax ID / VAT number (may trigger reverse-charge)."}, 'to_city': {'type': 'string', 'description': "The customer's city (recommended for US sales tax)."}, 'currency': {'type': 'string', 'description': 'ISO 4217 currency code (e.g. "USD").'}, 'tax_code': {'type': 'string', 'description': 'Product tax code, e.g. "standard", "reduced", "exempt", "eservice", "ebook", "saas", "consulting".'}, 'to_street': {'type': 'string', 'description': "The customer's street address (recommended for US sales tax)."}, 'to_country': {'type': 'string', 'description': 'The customer\'s country — 2-letter ISO code (e.g. "US", "DE"). Required.'}, 'from_country': {'type': 'string', 'description': "The seller's country (2-letter ISO); defaults to the account country."}, 'product_type': {'enum': ['good', 'service'], 'type': 'string', 'description': 'Whether the product is a good or a service.'}, 'tax_behavior': {'enum': ['inclusive', 'exclusive'], 'type': 'string', 'description': 'Whether the amount includes tax or not.'}, 'to_postal_code': {'type': 'string', 'description': "The customer's ZIP / postal code (recommended for US sales tax)."}, 'from_postal_code': {'type': 'string', 'description': "The seller's postal code."}}}
create_contact
Create a contact
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.
Destructif
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['kind'], 'properties': {'kind': {'enum': ['company', 'person'], 'type': 'string', 'description': 'Contact kind.'}, 'email': {'type': 'string', 'description': 'Contact email address.'}, 'fields': {'type': 'object', 'description': 'Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'tax_id': {'type': 'string', 'description': "The contact's tax ID / VAT number."}, 'country': {'type': 'string', 'description': '2-letter ISO country code.'}, 'last_name': {'type': 'string', 'description': "The person's last name (persons only)."}, 'first_name': {'type': 'string', 'description': 'For a person: their first name. For a company: the company name (Quaderno stores it here).'}, 'contact_name': {'type': 'string', 'description': "The contact person's name at a company (companies only)."}}}
create_invoice
Create an invoice
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).
Destructif
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Line items, e.g. [{ description, quantity, unit_price, tax_1_name, tax_1_rate }].'}, 'notes': {'type': 'string', 'description': 'Free-text notes on the invoice.'}, 'fields': {'type': 'object', 'description': 'Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'currency': {'type': 'string', 'description': 'ISO 4217 currency code.'}, 'due_date': {'type': 'string', 'description': 'Due date (YYYY-MM-DD).'}, 'po_number': {'type': 'string', 'description': 'Purchase-order number.'}, 'contact_id': {'type': 'string', 'description': 'The id of an existing contact to invoice. Omit only if you pass a full `contact` object via `fields`.'}, 'issue_date': {'type': 'string', 'description': 'Issue date (YYYY-MM-DD).'}}}
create_item
Create a product (item)
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.
Destructif
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name', 'unit_cost'], 'properties': {'code': {'type': 'string', 'description': 'SKU / product code.'}, 'kind': {'enum': ['one_off', 'subscription'], 'type': 'string', 'description': 'Whether it is a one-off or a subscription product.'}, 'name': {'type': 'string', 'description': 'Product name.'}, 'fields': {'type': 'object', 'description': 'Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'currency': {'type': 'string', 'description': 'ISO 4217 currency code.'}, 'unit_cost': {'type': 'number', 'description': 'Unit price of the product.'}, 'product_type': {'enum': ['good', 'service'], 'type': 'string', 'description': 'Whether the product is a good or a service.'}}}
create_transaction
Create a transaction
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.
Destructif
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['items'], 'properties': {'type': {'enum': ['sale', 'refund'], 'type': 'string', 'description': 'Transaction type (default "sale").'}, 'items': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Required. Transaction line items, e.g. [{ description, amount, quantity, tax_code, product_type }].'}, 'fields': {'type': 'object', 'description': 'Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'payment': {'type': 'object', 'description': 'Payment object, e.g. { payment_method, amount, date }.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'currency': {'type': 'string', 'description': 'ISO 4217 currency code.'}, 'customer': {'type': 'object', 'description': 'The customer contact object (or reference), e.g. { first_name, last_name, email, country, tax_id }.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}}
get_contact
Get a contact
Fetch a single contact by id. Quaderno API: GET /contacts/{id}.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The resource id.'}}}
get_credit_note
Get a credit note
Fetch a single credit note by id. Quaderno API: GET /credit_notes/{id}.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The resource id.'}}}
get_expense
Get an expense
Fetch a single expense by id. Quaderno API: GET /expenses/{id}.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The resource id.'}}}
get_invoice
Get an invoice
Fetch a single invoice by id (full object incl. items, taxes, payments, permalink, pdf). Quaderno API: GET /invoices/{id}.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The resource id.'}}}
get_item
Get a product (item)
Fetch a single product/item by id. Quaderno API: GET /items/{id}.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The resource id.'}}}
get_receipt
Get a receipt
Fetch a single receipt by id. Quaderno API: GET /receipts/{id}.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The resource id.'}}}
list_contacts
List contacts
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.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'description': 'Search by contact name, email, or tax ID.'}, 'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (legacy pagination; prefer created_before).'}, 'per_page': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Entries per page (1-100, default 25).'}, 'created_before': {'type': 'string', 'description': 'Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).'}}}
list_credit_notes
List credit notes
List credit notes (refund documents), newest first. Quaderno API: GET /credit_notes. Wrapped as { data, pagination } when more pages exist.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'description': 'Search by number, customer name, or PO number.'}, 'date': {'type': 'string', 'description': 'Date range filter, e.g. "2026-01-01,2026-12-31".'}, 'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (legacy pagination; prefer created_before).'}, 'contact': {'type': 'string', 'description': 'Filter by customer (contact) id.'}, 'per_page': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Entries per page (1-100, default 25).'}, 'created_before': {'type': 'string', 'description': 'Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).'}}}
list_expenses
List expenses
List expenses (bills you received), newest first. Quaderno API: GET /expenses. Wrapped as { data, pagination } when more pages exist.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'description': 'Search by number or vendor name.'}, 'date': {'type': 'string', 'description': 'Date range filter, e.g. "2026-01-01,2026-12-31".'}, 'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (legacy pagination; prefer created_before).'}, 'contact': {'type': 'string', 'description': 'Filter by vendor (contact) id.'}, 'per_page': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Entries per page (1-100, default 25).'}, 'created_before': {'type': 'string', 'description': 'Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).'}}}
list_invoices
List invoices
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.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'description': 'Search by invoice number, customer name, or PO number.'}, 'date': {'type': 'string', 'description': 'Date range filter, e.g. "2026-01-01,2026-12-31".'}, 'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (legacy pagination; prefer created_before).'}, 'state': {'enum': ['outstanding', 'late', 'uncollectible', 'paid'], 'type': 'string', 'description': 'Filter by invoice state.'}, 'contact': {'type': 'string', 'description': 'Filter by customer (contact) id.'}, 'per_page': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Entries per page (1-100, default 25).'}, 'created_before': {'type': 'string', 'description': 'Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).'}}}
list_items
List products (items)
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.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (legacy pagination; prefer created_before).'}, 'per_page': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Entries per page (1-100, default 25).'}, 'created_before': {'type': 'string', 'description': 'Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).'}}}
list_jurisdictions
List tax jurisdictions
List the tax jurisdictions (id, name, country, region) where the account is registered to collect tax. Quaderno API: GET /jurisdictions.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
list_receipts
List receipts
List receipts, newest first. Quaderno API: GET /receipts. Wrapped as { data, pagination } when more pages exist.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'q': {'type': 'string', 'description': 'Search by number or customer name.'}, 'date': {'type': 'string', 'description': 'Date range filter, e.g. "2026-01-01,2026-12-31".'}, 'page': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': 'Page number (legacy pagination; prefer created_before).'}, 'contact': {'type': 'string', 'description': 'Filter by customer (contact) id.'}, 'per_page': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Entries per page (1-100, default 25).'}, 'created_before': {'type': 'string', 'description': 'Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id).'}}}
list_tax_codes
List tax codes
List the product tax codes Quaderno supports (id, name, description) — used as the tax_code on products / tax calculations. Quaderno API: GET /tax_codes.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
list_webhooks
List webhooks
List the account's configured webhooks (id, url, events). Quaderno API: GET /webhooks.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
ping
Ping (verify auth)
Verify the API key and connection by pinging Quaderno. Returns account/authentication status. Quaderno API: GET /ping.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
quaderno_request
Raw read request
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}.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['path'], 'properties': {'path': {'type': 'string', 'description': 'API path after /api, starting with a slash, e.g. "/tax_ids".'}, 'query': {'type': 'object', 'description': 'Optional query params object.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}}
update_contact
Update a contact
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.
Destructif
Schéma d’entrée
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'The resource id.'}, 'email': {'type': 'string', 'description': 'Contact email address.'}, 'fields': {'type': 'object', 'description': 'Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above).', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'tax_id': {'type': 'string', 'description': 'Tax ID / VAT number.'}, 'country': {'type': 'string', 'description': '2-letter ISO country code.'}, 'last_name': {'type': 'string', 'description': 'Person last name.'}, 'first_name': {'type': 'string', 'description': 'Person first name / company name.'}, 'contact_name': {'type': 'string', 'description': 'Contact person at a company.'}}}
Modifié
create_transaction
1 October 2026 02:43
Modifié
create_invoice
1 October 2026 02:43
Modifié
create_item
1 October 2026 02:43
Modifié
update_contact
1 October 2026 02:43
Modifié
create_contact
1 October 2026 02:43
Modifié
quaderno_request
1 October 2026 02:43
Modifié
list_webhooks
1 October 2026 02:43
Modifié
list_jurisdictions
1 October 2026 02:43
Modifié
list_tax_codes
1 October 2026 02:43
Modifié
get_expense
1 October 2026 02:43
Modifié
list_expenses
1 October 2026 02:43
Modifié
get_receipt
1 October 2026 02:43
Modifié
list_receipts
1 October 2026 02:43
Modifié
get_credit_note
1 October 2026 02:43
Modifié
list_credit_notes
1 October 2026 02:43
Modifié
get_item
1 October 2026 02:43
Modifié
list_items
1 October 2026 02:43
Modifié
get_contact
1 October 2026 02:43
Modifié
list_contacts
1 October 2026 02:43
Modifié
get_invoice
1 October 2026 02:43
Modifié
list_invoices
1 October 2026 02:43
Modifié
calculate_tax
1 October 2026 02:43
Modifié
ping
1 October 2026 02:43
Ajouté
create_transaction
21 September 2026 02:44
Ajouté
create_invoice
21 September 2026 02:44
Ajouté
create_item
21 September 2026 02:44
Ajouté
update_contact
21 September 2026 02:44
Ajouté
create_contact
21 September 2026 02:44
Ajouté
quaderno_request
21 September 2026 02:44
Ajouté
list_webhooks
21 September 2026 02:44