@t4dhg/mcp-holded
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DEBUG | No | Set to true to log requests to stderr. Defaults to false. | false |
| HOLDED_API_KEY | Yes | Holded v2 Personal Access Token (format pat_<id>_<secret>). Required to authenticate against the Holded API v2. | |
| HOLDED_BASE_URL | No | Override the API base URL. Defaults to https://api.holded.com/api/v2. | https://api.holded.com/api/v2 |
| HOLDED_TIMEOUT_MS | No | Per-request timeout in milliseconds. Defaults to 30000. | 30000 |
| HOLDED_MAX_RETRIES | No | Number of attempts for GET requests. Writes are never retried. Defaults to 3. | 3 |
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 | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| holded_discoverA | List the Holded tool domains. Each domain is one tool named holded_ with an |
| holded_contactsC | Customers and suppliers. Actions: list (filters email, code, phone, mobile, custom_id are exact matches), search (substring on name), get, create, update, delete, bulk_archive, bulk_delete, list_attachments, attach, portal_link, list_groups, get_group, create_group, update_group, delete_group. |
| holded_salesB | Sales documents by |
| holded_purchasesC | Purchase documents by |
| holded_paymentsB | Payments (money out) and collections (money in). Actions: list (start_date, end_date, banking_account_id, document_id), get, create, update, delete, list_methods, get_method. Amounts are strings with a dot decimal separator. |
| holded_treasuryC | Banking accounts and their movements. Actions: list_accounts (type, archived), get_account, create_account, update_account, archive_account, delete_account, list_movements (bank movements of account |
| holded_accountingC | Chart of accounts, journal, taxes and configuration lists. Actions: list_accounts (start_date and end_date add debit, credit and balance for the window; include_empty), create_account, list_ledger (start_date and end_date required; account), create_ledger_entry, list_taxes, tax_keys (country), list_expenses_accounts, get_expenses_account, create_expenses_account, update_expenses_account, delete_expenses_account, list_sales_channels, get_sales_channel, create_sales_channel, update_sales_channel, delete_sales_channel, list_numbering_series (series_type), create_numbering_series, update_numbering_series, delete_numbering_series, list_tags, create_tag, delete_tag (name). Ledger dates are DD/MM/YYYY; amounts use a dot decimal separator. |
| holded_catalogC | Products, services, warehouses, price lists and production orders. Actions: list_products (name), get_product, product_stock, create_product, update_product, update_stock (data.warehouse_id, data.stock_variation), delete_product, list_services (include_archived), get_service, create_service, update_service, delete_service, list_warehouses, get_warehouse, warehouse_stock, create_warehouse, update_warehouse, delete_warehouse, list_price_lists, get_price_list, create_price_list, update_price_list, delete_price_list, list_production_orders, get_production_order, create_production_order, update_production_order, delete_production_order. |
| holded_teamC | Employees and payroll records. Actions: list_employees (search), get_employee, employee_contract, create_employee, list_times (employee_id optional), list_salary_records (employee_id, start_date, end_date), get_salary_record, salary_record_pdf (output_path), list_payslips (employee_id, dates, kind, is_draft), get_payslip, payslip_pdf, create_payslip_payment, delete_payslip_payment (payment_id). Salary amounts use a comma decimal separator. |
| holded_crmC | Funnels and leads. Actions: list_funnels, get_funnel, create_funnel, update_funnel, delete_funnel, list_leads, get_lead, create_lead, update_lead, delete_lead, move_stage (stage_id), update_dates (due_date), add_note, update_note, add_task, update_task, delete_task (task_id). |
| holded_projectsB | Projects, tasks and time tracking. Actions: list_projects (status), get_project, project_summary, create_project, update_project, delete_project, list_tasks, get_task, create_task, update_task, delete_task, list_times (project_id optional), get_time (project_id, time_id), create_time (project_id), update_time, delete_time. |
| holded_calendarC | Events and bookings. Actions: list_events, get_event, create_event, update_event, delete_event, list_bookings (start_date, end_date, service_id, sort_field, sort_order), get_booking, create_booking, update_booking, cancel_booking, list_locations, slots (id is the location id; data carries the query, for example { date, service_id }). |
| holded_inboxC | Incoming documents scanned by Holded. Actions: list (status, start_date, end_date, user_id), get, upload (file_path), download (filename, output_path), update, attach (data.documentId, data.documentType), delete. |
| holded_webhooksC | Webhooks and API usage. Actions: list, get, events (supported event types), create, update, enable, disable, delete, usage (API quota for the current month). |
| holded_requestA | Low-level escape hatch for the ~350 v2 operations. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| holded_aged_receivables | Who owes money, how much, and how late, bucketed by days overdue and grouped by contact. Read-only. Defaults to today. |
| holded_vat_summary | Output and input VAT grouped by tax key for a period, with base and quota per key. Read-only. Defaults to the previous calendar quarter. A working aid, not a filing. |
| holded_bank_reconciliation | Match bank movements against recorded payments for a period and report what is unmatched in both directions. Read-only; emits the gated reconcile calls to approve. Defaults to the previous month. |
| holded_contact_statement | What one contact has been invoiced, has paid and still owes, document by document. Read-only. Give either contact_id or name. |
| holded_month_end_close | What is still open at the end of a period: documents in draft, invoices past due, and inbox documents still to process, each with the call that resolves it. Read-only. Defaults to the previous month. |
| holded_draft_invoice | Resolve the contact, look up the real tax keys, and assemble a complete invoice payload for a person to review. Creates nothing. Never approves. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| api_behaviour_guide | Verified v2 behaviour: Bearer auth and the 403-not-401 quirk, cursor pagination, the two decimal conventions, DD/MM/YYYY ledger dates, RFC 7807 errors, ignored query parameters, the rate limit, and why writes are never retried. Read this before writing anything. |
| document_types_guide | The nine sales and four purchase document types with their Spanish names, and which verbs each one supports. Recurring invoices, purchase refunds and estimates each lack verbs the others have. |
| irreversible_operations_guide | Every gated operation with its risk and effect, generated from the policy table so it cannot drift, plus why approving a sales document is irreversible under Verifactu. |
| taxes_reference | The account's tax keys, names and percentages. A document line's `taxes` array needs the key verbatim, for example `s_iva_21`. Read this before building an invoice. |
| numbering_series_reference | The numbering series configured for each document type, with formats and the last number issued. |
| payment_methods_reference | Payment method ids, needed by record_payment and by a document payment_method_id. |
| accounting_accounts_reference | The account numbers of the chart of accounts, needed for ledger entries. Spanish PGC numbering, which cannot be guessed. |