Mcp Quipu

io.github.nubiia-dev由 GitHub 账号 nubiia-dev 发布v1.0.2更新于 Oct 29, 2026

Quipu API integration with 18 MCP tools for invoices, expenses, contacts and Spanish VAT reporting

已验证STDIO仅桌面金融商业与电商

概览

AI 生成的概览

面向 Quipu 开票 API 的 MCP 服务器,让助手读取和管理联系人、发票、费用,并汇总西班牙增值税数据。

可以做什么
  • 列出、查看、创建、修改和删除 Quipu 联系人(客户与供应商)
  • 列出、查看、创建、修改和删除已开发票,并获取临时 PDF 下载链接
  • 列出、查看、创建、修改和删除供应商账单等额外收入与费用,并获取临时 PDF 链接
  • 按季度或日期区间,根据已记录的发票和费用计算增值税与个人所得税预扣数据
适用场景
适合在 Quipu 中记账的西班牙个体经营者和小型企业,用自然语言查询季度营业额、增值税状况,或起草发票、登记费用。
运行要求
通过 npx 在本地运行(需要 Node.js)。需要 Quipu 账户 API 设置中的凭据,以 QUIPU_CLIENT_ID 和 QUIPU_CLIENT_SECRET 提供,另需 QUIPU_OWNER_SLUG,即账户 Quipu 网址的第一段路径。需要访问 Quipu API 的网络连接;OAuth2 令牌在内存中缓存并自动刷新。
安装前请注意
该服务器可在真实账套中创建、修改并永久删除联系人、发票和费用记录,写操作配额更严格。删除已编号发票与西班牙开票规定冲突,通常应改用更正发票。发票和费用的 PDF 链接是临时公开网址。客户端 ID 与密钥属于机密,不应写入共享配置。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Mcp Quipu,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

mcp-quipu

Servidor MCP para la API de Quipu: facturación, gastos, contactos y contabilidad para autónomos y pequeñas empresas en España.

Permite que un asistente como Claude consulte y opere tu cuenta de Quipu en lenguaje natural: «¿cuánto he facturado este trimestre?», «créame la factura de septiembre para este cliente», «dame el PDF de la última factura».

Construido por Nubiia. Hermano de mcp-holded.

Estado: estable (v1.0.0). 18 herramientas sobre contactos, facturas, gastos y agregación fiscal. El resto de recursos de la API está mapeado en docs/api-map.md pero aún no expuesto.

Instalación

bash
npm install -g @nubiia/mcp-quipu

Configuración

Necesitas credenciales de API de Quipu (Configuración → API) y el slug de tu cuenta, que es el primer segmento de tus URLs de Quipu: https://getquipu.com/<slug>/…

json
{  "mcpServers": {    "quipu": {      "command": "npx",      "args": ["-y", "@nubiia/mcp-quipu"],      "env": {        "QUIPU_CLIENT_ID": "tu_client_id",        "QUIPU_CLIENT_SECRET": "tu_client_secret",        "QUIPU_OWNER_SLUG": "tu_slug"      }    }  }}

Herramientas disponibles

Contactos

HerramientaDescripción
list_contactsLista contactos, con filtro por nombre y paginación
get_contactDetalle de un contacto
create_contactCrea un contacto (requiere name; el NIF/CIF es obligatorio para facturarle)
update_contactActualiza solo los campos indicados
delete_contactElimina un contacto

Facturas

HerramientaDescripción
list_invoicesLista facturas emitidas, acotables por periodo
get_invoiceDetalle de una factura
create_invoiceEmite una factura con sus líneas, IVA e IRPF
update_invoiceActualiza una factura
delete_invoiceElimina una factura
get_invoice_download_urlURL temporal para descargar el PDF

Gastos e ingresos adicionales

HerramientaDescripción
list_additional_incomesLista gastos e ingresos, acotables por periodo
get_additional_incomeDetalle de una entrada
create_additional_incomeRegistra una factura de proveedor o gasto deducible
update_additional_incomeActualiza una entrada
delete_additional_incomeElimina una entrada
get_additional_income_download_urlURL temporal del PDF

Fiscalidad

HerramientaDescripción
get_tax_summaryIVA repercutido, soportado, saldo y retenciones de un trimestre o rango

Notas de diseño

OAuth2, no API key. A diferencia de Holded, Quipu emite tokens que caducan. El cliente los cachea en memoria, los renueva con un margen de 60 segundos y comparte una sola petición entre llamadas concurrentes. Ante un 401 invalida el token y reintenta.

JSON:API aplanado. Quipu devuelve { data: { id, attributes: {…} } }. Las herramientas aplanan la respuesta a { id, …attributes }, porque los modelos razonan mucho mejor sobre objetos planos y se ahorran tokens de envoltorio.

Las escrituras van más limitadas que las lecturas. Una factura creada por error no es una fila en una base de datos: es un documento con efectos legales. Las operaciones de escritura tienen cupos más estrictos y las destructivas están anotadas con destructiveHint.

La aritmética fiscal se hace en código, no en el modelo. Quipu no expone ningún endpoint de modelos fiscales (130, 303, 111), así que las cifras hay que derivarlas de facturas y gastos. get_tax_summary recorre todas las páginas de ambos recursos, suma con redondeo a céntimos y devuelve el saldo ya calculado. Pedirle a un modelo que sume una lista larga de importes token a token es una forma fiable de obtener una cifra fiscal equivocada.

Los importes vienen como texto y con nombres poco obvios. El importe base es total_amount_without_taxes y el impuesto es vat_amount — no existen total ni subtotal. El sumador acepta coma decimal, ignora vacíos y, ante un valor no parseable, lo excluye y avisa en la respuesta en lugar de propagar un NaN silencioso.

Sobre eliminar facturas. La normativa española exige rectificar mediante factura rectificativa, no borrando una factura ya numerada. delete_invoice existe porque la API lo permite, pero la descripción de la herramienta advierte de ello para que el modelo no lo proponga a la ligera.

Desarrollo

bash
npm installnpm run buildnpm testnpm run lint

Roadmap

  • simplified_invoices — tickets y facturas simplificadas (7 ops)
  • paysheets — nóminas (5 ops)
  • numbering_series, accounting_categories, accounting_subcategories
  • attachments y book_entries
  • Resolución automática del owner_slug vía GET /users/{id}

Licencia

MIT

来源:README.md,提交 c208c89

工具

18

list_contacts

List contacts (clients and suppliers) from Quipu. Returns id, name, tax_id (NIF/CIF), email, phone and address fields. Results are paginated: use `page` to walk through pages. Quipu returns JSON:API, but this tool flattens each resource so attributes appear at the top level alongside `id`.

输入参数pagefilter_name

get_contact

Get a single Quipu contact by its id, with all available attributes (name, tax_id, email, phone, address, town, zip_code, country_code).

输入参数id必填

create_contact

Create a contact in Quipu. `name` is required. Provide `tax_id` (NIF/CIF) whenever the contact will be invoiced — Spanish invoices require it and Quipu will reject the invoice later without it.

输入参数name必填townemailphonetax_idaddresszip_codecountry_code

update_contact

Update an existing Quipu contact. Only the fields you pass are modified; everything else is left untouched.

输入参数id必填nametownemailphonetax_idaddresszip_codecountry_code

delete_contact

Delete a Quipu contact permanently. Quipu refuses to delete contacts that already have invoices attached; in that case the API returns an error explaining it.

输入参数id必填

list_invoices

List issued invoices from Quipu, with number, issue_date, due_date, total, subtotal and payment status. Paginated via `page`. Use `filter_from` and `filter_to` to bound the period — this is the tool to use when asked about revenue or VAT for a quarter, since Quipu has no endpoint that returns tax models directly and the figures must be derived from invoices.

输入参数pagefilter_tofilter_from

get_invoice

Get a single Quipu invoice by id, with all of its attributes and totals.

输入参数id必填

create_invoice

Create an issued invoice in Quipu. Requires the contact id it is billed to and at least one line item. The contact must already have a tax_id (NIF/CIF) or Quipu will reject the invoice.

输入参数items必填due_datecontact_id必填issue_datepayment_method

update_invoice

Update an existing Quipu invoice. Note that Spanish invoicing rules restrict what can change once an invoice is issued and numbered; Quipu returns an error when a field is locked.

输入参数id必填paid_atdue_dateissue_datepayment_method

delete_invoice

Delete a Quipu invoice permanently. Spanish invoicing rules generally require issuing a credit note instead of deleting a numbered invoice — prefer that unless the invoice is still a draft.

输入参数id必填

get_invoice_download_url

Get a temporary public URL to download a Quipu invoice as PDF. The link is ephemeral and expires, so fetch it when the user actually needs the document rather than storing it.

输入参数id必填

list_additional_incomes

List additional incomes and expenses recorded in Quipu — everything that is not an issued invoice: supplier bills, purchases, tickets and other deductible costs. Returns kind, total_amount_without_taxes, vat_amount and retention_amount. Bound the period with `filter_from` / `filter_to`. This is the input-VAT side needed to work out what a quarter actually owes.

输入参数pagefilter_tofilter_from

get_additional_income

Get a single additional income or expense entry from Quipu by its id.

输入参数id必填

create_additional_income

Record an expense or additional income in Quipu. Use it to log supplier bills and deductible costs. Assign an `accounting_category_id` whenever you know it — an uncategorised expense still counts for VAT but is useless for the profit and loss breakdown.

输入参数kinditems必填notesnumberpaid_atcontact_idissue_datepayment_methodrecipient_nameaccounting_category_id

update_additional_income

Update an existing additional income or expense in Quipu. Only the fields passed are modified.

输入参数id必填notesnumberpaid_atissue_datepayment_methodrecipient_name

delete_additional_income

Delete an additional income or expense entry from Quipu permanently.

输入参数id必填

get_additional_income_download_url

Get a temporary public URL to download an expense document as PDF. The link is ephemeral and expires.

输入参数id必填

get_tax_summary

Work out the VAT and IRPF position for a period from the invoices and expenses recorded in Quipu. Give it a year and a quarter (or an explicit date range) and it returns output VAT charged on invoices, input VAT paid on expenses, the resulting balance, and withholdings. Use this instead of listing invoices and adding them up by hand: Quipu has no endpoint that returns tax models (130, 303, 111), so the figures must be derived, and doing the arithmetic in code avoids the mistakes that come from adding long lists token by token. Treat the result as an estimate for orientation, not as a filed return.

输入参数tofromyearquarter

版本历史

2
  1. v1.0.2最新Oct 22, 2026
  2. v1.0.1Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分