MCP Holded
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOLDED_API_KEY | Yes | Your Holded API key (get it from Holded Settings > API) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_documentsA | List all documents of a specific type with optional filters for date range, contact, payment status, approval, and sorting. Supports field filtering to reduce response size. NOTE: a document carries three INDEPENDENT and sometimes-conflicting flags — (1) the stored Paid/Pending badge |
| create_documentA | Create a new document (invoice, estimate, purchase, etc.). By default the document is approved (finalized) so it appears in the Holded UI; pass approveDoc:false to create a draft instead. Set the expense/income account at document level via |
| get_documentB | Get a specific document by ID |
| get_document_paymentsA | Get the payments registered against a specific document, read directly from the document's |
| update_documentC | Update an existing document |
| delete_documentC | Delete a document |
| pay_documentA | Register a payment for a document. IMPORTANT: this AUTO-APPROVES the document as a side effect (status 0→1) — Holded has no separate approve endpoint, and approval cannot be undone via the API. |
| send_documentC | Send a document by email |
| get_document_pdfC | Get the PDF of a document |
| ship_all_itemsC | Ship all items of a document |
| ship_items_by_lineC | Ship specific items by line |
| get_shipped_unitsC | Get shipped units by item for a document |
| attach_file_to_documentB | Attach a file to a document |
| update_document_trackingA | Update tracking information for a document |
| update_document_pipelineC | Update pipeline stage for a document |
| list_payment_methodsB | List available payment methods |
| list_contactsA | List all contacts with optional filters for phone, mobile, or custom ID. Supports field filtering to reduce response size. |
| create_contactC | Create a new contact |
| get_contactC | Get a specific contact by ID |
| update_contactC | Update an existing contact |
| delete_contactB | Delete a contact |
| list_contact_attachmentsA | Get list of attachments for a contact |
| get_contact_attachmentB | Get a specific attachment from a contact |
| list_productsB | List all products with optional pagination. Supports field filtering to reduce response size. |
| create_productB | Create a new product |
| get_productA | Get a specific product by ID |
| update_productC | Update an existing product |
| delete_productC | Delete a product |
| get_product_main_imageB | Get the main image of a product |
| list_product_imagesB | List all images of a product |
| get_product_secondary_imageC | Get a secondary image of a product |
| update_product_stockC | Update stock quantity for a product |
| list_treasuriesA | List all treasury accounts with pagination support. Supports field filtering to reduce response size. WARNING: the |
| create_treasuryB | Create a new treasury account |
| get_treasuryA | Get a specific treasury account by ID. WARNING: the |
| list_expenses_accountsA | List expenses accounts with pagination support. Supports field filtering to reduce response size. Each account has |
| create_expenses_accountC | Create a new expenses account |
| get_expenses_accountA | Get a single account by its Holded id. Despite the "expenses" name, this endpoint serves ANY account (including income/group-7 accounts that list_expenses_accounts omits) when you already know its id. |
| update_expenses_accountC | Update an existing expenses account |
| delete_expenses_accountC | Delete an expenses account |
| get_numbering_seriesA | Get numbering series for a specific document type with pagination support. Supports field filtering to reduce response size. |
| create_numbering_serieB | Create a new numbering serie |
| update_numbering_serieC | Update an existing numbering serie |
| delete_numbering_serieB | Delete a numbering serie |
| list_sales_channelsA | List all sales channels with pagination support. Supports field filtering to reduce response size. |
| create_sales_channelC | Create a new sales channel |
| get_sales_channelA | Get a specific sales channel by ID |
| update_sales_channelC | Update an existing sales channel |
| delete_sales_channelC | Delete a sales channel |
| list_paymentsA | List all payments with optional filters for date range. Supports field filtering to reduce response size. NOTE: this endpoint is filtered to the ACTIVE fiscal year, so payments made in a prior year do NOT appear here even if they are linked to documents. For cross-year payment audits, read a document's payments via get_document_payments (the document |
| create_paymentC | Create a new payment |
| get_paymentB | Get a specific payment by ID |
| update_paymentA | Update an existing payment. IMPORTANT: Holded's PUT /payments/{id} REPLACES the record rather than merging, so any field omitted from the body is blanked. To prevent that, this tool first re-reads the current payment and merges your changes over it, preserving fields you did not pass (contactId, bankId, date, ...). |
| delete_paymentC | Delete a payment |
| get_taxesA | Get all available taxes with pagination support. Supports field filtering to reduce response size. Each tax has: |
| list_contact_groupsA | List all contact groups with pagination support. Supports field filtering to reduce response size. |
| create_contact_groupC | Create a new contact group |
| get_contact_groupA | Get a specific contact group by ID |
| update_contact_groupC | Update an existing contact group |
| delete_contact_groupC | Delete a contact group |
| list_remittancesA | List all remittances with pagination support. Supports field filtering to reduce response size. |
| get_remittanceB | Get a specific remittance by ID |
| list_servicesA | List all services with optional pagination. Supports field filtering to reduce response size. |
| create_serviceB | Create a new service |
| get_serviceB | Get a specific service by ID |
| update_serviceB | Update an existing service |
| delete_serviceD | Delete a service |
| list_warehousesB | List all warehouses with pagination support. Supports field filtering to reduce response size. |
| create_warehouseC | Create a new warehouse |
| list_warehouse_stockA | List all products stock in a specific warehouse. Supports field filtering to reduce response size. |
| get_warehouseB | Get a specific warehouse by ID |
| update_warehouseB | Update an existing warehouse |
| delete_warehouseC | Delete a warehouse |
| list_project_timesA | List time-tracking entries across all Holded projects (Projects API). Each project includes a timeTracking[] array of entries with duration (seconds), date (Unix seconds), user, and approved (0/1). Optionally filter by date range (YYYY-MM-DD, inclusive) and approved-only, and flatten into a single entry list with hours pre-computed. Read-only. |
| list_project_times_by_projectA | List time-tracking entries for a single Holded project (Projects API). Returns a one-element array holding the project and its filtered timeTracking[] entries; set flatten: true to get a flat list of entries with hours pre-computed instead. Supports the same date-range and approved-only filters as list_project_times. Read-only. |
| get_project_timeA | Get a single time-tracking entry by project ID and time-tracking ID (Projects API). Read-only. |
| get_chart_of_accountsA | Get the full chart of accounts for the ACTIVE fiscal year (Accounting API). Returns every account with |
| get_daily_ledgerA | Get the daily ledger (journal / asientos) between two Unix timestamps (Accounting API). Returns one row per ledger line with entryNumber, line, timestamp, type (collect/payment/purchase/...), description, account (PGC num), debit, and credit. This is the authoritative source for balance-sheet and tax-return figures. Range must not exceed 1 year. Set groupByEntry to nest lines into full double-entry entries with per-entry debit/credit totals. Read-only. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 78 tools
Each tool targets a specific entity and action, with detailed descriptions that clarify potential overlaps (e.g., list_expenses_accounts vs get_chart_of_accounts, list_payments vs get_document_payments). The distinctions are clear, so an agent can reliably select the correct tool.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_contact, list_documents, update_product). Even compound actions like attach_file_to_document use a predictable structure. No mixing of styles or vague verbs.
With 78 tools, the server is comprehensive but slightly heavy. However, the number is justified by the breadth of ERP entities covered (contacts, documents, products, payments, accounting, etc.) and the inclusion of both basic CRUD and specialized operations (shipping, pipeline tracking).
The tool surface covers most core ERP operations: full CRUD for major entities, document workflows (pay, send, ship, attach), accounting (chart, ledger, taxes), and time tracking read. Minor gaps exist, such as missing create/update for projects and lack of user management, but the overall coverage is strong.