Quipu MCP by usefulapi

Read contacts, invoices and book entries; create contacts and draft invoices in Quipu.

Should I use this

Quality & Safety

A
Description quality
96%
Schema completeness
88%
Naming quality
76%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • LOWTool 'quipu_list_accounting_categories' name length outside 3-30 rangein quipu_list_accounting_categories
  • LOWTool 'quipu_list_accounting_subcategories' name length outside 3-30 rangein quipu_list_accounting_subcategories

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,561Tokens (tool definitions)
~2.1 KBTypical response size
Significant attention impact (2.00% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "quipu": {
      "url": "https://quipu.usefulapi.io/mcp"
    }
  }
}

Remote endpoints

https://quipu.usefulapi.io/mcpstreamable-http

What it can do

Tool inventory

Tools (11)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢quipu_list_contacts(kind, tax_id, country, email, q, ...)

List contacts (clients and suppliers) of the Quipu account. Filter by kind, tax id, country, email or free text.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "description": "Only clients or only suppliers.",
      "type": "string",
      "enum": [
        "client",
        "supplier"
      ]
    },
    "tax_id": {
      "description": "Exact NIF/CIF/tax id.",
      "type": "string"
    },
    "country": {
      "description": "Two-letter country code, for example ES.",
      "type": "string"
    },
    "email": {
      "type": "string"
    },
    "q": {
      "description": "Free-text search (name, tax id, email).",
      "type": "string"
    },
    "sort": {
      "description": "Sort field; prefix with - for descending.",
      "type": "string"
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Results per page (1-100, default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢quipu_get_contact(contact_id)

Get one contact by id, with its totals of paid and unpaid incomes and expenses.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_id": {
      "description": "Quipu resource id (integer).",
      "type": [
        "string",
        "number"
      ]
    }
  },
  "required": [
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢quipu_list_invoices(kind, q, period, operation_date, operation_date_from, ...)

List invoices (issued and received). Filter by kind, period, operation date, payment status or contact. Totals and PDF links are in the attributes.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "description": "income = issued invoices, expenses = received invoices.",
      "type": "string",
      "enum": [
        "income",
        "expenses"
      ]
    },
    "q": {
      "description": "Free-text search.",
      "type": "string"
    },
    "period": {
      "description": "Period such as \"2024Q1\" or \"2024-01\".",
      "type": "string"
    },
    "operation_date": {
      "description": "Year (2024), quarter (2024-Q1), month (2024-3) or all. Works with kind=income.",
      "type": "string"
    },
    "operation_date_from": {
      "description": "Start of an explicit range; send with operation_date_to. Works with kind=income.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "operation_date_to": {
      "description": "End of an explicit range; send with operation_date_from.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "payment_status": {
      "description": "Payment status. unpaid includes pending and overdue.",
      "type": "string",
      "enum": [
        "paid",
        "unpaid",
        "due",
        "pending"
      ]
    },
    "validation_status": {
      "type": "string"
    },
    "contact_id": {
      "description": "Only invoices of this contact.",
      "type": [
        "string",
        "number"
      ]
    },
    "include": {
      "description": "Comma-separated related resources to include (for example contact,items).",
      "type": "string"
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Results per page (1-100, default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢quipu_get_invoice(invoice_id, include)

Get one invoice by id. Income invoices include download_pdf_url and ephemeral_open_download_pdf_url (a temporary PDF link).

Input Schema

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "description": "Quipu resource id (integer).",
      "type": [
        "string",
        "number"
      ]
    },
    "include": {
      "description": "Comma-separated related resources to include (for example contact,items).",
      "type": "string"
    }
  },
  "required": [
    "invoice_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢quipu_list_book_entries(type, kind, q, period, operation_date, ...)

List all book entries (invoices, tickets and other accounting entries) in one list. Filter by type, kind, period, dates, payment status or contact.

Input Schema

{
  "type": "object",
  "properties": {
    "type": {
      "description": "Entry type filter.",
      "type": "string"
    },
    "kind": {
      "description": "income = issued invoices, expenses = received invoices.",
      "type": "string",
      "enum": [
        "income",
        "expenses"
      ]
    },
    "q": {
      "description": "Free-text search.",
      "type": "string"
    },
    "period": {
      "description": "Period such as \"2024Q1\" or \"2024-01\".",
      "type": "string"
    },
    "operation_date": {
      "description": "Year, quarter, month or all. Works with kind=income.",
      "type": "string"
    },
    "payment_status": {
      "description": "Payment status. unpaid includes pending and overdue.",
      "type": "string",
      "enum": [
        "paid",
        "unpaid",
        "due",
        "pending"
      ]
    },
    "validation_status": {
      "type": "string"
    },
    "contact_id": {
      "description": "Quipu resource id (integer).",
      "type": [
        "string",
        "number"
      ]
    },
    "include": {
      "description": "Comma-separated related resources to include (for example contact,items).",
      "type": "string"
    },
    "with_detailed_amounts": {
      "description": "Add detailed amounts to each entry.",
      "type": "boolean"
    },
    "sort": {
      "type": "string"
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Results per page (1-100, default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢quipu_list_numbering_series(applicable_to, amending, prefix, page, page_size)

List invoice numbering series (prefixes). Use a series id when you create a draft invoice.

Input Schema

{
  "type": "object",
  "properties": {
    "applicable_to": {
      "type": "string"
    },
    "amending": {
      "description": "Only series for amending (credit) invoices.",
      "type": "boolean"
    },
    "prefix": {
      "type": "string"
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Results per page (1-100, default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢quipu_list_accounting_categories(kind, prefix, active, page, page_size)

List accounting categories (chart of accounts groups). Filter by kind, prefix or active state.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string"
    },
    "prefix": {
      "type": "string"
    },
    "active": {
      "type": "boolean"
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Results per page (1-100, default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢quipu_list_accounting_subcategories(accounting_category_id, page, page_size)

List accounting subcategories, optionally for one accounting category.

Input Schema

{
  "type": "object",
  "properties": {
    "accounting_category_id": {
      "description": "Quipu resource id (integer).",
      "type": [
        "string",
        "number"
      ]
    },
    "page": {
      "description": "Page number (1-based, default 1).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "page_size": {
      "description": "Results per page (1-100, default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴quipu_create_contact(name, country_code, tax_id, document_type, email, ...)

Create a contact (client or supplier). WRITE: it adds a record to the Quipu account. A tax id is needed before you invoice the contact.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1
    },
    "country_code": {
      "type": "string",
      "minLength": 2,
      "maxLength": 2,
      "description": "Two-letter country code, for example ES."
    },
    "tax_id": {
      "description": "NIF/CIF/tax id.",
      "type": "string"
    },
    "document_type": {
      "type": "string",
      "enum": [
        "NIF",
        "passport",
        "official_id_from_residence_country",
        "residence_permit",
        "other",
        "none"
      ]
    },
    "email": {
      "type": "string"
    },
    "phone": {
      "type": "string"
    },
    "address": {
      "type": "string"
    },
    "town": {
      "type": "string"
    },
    "zip_code": {
      "type": "string"
    },
    "client_number": {
      "type": "string"
    },
    "bank_account_number": {
      "type": "string"
    }
  },
  "required": [
    "name",
    "country_code"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡quipu_update_contact(contact_id, name, country_code, tax_id, document_type, ...)

Update fields of one contact. WRITE: it changes the record; only the fields you send change.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_id": {
      "description": "Quipu resource id (integer).",
      "type": [
        "string",
        "number"
      ]
    },
    "name": {
      "type": "string"
    },
    "country_code": {
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    },
    "tax_id": {
      "type": "string"
    },
    "document_type": {
      "type": "string",
      "enum": [
        "NIF",
        "passport",
        "official_id_from_residence_country",
        "residence_permit",
        "other",
        "none"
      ]
    },
    "email": {
      "type": "string"
    },
    "phone": {
      "type": "string"
    },
    "address": {
      "type": "string"
    },
    "town": {
      "type": "string"
    },
    "zip_code": {
      "type": "string"
    },
    "client_number": {
      "type": "string"
    },
    "bank_account_number": {
      "type": "string"
    }
  },
  "required": [
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴quipu_create_draft_invoice(contact_id, numbering_series_id, operation_date, payment_method, tags, ...)

Create a DRAFT income invoice for a contact. WRITE: it adds a draft to Quipu. It sends no issue date or number, so Quipu does not issue or register the invoice; finalize it in the Quipu app.

Input Schema

{
  "type": "object",
  "properties": {
    "contact_id": {
      "description": "Id of the client contact.",
      "type": [
        "string",
        "number"
      ]
    },
    "numbering_series_id": {
      "description": "Numbering series id (see quipu_list_numbering_series).",
      "type": [
        "string",
        "number"
      ]
    },
    "operation_date": {
      "description": "Date of the delivery or service.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "payment_method": {
      "description": "For example bank_transfer, cash, card.",
      "type": "string"
    },
    "tags": {
      "type": "string"
    },
    "notes": {
      "type": "string"
    },
    "items": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "concept": {
            "type": "string",
            "minLength": 1
          },
          "unitary_amount": {
            "type": "string",
            "pattern": "^-?\\d+(\\.\\d+)?$",
            "description": "Unit price before tax, as a decimal string."
          },
          "quantity": {
            "description": "Default 1.",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "vat_percent": {
            "description": "VAT percent, for example 21.",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "retention_percent": {
            "description": "IRPF retention percent, for example 15.",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "discount_percent": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "concept",
          "unitary_amount"
        ]
      },
      "description": "Invoice lines."
    }
  },
  "required": [
    "contact_id",
    "items"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded11 tools