mcp-holded — Holded MCP server: 119 API v2 tools
Lets an AI assistant work inside Holded: invoices, contacts, products, treasury, payroll and accounting. Requires a Holded API v2 key.
claude mcp add mcp-holded -e HOLDED_API_KEY=<HOLDED_API_KEY> -- npx -y @nubiia/mcp-holdedWhat mcp-holded does
This server sits in front of Holded API v2. Once you supply a working key, all 119 tools register. Documents get 16 of them, covering invoices, estimates and credit notes: create, update, delete, pay, send, fetch a PDF. Contacts, products, warehouses, sales channels, numbering series, taxes and payment methods are grouped separately. Treasury v2 adds 15 tools for bank accounts, movements, invoice forecasts and reconciliation.
Accounting and HR are wired in too. The chart of accounts and the daily ledger are read-only; ledger entries can be created. Team/HR carries 22 tools, payroll records and clock in/out among them. So the server earns its place beyond bookkeeping chores: an agent can draft an invoice from a chat message, then follow up on whether the payment landed.
Bring Node.js 22.14 or newer and a Holded key starting with pat_ or sk_live_, generated under Holded → Settings → API. It goes into HOLDED_API_KEY. If the key lacks a required scope, calls come back with 403. Money arrives as strings using a decimal comma; parse with a locale-aware number parser before any arithmetic. Running several companies? Give each one a TENANT_N_NAME and TENANT_N_API_KEY pair.
What it helps with
- issue an invoice to a client mid-conversation
- pull up a supplier contact with its attachments
- match a bank movement against the books
- check stock levels per warehouse
- list ledger entries for a given day
Example prompts for the agent
- List my Holded invoices from last month
- Create an invoice for this client and fetch the PDF
- Did the payment on the last invoice go through?
How to install mcp-holded
Platform CLI
claude mcp add mcp-holded -e HOLDED_API_KEY=<HOLDED_API_KEY> -- npx -y @nubiia/mcp-holdedReplace <…> with your own values
Platform CLI
codex mcp add mcp-holded --env HOLDED_API_KEY=<HOLDED_API_KEY> -- npx -y @nubiia/mcp-holdedReplace <…> with your own values
Config file
{
"mcpServers": {
"mcp-holded": {
"command": "npx",
"args": [
"-y",
"@nubiia/mcp-holded"
],
"env": {
"HOLDED_API_KEY": "<HOLDED_API_KEY>"
}
}
}
}Replace <…> with your own values
Config file
{
"servers": {
"mcp-holded": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@nubiia/mcp-holded"
],
"env": {
"HOLDED_API_KEY": "<HOLDED_API_KEY>"
}
}
}
}Replace <…> with your own values
Platform CLI
gemini mcp add -e HOLDED_API_KEY=<HOLDED_API_KEY> mcp-holded npx -y @nubiia/mcp-holdedReplace <…> with your own values
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about mcp-holded
How do I install mcp-holded in Claude Code?
Run claude mcp add mcp-holded -e HOLDED_API_KEY=<HOLDED_API_KEY> -- npx -y @nubiia/mcp-holded. The alternate form is claude mcp add --env HOLDED_API_KEY=<HOLDED_API_KEY> --transport stdio mcp-holded -- npx -y @nubiia/mcp-holded.
What does mcp-holded do?
It is an MCP server for Holded API v2 that hands your assistant 119 tools across invoicing, contacts, products, treasury, accounting and HR.
Which key does it need, and what does a 403 mean?
A v2 key from Holded → Settings → API, beginning with pat_ or sk_live_. A 403 tells you the key is missing a required scope.