# Quaderno — MCP server on mcp.ai > Connect your Quaderno account and use 76 tools for taxes straight from your AI agent. Connect with your own API key. Quaderno is a tax compliance platform that automates tax calculations, invoicing, and reporting for businesses worldwide. By: mcp.ai · official Page: https://mcp.ai/quaderno ## Connect (MCP protocol) Remote MCP endpoint (HTTP, streamable): https://api.mcp.ai/p_quaderno?ms=1787296080000 Add it as a custom/remote MCP connector, then authenticate when prompted. ## REST API (no MCP client required) Every tool is also a REST endpoint, authed with a workspace API key. Discover: GET https://api.mcp.ai/api/quaderno/_endpoints # public; lists every endpoint Call: POST https://api.mcp.ai/api/quaderno/ Authorization: Bearer sk_live_… # create one at https://mcp.ai/settings/api-keys Content-Type: application/json Body: { …args } → { "ok": true, "tool": "", "result": { … } } ## Developer docs How to use (MCP or REST), markdown: https://mcp.ai/quaderno/skill.md Postman collection (v2.1): https://mcp.ai/quaderno/postman.json ## Tools - quaderno_add_expense_payment(id: integer, date: string, amount?: number, processor?: string, processor_id?: string, payment_method: string) — Adds a payment to an existing expense in Quaderno. Use when you need to record a payment received for an expense. Returns the payment record with ID, amount in cents, and payment method details. - quaderno_calculate_tax_rate(amount?: number, tax_id?: string, tax_code?: string, to_country: string, from_country?: string, product_type?: string, to_postal_code?: string) — Tool to calculate applicable tax rate for given address and transaction type. Use when you need tax details before invoicing. - quaderno_create_contact(city?: string, kind: string, email?: string, region?: string, country: string, phone_1?: string, full_name?: string, last_name?: string, department?: string, first_name: string, postal_code?: string, street_line_1?: string, contact_person?: string) — Tool to create a new contact (customer or vendor). Use when you need to add a person or company contact in Quaderno. - quaderno_create_coupon(code: string, name?: string, currency?: string, redeem_by?: string, amount_off?: number, percent_off?: number, max_redemptions?: integer) — Tool to create a new discount coupon in Quaderno. Use when you need to create either a percentage-based or fixed-amount discount coupon. Either percent_off or amount_off must be provided (but not both - quaderno_create_estimate(city?: string, notes?: string, number?: string, region?: string, tax_id?: string, contact: object, country?: string, subject?: string, currency: string, tag_list?: string, po_number?: string, issue_date?: string, postal_code?: string, street_line_1?: string, street_line_2?: string, custom_metadata?: object, payment_details?: string, items_attributes: object[]) — Creates a new estimate/quote in Quaderno for a customer with line items. Returns estimate with ID, number, permalink, and total amounts in cents. Use this when you need to create a cost estimate or qu - quaderno_create_evidence(ip_address?: string, document_id: integer, bank_country?: string, billing_country?: string) — Tool to create a new location evidence for tax compliance. Use when you need to create evidence records with billing country, IP address, or bank country information for verifying customer location. - quaderno_create_expense(city?: string, items: object[], notes?: string, state?: string, region?: string, contact: object, country?: string, subject?: string, currency?: string, tag_list?: string[], po_number?: string, attachment?: object, issue_date?: string, postal_code?: string, street_line_1?: string, street_line_2?: string, payment_method?: string, custom_metadata?: object, payment_details?: string, payment_processor?: string, payment_processor_id?: string) — Tool to create a business expense in Quaderno. Use when you need to record an expense from a supplier or vendor with line items and optional attachments. - quaderno_create_invoice(city?: string, items: object[], notes?: string, number?: string, region?: string, tax_id?: string, contact: object, country?: string, subject?: string, currency: string, due_date?: string, evidence?: object, tag_list?: string, po_number?: string, attachment?: object, issue_date?: string, postal_code?: string, street_line_1?: string, street_line_2?: string, custom_metadata?: object, payment_details?: string, recurring_period?: string, payment_processor?: string, processor_fee_cents?: integer, recurring_frequency?: integer, payment_processor_id?: string) — Creates a new invoice in Quaderno for a customer with line items. Returns invoice with ID, number, permalink, PDF URL, and total amounts in cents. Use this when you need to bill a customer for product - quaderno_create_product(code: string, kind?: string, name: string, stock?: string, country?: string, currency?: string, tax_type?: string, tax_class?: string, unit_cost: string, description?: string, product_type?: string, tax_based_on?: string, stripe_plan_id?: string, paypal_interval_unit?: string, paypal_interval_duration?: integer, paypal_interval_frequency?: integer) — Creates a new product that can be used as a line item in invoices, credit notes, and expenses. Use this to register products with their SKU, pricing, tax classification, and other details in your Quad - quaderno_create_receipt(city?: string, items: object[], notes?: string, number?: string, region?: string, contact: object, country?: string, subject?: string, currency?: string, due_date?: string, evidence?: object, payments: object[], tag_list?: string[], po_number?: string, attachment?: object, issue_date?: string, postal_code?: string, exchange_rate?: number, street_line_1?: string, street_line_2?: string, custom_metadata?: object, payment_details?: string, payment_processor?: string, processor_fee_cents?: integer, payment_processor_id?: string) — Creates a new receipt in Quaderno documenting payment for goods or services. Returns receipt with ID, number, permalink, PDF URL, and total amounts. Use when you need to create a receipt for a complet - quaderno_create_recurring(items: object[], notes?: string, state?: string, taxes?: object[], contact: object, subject?: string, currency?: string, due_days?: string, end_date?: string, tag_list?: string[], frequency?: string, po_number?: string, start_date?: string, custom_metadata?: object, payment_details?: string, recurring_period?: string, recurring_frequency?: integer) — Tool to create a recurring document in Quaderno that automatically generates invoices on a schedule. Use when setting up subscription billing or periodic invoices for a customer. - quaderno_create_report_request(parameters: object, report_type: string) — Tool to request a new report generation in Quaderno. Use when you need to generate tax summaries, invoice lists, or credit note lists for a specific date range. Reports are generated asynchronously - - quaderno_create_tax_id(value: string, valid_from?: string, valid_until?: string, import_scheme?: boolean, jurisdiction_id: integer, permanent_establishment?: boolean) — Tool to create a tax ID in a specific jurisdiction. Use when you need to register your business's tax identification number (such as VAT) in a tax jurisdiction. - quaderno_create_transaction(type: string, items: object[], payment?: object, evidence?: object, processor?: string, processor_id?: string) — Tool to create a sale or refund transaction in Quaderno. Use when you need to record revenue or refunds - the API automatically generates invoices/credit notes when autosend is enabled. Preferred API - quaderno_create_webhook(url: string, events_types: string[]) — Tool to create a new webhook in Quaderno to receive event notifications. Use when you need to subscribe to real-time events like invoice.created or contact.created. Quaderno signs all webhook events w - quaderno_delete_contact(id: string) — Tool to permanently delete a contact by ID. Use when you have confirmed the contact ID is correct and no longer need the contact. - quaderno_delete_coupon(id: string) — Tool to permanently delete a coupon. Use when you have confirmed the coupon ID is correct and need to remove it permanently (cannot be undone). - quaderno_delete_estimate(id: string) — Permanently deletes an estimate from Quaderno by its ID. This action removes the estimate record from your Quaderno account. Use this when you need to delete an estimate that was created in error or i - quaderno_delete_expense(id: string) — Permanently deletes an expense from Quaderno by its ID. This action removes the expense record from your Quaderno account. Use this when you need to delete an expense that was created in error or is n - quaderno_delete_product(id: string) — Tool to permanently delete a product by ID. Use when you have confirmed the product ID is correct and no longer need the product. - quaderno_delete_recurring(id: string) — Tool to permanently delete a recurring by ID. Use when you need to remove a recurring document from Quaderno. This action is irreversible. - quaderno_delete_tax_id(id: string) — Permanently deletes a registered tax ID from your Quaderno account. Use this when you need to remove a tax jurisdiction registration that is no longer needed. - quaderno_delete_webhook(id: integer) — Tool to permanently delete a webhook by ID. Use when you have confirmed the webhook ID is correct and no longer need the webhook. - quaderno_deliver_credit_note(id: string) — Sends a credit note to the customer via email. The contact associated with the credit note must have a valid email address. Returns the credit note details including the delivery email and PDF link. - quaderno_deliver_estimate(id: string) — Delivers an estimate to the customer via email. The estimate's contact must have a valid email address. Use this after creating or finalizing an estimate to send it to the customer. - quaderno_deliver_invoice(id: string) — Delivers an invoice to the customer via email. The invoice's contact must have a valid email address. Use this after creating or finalizing an invoice to send it to the customer. - quaderno_deliver_receipt(id: string) — Sends a receipt to the customer via email. The contact associated with the receipt must have a valid email address. Returns the receipt details including the delivery email and PDF link. - quaderno_get_authorization() — Tool to retrieve account credentials and verify API access. Use to validate authentication and get account details. - quaderno_get_estimate(id: string) — Tool to retrieve the details of an existing estimate by ID. Use when you need full estimate information for review or conversion to invoice. - quaderno_list_contacts(q?: string, page?: integer, per_page?: integer, processor_id?: string) — Tool to list contacts, paginated and filterable by name, email, or tax ID. Use when you need to retrieve subsets of your contacts. - quaderno_list_coupons(page?: integer, per_page?: integer) — Tool to list all coupons. Use when you need to retrieve available coupons sorted by creation date (newest first). - quaderno_list_credits(q?: string, date?: string, state?: string, processor_id?: string) — Tool to list all credit notes from Quaderno. Use when you need to retrieve credit notes with optional filtering by search query, date range, state, or processor ID. - quaderno_list_estimates(q?: string, date?: string, state?: string, created_before?: integer) — Tool to list all estimates in the account, paginated and sorted by creation date (newest first). Use when you need to retrieve estimates, optionally filtered by contact name, state, or date range. - quaderno_list_evidence(page?: integer, state?: string, per_page?: integer, document_id?: integer) — Tool to list all evidence objects. Use when you need to retrieve location evidences, optionally filtered by state or document ID. - quaderno_list_expenses(limit?: integer, created_before?: integer) — List all expenses from Quaderno with pagination support. Returns expenses in reverse chronological order (newest first). Each expense includes complete details: contact information, line items, paymen - quaderno_list_invoices(q?: string, date?: string, state?: string, contact?: integer, processor_id?: string) — Tool to list all invoices from Quaderno with filtering support. Use when you need to retrieve invoices by various criteria such as number, customer name, date range, or payment status. - quaderno_list_jurisdictions(region?: string, country?: string) — Tool to list all tax jurisdictions. Use when you need supported jurisdictions for tax calculations. - quaderno_list_products(q?: string, page?: integer, per_page?: integer) — List all products (goods and services) from your Quaderno account. Supports filtering by name or SKU code using the 'q' parameter. Returns product details including pricing, tax settings, and subscrip - quaderno_list_receipts(q?: string, date?: string, state?: string, contact?: integer, processor_id?: string) — Tool to list all receipts from Quaderno with optional filtering by search query, date range, payment state, processor ID, or customer ID. Use when you need to retrieve receipts for reporting, reconcil - quaderno_list_recurrings(created_before?: integer) — List all recurring documents (invoices, expenses, or estimates) from your Quaderno account. Recurring documents automatically generate new documents at specified intervals. Returns documents in revers - quaderno_list_registered_tax_i_ds(limit?: integer, created_before?: integer) — Tool to list all registered tax IDs. Use when retrieving jurisdictions where your business has registered tax IDs. Supports optional cursor-based pagination. - quaderno_list_reporting_requests() — Retrieves all reporting requests for the account with their current status and download URLs. Use this tool to check the status of previously created reporting requests and obtain download URLs for co - quaderno_list_sessions(limit?: integer, status?: string, created_before?: integer) — List Quaderno Checkout sessions with optional filtering and pagination. Supports cursor-based pagination using 'created_before' and 'limit' parameters, and filtering by session status. Use this to ret - quaderno_list_tax_codes() — Tool to list all supported tax codes. Use when you need to retrieve the full set of tax codes for classifying items. - quaderno_list_webhooks(page?: integer, per_page?: integer) — Tool to list all webhooks. Use when you need to retrieve webhook configurations. - quaderno_mark_invoice_uncollectible(id: string) — Tool to mark an invoice as uncollectible (bad debt). Use when an invoice cannot be collected and should be written off as a loss. - quaderno_ping() — Tool to check if the Quaderno API service is up and verify credentials. Use when testing API connectivity or checking service status before making actual requests. - quaderno_record_invoice_payment(id: string, date?: string, amount: number, processor?: string, processor_id?: string, payment_method?: string) — Tool to record a payment on an existing invoice. Use when a customer has paid an invoice and you need to record the payment details in Quaderno. - quaderno_remove_invoice_payment(id: string, payment_id: string) — Tool to remove a payment from an invoice. Use when you need to delete a payment record that was applied to an invoice in error or needs to be adjusted. - quaderno_retrieve_contact(id: string) — Tool to retrieve details of an existing contact by ID. Use after confirming contact ID. - quaderno_retrieve_contact_by_processor_id(gateway: string, customer_id: string) — Tool to retrieve a contact by external payment processor customer ID and gateway name. Use when you have the processor's customer ID instead of Quaderno's internal contact ID. - quaderno_retrieve_coupon(id: string) — Retrieve detailed information about a specific coupon by its ID. Use this action when you need to fetch coupon details like discount percentage, redemption limits, or expiration dates. You must first - quaderno_retrieve_credit(id: integer) — Tool to retrieve details of an existing credit note by ID. Use when you need full credit note details for refund processing or reporting. - quaderno_retrieve_evidence(id: string) — Retrieves a specific evidence object by its ID. Evidence objects contain location proofs (billing country, IP address, bank country) used for tax compliance. Use this when you need detailed informatio - quaderno_retrieve_expense(id: string) — Tool to retrieve details of an existing expense by ID. Use after confirming expense ID. - quaderno_retrieve_invoice(id: string) — Tool to retrieve details of an existing invoice by ID. Use when you need full invoice details for reporting or reconciliation. - quaderno_retrieve_jurisdiction(id: string) — Tool to retrieve a tax jurisdiction by ID. Use when you need the name, country, and region of a specific jurisdiction after confirming its ID. Example: "Retrieve jurisdiction 94". - quaderno_retrieve_product(id: string) — Tool to retrieve details of an existing product by ID. Use after confirming the product ID exists. - quaderno_retrieve_receipt(id: string) — Tool to retrieve details of an existing receipt by ID. Use when you need full receipt details for reporting or reconciliation. - quaderno_retrieve_recurring(id: string) — Tool to retrieve details of an existing recurring document by ID. Use when you need information about a recurring invoice or expense subscription. - quaderno_retrieve_reporting_request(id: integer) — Tool to retrieve the status and download URL of a specific report request by ID. Use when you need to check if a report is ready and get the report_url to download it. - quaderno_retrieve_tax_code(id: string) — Tool to retrieve a specific tax code by ID. Use when you need details about a particular tax code classification. - quaderno_retrieve_tax_id(id: integer) — Tool to retrieve details of a specific tax ID by its ID. Use when you need to get information about a registered tax identification number. - quaderno_update_contact(id: integer, web?: string, city?: string, kind?: string, email?: string, notes?: string, region?: string, tax_id?: string, country?: string, phone_1?: string, discount?: number, language?: string, last_name?: string, processor?: string, department?: string, first_name?: string, tax_status?: string, postal_code?: string, processor_id?: string, street_line_1?: string, street_line_2?: string, contact_person?: string) — Tool to update an existing contact in Quaderno. Use when you need to modify contact details such as name, address, email, or tax information. - quaderno_update_coupon(id: string, code?: string, name?: string, currency?: string, redeem_by?: string, amount_off?: number, percent_off?: number, max_redemptions?: integer) — Tool to update an existing coupon. Use when you need to modify coupon properties like discount amount, name, or redemption limits. Note: Coupons linked to Stripe cannot be edited and will return an er - quaderno_update_credit_note(id: integer, notes?: string, tag_list?: string, po_number?: string, attachment?: object, street_line_1?: string, street_line_2?: string, custom_metadata?: object, payment_details?: string) — Tool to update a credit note. Use when you need to modify metadata, tags, notes, billing address, or attach files to an existing credit note. Only limited fields can be updated if it has already been - quaderno_update_estimate(id: integer, city?: string, notes?: string, region?: string, tax_id?: string, country?: string, subject?: string, currency?: string, tag_list?: string, po_number?: string, attachment?: object, contact_id?: string, issue_date?: string, postal_code?: string, contact_name?: string, street_line_1?: string, street_line_2?: string, custom_metadata?: object, payment_details?: string, items_attributes?: object[]) — Updates an existing estimate in Quaderno by modifying allowed fields. Use when you need to change estimate details like notes, purchase order number, tags, payment details, billing address, contact in - quaderno_update_evidence(id: integer, notes?: string, ip_address?: string, ip_country?: string, document_id?: integer, bank_country?: string, billing_country?: string, additional_evidence?: string, additional_evidence_country?: string) — Tool to update an evidence object. Use when you need to modify location proofs (billing country, IP address, bank country, notes) for tax compliance records. - quaderno_update_expense(id: integer, notes?: string, tag_list?: string, po_number?: string, street_line_1?: string, street_line_2?: string, custom_metadata?: object, payment_details?: string) — Updates an existing expense in Quaderno by modifying allowed fields. This action sends a PUT request to /expenses/{id}.json and returns the complete updated expense. Only specific fields can be modifi - quaderno_update_invoice(id: integer, notes?: string, tag_list?: string, po_number?: string, attachment?: object, street_line_1?: string, street_line_2?: string, custom_metadata?: object, payment_details?: string) — Updates an existing invoice in Quaderno by modifying allowed fields. This action sends a PUT request to /invoices/{id} and returns the complete updated invoice. Only specific fields can be modified af - quaderno_update_product(id: integer, code?: string, kind?: string, name?: string, stock?: string, country?: string, currency?: string, tax_type?: string, tax_class?: string, unit_cost?: string, description?: string, product_type?: string, tax_based_on?: string, stripe_plan_id?: string, paypal_interval_unit?: string, paypal_interval_duration?: integer, paypal_interval_frequency?: integer) — Tool to update a product; unspecified fields remain unchanged. Use after fetching the product to apply partial updates. - quaderno_update_recurring(id: integer, items?: object[], notes?: string, state?: string, taxes?: object[], contact?: object, subject?: string, currency?: string, due_days?: string, end_date?: string, tag_list?: string[], frequency?: string, po_number?: string, start_date?: string, custom_metadata?: object, payment_details?: string, recurring_period?: string, recurring_frequency?: integer) — Tool to update a recurring document in Quaderno. Use when you need to modify subscription details, billing information, line items, or recurring schedule. Only specified fields are updated; unspecifie - quaderno_update_tax_id(id: integer, value?: string, valid_from?: string, valid_until?: string, import_scheme?: boolean, permanent_establishment?: boolean) — Tool to update an existing tax ID in Quaderno. Use when you need to modify tax ID details such as validity dates, value, or establishment settings. - quaderno_update_webhook(id: integer, url?: string, events_types?: string[]) — Tool to update an existing webhook configuration. Use when you need to modify webhook URL or event subscriptions. - quaderno_validate_tax_id(tax_id: string, country: string) — Tool to validate a tax ID. Use when confirming whether a given country-specific tax ID is valid. Example: validate tax ID 'DE303954554' for Germany. - quaderno_void_credit_note(id: integer) — Tool to void a credit note. Use when you need to cancel an existing credit note. ## Example prompts - "What can I do in Quaderno?" - "Show me a summary of my Quaderno account" ## Links Docs: https://mcp.ai/docs/mcps/quaderno Website: https://mcp.ai/mcps/quaderno