{"name":"io.github.t4dhg/mcp-holded","slug":"t4dhg-mcp-holded","title":"MCP Holded","description":"MCP server for Holded (Spanish ERP): invoicing, accounting, treasury, CRM, projects, payroll.","url":"https://mcp.market/server/t4dhg-mcp-holded","rating":null,"grade":"B","score":83,"certified":false,"status":"active","category":"sales","tags":["sales","finance"],"presence":{"score":28,"stars":0,"forks":0,"downloads_week":99,"last_push_at":"2026-09-08T14:23:16.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/t4dhg/mcp-holded","website":"https://github.com/t4dhg/mcp-holded#readme","version":"2.1.1","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@t4dhg/mcp-holded","version":"2.1.1","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Holded v2 Personal Access Token (pat_<id>_<secret>), created under Settings, Developers, API. A v1 key is rejected at startup.","isRequired":true,"isSecret":true,"name":"HOLDED_API_KEY"},{"description":"Override the API base URL (default: https://api.holded.com/api/v2)","name":"HOLDED_BASE_URL"},{"description":"Per-request timeout in milliseconds (default: 30000)","name":"HOLDED_TIMEOUT_MS"},{"description":"Retry attempts for GET requests; writes are never retried (default: 3)","name":"HOLDED_MAX_RETRIES"},{"description":"Log requests to stderr (default: false)","name":"DEBUG"}]}],"tools":[{"name":"holded_accounting","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"holded_calendar","description":"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 }).","write_action":false,"price_micros":0,"input_schema":null},{"name":"holded_catalog","description":"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_w","write_action":false,"price_micros":0,"input_schema":null},{"name":"holded_contacts","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"holded_crm","description":"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).","write_action":false,"price_micros":0,"input_schema":null},{"name":"holded_discover","description":"List the Holded tool domains. Each domain is one tool named holded_<domain> with an `action` parameter; call it with no action to see the actions in its error message, or read the tool description.","write_action":false,"price_micros":0,"input_schema":null},{"name":"holded_inbox","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"holded_payments","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"holded_projects","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"holded_purchases","description":"Purchase documents by `type`: purchase (supplier bill), purchase_refund, purchase_order, purchase_shipment. Actions: list, get, pdf (output_path), list_attachments, attach (file_path), received_items (orders), create, update, delete, approve, send, set_pipeline, record_payment, receive (orders). Amounts in responses are strings with a comma decimal separator.","write_action":true,"price_micros":0,"input_schema":null},{"name":"holded_request","description":"Low-level escape hatch for the ~350 v2 operations. `path` is relative to https://api.holded.com/api/v2 and must start with \"/\". Responses are returned unvalidated. DELETE, PUT, PATCH, and POST to paths containing bulk, cancel, archive, approve, send, reconcile, ship, skip, clock-in or clock-out require `confirm: true`; the first call returns the exact request and sends nothing. Prefer the domain t","write_action":false,"price_micros":0,"input_schema":null},{"name":"holded_sales","description":"Sales documents by `type`: invoice, credit_note, estimate, proforma, sales_receipt, sales_order, waybill, receipt_note, recurring_invoice. Actions: list, get, find_by_number (invoices), pdf (needs output_path), list_attachments, attach (file_path), schedule (recurring), create, update, delete, approve, cancel (invoices), send (emails), set_pipeline, record_payment, convert, accept, reject (estimat","write_action":false,"price_micros":0,"input_schema":null},{"name":"holded_team","description":"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). Sa","write_action":false,"price_micros":0,"input_schema":null},{"name":"holded_treasury","description":"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 `id`, start_date, end_date), list_cash_movements, create_movements (manual movements), reconcile (movement_id plus data.documents), list_remittances, get_remittance, list_forecasts, get_forecast, creat","write_action":false,"price_micros":0,"input_schema":null},{"name":"holded_webhooks","description":"Webhooks and API usage. Actions: list, get, events (supported event types), create, update, enable, disable, delete, usage (API quota for the current month).","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":83,"grade":"B","scanned_at":"2026-09-20T00:23:58.553Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T00:23:58.527Z","components":{"code":{"score":25,"max":25,"notes":["133 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 11 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@t4dhg/mcp-holded","version":"2.1.1","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":2,"publishedAt":"2026-09-08T14:21:17.311Z","repositoryUrl":"git+https://github.com/t4dhg/mcp-holded.git","weeklyDownloads":99}],"repo":{"found":true,"owner":"t4dhg","repo":"mcp-holded","archived":false,"pushedAt":"2026-09-08T14:23:16Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/14365391?v=4","ownerCreatedAt":"2015-09-19T22:49:41Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/14365391?v=4&s=128","source":"github"},"presence":{"stars":0,"forks":0,"downloadsWeek":99,"license":"MIT","lastPushAt":"2026-09-08T14:23:16.000Z","score":28}}}},"grade_history":[],"reviews":[]}