npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@iflow-mcp/jardimargalefagusti-holded-mcp-server

v1.0.0

Published

MCP server for Holded invoicing API

Readme

holded-mcp-server

License: MIT Node.js MCP SDK

Servidor MCP (Model Context Protocol) para integrar Holded con Claude Code, Claude Desktop y cualquier cliente MCP compatible.

Expone 25 herramientas (tools) que cubren: facturas de venta, facturas de compra, presupuestos, contactos y productos de la API de facturación de Holded.

Desarrollado por APOGEA Consultores (Agustí Jardí).

Requisitos previos

Instalación

# 1. Clonar el repositorio
git clone https://github.com/JardiMargalefAgusti/holded-mcp-server.git
cd holded-mcp-server

# 2. Instalar dependencias
npm install

# 3. Compilar
npm run build

Tras estos pasos, el servidor estará listo en build/index.js.

Configuración

Con Claude Code

Añade la siguiente entrada al fichero .mcp.json de tu proyecto (o a ~/.claude.json para que esté disponible en todos los proyectos):

{
  "mcpServers": {
    "holded": {
      "command": "node",
      "args": ["/ruta/absoluta/a/holded-mcp-server/build/index.js"],
      "env": {
        "HOLDED_API_KEY": "tu_api_key_aqui"
      }
    }
  }
}

Windows: usa rutas con doble barra \\, por ejemplo: "args": ["C:\\Users\\usuario\\holded-mcp-server\\build\\index.js"]

Reinicia Claude Code y comprueba que funciona con el comando /mcp — el servidor holded debe aparecer como connected.

Con Claude Desktop

Edita el fichero de configuración de Claude Desktop:

| Sistema | Ruta del fichero | |---------|------------------| | Windows | %APPDATA%\Claude\claude_desktop_config.json | | macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |

Añade dentro de "mcpServers":

"holded": {
  "command": "node",
  "args": ["/ruta/absoluta/a/holded-mcp-server/build/index.js"],
  "env": {
    "HOLDED_API_KEY": "tu_api_key_aqui"
  }
}

Reinicia Claude Desktop para que detecte el nuevo servidor.

Tools disponibles (25)

Contactos (3)

| Tool | Descripción | |------|-------------| | holded_list_contacts | Lista todos los contactos (clientes, proveedores, etc.) | | holded_get_contact | Obtiene los detalles de un contacto por su ID | | holded_search_contacts | Busca contactos por nombre (búsqueda parcial) |

Productos (2)

| Tool | Descripción | |------|-------------| | holded_list_products | Lista todos los productos y servicios | | holded_get_product | Obtiene los detalles de un producto por su ID |

Facturas de Venta (8)

| Tool | Descripción | |------|-------------| | holded_list_invoices | Lista facturas. Filtros: fecha inicio/fin, contacto | | holded_get_invoice | Detalle completo de una factura | | holded_create_invoice | Crea una nueva factura de venta | | holded_update_invoice | Actualiza una factura existente | | holded_delete_invoice | Elimina una factura | | holded_pay_invoice | Registra un pago en una factura | | holded_send_invoice | Envía una factura por email | | holded_get_invoice_pdf | Obtiene el PDF de la factura (base64) |

Facturas de Compra (6)

| Tool | Descripción | |------|-------------| | holded_list_purchases | Lista facturas de compra (gastos) | | holded_get_purchase | Detalle de una factura de compra | | holded_create_purchase | Registra una nueva factura de compra | | holded_update_purchase | Actualiza una factura de compra | | holded_delete_purchase | Elimina una factura de compra | | holded_pay_purchase | Registra un pago a proveedor |

Presupuestos (6)

| Tool | Descripción | |------|-------------| | holded_list_estimates | Lista presupuestos. Filtros: fecha, contacto | | holded_get_estimate | Detalle de un presupuesto | | holded_create_estimate | Crea un nuevo presupuesto | | holded_update_estimate | Actualiza un presupuesto existente | | holded_delete_estimate | Elimina un presupuesto | | holded_send_estimate | Envía un presupuesto por email |

Ejemplos de uso

Una vez conectado, puedes hacer peticiones en lenguaje natural a Claude:

  • "Busca el contacto Empresa ABC en Holded"
  • "Lista mis facturas de venta del último mes"
  • "Crea una factura para el cliente X con 2 horas de consultoría a 80 EUR/hora"
  • "Registra el pago de la factura F-2026-001 por 4.235 EUR"
  • "Envía el presupuesto P-2026-003 al email [email protected]"
  • "Muéstrame las facturas de compra pendientes de pago"

Cómo obtener la API Key de Holded

  1. Inicia sesión en Holded
  2. Ve a Configuración (icono engranaje) > Desarrolladores
  3. Haz click en Nueva API Key
  4. Copia la clave generada y úsala como HOLDED_API_KEY

Seguridad: La API key da acceso a los datos de facturación de tu cuenta de Holded. Guárdala siempre como variable de entorno y nunca la incluyas directamente en el código fuente.

Desarrollo

npm run dev    # Compilación en modo watch (detecta cambios automáticamente)
npm run build  # Compilación completa

Estructura del proyecto

src/
├── index.ts              # Entry point (McpServer + StdioServerTransport)
├── holded-client.ts      # Cliente HTTP para la API de Holded (retry 429)
├── types/
│   └── holded.ts         # Interfaces TypeScript
└── tools/
    ├── contacts.ts       # 3 tools de contactos
    ├── products.ts       # 2 tools de productos
    ├── invoices.ts       # 8 tools de facturas de venta
    ├── purchases.ts      # 6 tools de facturas de compra
    └── estimates.ts      # 6 tools de presupuestos

Stack técnico

  • Runtime: Node.js >= 18
  • Lenguaje: TypeScript (strict mode)
  • SDK: @modelcontextprotocol/sdk v1.27+
  • Validación: zod v4
  • Transporte: stdio (JSON-RPC)
  • HTTP: fetch nativo (Node 18+)

Solución de problemas

| Problema | Solución | |----------|----------| | El servidor no aparece en /mcp | Verifica que la ruta a build/index.js es correcta y absoluta | | Error HOLDED_API_KEY is required | Añade la variable env.HOLDED_API_KEY en la configuración MCP | | Error 401 o 403 de la API | La API key es incorrecta o ha expirado. Genera una nueva en Holded | | Error 429 (rate limit) | El servidor reintenta automáticamente. Si persiste, espera unos segundos | | No compila (npm run build falla) | Asegúrate de tener Node.js >= 18 y haber ejecutado npm install |

Contribuir

Las contribuciones son bienvenidas. Abre un issue o envía un pull request.

Licencia

MIT - APOGEA Consultores