Quaderno MCP by usefulapi
Server Details
MCP server for Quaderno — tax-rate calculation, invoices, contacts, products, receipts & expenses.
- Status
- Healthy
- Uptime
- 70.8% over 55 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 23 tools
Most tools target distinct resources and actions, but create_invoice and create_transaction both generate tax-compliant sale documents, making their boundary unclear. calculate_tax also overlaps conceptually with the tax calculation embedded in create_transaction, though the descriptions help separate the read-only case.
The set follows a consistent verb_noun pattern across get_, list_, create_, and update_ tools, with clear singular/plural usage. calculate_tax and ping fit the style, but quaderno_request is a generic escape hatch that breaks the predictable naming convention.
At 23 tools, the server is on the heavy side and falls in the 16-25 range that feels less scoped than ideal. However, the count is somewhat justified by the many distinct entity types covered, including contacts, invoices, items, credit notes, expenses, receipts, jurisdictions, and webhooks.
Core workflows like calculating tax, creating invoices/transactions, and managing contacts/items are covered, and every exposed resource has get/list access. Missing update/delete operations for most resources, read-only webhooks, and no direct creation paths for expenses/receipts/credit notes leave notable lifecycle gaps.
Available Tools
23 toolscalculate_taxCalculate tax rateRead-onlyInspect
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 }.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Transaction date (YYYY-MM-DD); defaults to today. | |
| amount | No | Transaction amount to compute the tax on. | |
| tax_id | No | The customer's tax ID / VAT number (may trigger reverse-charge). | |
| to_city | No | The customer's city (recommended for US sales tax). | |
| currency | No | ISO 4217 currency code (e.g. "USD"). | |
| tax_code | No | Product tax code, e.g. "standard", "reduced", "exempt", "eservice", "ebook", "saas", "consulting". | |
| to_street | No | The customer's street address (recommended for US sales tax). | |
| to_country | Yes | The customer's country — 2-letter ISO code (e.g. "US", "DE"). Required. | |
| from_country | No | The seller's country (2-letter ISO); defaults to the account country. | |
| product_type | No | Whether the product is a good or a service. | |
| tax_behavior | No | Whether the amount includes tax or not. | |
| to_postal_code | No | The customer's ZIP / postal code (recommended for US sales tax). | |
| from_postal_code | No | The seller's postal code. |
create_contactCreate a contactDestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Contact kind. | |
| No | Contact email address. | ||
| fields | No | Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above). | |
| tax_id | No | The contact's tax ID / VAT number. | |
| country | No | 2-letter ISO country code. | |
| last_name | No | The person's last name (persons only). | |
| first_name | No | For a person: their first name. For a company: the company name (Quaderno stores it here). | |
| contact_name | No | The contact person's name at a company (companies only). |
create_invoiceCreate an invoiceDestructiveInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | Line items, e.g. [{ description, quantity, unit_price, tax_1_name, tax_1_rate }]. | |
| notes | No | Free-text notes on the invoice. | |
| fields | No | Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above). | |
| currency | No | ISO 4217 currency code. | |
| due_date | No | Due date (YYYY-MM-DD). | |
| po_number | No | Purchase-order number. | |
| contact_id | No | The id of an existing contact to invoice. Omit only if you pass a full `contact` object via `fields`. | |
| issue_date | No | Issue date (YYYY-MM-DD). |
create_itemCreate a product (item)DestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | SKU / product code. | |
| kind | No | Whether it is a one-off or a subscription product. | |
| name | Yes | Product name. | |
| fields | No | Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above). | |
| currency | No | ISO 4217 currency code. | |
| unit_cost | Yes | Unit price of the product. | |
| product_type | No | Whether the product is a good or a service. |
create_transactionCreate a transactionDestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Transaction type (default "sale"). | |
| items | Yes | Required. Transaction line items, e.g. [{ description, amount, quantity, tax_code, product_type }]. | |
| fields | No | Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above). | |
| payment | No | Payment object, e.g. { payment_method, amount, date }. | |
| currency | No | ISO 4217 currency code. | |
| customer | No | The customer contact object (or reference), e.g. { first_name, last_name, email, country, tax_id }. |
get_contactGet a contactRead-onlyInspect
Fetch a single contact by id. Quaderno API: GET /contacts/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The resource id. |
get_credit_noteGet a credit noteRead-onlyInspect
Fetch a single credit note by id. Quaderno API: GET /credit_notes/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The resource id. |
get_expenseGet an expenseRead-onlyInspect
Fetch a single expense by id. Quaderno API: GET /expenses/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The resource id. |
get_invoiceGet an invoiceRead-onlyInspect
Fetch a single invoice by id (full object incl. items, taxes, payments, permalink, pdf). Quaderno API: GET /invoices/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The resource id. |
get_itemGet a product (item)Read-onlyInspect
Fetch a single product/item by id. Quaderno API: GET /items/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The resource id. |
get_receiptGet a receiptRead-onlyInspect
Fetch a single receipt by id. Quaderno API: GET /receipts/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The resource id. |
list_contactsList contactsRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by contact name, email, or tax ID. | |
| page | No | Page number (legacy pagination; prefer created_before). | |
| per_page | No | Entries per page (1-100, default 25). | |
| created_before | No | Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id). |
list_credit_notesList credit notesRead-onlyInspect
List credit notes (refund documents), newest first. Quaderno API: GET /credit_notes. Wrapped as { data, pagination } when more pages exist.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by number, customer name, or PO number. | |
| date | No | Date range filter, e.g. "2026-01-01,2026-12-31". | |
| page | No | Page number (legacy pagination; prefer created_before). | |
| contact | No | Filter by customer (contact) id. | |
| per_page | No | Entries per page (1-100, default 25). | |
| created_before | No | Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id). |
list_expensesList expensesRead-onlyInspect
List expenses (bills you received), newest first. Quaderno API: GET /expenses. Wrapped as { data, pagination } when more pages exist.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by number or vendor name. | |
| date | No | Date range filter, e.g. "2026-01-01,2026-12-31". | |
| page | No | Page number (legacy pagination; prefer created_before). | |
| contact | No | Filter by vendor (contact) id. | |
| per_page | No | Entries per page (1-100, default 25). | |
| created_before | No | Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id). |
list_invoicesList invoicesRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by invoice number, customer name, or PO number. | |
| date | No | Date range filter, e.g. "2026-01-01,2026-12-31". | |
| page | No | Page number (legacy pagination; prefer created_before). | |
| state | No | Filter by invoice state. | |
| contact | No | Filter by customer (contact) id. | |
| per_page | No | Entries per page (1-100, default 25). | |
| created_before | No | Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id). |
list_itemsList products (items)Read-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (legacy pagination; prefer created_before). | |
| per_page | No | Entries per page (1-100, default 25). | |
| created_before | No | Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id). |
list_jurisdictionsList tax jurisdictionsRead-onlyInspect
List the tax jurisdictions (id, name, country, region) where the account is registered to collect tax. Quaderno API: GET /jurisdictions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_receiptsList receiptsRead-onlyInspect
List receipts, newest first. Quaderno API: GET /receipts. Wrapped as { data, pagination } when more pages exist.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search by number or customer name. | |
| date | No | Date range filter, e.g. "2026-01-01,2026-12-31". | |
| page | No | Page number (legacy pagination; prefer created_before). | |
| contact | No | Filter by customer (contact) id. | |
| per_page | No | Entries per page (1-100, default 25). | |
| created_before | No | Cursor for pagination: return records created before this id (from X-Pages-NextPage / a prior record id). |
list_tax_codesList tax codesRead-onlyInspect
List the product tax codes Quaderno supports (id, name, description) — used as the tax_code on products / tax calculations. Quaderno API: GET /tax_codes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
list_webhooksList webhooksRead-onlyInspect
List the account's configured webhooks (id, url, events). Quaderno API: GET /webhooks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
pingPing (verify auth)Read-onlyInspect
Verify the API key and connection by pinging Quaderno. Returns account/authentication status. Quaderno API: GET /ping.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
quaderno_requestRaw read requestRead-onlyInspect
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | API path after /api, starting with a slash, e.g. "/tax_ids". | |
| query | No | Optional query params object. |
update_contactUpdate a contactDestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The resource id. | |
| No | Contact email address. | ||
| fields | No | Additional raw Quaderno fields merged into the request body (escape hatch for any field not typed above). | |
| tax_id | No | Tax ID / VAT number. | |
| country | No | 2-letter ISO country code. | |
| last_name | No | Person last name. | |
| first_name | No | Person first name / company name. | |
| contact_name | No | Contact person at a company. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
23 tool updates
- Changed
calculate_tax1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
create_contact1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
create_invoice1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
create_item1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
create_transaction1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_contact1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_credit_note1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_expense1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_invoice1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_item1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
get_receipt1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_contacts1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_credit_notes1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_expenses1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_invoices1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_items1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_jurisdictions1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_receipts1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_tax_codes1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
list_webhooks1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
ping1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
quaderno_request1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
update_contact1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
23 tool updates
- First observed
calculate_tax - First observed
create_contact - First observed
create_invoice - First observed
create_item - First observed
create_transaction - First observed
get_contact - First observed
get_credit_note - First observed
get_expense - First observed
get_invoice - First observed
get_item - First observed
get_receipt - First observed
list_contacts - First observed
list_credit_notes - First observed
list_expenses - First observed
list_invoices - First observed
list_items - First observed
list_jurisdictions - First observed
list_receipts - First observed
list_tax_codes - First observed
list_webhooks - First observed
ping - First observed
quaderno_request - First observed
update_contact
Related MCP Connectors
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
MCP server for Codat — companies, connections, invoices, bills and financial statements.
MCP server for Modern Treasury — payment orders, transactions, counterparties and ledgers.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceMCP server for Holded — invoicing, accounting, CRM, projects, and team77 npm1MIT
- FlicenseNot gradedqualityCmaintenanceMCP server providing guarded access to a B2B SaaS billing database (customers, subscriptions, invoices, credit notes) and live ECB exchange rates, with read-only tools and one capped, idempotent write for issuing credit notes.-
- AlicenseCqualityCmaintenanceMCP server for smallinvoice.ch — Swiss SME invoicing and accounting with 146 tools and OAuth2 BYOC authentication.1009 npmMIT
- AlicenseBqualityAmaintenanceMCP server for VoxFactura enabling AI assistants to query business data (invoices, expenses, project margins, clients, VAT) and create draft quotes or mark invoices paid via a scoped API, with no direct client sends.22MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.