{
    "awp_version": "0.2",
    "domain": "ledgerbotje.nl",
    "intent": "Connect Exact Online to your AI assistant via MCP. Manage orders, inventory, production, invoices and accounting with natural language.",
    "protocols": {
        "mcp": {
            "version": "2025-06-18",
            "endpoint": "https://ledgerbotje.nl/app/mcp",
            "transport": "http",
            "server_version": "1.1.5",
            "server_card": "https://ledgerbotje.nl/.well-known/mcp/server-card.json"
        }
    },
    "capabilities": {
        "streaming": false,
        "batch_actions": false,
        "webhooks": false,
        "pagination": "offset",
        "idempotency": false
    },
    "auth": {
        "type": "oauth2",
        "required_for": [
            "accounts_addresses_create",
            "accounts_addresses_delete",
            "accounts_addresses_search",
            "accounts_addresses_update",
            "accounts_contacts_create",
            "accounts_contacts_delete",
            "accounts_contacts_update",
            "accounts_create",
            "accounts_delete",
            "accounts_details",
            "accounts_search",
            "accounts_update",
            "admin_current",
            "admin_feedback",
            "admin_list",
            "admin_switch",
            "analytics_compare",
            "analytics_screen",
            "cashflow_banks_list",
            "cashflow_conditions_create",
            "cashflow_conditions_search",
            "cashflow_mandates_create",
            "cashflow_mandates_delete",
            "cashflow_mandates_search",
            "cashflow_mandates_update",
            "cashflow_payments_get",
            "cashflow_payments_process",
            "cashflow_payments_search",
            "cashflow_payments_update",
            "cashflow_receivables_get",
            "cashflow_receivables_search",
            "cashflow_receivables_update",
            "controller_signals_search",
            "crm_bankaccounts_create",
            "crm_bankaccounts_delete",
            "crm_bankaccounts_search",
            "crm_bankaccounts_update",
            "crm_opportunities_create",
            "crm_opportunities_delete",
            "crm_opportunities_get",
            "crm_opportunities_search",
            "crm_opportunities_update",
            "crm_quotations_add_charge_line",
            "crm_quotations_add_line",
            "crm_quotations_create",
            "crm_quotations_delete",
            "crm_quotations_delete_charge_line",
            "crm_quotations_delete_line",
            "crm_quotations_get",
            "crm_quotations_print",
            "crm_quotations_search",
            "crm_quotations_status",
            "crm_quotations_update",
            "crm_quotations_update_charge_line",
            "crm_quotations_update_line",
            "documents_categories_list",
            "documents_folders_list",
            "documents_get",
            "documents_request_upload_url",
            "documents_search",
            "documents_types_list",
            "documents_upload",
            "financial_aging_payables",
            "financial_aging_receivables",
            "financial_balance_get",
            "financial_bank_add_line",
            "financial_bank_create",
            "financial_bank_delete",
            "financial_bank_get",
            "financial_bank_search",
            "financial_budgets_search",
            "financial_cash_add_line",
            "financial_cash_create",
            "financial_cash_get",
            "financial_cash_search",
            "financial_currencies_list",
            "financial_entries_match",
            "financial_exchangerates_list",
            "financial_generaljournal_add_line",
            "financial_generaljournal_create",
            "financial_generaljournal_get",
            "financial_generaljournal_search",
            "financial_glaccounts_create",
            "financial_glaccounts_delete",
            "financial_glaccounts_search",
            "financial_glaccounts_update",
            "financial_glclassifications_list",
            "financial_journals_list",
            "financial_journalstatus_list",
            "financial_outstanding_get",
            "financial_payables_list",
            "financial_periods_list",
            "financial_profitloss_get",
            "financial_purchase_add_line",
            "financial_purchase_create",
            "financial_purchase_delete_line",
            "financial_purchase_get",
            "financial_purchase_search",
            "financial_purchase_update_line",
            "financial_reporting_balance_search",
            "financial_revenue_list",
            "financial_sales_add_line",
            "financial_sales_create",
            "financial_sales_delete_line",
            "financial_sales_get",
            "financial_sales_search",
            "financial_sales_update_line",
            "financial_transactions_search",
            "financial_vatcodes_list",
            "financial_vatpercentages_list",
            "hrm_costcenters_create",
            "hrm_costcenters_delete",
            "hrm_costcenters_search",
            "hrm_costcenters_update",
            "hrm_costunits_create",
            "hrm_costunits_delete",
            "hrm_costunits_search",
            "hrm_costunits_update",
            "hrm_departments_list",
            "inventory_batch_create",
            "inventory_batch_delete",
            "inventory_batch_update",
            "inventory_serial_create",
            "inventory_serial_delete",
            "inventory_serial_update",
            "items_batch_history",
            "items_create",
            "items_delete",
            "items_details",
            "items_groups_list",
            "items_search",
            "items_serial_history",
            "items_stock",
            "items_suppliers",
            "items_suppliers_create",
            "items_suppliers_delete",
            "items_suppliers_update",
            "items_time_create",
            "items_units_list",
            "items_update",
            "items_warehouses_create",
            "items_warehouses_delete",
            "items_warehouses_update",
            "logistics_deliveries_create",
            "logistics_deliveries_get",
            "logistics_deliveries_search",
            "logistics_deliveries_update",
            "logistics_incoterms_list",
            "logistics_receipts_create",
            "logistics_receipts_get",
            "logistics_receipts_search",
            "logistics_receipts_update",
            "logistics_returns_process",
            "manufacturing_areas_create",
            "manufacturing_areas_delete",
            "manufacturing_areas_list",
            "manufacturing_areas_update",
            "manufacturing_assembly_finish",
            "manufacturing_assembly_search",
            "manufacturing_bom_material_add",
            "manufacturing_bom_material_delete",
            "manufacturing_bom_material_update",
            "manufacturing_bom_version_create",
            "manufacturing_bom_version_delete",
            "manufacturing_bom_version_update",
            "manufacturing_bom_versions",
            "manufacturing_byproducts_search",
            "manufacturing_materialplan_add",
            "manufacturing_materialplan_delete",
            "manufacturing_materialplan_update",
            "manufacturing_materials_bom",
            "manufacturing_materials_by_product",
            "manufacturing_materials_issue",
            "manufacturing_materials_issues_search",
            "manufacturing_materials_reversal",
            "manufacturing_materials_reversals_search",
            "manufacturing_operations_create",
            "manufacturing_operations_delete",
            "manufacturing_operations_list",
            "manufacturing_operations_resource_create",
            "manufacturing_operations_resource_delete",
            "manufacturing_operations_resource_update",
            "manufacturing_operations_resources_search",
            "manufacturing_operations_update",
            "manufacturing_orders_create",
            "manufacturing_orders_delete",
            "manufacturing_orders_get",
            "manufacturing_orders_receipt",
            "manufacturing_orders_receipts_search",
            "manufacturing_orders_reversal",
            "manufacturing_orders_reversals_search",
            "manufacturing_orders_routing",
            "manufacturing_orders_search",
            "manufacturing_orders_update",
            "manufacturing_planning_overview",
            "manufacturing_routing_add",
            "manufacturing_routing_delete",
            "manufacturing_routing_update",
            "manufacturing_workcenters_capacity",
            "manufacturing_workcenters_create",
            "manufacturing_workcenters_delete",
            "manufacturing_workcenters_list",
            "manufacturing_workcenters_update",
            "projects_create",
            "projects_delete",
            "projects_get",
            "projects_planning_create",
            "projects_planning_delete",
            "projects_planning_update",
            "projects_search",
            "projects_timecost_delete",
            "projects_timecost_search",
            "projects_timecost_summary",
            "projects_timecost_update",
            "projects_update",
            "purchases_invoices_create",
            "purchases_invoices_delete",
            "purchases_invoices_update",
            "purchases_receipts_add_line",
            "purchasing_invoices_get",
            "purchasing_invoices_search",
            "purchasing_orders_add_line",
            "purchasing_orders_create",
            "purchasing_orders_delete",
            "purchasing_orders_delete_line",
            "purchasing_orders_get",
            "purchasing_orders_search",
            "purchasing_orders_update",
            "purchasing_orders_update_line",
            "purchasing_returns_add_line",
            "purchasing_returns_create",
            "purchasing_returns_get",
            "purchasing_returns_search",
            "sales_channels_list",
            "sales_deliveries_add_line",
            "sales_deliveries_update_line",
            "sales_invoices_add_line",
            "sales_invoices_create",
            "sales_invoices_delete",
            "sales_invoices_delete_line",
            "sales_invoices_from_orders",
            "sales_invoices_get",
            "sales_invoices_print",
            "sales_invoices_search",
            "sales_invoices_update",
            "sales_invoices_update_line",
            "sales_order_lines_search",
            "sales_orders_add_line",
            "sales_orders_complete",
            "sales_orders_create",
            "sales_orders_delete",
            "sales_orders_delete_line",
            "sales_orders_get",
            "sales_orders_print",
            "sales_orders_search",
            "sales_orders_update",
            "sales_orders_update_line",
            "sales_pricelists_list",
            "sales_prices_create",
            "sales_prices_delete",
            "sales_prices_search",
            "sales_prices_update",
            "sales_returns_add_line",
            "sales_returns_create",
            "sales_returns_delete",
            "sales_returns_delete_line",
            "sales_returns_get",
            "sales_returns_search",
            "sales_returns_update_line",
            "stock_batch_search",
            "stock_location_search",
            "stock_serial_search",
            "subscriptions_add_line",
            "subscriptions_create",
            "subscriptions_delete",
            "subscriptions_delete_line",
            "subscriptions_get",
            "subscriptions_linetypes_list",
            "subscriptions_reasoncodes_list",
            "subscriptions_search",
            "subscriptions_types_list",
            "subscriptions_update",
            "subscriptions_update_line",
            "warehouse_create",
            "warehouse_current",
            "warehouse_delete",
            "warehouse_list",
            "warehouse_locations_list",
            "warehouse_locations_stock",
            "warehouse_shipping_list",
            "warehouse_switch",
            "warehouse_transfers_create",
            "warehouse_transfers_delete",
            "warehouse_transfers_delete_line",
            "warehouse_transfers_get",
            "warehouse_transfers_process",
            "warehouse_transfers_search",
            "warehouse_transfers_update",
            "warehouse_transfers_update_line",
            "warehouse_update"
        ],
        "token_expiry": "1h",
        "refresh_endpoint": "https://ledgerbotje.nl/app/mcp/oauth/token"
    },
    "actions": [
        {
            "id": "accounts_addresses_create",
            "description": "Create a new address for an account in Exact Online. Required: accountCode and addressLine1. Optional: city, postcode, country, type (visit/postal/invoice/delivery), phone, email and notes. Search the account first with search_accounts. If the address already exists, Exact Online returns the existing address. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "accounts_addresses_create",
            "inputs": {
                "accountCode": {
                    "type": "string",
                    "required": true
                },
                "addressLine1": {
                    "type": "string",
                    "required": true
                },
                "city": {
                    "type": "string",
                    "required": false
                },
                "postcode": {
                    "type": "string",
                    "required": false
                },
                "country": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "string",
                    "required": false,
                    "default": "visit"
                },
                "addressLine2": {
                    "type": "string",
                    "required": false
                },
                "addressLine3": {
                    "type": "string",
                    "required": false
                },
                "state": {
                    "type": "string",
                    "required": false
                },
                "phone": {
                    "type": "string",
                    "required": false
                },
                "fax": {
                    "type": "string",
                    "required": false
                },
                "mailbox": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "isMain": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "accounts_addresses_delete",
            "description": "Delete an address from Exact Online. This is a permanent action and cannot be undone. Required: addressId (GUID of the address). Use search_accounts and get_account_details to find the address GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "accounts_addresses_delete",
            "inputs": {
                "addressId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "accounts_addresses_search",
            "description": "Search and filter account addresses by city, postcode, street, account or type. Each result includes ID (the address GUID) and account (the account GUID); use ID directly as deliveryAddress or invoiceAddress in sales_orders_create and sales_orders_update. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "accounts_addresses_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "accountname"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "asc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "accounts_addresses_update",
            "description": "Update an existing address in Exact Online. Required: addressId (GUID of the address). All other fields are optional - only provided fields will be updated. Use search_accounts and get_account_details to find the address GUID first. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "accounts_addresses_update",
            "inputs": {
                "addressId": {
                    "type": "string",
                    "required": true
                },
                "addressLine1": {
                    "type": "string",
                    "required": false
                },
                "city": {
                    "type": "string",
                    "required": false
                },
                "postcode": {
                    "type": "string",
                    "required": false
                },
                "country": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "string",
                    "required": false
                },
                "phone": {
                    "type": "string",
                    "required": false
                },
                "mailbox": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "accounts_contacts_create",
            "description": "Create a contact person for an existing account in Exact Online. Required: accountName, firstName, lastName. Optional: email, phone. Search first if the contact already exists with contacts.search. Find the account with search_accounts.",
            "auth_required": true,
            "via": "mcp",
            "operation": "accounts_contacts_create",
            "inputs": {
                "accountName": {
                    "type": "string",
                    "required": true
                },
                "firstName": {
                    "type": "string",
                    "required": true
                },
                "lastName": {
                    "type": "string",
                    "required": true
                },
                "email": {
                    "type": "string",
                    "required": false
                },
                "phone": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "accounts_contacts_delete",
            "description": "Delete a contact person from Exact Online. This is a permanent action and cannot be undone. Required: contactId (GUID of the contact). Use search_accounts and get_account_details to find the contact GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "accounts_contacts_delete",
            "inputs": {
                "contactId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "accounts_contacts_update",
            "description": "Update an existing contact person in Exact Online. Required: contactId (GUID of the contact). All other fields are optional - only provided fields will be updated. Use search_accounts and get_account_details to find the contact GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "accounts_contacts_update",
            "inputs": {
                "contactId": {
                    "type": "string",
                    "required": true
                },
                "firstName": {
                    "type": "string",
                    "required": false
                },
                "lastName": {
                    "type": "string",
                    "required": false
                },
                "email": {
                    "type": "string",
                    "required": false
                },
                "phone": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "accounts_create",
            "description": "Create a new account (customer or supplier) in Exact Online. Required: name. Use isSupplier=true for suppliers. Search first if the account already exists with accounts.search.",
            "auth_required": true,
            "via": "mcp",
            "operation": "accounts_create",
            "inputs": {
                "name": {
                    "type": "string",
                    "required": true
                },
                "address": {
                    "type": "string",
                    "required": false
                },
                "postalcode": {
                    "type": "string",
                    "required": false
                },
                "city": {
                    "type": "string",
                    "required": false
                },
                "country": {
                    "type": "string",
                    "required": false
                },
                "phone": {
                    "type": "string",
                    "required": false
                },
                "email": {
                    "type": "string",
                    "required": false
                },
                "vatNumber": {
                    "type": "string",
                    "required": false
                },
                "isSupplier": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "language": {
                    "type": "string",
                    "required": false
                },
                "paymentConditionSales": {
                    "type": "string",
                    "required": false
                },
                "glAccountSales": {
                    "type": "string",
                    "required": false
                },
                "glAccountPurchase": {
                    "type": "string",
                    "required": false
                },
                "glAccountReceivable": {
                    "type": "string",
                    "required": false
                },
                "glAccountPayable": {
                    "type": "string",
                    "required": false
                },
                "shippingMethod": {
                    "type": "string",
                    "required": false
                },
                "classification1": {
                    "type": "string",
                    "required": false
                },
                "classification2": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "accounts_delete",
            "description": "Delete an account (customer or supplier) from Exact Online. This is a permanent action and cannot be undone. Required: accountCode (customer code, name or GUID). Use search_accounts to find the account first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "accounts_delete",
            "inputs": {
                "accountCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "accounts_details",
            "description": "Get full details of a specific account including addresses and contacts. Use accounts.search to find the account first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "accounts_details",
            "inputs": {
                "accountCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "accounts_search",
            "description": "Search customers and suppliers. Case-insensitive substring match (LIKE %term%) on Name, Code, City, Email or Website - no exact-match, no fuzzy. Searching by domain name works: for an email pass the sender domain (cocktailgids.nl) or the full URL, scheme and www are stripped automatically. Minimum 2 characters. Pass \"*\" to paginate all. On 0 results the response includes a \"suggestions\" field with the top-5 phonetically/prefix-similar accounts - use those instead of guessing spelling variants yourself. Optional type filter: \"customer\" or \"supplier\". Use create_account for new accounts. On 0 results the account cache is refreshed from Exact Online automatically first (max once per minute) and the search is retried - immediately searching again is pointless.",
            "auth_required": true,
            "via": "mcp",
            "operation": "accounts_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "accounts_update",
            "description": "Update an existing account (customer or supplier) in Exact Online. Required: accountCode (customer code, name or GUID to find the account). All other fields are optional - only provided fields will be updated. The status field sets the customer type (customer, prospect, suspect or none). Use search_accounts to find the account first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "accounts_update",
            "inputs": {
                "accountCode": {
                    "type": "string",
                    "required": true
                },
                "name": {
                    "type": "string",
                    "required": false
                },
                "email": {
                    "type": "string",
                    "required": false
                },
                "phone": {
                    "type": "string",
                    "required": false
                },
                "address": {
                    "type": "string",
                    "required": false
                },
                "postalcode": {
                    "type": "string",
                    "required": false
                },
                "city": {
                    "type": "string",
                    "required": false
                },
                "country": {
                    "type": "string",
                    "required": false
                },
                "vatNumber": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "glAccountSales": {
                    "type": "string",
                    "required": false
                },
                "glAccountPurchase": {
                    "type": "string",
                    "required": false
                },
                "glAccountReceivable": {
                    "type": "string",
                    "required": false
                },
                "glAccountPayable": {
                    "type": "string",
                    "required": false
                },
                "shippingMethod": {
                    "type": "string",
                    "required": false
                },
                "classification1": {
                    "type": "string",
                    "required": false
                },
                "classification2": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "admin_current",
            "description": "Get the current active administration (division). Returns code, name, address, currency and other info. Use switch_administration to change to a different administration.",
            "auth_required": true,
            "via": "mcp",
            "operation": "admin_current",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "admin_feedback",
            "description": "Submit feedback on behalf of the user. Use this when the user wants to submit feedback, suggestions, complaints or improvement ideas about the application or MCP integration.",
            "auth_required": true,
            "via": "mcp",
            "operation": "admin_feedback",
            "inputs": {
                "feedback": {
                    "type": "string",
                    "required": true
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "admin_list",
            "description": "List all available administrations (divisions) the user has access to. Returns a compact record per administration: code, name and whether it is the main division. Get full details (address, currency, etc.) of the active administration with get_current_administration. Use switch_administration with the code to change administration.",
            "auth_required": true,
            "via": "mcp",
            "operation": "admin_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "admin_switch",
            "description": "Switch to a different administration (division). Provide the administration code. Use list_administrations to see available administrations. After switching, all tools work with the new administration and a warehouse is automatically selected.",
            "auth_required": true,
            "via": "mcp",
            "operation": "admin_switch",
            "inputs": {
                "administrationCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "analytics_compare",
            "description": "Compares one metric across the administrations of the same customer: revenue, result, gross margin, sales order count, purchase order count, shop order count or outstanding receivables. Returns a series per administration by month, quarter or year, plus a total when summing is meaningful. Choose the period via a financial year or a date range. Leave divisions empty to automatically compare the first 10 administrations; get codes via admin_list. Revenue and result are shown as positive numbers; amounts in different currencies are not summed. Reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "analytics_compare",
            "inputs": {
                "metric": {
                    "type": "string",
                    "required": false,
                    "default": "revenue"
                },
                "grouping": {
                    "type": "string",
                    "required": false,
                    "default": "quarter"
                },
                "periodMode": {
                    "type": "string",
                    "required": false,
                    "default": "finyear"
                },
                "financialYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "dateFrom": {
                    "type": "string",
                    "required": false
                },
                "dateTo": {
                    "type": "string",
                    "required": false
                },
                "divisions": {
                    "type": "string",
                    "required": false
                },
                "comparePreviousYear": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "analytics_screen",
            "description": "Screens all administrations of the customer at once: per administration revenue and result of the chosen financial year with delta versus the year before, outstanding and overdue receivables, open AI Controller signals and the last synchronization moment. Each row contains deviations: revenuedrop (revenue drop above threshold), profitnegative (negative result), overdue (overdue above threshold), signals (open signals) and syncstale (synchronization outdated). Use deviationsOnly true to get only administrations with a deviation. Thresholds come from the user setting and can be overridden per call. Reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "analytics_screen",
            "inputs": {
                "financialYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "deviationsOnly": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "revenueDropPct": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "overduePct": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "syncDays": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "cashflow_banks_list",
            "description": "List all banks in the current administration with bank name, BIC code, country and description.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_banks_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "cashflow_conditions_create",
            "description": "Create a new payment condition in Exact Online. Required: code and description. Optional: paymentDays, discountPercentage, paymentMethod. Always search with search_payment_conditions first to check if it already exists.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_conditions_create",
            "inputs": {
                "code": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": true
                },
                "paymentDays": {
                    "type": "string",
                    "required": false
                },
                "discountPercentage": {
                    "type": "string",
                    "required": false
                },
                "paymentMethod": {
                    "type": "string",
                    "required": false
                },
                "discountPaymentDays": {
                    "type": "string",
                    "required": false
                },
                "discountCalculation": {
                    "type": "string",
                    "required": false
                },
                "paymentDiscountType": {
                    "type": "string",
                    "required": false
                },
                "paymentEndOfMonths": {
                    "type": "string",
                    "required": false
                },
                "percentage": {
                    "type": "string",
                    "required": false
                },
                "vatCalculation": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "cashflow_conditions_search",
            "description": "Search and filter payment conditions by code or description. Use query \"*\" to retrieve all payment conditions. Supports pagination.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_conditions_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "cashflow_mandates_create",
            "description": "Create a new direct debit mandate in Exact Online. Required: accountCode (looked up to GUID) and bankAccountId (GUID). Optional: description, reference, signatureDate, type, paymentType. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_mandates_create",
            "inputs": {
                "accountCode": {
                    "type": "string",
                    "required": true
                },
                "bankAccountId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "reference": {
                    "type": "string",
                    "required": false
                },
                "signatureDate": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "string",
                    "required": false
                },
                "paymentType": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "cashflow_mandates_delete",
            "description": "Delete a direct debit mandate from Exact Online. This is a permanent action and cannot be undone. Required: mandateId (GUID). Use search_direct_debit_mandates to find the GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_mandates_delete",
            "inputs": {
                "mandateId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "cashflow_mandates_search",
            "description": "Search and filter direct debit mandates by account code or status. Use at least one filter. Supports pagination.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_mandates_search",
            "inputs": {
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "cashflow_mandates_update",
            "description": "Update an existing direct debit mandate in Exact Online. Required: mandateId (GUID). All other fields are optional - only provided fields will be updated. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_mandates_update",
            "inputs": {
                "mandateId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "reference": {
                    "type": "string",
                    "required": false
                },
                "cancellationDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "cashflow_payments_get",
            "description": "Get full payment details by payment GUID. Use search_payments to find the GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_payments_get",
            "inputs": {
                "paymentId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "cashflow_payments_process",
            "description": "Process selected payments in Exact Online. This is an irreversible action. Required: paymentIds (JSON array of GUIDs). Use search_payments to find the GUIDs first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_payments_process",
            "inputs": {
                "paymentIds": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                },
                "requestContext": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "cashflow_payments_search",
            "description": "Search and filter payments by account code, status or due date. Use at least one filter. Supports pagination.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_payments_search",
            "inputs": {
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "dueDateFrom": {
                    "type": "string",
                    "required": false
                },
                "dueDateTo": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "cashflow_payments_update",
            "description": "Update an existing payment in Exact Online. Required: paymentId (GUID). All other fields are optional - only provided fields will be updated. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_payments_update",
            "inputs": {
                "paymentId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "paymentMethod": {
                    "type": "string",
                    "required": false
                },
                "paymentReference": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "cashflow_receivables_get",
            "description": "Get full receivable details by receivable GUID. Use search_receivables to find the GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_receivables_get",
            "inputs": {
                "receivableId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "cashflow_receivables_search",
            "description": "Search and filter receivables by account code, status or due date. Use at least one filter. Supports pagination.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_receivables_search",
            "inputs": {
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "dueDateFrom": {
                    "type": "string",
                    "required": false
                },
                "dueDateTo": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "cashflow_receivables_update",
            "description": "Update an existing receivable in Exact Online. Required: receivableId (GUID). All other fields are optional - only provided fields will be updated. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "cashflow_receivables_update",
            "inputs": {
                "receivableId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "paymentMethod": {
                    "type": "string",
                    "required": false
                },
                "paymentReference": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "controller_signals_search",
            "description": "Search AI Controller signals: entries that may be booked incorrectly (duplicate invoices, wrong VAT codes, open suspense accounts, deviating fixed costs, costs vs. assets, debtor residuals). Filter by search term, signal type, severity, status or date range.",
            "auth_required": true,
            "via": "mcp",
            "operation": "controller_signals_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "signalType": {
                    "type": "string",
                    "required": false
                },
                "severity": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "status": {
                    "type": "string",
                    "required": false,
                    "default": "open"
                },
                "dateFrom": {
                    "type": "string",
                    "required": false
                },
                "dateTo": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_bankaccounts_create",
            "description": "Create a new bank account for an account in Exact Online. Required: accountCode and bankAccount (IBAN or account number). Search for the account with search_accounts first. Optional: account holder name, BIC code, description, whether it is the main account and whether it is blocked.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_bankaccounts_create",
            "inputs": {
                "accountCode": {
                    "type": "string",
                    "required": true
                },
                "bankAccount": {
                    "type": "string",
                    "required": true
                },
                "bankAccountHolderName": {
                    "type": "string",
                    "required": false
                },
                "bicCode": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "main": {
                    "type": "string",
                    "required": false
                },
                "blocked": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_bankaccounts_delete",
            "description": "Delete a bank account from Exact Online. This is a permanent action and cannot be undone. Required: bankAccountId (GUID). All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_bankaccounts_delete",
            "inputs": {
                "bankAccountId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "crm_bankaccounts_search",
            "description": "Search and filter customer/supplier bank accounts by IBAN, account number, account name, holder, description, BIC or bank name. Also filter on account (GUID), BIC code or main account only.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_bankaccounts_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "account": {
                    "type": "string",
                    "required": false
                },
                "bic": {
                    "type": "string",
                    "required": false
                },
                "mainOnly": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "accountName"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "asc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_bankaccounts_update",
            "description": "Update an existing bank account in Exact Online. Required: bankAccountId (GUID). All other fields are optional and only provided fields are updated. Supports account number, holder name, BIC code, description, main and blocked. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_bankaccounts_update",
            "inputs": {
                "bankAccountId": {
                    "type": "string",
                    "required": true
                },
                "bankAccount": {
                    "type": "string",
                    "required": false
                },
                "bankAccountHolderName": {
                    "type": "string",
                    "required": false
                },
                "bicCode": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "main": {
                    "type": "string",
                    "required": false
                },
                "blocked": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_opportunities_create",
            "description": "Create a new opportunity in Exact Online. Required: name and accountCode (customer code or name). Optional: amount, close date, probability, notes. Always search with search_accounts first to verify the customer and search_opportunities to check if the opportunity already exists.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_opportunities_create",
            "inputs": {
                "name": {
                    "type": "string",
                    "required": true
                },
                "accountCode": {
                    "type": "string",
                    "required": true
                },
                "amount": {
                    "type": "string",
                    "required": false
                },
                "closeDate": {
                    "type": "string",
                    "required": false
                },
                "probability": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "currency": {
                    "type": "string",
                    "required": false
                },
                "actionDate": {
                    "type": "string",
                    "required": false
                },
                "nextAction": {
                    "type": "string",
                    "required": false
                },
                "contact": {
                    "type": "string",
                    "required": false
                },
                "projectCode": {
                    "type": "string",
                    "required": false
                },
                "owner": {
                    "type": "string",
                    "required": false
                },
                "leadSource": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_opportunities_delete",
            "description": "Delete an opportunity from Exact Online. This is a permanent action and cannot be undone. Required: opportunityId (GUID). Use search_opportunities or get_opportunity_details to find the GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_opportunities_delete",
            "inputs": {
                "opportunityId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "crm_opportunities_get",
            "description": "Get full opportunity details including contacts. Use search_opportunities to find the number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_opportunities_get",
            "inputs": {
                "number": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_opportunities_search",
            "description": "Search and filter sales opportunities/leads.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_opportunities_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "owner": {
                    "type": "string",
                    "required": false
                },
                "actionDateFrom": {
                    "type": "string",
                    "required": false
                },
                "actionDateTo": {
                    "type": "string",
                    "required": false
                },
                "closeDateFrom": {
                    "type": "string",
                    "required": false
                },
                "closeDateTo": {
                    "type": "string",
                    "required": false
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "actionDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_opportunities_update",
            "description": "Update an existing opportunity in Exact Online. Required: opportunityId (GUID). All other fields are optional - only provided fields will be updated. Use search_opportunities or get_opportunity_details to find the GUID first. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_opportunities_update",
            "inputs": {
                "opportunityId": {
                    "type": "string",
                    "required": true
                },
                "name": {
                    "type": "string",
                    "required": false
                },
                "amount": {
                    "type": "string",
                    "required": false
                },
                "closeDate": {
                    "type": "string",
                    "required": false
                },
                "probability": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "leadSource": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_quotations_add_charge_line",
            "description": "Add a charge line to an existing quotation in Exact Online. Required: quotationId (GUID) and amount (amount excl. VAT). Optional: description, vatCode. Use crm.quotations.get to find the quotation GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_quotations_add_charge_line",
            "inputs": {
                "quotationId": {
                    "type": "string",
                    "required": true
                },
                "amount": {
                    "type": "number",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_quotations_add_line",
            "description": "Add a quotation line to an existing quotation in Exact Online. Required: quotationId (GUID), itemCode and quantity. Optional: unitPrice, description, notes, discount (percentage 0-100). Use crm.quotations.get to find the quotation GUID and search_items to find the item code first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_quotations_add_line",
            "inputs": {
                "quotationId": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": true
                },
                "unitPrice": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "discount": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "netPrice": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "unitCode": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_quotations_create",
            "description": "Create a NEW quotation in Exact Online. Required: customerCode and lines (JSON array with at least itemCode and quantity per line). Search customer with search_accounts and items with search_items first. Do NOT use for existing quotations, use quotations.update instead.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_quotations_create",
            "inputs": {
                "customerCode": {
                    "type": "string",
                    "required": true
                },
                "lines": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "quotationDate": {
                    "type": "string",
                    "required": false
                },
                "dueDate": {
                    "type": "string",
                    "required": false
                },
                "currency": {
                    "type": "string",
                    "required": false
                },
                "closingDate": {
                    "type": "string",
                    "required": false
                },
                "invoiceAccount": {
                    "type": "string",
                    "required": false
                },
                "deliveryAddress": {
                    "type": "string",
                    "required": false
                },
                "projectCode": {
                    "type": "string",
                    "required": false
                },
                "salesPerson": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_quotations_delete",
            "description": "Delete a quotation from Exact Online. Required: quotationId (GUID). Warning: this permanently deletes the quotation. Use crm.quotations.get to find the quotation GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_quotations_delete",
            "inputs": {
                "quotationId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "crm_quotations_delete_charge_line",
            "description": "Delete a charge line from a quotation in Exact Online. Required: lineId (GUID). Warning: this permanently deletes the charge line. Use crm.quotations.get to find the quotation and lines first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_quotations_delete_charge_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "crm_quotations_delete_line",
            "description": "Delete a quotation line from Exact Online. Required: lineId (GUID). Warning: this permanently deletes the line. Use crm.quotations.get to find the line GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_quotations_delete_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "crm_quotations_get",
            "description": "Get full details of a quotation including all quotation lines. Use search_quotations to find the quotation number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_quotations_get",
            "inputs": {
                "quotationNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_quotations_print",
            "description": "Generate/print a quotation document in Exact Online via the PrintQuotation action. Required: quotationId (GUID).",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_quotations_print",
            "inputs": {
                "quotationId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_quotations_search",
            "description": "Search and filter quotations. Use get_quotation_details for full line details. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_quotations_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "quotationDateFrom": {
                    "type": "string",
                    "required": false
                },
                "quotationDateTo": {
                    "type": "string",
                    "required": false
                },
                "dueDateFrom": {
                    "type": "string",
                    "required": false
                },
                "dueDateTo": {
                    "type": "string",
                    "required": false
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "salesPerson": {
                    "type": "string",
                    "required": false
                },
                "projectCode": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "quotationdate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_quotations_status",
            "description": "Change the status of a quotation via a workflow action: accept, reject, reopen or review. Required: quotationId (GUID) and action.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_quotations_status",
            "inputs": {
                "quotationId": {
                    "type": "string",
                    "required": true
                },
                "action": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_quotations_update",
            "description": "Update an existing quotation in Exact Online. Required: quotationId (GUID). Optional: description, remarks, yourRef, dueDate (YYYY-MM-DD). Use crm.quotations.get to find the quotation GUID first. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_quotations_update",
            "inputs": {
                "quotationId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "dueDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_quotations_update_charge_line",
            "description": "Update an existing charge line of a quotation in Exact Online. Required: lineId (GUID). Optional: amount (amount excl. VAT), description. Use crm.quotations.get to find the quotation and lines first. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_quotations_update_charge_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "amount": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "crm_quotations_update_line",
            "description": "Update an existing quotation line in Exact Online. Required: lineId (GUID). Optional: quantity, unitPrice, discount (percentage 0-100), description, notes. Use crm.quotations.get to find the line GUID first. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "crm_quotations_update_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "unitPrice": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "discount": {
                    "type": "number",
                    "required": false,
                    "default": -1
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "documents_categories_list",
            "description": "List the document categories of Exact Online. Each category has a GUID (field ID) and a description. The category GUID can optionally be passed to documents_upload to classify a document. Optional filter on description.",
            "auth_required": true,
            "via": "mcp",
            "operation": "documents_categories_list",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 100
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "documents_folders_list",
            "description": "List the document folders of Exact Online. Each folder has a GUID (field ID), a code and a description. The folder GUID can optionally be passed to documents_upload to place a document in a specific folder. Optional filter on code or description.",
            "auth_required": true,
            "via": "mcp",
            "operation": "documents_folders_list",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 100
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "documents_get",
            "description": "Get the details of a document (metadata) plus the metadata of its attachments. Pass the document ID (the Exact GUID from documents_search). Returns the document subject, type, linked account/order/invoice/project, date and the Exact view URL, and per attachment the file name, size and download URL - NEVER the file content itself. Use the returned URL to open the file in Exact Online.",
            "auth_required": true,
            "via": "mcp",
            "operation": "documents_get",
            "inputs": {
                "documentId": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "documents_request_upload_url",
            "description": "Request a temporary upload URL to send a file to Exact Online without passing the content through the chat. Provide fileName (including extension, e.g. invoice.pdf). Returns an uploadUrl and a token (the later fileReference). Upload the file with an HTTP PUT to the uploadUrl, for example: curl -X PUT --data-binary @invoice.pdf \"<uploadUrl>\" - then call documents_upload with fileReference=<token>. Only usable if your client can make outbound HTTP requests (e.g. the Claude code sandbox; the domain must be whitelisted there under Settings, Capabilities, Additional allowed domains). If your client cannot (like ChatGPT), have the user upload the file via the upload page in the Ledger Botje app. The token is valid for 15 minutes to upload and then usable once within 24 hours.",
            "auth_required": true,
            "via": "mcp",
            "operation": "documents_request_upload_url",
            "inputs": {
                "fileName": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "documents_search",
            "description": "Search documents (metadata) in Exact Online. Case-insensitive substring match (LIKE %term%) on subject, document type, account name/code or item code, plus exact match on sales invoice number and sales order number. Pass \"*\" to paginate all. Returns metadata such as subject, type, linked account/order/invoice/project, date and the Exact view URL (DocumentViewUrl) - NEVER the file content itself. Optional filter on the numeric document type code (see documents_types_list). Use documents_get for the details and attachments of a document. Supports pagination via offset (see hasMore).",
            "auth_required": true,
            "via": "mcp",
            "operation": "documents_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "typeCode": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "documents_types_list",
            "description": "List the available document types of Exact Online. Each type has a numeric code (field ID) and a description; the code is required when creating a document via documents_upload. The documentIsCreatable field indicates whether you may create a document of that type. Optional filter on description and on creatable types only.",
            "auth_required": true,
            "via": "mcp",
            "operation": "documents_types_list",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "onlyCreatable": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 100
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "documents_upload",
            "description": "Upload a file as a document to Exact Online. Creates a document (documents/Documents) and attaches the file (documents/DocumentAttachments). Required: subject, type (the numeric document type code, see documents_types_list) and EXACTLY ONE of the two file-content sources: fileReference (RECOMMENDED) OR fileUrl. The file content NEVER passes through this tool call itself - sending base64 is not supported (it only works for tiny files). fileReference is a token you obtain in two ways: (1) POST route for capable LLMs - call documents_request_upload_url, then HTTP PUT the file to the returned uploadUrl (for example: curl -X PUT --data-binary @file \"<uploadUrl>\"), and use the token as fileReference. This works if your client can make outbound HTTP requests, such as the Claude code sandbox (with domain whitelisting). (2) The user uploads the file via the upload page in the Ledger Botje app and provides the token. fileUrl is a publicly reachable http/https URL the server fetches the file from. fileName is recommended; with fileReference or fileUrl the file name is derived if omitted. Optionally link to an existing object via account (relation: GUID, code or name), salesOrderNumber, salesInvoiceNumber, shopOrderNumber, project (GUID), financialTransactionEntryID (GUID) or item (GUID); and classify via category (GUID) or documentFolder (GUID).",
            "auth_required": true,
            "via": "mcp",
            "operation": "documents_upload",
            "inputs": {
                "subject": {
                    "type": "string",
                    "required": true
                },
                "type": {
                    "type": "string",
                    "required": true
                },
                "fileName": {
                    "type": "string",
                    "required": false
                },
                "fileUrl": {
                    "type": "string",
                    "required": false
                },
                "fileReference": {
                    "type": "string",
                    "required": false
                },
                "account": {
                    "type": "string",
                    "required": false
                },
                "category": {
                    "type": "string",
                    "required": false
                },
                "documentFolder": {
                    "type": "string",
                    "required": false
                },
                "salesOrderNumber": {
                    "type": "string",
                    "required": false
                },
                "salesInvoiceNumber": {
                    "type": "string",
                    "required": false
                },
                "shopOrderNumber": {
                    "type": "string",
                    "required": false
                },
                "project": {
                    "type": "string",
                    "required": false
                },
                "financialTransactionEntryID": {
                    "type": "string",
                    "required": false
                },
                "item": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_aging_payables",
            "description": "Aging analysis of outstanding payables per account, amounts split over age groups. Reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_aging_payables",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_aging_receivables",
            "description": "Aging analysis of outstanding receivables per account, amounts split over age groups. Reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_aging_receivables",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_balance_get",
            "description": "Get the BALANCE per GL account (aggregated, SUM of transaction lines) in ONE call. This is the right tool for a profit & loss statement, trial balance, dashboard or \"balance per account\". Do NOT call financial_transactions_search per individual GL account. Filter by financial year, period range, date range and account type (balance or P&L). Optionally compare two years via compareYear.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_balance_get",
            "inputs": {
                "financialYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "compareYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "financialPeriodFrom": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "financialPeriodTo": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "dateFrom": {
                    "type": "string",
                    "required": false
                },
                "dateTo": {
                    "type": "string",
                    "required": false
                },
                "glAccountType": {
                    "type": "string",
                    "required": false
                },
                "glAccountCode": {
                    "type": "string",
                    "required": false
                },
                "includeZeroNet": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "code"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "asc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 250
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_bank_add_line",
            "description": "Add a new line to an existing bank entry in Exact Online. Required: bankEntryId (GUID), glAccountCode and amount (positive=debit, negative=credit). Optional: accountCode, date (YYYY-MM-DD), description, notes, vatCode, costCenter, ourRef. Use financial.bank.get to view the entry first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_bank_add_line",
            "inputs": {
                "bankEntryId": {
                    "type": "string",
                    "required": true
                },
                "glAccountCode": {
                    "type": "string",
                    "required": true
                },
                "amount": {
                    "type": "string",
                    "required": true
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "date": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "ourRef": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_bank_create",
            "description": "Create a new bank entry in Exact Online. Required: journalCode and lines (JSON array with at least glAccountCode and amount per line, positive=debit, negative=credit). Search GL accounts and relations with search_accounts.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_bank_create",
            "inputs": {
                "journalCode": {
                    "type": "string",
                    "required": true
                },
                "lines": {
                    "type": "string",
                    "required": true
                },
                "currency": {
                    "type": "string",
                    "required": false
                },
                "closingBalance": {
                    "type": "string",
                    "required": false
                },
                "openingBalance": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_bank_delete",
            "description": "Delete a bank entry from Exact Online. Required: bankEntryId (GUID). Use financial.bank.get or search_bank_entries to find the correct entry first. Warning: this action is irreversible. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_bank_delete",
            "inputs": {
                "bankEntryId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "financial_bank_get",
            "description": "Get full bank entry details including all entry lines. Use search_bank_entries to find the entry number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_bank_get",
            "inputs": {
                "entryNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_bank_search",
            "description": "Search and filter bank entries. Use get_bank_entry_details for full entry line details.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_bank_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "journalCode": {
                    "type": "string",
                    "required": false
                },
                "financialYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "financialPeriod": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "entryNumber"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_budgets_search",
            "description": "Search financial budgets per GL account, cost center, period and year. Optionally filter by GL code (query) and financial year. Note: reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_budgets_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "reportingYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 50
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_cash_add_line",
            "description": "Add a new line to an existing cash entry. Required: entryId (GUID), glAccountCode and amount (positive=debit, negative=credit).",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_cash_add_line",
            "inputs": {
                "entryId": {
                    "type": "string",
                    "required": true
                },
                "glAccountCode": {
                    "type": "string",
                    "required": true
                },
                "amount": {
                    "type": "string",
                    "required": true
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "date": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_cash_create",
            "description": "Create a new cash entry in Exact Online. Required: journalCode and lines (JSON array with at least glAccountCode and amount per line, positive=debit, negative=credit).",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_cash_create",
            "inputs": {
                "journalCode": {
                    "type": "string",
                    "required": true
                },
                "lines": {
                    "type": "string",
                    "required": true
                },
                "currency": {
                    "type": "string",
                    "required": false
                },
                "closingBalance": {
                    "type": "string",
                    "required": false
                },
                "openingBalance": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_cash_get",
            "description": "Get full cash entry details including all lines. Use financial_cash_search to find the entry number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_cash_get",
            "inputs": {
                "entryNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_cash_search",
            "description": "Search and filter cash entries. Use financial_cash_get for full line details. Reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_cash_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "journalCode": {
                    "type": "string",
                    "required": false
                },
                "financialYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "financialPeriod": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "entryNumber"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_currencies_list",
            "description": "List all available currencies with their precision settings.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_currencies_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_entries_match",
            "description": "Match entries in Exact Online, e.g. an open sales or purchase invoice with the corresponding bank or cash entry. Provide the entry numbers in entries; the tool looks up year, period, journal, GL account, relation and amount itself and sends the match via the Exact XML API (topic MatchSets). Both entries must already exist in Exact; create a missing bank entry first with financial.bank.create and financial.bank.add_line. IMPORTANT: first show the user which items you want to match, with amounts and balance, and only call this tool after confirmation. Unmatching is not possible with this tool, only in Exact Online itself. A non-zero balance is not rejected by this tool; Exact decides.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_entries_match",
            "inputs": {
                "entries": {
                    "type": "string",
                    "required": true
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "glAccountCode": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "financial_exchangerates_list",
            "description": "List exchange rates with currency, rate and start date.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_exchangerates_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_generaljournal_add_line",
            "description": "Add a new line to an existing general journal entry. Required: entryId (GUID), glAccountCode and amount (positive=debit, negative=credit).",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_generaljournal_add_line",
            "inputs": {
                "entryId": {
                    "type": "string",
                    "required": true
                },
                "glAccountCode": {
                    "type": "string",
                    "required": true
                },
                "amount": {
                    "type": "string",
                    "required": true
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "date": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_generaljournal_create",
            "description": "Create a new general journal (memorial) entry in Exact Online. Required: journalCode and lines (JSON array with at least glAccountCode and amount per line, positive=debit, negative=credit). The entry must balance (debit = credit).",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_generaljournal_create",
            "inputs": {
                "journalCode": {
                    "type": "string",
                    "required": true
                },
                "lines": {
                    "type": "string",
                    "required": true
                },
                "currency": {
                    "type": "string",
                    "required": false
                },
                "financialYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "financialPeriod": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "reversal": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_generaljournal_get",
            "description": "Get full general journal entry details including all lines. Use financial_generaljournal_search to find the entry number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_generaljournal_get",
            "inputs": {
                "entryNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_generaljournal_search",
            "description": "Search and filter general journal (memorial) entries. Use financial_generaljournal_get for full line details. Reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_generaljournal_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "journalCode": {
                    "type": "string",
                    "required": false
                },
                "financialYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "financialPeriod": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "entryNumber"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_glaccounts_create",
            "description": "Create a new general ledger account (GL account) in Exact Online. Required: code and description. Optional: type (e.g. 110=Revenue, 120=Cost, 150=Balance), balanceSide (D=Debit, C=Credit), balanceType (B=Balance, W=ProfitLoss), searchCode, vatCode, costcenter, costunit, isBlocked.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_glaccounts_create",
            "inputs": {
                "code": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": true
                },
                "type": {
                    "type": "string",
                    "required": false
                },
                "balanceSide": {
                    "type": "string",
                    "required": false
                },
                "balanceType": {
                    "type": "string",
                    "required": false
                },
                "searchCode": {
                    "type": "string",
                    "required": false
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "costcenter": {
                    "type": "string",
                    "required": false
                },
                "costunit": {
                    "type": "string",
                    "required": false
                },
                "isBlocked": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_glaccounts_delete",
            "description": "Delete a general ledger account (GL account) from Exact Online. This is a permanent action and cannot be undone. Required: glAccountId (GUID). All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_glaccounts_delete",
            "inputs": {
                "glAccountId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "financial_glaccounts_search",
            "description": "Search and filter general ledger accounts. Filter by code, description, type, search code, or blocked status.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_glaccounts_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "string",
                    "required": false
                },
                "isBlocked": {
                    "type": "string",
                    "required": false
                },
                "searchCode": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "code"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "asc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_glaccounts_update",
            "description": "Update an existing general ledger account in Exact Online. Required: glAccountId (GUID). All other fields are optional. Supports: description, code, type, balanceSide (D/C), balanceType (B/W), searchCode, vatCode, costcenter, costunit, isBlocked. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_glaccounts_update",
            "inputs": {
                "glAccountId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "code": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "string",
                    "required": false
                },
                "balanceSide": {
                    "type": "string",
                    "required": false
                },
                "balanceType": {
                    "type": "string",
                    "required": false
                },
                "searchCode": {
                    "type": "string",
                    "required": false
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "costcenter": {
                    "type": "string",
                    "required": false
                },
                "costunit": {
                    "type": "string",
                    "required": false
                },
                "isBlocked": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_glclassifications_list",
            "description": "List GL classifications (reporting codes) with code, name and description. Optionally filter by code or description (query).",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_glclassifications_list",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_journals_list",
            "description": "List all journals with code, description and type (e.g. bank, cash, purchase, sales, general).",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_journals_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_journalstatus_list",
            "description": "Journal status per financial year and period (e.g. open/closed). Reflects the last synchronization. Optionally filter by financial year.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_journalstatus_list",
            "inputs": {
                "finYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_outstanding_get",
            "description": "Get outstanding and overdue invoice overview for both receivables and payables.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_outstanding_get",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_payables_list",
            "description": "List of outstanding payable invoices with account, invoice number, due date and amount. Reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_payables_list",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 50
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_periods_list",
            "description": "List financial periods (years and periods) with start and end date.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_periods_list",
            "inputs": {
                "finYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_profitloss_get",
            "description": "Get the profit & loss overview: costs, revenue and result for the current period, current year and previous year. Reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_profitloss_get",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_purchase_add_line",
            "description": "Add a new line to an existing purchase entry. Required: entryId (GUID), glAccountCode and amount.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_purchase_add_line",
            "inputs": {
                "entryId": {
                    "type": "string",
                    "required": true
                },
                "glAccountCode": {
                    "type": "string",
                    "required": true
                },
                "amount": {
                    "type": "string",
                    "required": true
                },
                "date": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "from": {
                    "type": "string",
                    "required": false
                },
                "to": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_purchase_create",
            "description": "Create a new purchase entry in Exact Online. Required: journalCode, supplierCode and lines (JSON array with at least glAccountCode and amount per line). Optional documentId: the ID of an existing document from documents_search (for example a scanned invoice from the inbox) to link to the entry.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_purchase_create",
            "inputs": {
                "journalCode": {
                    "type": "string",
                    "required": true
                },
                "supplierCode": {
                    "type": "string",
                    "required": true
                },
                "lines": {
                    "type": "string",
                    "required": true
                },
                "currency": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "entryDate": {
                    "type": "string",
                    "required": false
                },
                "documentId": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_purchase_delete_line",
            "description": "Delete a line from a posted purchase entry (processed purchase invoice) in Exact Online, without deleting the whole invoice. Required: lineId (the line id from financial_purchase_get). The document total changes with the amount of the line. The supplier and VAT lines are calculated by Exact and cannot be deleted separately. Exact decides whether deletion is allowed; if refused (for example a closed period or after a VAT return) the Exact message is returned. The response contains the deleted line and the document lines before and after.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_purchase_delete_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "financial_purchase_get",
            "description": "Get full purchase entry details including supplier and all lines. Use financial_purchase_search to find the entry number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_purchase_get",
            "inputs": {
                "entryNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_purchase_search",
            "description": "Search and filter purchase entries. Use financial_purchase_get for full line details. Reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_purchase_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "journalCode": {
                    "type": "string",
                    "required": false
                },
                "financialYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "financialPeriod": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "entryDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_purchase_update_line",
            "description": "Change a line of a posted purchase entry (processed purchase invoice) in Exact Online, for example a wrong VAT code, without a general journal entry. Required: lineId (the line id from financial_purchase_get). Other fields are optional; only provided fields are changed: vatCode, vatAmount, amount (excl. VAT as shown by financial_purchase_get), glAccountCode, description, notes, costCenter, costUnit. The response contains the line before and after. Exact may refuse the change in a period for which a VAT return was filed; a correction entry is then still needed.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_purchase_update_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "vatAmount": {
                    "type": "string",
                    "required": false
                },
                "amount": {
                    "type": "string",
                    "required": false
                },
                "glAccountCode": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_reporting_balance_search",
            "description": "Search the reporting balance: balances per GL account, period and year. Exact groups by account, period, cost center, cost unit, entry type and status, so the same account and period can have several rows. Use glAccountCodeFrom and glAccountCodeTo for an account range, for example 8000 to 8999 for revenue. query is a text search on code or description and misses accounts whose description lacks the searched word - do not use it to add up revenue or costs. totals holds the sum over ALL rows matching the filter, regardless of limit and offset, so do not add up per page yourself. Revenue is booked as credit and is therefore negative. Reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_reporting_balance_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "glAccountCodeFrom": {
                    "type": "string",
                    "required": false
                },
                "glAccountCodeTo": {
                    "type": "string",
                    "required": false
                },
                "reportingYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "reportingPeriod": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 50
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_revenue_list",
            "description": "Revenue overview per reporting period (field Month) for the current and previous financial year, as Exact calculates it from all GL accounts of type revenue. Amounts are positive. total is the sum of the returned periods, cachedYears lists the available financial years. Older financial years are not cached: requesting one returns a note explaining where to find them - an empty list then does not mean a synchronization error. Reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_revenue_list",
            "inputs": {
                "year": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_sales_add_line",
            "description": "Add a new line to an existing sales entry. Required: entryId (GUID), glAccountCode and amount.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_sales_add_line",
            "inputs": {
                "entryId": {
                    "type": "string",
                    "required": true
                },
                "glAccountCode": {
                    "type": "string",
                    "required": true
                },
                "amount": {
                    "type": "string",
                    "required": true
                },
                "date": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "from": {
                    "type": "string",
                    "required": false
                },
                "to": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_sales_create",
            "description": "Create a new sales entry in Exact Online. Required: journalCode, customerCode and lines (JSON array with at least glAccountCode and amount per line). Optional documentId: the ID of an existing document from documents_search to link to the entry.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_sales_create",
            "inputs": {
                "journalCode": {
                    "type": "string",
                    "required": true
                },
                "customerCode": {
                    "type": "string",
                    "required": true
                },
                "lines": {
                    "type": "string",
                    "required": true
                },
                "currency": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "entryDate": {
                    "type": "string",
                    "required": false
                },
                "documentId": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_sales_delete_line",
            "description": "Delete a line from a posted sales entry (processed sales invoice) in Exact Online, without deleting the whole entry. Required: lineId (the line id from financial_sales_get). The document total changes with the amount of the line. The customer and VAT lines are calculated by Exact and cannot be deleted separately. Exact decides whether deletion is allowed; if refused (for example a closed period or after a VAT return) the Exact message is returned. The response contains the deleted line and the document lines before and after.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_sales_delete_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "financial_sales_get",
            "description": "Get full sales entry details including customer and all lines. Use financial_sales_search to find the entry number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_sales_get",
            "inputs": {
                "entryNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_sales_search",
            "description": "Search and filter sales entries. Use financial_sales_get for full line details. Reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_sales_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "journalCode": {
                    "type": "string",
                    "required": false
                },
                "financialYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "financialPeriod": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "entryDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_sales_update_line",
            "description": "Change a line of a posted sales entry (processed sales invoice) in Exact Online, for example a wrong VAT code, without a general journal entry. Required: lineId (the line id from financial_sales_get). Other fields are optional; only provided fields are changed: vatCode, vatAmount, amount (excl. VAT, positive as shown by financial_sales_get), glAccountCode, description, notes, costCenter, costUnit. The response contains the line before and after. For a draft invoice use sales_invoices_update_line. Exact may refuse the change in a period for which a VAT return was filed; a correction entry is then still needed.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_sales_update_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "vatAmount": {
                    "type": "string",
                    "required": false
                },
                "amount": {
                    "type": "string",
                    "required": false
                },
                "glAccountCode": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_transactions_search",
            "description": "Search and filter financial transaction lines. Filter by description, GL account, account, invoice number, date range, financial year/period, journal code, or type.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_transactions_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "glAccountCode": {
                    "type": "string",
                    "required": false
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "dateFrom": {
                    "type": "string",
                    "required": false
                },
                "dateTo": {
                    "type": "string",
                    "required": false
                },
                "financialYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "financialPeriod": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "journalCode": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "date"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_vatcodes_list",
            "description": "List VAT codes with code, description and percentage. Useful to pick a valid VAT code when creating financial entries.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_vatcodes_list",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "financial_vatpercentages_list",
            "description": "List VAT percentages per VAT code with start date.",
            "auth_required": true,
            "via": "mcp",
            "operation": "financial_vatpercentages_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "hrm_costcenters_create",
            "description": "Create a new cost center in Exact Online. Required: code and description.",
            "auth_required": true,
            "via": "mcp",
            "operation": "hrm_costcenters_create",
            "inputs": {
                "code": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "hrm_costcenters_delete",
            "description": "Delete a cost center. Required: costcenterId (GUID).",
            "auth_required": true,
            "via": "mcp",
            "operation": "hrm_costcenters_delete",
            "inputs": {
                "costcenterId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "hrm_costcenters_search",
            "description": "Search cost centers. Optionally filter by code or description via query.",
            "auth_required": true,
            "via": "mcp",
            "operation": "hrm_costcenters_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "hrm_costcenters_update",
            "description": "Update an existing cost center. Required: costcenterId (GUID). Optional: description. Note: the code is the key and cannot be changed via the API.",
            "auth_required": true,
            "via": "mcp",
            "operation": "hrm_costcenters_update",
            "inputs": {
                "costcenterId": {
                    "type": "string",
                    "required": true
                },
                "code": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "hrm_costunits_create",
            "description": "Create a new cost unit in Exact Online. Required: code and description.",
            "auth_required": true,
            "via": "mcp",
            "operation": "hrm_costunits_create",
            "inputs": {
                "code": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "hrm_costunits_delete",
            "description": "Delete a cost unit. Required: costunitId (GUID).",
            "auth_required": true,
            "via": "mcp",
            "operation": "hrm_costunits_delete",
            "inputs": {
                "costunitId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "hrm_costunits_search",
            "description": "Search cost units. Optionally filter by code or description via query.",
            "auth_required": true,
            "via": "mcp",
            "operation": "hrm_costunits_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "hrm_costunits_update",
            "description": "Update an existing cost unit. Required: costunitId (GUID). Optional: description. Note: the code is the key and cannot be changed via the API.",
            "auth_required": true,
            "via": "mcp",
            "operation": "hrm_costunits_update",
            "inputs": {
                "costunitId": {
                    "type": "string",
                    "required": true
                },
                "code": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "hrm_departments_list",
            "description": "List all departments with code, description and linked cost center.",
            "auth_required": true,
            "via": "mcp",
            "operation": "hrm_departments_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "inventory_batch_create",
            "description": "Reserve a batch number for a stock transaction. Required: batchNumber, draftStockTransactionId (GUID), quantity, stockTransactionType, warehouseCode. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "inventory_batch_create",
            "inputs": {
                "batchNumber": {
                    "type": "string",
                    "required": true
                },
                "draftStockTransactionId": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": true
                },
                "stockTransactionType": {
                    "type": "integer",
                    "required": true
                },
                "warehouseCode": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "storageLocationCode": {
                    "type": "string",
                    "required": false
                },
                "endDate": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "inventory_batch_delete",
            "description": "Delete a draft stock batch number transaction. Required: batchNumberId (GUID). All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "inventory_batch_delete",
            "inputs": {
                "batchNumberId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "inventory_batch_update",
            "description": "Update the quantity of a draft stock batch number transaction. Only quantity can be changed. Required: batchNumberId (GUID) and quantity. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "inventory_batch_update",
            "inputs": {
                "batchNumberId": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "inventory_serial_create",
            "description": "Reserve a serial number for a stock transaction. Required: serialNumber, draftStockTransactionId, stockTransactionType, warehouseCode. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "inventory_serial_create",
            "inputs": {
                "serialNumber": {
                    "type": "string",
                    "required": true
                },
                "draftStockTransactionId": {
                    "type": "string",
                    "required": true
                },
                "stockTransactionType": {
                    "type": "integer",
                    "required": true
                },
                "warehouseCode": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "storageLocationCode": {
                    "type": "string",
                    "required": false
                },
                "startDate": {
                    "type": "string",
                    "required": false
                },
                "endDate": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "inventory_serial_delete",
            "description": "Delete a draft stock serial number transaction. Required: serialNumberId (GUID). All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "inventory_serial_delete",
            "inputs": {
                "serialNumberId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "inventory_serial_update",
            "description": "Update a stock serial number record. Only ParentID can be changed. Required: serialNumberId and parentId (GUIDs). All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "inventory_serial_update",
            "inputs": {
                "serialNumberId": {
                    "type": "string",
                    "required": true
                },
                "parentId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_batch_history",
            "description": "USE THIS TOOL when the user asks about the history, traceability or transactions of a batch number. Get full history of a batch number (batch / lot / LOT). Returns all stock transactions including locations, quantities and transaction types. Use items.stock to find batch numbers for an item first. Use stock.batch.search to search by partial batch number.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_batch_history",
            "inputs": {
                "batchNumber": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 100
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_create",
            "description": "Create a new item in Exact Online. Required: code and description. Optional: barcode, unit, item group, type flags, notes, search code, VAT code, GL accounts (revenue/costs/stock), weights, validity period (start/end). Search with search_items first. Do NOT use for price changes, use sales.prices.create to set a sales price after creation.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_create",
            "inputs": {
                "code": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": true
                },
                "extraDescription": {
                    "type": "string",
                    "required": false
                },
                "barcode": {
                    "type": "string",
                    "required": false
                },
                "costPrice": {
                    "type": "string",
                    "required": false
                },
                "unit": {
                    "type": "string",
                    "required": false
                },
                "itemGroup": {
                    "type": "string",
                    "required": false
                },
                "isSalesItem": {
                    "type": "boolean",
                    "required": false,
                    "default": true
                },
                "isPurchaseItem": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "isStockItem": {
                    "type": "boolean",
                    "required": false,
                    "default": true
                },
                "isMakeItem": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "isSerialItem": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "isBatchItem": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "isFractionAllowedItem": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "searchCode": {
                    "type": "string",
                    "required": false
                },
                "salesVatCode": {
                    "type": "string",
                    "required": false
                },
                "glRevenueCode": {
                    "type": "string",
                    "required": false
                },
                "glCostsCode": {
                    "type": "string",
                    "required": false
                },
                "glStockCode": {
                    "type": "string",
                    "required": false
                },
                "grossWeight": {
                    "type": "string",
                    "required": false
                },
                "netWeight": {
                    "type": "string",
                    "required": false
                },
                "startDate": {
                    "type": "string",
                    "required": false
                },
                "endDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_delete",
            "description": "Delete an item from Exact Online. Required: itemCode. The item will be permanently deleted. Always search with search_items first to confirm the correct item code.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_delete",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "items_details",
            "description": "Get full details of a specific item including stock per warehouse, active sales prices, suppliers and free fields (extraFields: number, description and value). Use items.search to find the item first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_details",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_groups_list",
            "description": "List item groups with code and description.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_groups_list",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_search",
            "description": "Search items/products. Case-insensitive substring match (LIKE %term%) on Code, Barcode, SearchCode, Description and ExtraDescription. Leave query empty or pass \"*\" to paginate all items. On 0 results the response includes a \"suggestions\" field with the top-5 phonetically/prefix-similar items - use those instead of guessing spelling variants yourself. NOT for batch/serial lookups - use items.batch.history / stock.batch.search and items.serial.history / stock.serial.search instead. Use items.stock for stock levels.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 10
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                },
                "requestContext": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_serial_history",
            "description": "USE THIS TOOL when the user asks about the history, traceability or transactions of a serial number. Get full history of a serial number (serial / SN). Returns all stock transactions including locations, quantities and transaction types. Use items.stock to find serial numbers for an item first. Use stock.serial.search to search by partial serial number.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_serial_history",
            "inputs": {
                "serialNumber": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 100
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_stock",
            "description": "Get stock information for an item by item code. Returns current stock per warehouse and any batch/serial numbers. Use items.search to find the item code first. Use items.batch.history for full batch number history. Use items.serial.history for full serial number history.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_stock",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_suppliers",
            "description": "Search supplier items. Find which suppliers deliver an item or which items a supplier delivers.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_suppliers",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "supplierCode": {
                    "type": "string",
                    "required": false
                },
                "query": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_suppliers_create",
            "description": "Link a supplier to an item with purchase price and delivery details. Always search for the item and supplier first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_suppliers_create",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "supplierCode": {
                    "type": "string",
                    "required": true
                },
                "purchasePrice": {
                    "type": "string",
                    "required": true
                },
                "supplierItemCode": {
                    "type": "string",
                    "required": false
                },
                "minimumQuantity": {
                    "type": "string",
                    "required": false
                },
                "purchaseLeadTime": {
                    "type": "string",
                    "required": false
                },
                "isMainSupplier": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "currency": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "countryOfOrigin": {
                    "type": "string",
                    "required": false
                },
                "purchaseLotSize": {
                    "type": "string",
                    "required": false
                },
                "purchaseVatCode": {
                    "type": "string",
                    "required": false
                },
                "purchaseUnit": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_suppliers_delete",
            "description": "Delete a supplier item link. Use items.suppliers first to find the supplier item and get the GUID. Warning: this action cannot be undone. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_suppliers_delete",
            "inputs": {
                "supplierItemId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "items_suppliers_update",
            "description": "Update an existing supplier item. Use items.suppliers first to find the supplier item and get the GUID. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_suppliers_update",
            "inputs": {
                "supplierItemId": {
                    "type": "string",
                    "required": true
                },
                "purchasePrice": {
                    "type": "string",
                    "required": false
                },
                "supplierItemCode": {
                    "type": "string",
                    "required": false
                },
                "minimumQuantity": {
                    "type": "string",
                    "required": false
                },
                "purchaseLeadTime": {
                    "type": "string",
                    "required": false
                },
                "isMainSupplier": {
                    "type": "boolean",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_time_create",
            "description": "Register time on a routing step of a production order. Required: shopOrderNumber, operationCode and hours.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_time_create",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "operationCode": {
                    "type": "string",
                    "required": true
                },
                "hours": {
                    "type": "number",
                    "required": true
                },
                "laborHours": {
                    "type": "number",
                    "required": false,
                    "default": -1
                },
                "quantity": {
                    "type": "number",
                    "required": false,
                    "default": -1
                },
                "percentageComplete": {
                    "type": "number",
                    "required": false,
                    "default": -1
                },
                "isFinished": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_units_list",
            "description": "List all available units of measure with type information.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_units_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_update",
            "description": "Update item properties: item code (newItemCode, renames the same Exact item keeping history and stock), description, barcode, unit, item group, search code, item type flags, notes, VAT code, GL accounts (revenue/costs/stock), weights, validity period and free fields (freeFields). Required: itemCode. Search with items.search first. Integrations that match on item code (for example a webshop) see the item under the new code after renaming; put the old code in searchCode in the same call if needed. Do NOT use for price changes, use sales.prices.update or sales.prices.create instead. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_update",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "extraDescription": {
                    "type": "string",
                    "required": false
                },
                "barcode": {
                    "type": "string",
                    "required": false
                },
                "costPriceNew": {
                    "type": "string",
                    "required": false
                },
                "unit": {
                    "type": "string",
                    "required": false
                },
                "itemGroup": {
                    "type": "string",
                    "required": false
                },
                "isSalesItem": {
                    "type": "boolean",
                    "required": false
                },
                "isPurchaseItem": {
                    "type": "boolean",
                    "required": false
                },
                "isStockItem": {
                    "type": "boolean",
                    "required": false
                },
                "isMakeItem": {
                    "type": "boolean",
                    "required": false
                },
                "isSerialItem": {
                    "type": "boolean",
                    "required": false
                },
                "isBatchItem": {
                    "type": "boolean",
                    "required": false
                },
                "isFractionAllowedItem": {
                    "type": "boolean",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "searchCode": {
                    "type": "string",
                    "required": false
                },
                "salesVatCode": {
                    "type": "string",
                    "required": false
                },
                "glRevenueCode": {
                    "type": "string",
                    "required": false
                },
                "glCostsCode": {
                    "type": "string",
                    "required": false
                },
                "glStockCode": {
                    "type": "string",
                    "required": false
                },
                "grossWeight": {
                    "type": "string",
                    "required": false
                },
                "netWeight": {
                    "type": "string",
                    "required": false
                },
                "startDate": {
                    "type": "string",
                    "required": false
                },
                "endDate": {
                    "type": "string",
                    "required": false
                },
                "newItemCode": {
                    "type": "string",
                    "required": false
                },
                "freeFields": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_warehouses_create",
            "description": "Link an item to a warehouse in Exact Online (create an ItemWarehouse record). Required: itemCode and warehouseCode. Optional: safetyStock, reorderPoint, maximumStock. Always search with search_items and list_warehouses first to find the correct codes.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_warehouses_create",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "warehouseCode": {
                    "type": "string",
                    "required": true
                },
                "safetyStock": {
                    "type": "string",
                    "required": false
                },
                "reorderPoint": {
                    "type": "string",
                    "required": false
                },
                "maximumStock": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "items_warehouses_delete",
            "description": "Delete an item-warehouse link (ItemWarehouse) from Exact Online. Required: itemCode and warehouseCode. The link will be permanently deleted. Always search with search_items and list_warehouses first to confirm the correct codes.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_warehouses_delete",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "warehouseCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "items_warehouses_update",
            "description": "Update an existing item-warehouse link (ItemWarehouse) in Exact Online. Required: itemCode and warehouseCode (to find the record). Optional: safetyStock, reorderPoint, maximumStock. Always search with search_items and list_warehouses first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "items_warehouses_update",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "warehouseCode": {
                    "type": "string",
                    "required": true
                },
                "safetyStock": {
                    "type": "string",
                    "required": false
                },
                "reorderPoint": {
                    "type": "string",
                    "required": false
                },
                "maximumStock": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "logistics_deliveries_create",
            "description": "Create a goods delivery for a sales order. This reduces stock. Required: orderNumber and lines (JSON array with itemCode and quantity). Use get_sales_order_details to check open lines. Do NOT use for goods receipts, use logistics.receipts.create instead.",
            "auth_required": true,
            "via": "mcp",
            "operation": "logistics_deliveries_create",
            "inputs": {
                "orderNumber": {
                    "type": "string",
                    "required": true
                },
                "lines": {
                    "type": "string",
                    "required": true
                },
                "deliveryDate": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "trackingNumber": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "shippingMethodCode": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "logistics_deliveries_get",
            "description": "Get full details of a goods delivery (shipment) including all lines with items, quantities, and related sales order numbers. Use search_goods_deliveries to find the delivery number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "logistics_deliveries_get",
            "inputs": {
                "deliveryNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "logistics_deliveries_search",
            "description": "Search and filter outgoing deliveries (goods deliveries). These are shipments created from sales orders. Automatically filters on the active warehouse. Use get_goods_delivery_details for full delivery line details.",
            "auth_required": true,
            "via": "mcp",
            "operation": "logistics_deliveries_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "deliveryDateFrom": {
                    "type": "string",
                    "required": false
                },
                "deliveryDateTo": {
                    "type": "string",
                    "required": false
                },
                "customerCode": {
                    "type": "string",
                    "required": false
                },
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "deliveryDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "logistics_deliveries_update",
            "description": "Update an existing goods delivery in Exact Online. Required: deliveryId (GUID). Only provided fields will be updated. Available fields: remarks, trackingNumber. Use search_goods_deliveries to find the correct delivery. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "logistics_deliveries_update",
            "inputs": {
                "deliveryId": {
                    "type": "string",
                    "required": true
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "trackingNumber": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "logistics_incoterms_list",
            "description": "List incoterms (delivery terms) with code and description.",
            "auth_required": true,
            "via": "mcp",
            "operation": "logistics_incoterms_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "logistics_receipts_create",
            "description": "Create a goods receipt for a purchase order. This increases stock. Required: orderNumber and lines (JSON array with itemCode and quantity). Use get_purchase_order_details to check open lines. Do NOT use for deliveries, use logistics.deliveries.create instead.",
            "auth_required": true,
            "via": "mcp",
            "operation": "logistics_receipts_create",
            "inputs": {
                "orderNumber": {
                    "type": "string",
                    "required": true
                },
                "lines": {
                    "type": "string",
                    "required": true
                },
                "receiptDate": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "logistics_receipts_get",
            "description": "Get full details of a goods receipt including all lines with items, quantities, and related purchase order numbers. Use search_goods_receipts to find the receipt number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "logistics_receipts_get",
            "inputs": {
                "receiptNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "logistics_receipts_search",
            "description": "Search and filter incoming receipts (goods receipts). These are deliveries received against purchase orders. Automatically filters on the active warehouse. Use get_goods_receipt_details for full receipt line details.",
            "auth_required": true,
            "via": "mcp",
            "operation": "logistics_receipts_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "receiptDateFrom": {
                    "type": "string",
                    "required": false
                },
                "receiptDateTo": {
                    "type": "string",
                    "required": false
                },
                "supplierCode": {
                    "type": "string",
                    "required": false
                },
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "receiptDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "logistics_receipts_update",
            "description": "Update an existing goods receipt in Exact Online. Required: receiptId (GUID). Only provided fields will be updated. Available fields: remarks. Use search_goods_receipts to find the correct receipt. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "logistics_receipts_update",
            "inputs": {
                "receiptId": {
                    "type": "string",
                    "required": true
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "logistics_returns_process",
            "description": "Process (finalize) an existing planned sales return in Exact Online. This makes the return permanent. Required: returnNumber. Use search_sales_returns to find the return number.",
            "auth_required": true,
            "via": "mcp",
            "operation": "logistics_returns_process",
            "inputs": {
                "returnNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                },
                "requestContext": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_areas_create",
            "description": "Create a new production area. Production areas group work centers. Required: code and description.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_areas_create",
            "inputs": {
                "code": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": true
                },
                "costcenter": {
                    "type": "string",
                    "required": false
                },
                "costunit": {
                    "type": "string",
                    "required": false
                },
                "isDefault": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_areas_delete",
            "description": "Delete a production area. Permanent. Required: areaCode.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_areas_delete",
            "inputs": {
                "areaCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_areas_list",
            "description": "List all production areas in the current administration. Shows code, description, cost center, cost unit and whether it is the default.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_areas_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_areas_update",
            "description": "Update a production area. Required: areaCode. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_areas_update",
            "inputs": {
                "areaCode": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "code": {
                    "type": "string",
                    "required": false
                },
                "costcenter": {
                    "type": "string",
                    "required": false
                },
                "costunit": {
                    "type": "string",
                    "required": false
                },
                "isDefault": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_assembly_finish",
            "description": "Finish / complete an assembly order. This increases stock for the assembled item and decreases stock for component parts. Required: orderNumber and quantity.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_assembly_finish",
            "inputs": {
                "orderNumber": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "assemblyDate": {
                    "type": "string",
                    "required": false
                },
                "assembledItemStorageLocationId": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                },
                "requestContext": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_assembly_search",
            "description": "Search and filter assembly orders.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_assembly_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "assemblyDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_bom_material_add",
            "description": "Add a material line to a bill of material version. Required: itemCode (main item) and partItemCode (material). Optional: versionNumber (defaults to active version), quantity, type.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_bom_material_add",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "partItemCode": {
                    "type": "string",
                    "required": true
                },
                "versionNumber": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "quantity": {
                    "type": "string",
                    "required": false
                },
                "wastePercentage": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "integer",
                    "required": false,
                    "default": 1
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_bom_material_delete",
            "description": "Delete a material line from a BOM. Permanent action. Required: itemCode and partItemCode.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_bom_material_delete",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "partItemCode": {
                    "type": "string",
                    "required": true
                },
                "versionNumber": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_bom_material_update",
            "description": "Update a material line in a BOM. Required: itemCode and partItemCode (for identification). An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_bom_material_update",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "partItemCode": {
                    "type": "string",
                    "required": true
                },
                "versionNumber": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "quantity": {
                    "type": "string",
                    "required": false
                },
                "wastePercentage": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_bom_version_create",
            "description": "Create a new BOM version for an item. Required: itemCode and description.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_bom_version_create",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": true
                },
                "versionNumber": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "isDefault": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "status": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "batchQuantity": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "productionLeadDays": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "orderLeadDays": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "versionDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_bom_version_delete",
            "description": "Delete a BOM version. Permanent action. Required: itemCode and versionNumber.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_bom_version_delete",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "versionNumber": {
                    "type": "integer",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_bom_version_update",
            "description": "Update a BOM version. Required: itemCode and versionNumber. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_bom_version_update",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "versionNumber": {
                    "type": "integer",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "isDefault": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "status": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "batchQuantity": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "productionLeadDays": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "orderLeadDays": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "versionDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_bom_versions",
            "description": "List all bill of material versions for an item. Shows version number, description, status, default/active indicators and validity dates. Required: itemCode. Use items.search to find the item code.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_bom_versions",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_byproducts_search",
            "description": "Search and filter by-product receipts (by-products received during production) by text, shop order number, item code, transaction date or created date. Automatically filters on the active warehouse.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_byproducts_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "shopOrderNumber": {
                    "type": "string",
                    "required": false
                },
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "transactionDateFrom": {
                    "type": "string",
                    "required": false
                },
                "transactionDateTo": {
                    "type": "string",
                    "required": false
                },
                "createdDateFrom": {
                    "type": "string",
                    "required": false
                },
                "createdDateTo": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "transactionDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_materialplan_add",
            "description": "Add a material line to a shop order. Required: shopOrderNumber and itemCode. Optional: quantity, required date, waste percentage, type (1=material, 2=by-product).",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_materialplan_add",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "plannedQuantity": {
                    "type": "string",
                    "required": false
                },
                "plannedDate": {
                    "type": "string",
                    "required": false
                },
                "wastePercentage": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "integer",
                    "required": false,
                    "default": 1
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_materialplan_delete",
            "description": "Delete a material line from a shop order. This is permanent. Required: shopOrderNumber and lineNumber. Use manufacturing.orders.get to view material plan and line numbers.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_materialplan_delete",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "lineNumber": {
                    "type": "integer",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_materialplan_update",
            "description": "Update a material plan line of a shop order. Change quantity, required date, waste percentage or status. Required: shopOrderNumber and lineNumber. Use manufacturing.orders.get to view the material plan first. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_materialplan_update",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "lineNumber": {
                    "type": "integer",
                    "required": true
                },
                "plannedQuantity": {
                    "type": "string",
                    "required": false
                },
                "plannedDate": {
                    "type": "string",
                    "required": false
                },
                "wastePercentage": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_materials_bom",
            "description": "Get the bill of materials for an item. Shows which parts and quantities are needed.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_materials_bom",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_materials_by_product",
            "description": "Receive a by-product from a production order. Required: shopOrderNumber, itemCode and quantity.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_materials_by_product",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": true
                },
                "transactionDate": {
                    "type": "string",
                    "required": false
                },
                "storageLocationId": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_materials_issue",
            "description": "Issue material to a production order. Required: shopOrderNumber, itemCode and quantity.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_materials_issue",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": true
                },
                "transactionDate": {
                    "type": "string",
                    "required": false
                },
                "note": {
                    "type": "string",
                    "required": false
                },
                "storageLocationId": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_materials_issues_search",
            "description": "Search and filter material issues (materials consumed on production orders) by text, shop order number, item code, transaction date or created date. Automatically filters on the active warehouse.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_materials_issues_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "shopOrderNumber": {
                    "type": "string",
                    "required": false
                },
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "transactionDateFrom": {
                    "type": "string",
                    "required": false
                },
                "transactionDateTo": {
                    "type": "string",
                    "required": false
                },
                "createdDateFrom": {
                    "type": "string",
                    "required": false
                },
                "createdDateTo": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "transactionDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_materials_reversal",
            "description": "Reverse a previously issued material for a production order. Required: shopOrderNumber and itemCode.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_materials_reversal",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "transactionDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_materials_reversals_search",
            "description": "Search and filter material reversals (reversed material issues on production orders) by text, shop order number, item code, transaction date or created date. Automatically filters on the active warehouse.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_materials_reversals_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "shopOrderNumber": {
                    "type": "string",
                    "required": false
                },
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "transactionDateFrom": {
                    "type": "string",
                    "required": false
                },
                "transactionDateTo": {
                    "type": "string",
                    "required": false
                },
                "createdDateFrom": {
                    "type": "string",
                    "required": false
                },
                "createdDateTo": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "transactionDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_operations_create",
            "description": "Create a new operation. Operations define the steps in a production process and are used in routings. Required: code and description.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_operations_create",
            "inputs": {
                "code": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": true
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "searchcode": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_operations_delete",
            "description": "Delete an operation. Permanent action. Required: operationCode.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_operations_delete",
            "inputs": {
                "operationCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_operations_list",
            "description": "List all operations in the current administration. Shows code, description, status and whether suppliers are linked. Use this tool to see which operations are available for routings and production planning.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_operations_list",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false,
                    "default": "*"
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_operations_resource_create",
            "description": "Link a work center to an operation as a resource. Required: operationCode.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_operations_resource_create",
            "inputs": {
                "operationCode": {
                    "type": "string",
                    "required": true
                },
                "workcenterCode": {
                    "type": "string",
                    "required": false
                },
                "isPrimary": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "attendedPercentage": {
                    "type": "string",
                    "required": false
                },
                "efficiencyPercentage": {
                    "type": "string",
                    "required": false
                },
                "run": {
                    "type": "string",
                    "required": false
                },
                "runMethod": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "setup": {
                    "type": "string",
                    "required": false
                },
                "setupUnit": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "purchaseLeadDays": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_operations_resource_delete",
            "description": "Unlink a work center from an operation. Permanent. Required: operationCode and workcenterCode.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_operations_resource_delete",
            "inputs": {
                "operationCode": {
                    "type": "string",
                    "required": true
                },
                "workcenterCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_operations_resource_update",
            "description": "Update an operation resource. Required: operationCode and workcenterCode (for identification).",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_operations_resource_update",
            "inputs": {
                "operationCode": {
                    "type": "string",
                    "required": true
                },
                "workcenterCode": {
                    "type": "string",
                    "required": true
                },
                "isPrimary": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "attendedPercentage": {
                    "type": "string",
                    "required": false
                },
                "efficiencyPercentage": {
                    "type": "string",
                    "required": false
                },
                "run": {
                    "type": "string",
                    "required": false
                },
                "runMethod": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "setup": {
                    "type": "string",
                    "required": false
                },
                "setupUnit": {
                    "type": "string",
                    "required": false
                },
                "purchaseLeadDays": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_operations_resources_search",
            "description": "Search and filter operation resources (capacity and cost resources linked to operations and work centers) by text, operation, work center, type or primary flag.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_operations_resources_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "operation": {
                    "type": "string",
                    "required": false
                },
                "workcenter": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "string",
                    "required": false
                },
                "isPrimary": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "workcenter"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "asc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_operations_update",
            "description": "Update an operation. Required: operationCode (for identification). Change description, notes, search code or status. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_operations_update",
            "inputs": {
                "operationCode": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "code": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "searchcode": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_orders_create",
            "description": "Create a new shop order (production order) in Exact Online. Required: itemCode and plannedQuantity. The item must be a make-item. The active warehouse is automatically included. Search for the item with search_items first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_orders_create",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "plannedQuantity": {
                    "type": "number",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "plannedStartDate": {
                    "type": "string",
                    "required": false
                },
                "plannedDate": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "costcenter": {
                    "type": "string",
                    "required": false
                },
                "costunit": {
                    "type": "string",
                    "required": false
                },
                "productionLeadDays": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "project": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_orders_delete",
            "description": "Delete a shop order (production order) from Exact Online. This is a permanent action and cannot be undone. Required: shopOrderId (GUID). Use search_shop_orders or get_shop_order_details to find the GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_orders_delete",
            "inputs": {
                "shopOrderId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_orders_get",
            "description": "Get full details of a shop order (production order) including the bill of materials with required items and quantities. Use search_shop_orders to find the order number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_orders_get",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_orders_receipt",
            "description": "Report a quantity as finished for a production order. Required: shopOrderNumber and quantity.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_orders_receipt",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": true
                },
                "transactionDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_orders_receipts_search",
            "description": "Search and filter shop order receipts (received finished products from production orders) by text, shop order number, item code, transaction date or created date. Automatically filters on the active warehouse.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_orders_receipts_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "shopOrderNumber": {
                    "type": "string",
                    "required": false
                },
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "transactionDateFrom": {
                    "type": "string",
                    "required": false
                },
                "transactionDateTo": {
                    "type": "string",
                    "required": false
                },
                "createdDateFrom": {
                    "type": "string",
                    "required": false
                },
                "createdDateTo": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "transactionDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_orders_reversal",
            "description": "Reverse a previously created shop order receipt. Different from material reversal. Required: shopOrderNumber. The system automatically finds the most recent reversible receipt.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_orders_reversal",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "note": {
                    "type": "string",
                    "required": false
                },
                "transactionDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_orders_reversals_search",
            "description": "Search and filter shop order reversals (reversed finished-product receipts on production orders) by text, shop order number, item code, transaction date or created date. Automatically filters on the active warehouse.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_orders_reversals_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "shopOrderNumber": {
                    "type": "string",
                    "required": false
                },
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "transactionDateFrom": {
                    "type": "string",
                    "required": false
                },
                "transactionDateTo": {
                    "type": "string",
                    "required": false
                },
                "createdDateFrom": {
                    "type": "string",
                    "required": false
                },
                "createdDateTo": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "transactionDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_orders_routing",
            "description": "Get the routing steps for a production order. Shows all operations with work centers, planned hours and status.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_orders_routing",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_orders_search",
            "description": "Search and filter shop orders (production orders). Automatically filters on the active warehouse. Use get_shop_order_details for material plan and full details.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_orders_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "plannedDateFrom": {
                    "type": "string",
                    "required": false
                },
                "plannedDateTo": {
                    "type": "string",
                    "required": false
                },
                "startDateFrom": {
                    "type": "string",
                    "required": false
                },
                "startDateTo": {
                    "type": "string",
                    "required": false
                },
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "isReleased": {
                    "type": "string",
                    "required": false
                },
                "isInPlanning": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "plannedDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_orders_update",
            "description": "Update an existing shop order in Exact Online. Required: shopOrderId (GUID). Supports planning fields: dates, quantity, release (isReleased), on hold (isOnHold), in planning (isInPlanning), cost center, cost unit, lead days and project. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_orders_update",
            "inputs": {
                "shopOrderId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "plannedQuantity": {
                    "type": "string",
                    "required": false
                },
                "plannedStartDate": {
                    "type": "string",
                    "required": false
                },
                "plannedDate": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "isReleased": {
                    "type": "string",
                    "required": false
                },
                "isOnHold": {
                    "type": "string",
                    "required": false
                },
                "isInPlanning": {
                    "type": "string",
                    "required": false
                },
                "costcenter": {
                    "type": "string",
                    "required": false
                },
                "costunit": {
                    "type": "string",
                    "required": false
                },
                "productionLeadDays": {
                    "type": "string",
                    "required": false
                },
                "project": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_planning_overview",
            "description": "Get a planning overview of scheduled operations per work center. Shows all planned routing steps with shop order number, item, dates, hours and status per work center.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_planning_overview",
            "inputs": {
                "workcenterCode": {
                    "type": "string",
                    "required": false
                },
                "dateFrom": {
                    "type": "string",
                    "required": false
                },
                "dateTo": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 50
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_routing_add",
            "description": "Add a routing step to a shop order. Required: shopOrderNumber and operationCode. Optional: dates, hours, work center.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_routing_add",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "operationCode": {
                    "type": "string",
                    "required": true
                },
                "plannedStartDate": {
                    "type": "string",
                    "required": false
                },
                "plannedEndDate": {
                    "type": "string",
                    "required": false
                },
                "plannedRunHours": {
                    "type": "string",
                    "required": false
                },
                "plannedSetupHours": {
                    "type": "string",
                    "required": false
                },
                "workcenterCode": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_routing_delete",
            "description": "Delete a routing step from a shop order. This is permanent. Required: shopOrderNumber and lineNumber. Use manufacturing.orders.routing to view routing steps and line numbers.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_routing_delete",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "lineNumber": {
                    "type": "integer",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_routing_update",
            "description": "Update a routing step of a shop order. Reschedule operations: change dates, hours, work center and status. Required: shopOrderNumber and lineNumber. Use manufacturing.orders.routing to view available steps first. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_routing_update",
            "inputs": {
                "shopOrderNumber": {
                    "type": "string",
                    "required": true
                },
                "lineNumber": {
                    "type": "integer",
                    "required": true
                },
                "plannedStartDate": {
                    "type": "string",
                    "required": false
                },
                "plannedEndDate": {
                    "type": "string",
                    "required": false
                },
                "plannedRunHours": {
                    "type": "string",
                    "required": false
                },
                "plannedSetupHours": {
                    "type": "string",
                    "required": false
                },
                "workcenterCode": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_workcenters_capacity",
            "description": "Get capacity overview per work center: available hours, planned hours and utilization percentage for a given period. Use this to identify overloaded or available work centers.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_workcenters_capacity",
            "inputs": {
                "workcenterCode": {
                    "type": "string",
                    "required": false
                },
                "dateFrom": {
                    "type": "string",
                    "required": false
                },
                "dateTo": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_workcenters_create",
            "description": "Create a new work center. Required: code, description, status and type.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_workcenters_create",
            "inputs": {
                "code": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": true
                },
                "status": {
                    "type": "integer",
                    "required": true
                },
                "type": {
                    "type": "integer",
                    "required": true
                },
                "capacity": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "productionAreaCode": {
                    "type": "string",
                    "required": false
                },
                "costcenter": {
                    "type": "string",
                    "required": false
                },
                "costunit": {
                    "type": "string",
                    "required": false
                },
                "runLaborRate": {
                    "type": "string",
                    "required": false
                },
                "setupLaborRate": {
                    "type": "string",
                    "required": false
                },
                "machineBurdenRate": {
                    "type": "string",
                    "required": false
                },
                "generalBurdenRate": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "searchCode": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_workcenters_delete",
            "description": "Delete a work center. Permanent. Required: workcenterCode.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_workcenters_delete",
            "inputs": {
                "workcenterCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "manufacturing_workcenters_list",
            "description": "List all work centers (machines) in the current administration. Shows code, description, capacity, status, type, production area and hourly rates. Use this tool to see which work centers are available for production planning.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_workcenters_list",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false,
                    "default": "*"
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "manufacturing_workcenters_update",
            "description": "Update a work center. Required: workcenterCode. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "manufacturing_workcenters_update",
            "inputs": {
                "workcenterCode": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "code": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "type": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "capacity": {
                    "type": "integer",
                    "required": false,
                    "default": -1
                },
                "productionAreaCode": {
                    "type": "string",
                    "required": false
                },
                "costcenter": {
                    "type": "string",
                    "required": false
                },
                "costunit": {
                    "type": "string",
                    "required": false
                },
                "runLaborRate": {
                    "type": "string",
                    "required": false
                },
                "setupLaborRate": {
                    "type": "string",
                    "required": false
                },
                "machineBurdenRate": {
                    "type": "string",
                    "required": false
                },
                "generalBurdenRate": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "searchCode": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "projects_create",
            "description": "Create a new project in Exact Online. Required: code, description and type (1=Campaign, 2=FixedPrice, 3=TimeAndMaterial, 4=NonBillable, 5=Prepaid). Optional: accountCode, startDate, endDate, notes, budgetedAmount, budgetedCosts, manager (employee GUID), paymentCondition. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "projects_create",
            "inputs": {
                "code": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": true
                },
                "type": {
                    "type": "integer",
                    "required": true
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "startDate": {
                    "type": "string",
                    "required": false
                },
                "endDate": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "budgetedAmount": {
                    "type": "string",
                    "required": false
                },
                "budgetedCosts": {
                    "type": "string",
                    "required": false
                },
                "manager": {
                    "type": "string",
                    "required": false
                },
                "paymentCondition": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "projects_delete",
            "description": "Delete a project from Exact Online. This is a permanent action and cannot be undone. Required: projectId (GUID). All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "projects_delete",
            "inputs": {
                "projectId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "projects_get",
            "description": "Get full project details including WBS structure and resource planning. Use search_projects to find the project code first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "projects_get",
            "inputs": {
                "projectCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "projects_planning_create",
            "description": "Create a new project planning entry in Exact Online. Required: description, employeeId (employee GUID), endDate, hourTypeId (hour type GUID), startDate and status (1=Reserved, 2=Planned). Optional: projectId (GUID), hours, notes, overAllocate. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "projects_planning_create",
            "inputs": {
                "description": {
                    "type": "string",
                    "required": true
                },
                "employeeId": {
                    "type": "string",
                    "required": true
                },
                "endDate": {
                    "type": "string",
                    "required": true
                },
                "hourTypeId": {
                    "type": "string",
                    "required": true
                },
                "startDate": {
                    "type": "string",
                    "required": true
                },
                "status": {
                    "type": "integer",
                    "required": true
                },
                "projectId": {
                    "type": "string",
                    "required": false
                },
                "hours": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "overAllocate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "projects_planning_delete",
            "description": "Delete a project planning entry from Exact Online. This is a permanent action and cannot be undone. Required: planningId (GUID). All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "projects_planning_delete",
            "inputs": {
                "planningId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "projects_planning_update",
            "description": "Update an existing project planning entry in Exact Online. Required: planningId (GUID). All other fields are optional. Supports: description, employeeId, startDate, endDate, hours, hourTypeId, notes, status (1=Reserved, 2=Planned), overAllocate. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "projects_planning_update",
            "inputs": {
                "planningId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "employeeId": {
                    "type": "string",
                    "required": false
                },
                "startDate": {
                    "type": "string",
                    "required": false
                },
                "endDate": {
                    "type": "string",
                    "required": false
                },
                "hours": {
                    "type": "string",
                    "required": false
                },
                "hourTypeId": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "overAllocate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "projects_search",
            "description": "Search and filter projects. Set includeRealized=true to add realized hours and amount per project next to the budget, with the overrun versus the project price; overrunOnly=true returns only projects that exceed their price (ideal for loss-making fixed-price projects). Use get_project_details for full project details including WBS and planning.",
            "auth_required": true,
            "via": "mcp",
            "operation": "projects_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "string",
                    "required": false
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "manager": {
                    "type": "string",
                    "required": false
                },
                "startDateFrom": {
                    "type": "string",
                    "required": false
                },
                "startDateTo": {
                    "type": "string",
                    "required": false
                },
                "endDateFrom": {
                    "type": "string",
                    "required": false
                },
                "endDateTo": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "code"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "asc"
                },
                "includeRealized": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "overrunOnly": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "projects_timecost_delete",
            "description": "Delete a time transaction from Exact Online. This is a permanent action and cannot be undone. Required: transactionId (GUID). All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "projects_timecost_delete",
            "inputs": {
                "transactionId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "projects_timecost_search",
            "description": "Search and filter time and cost transactions on projects. This tool returns individual lines: for totals or overviews per employee, project or period always use projects_timecost_summary, which aggregates server-side.",
            "auth_required": true,
            "via": "mcp",
            "operation": "projects_timecost_search",
            "inputs": {
                "projectCode": {
                    "type": "string",
                    "required": false
                },
                "employeeName": {
                    "type": "string",
                    "required": false
                },
                "dateFrom": {
                    "type": "string",
                    "required": false
                },
                "dateTo": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "string",
                    "required": false
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "date"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "projects_timecost_summary",
            "description": "Aggregate time and cost registrations server-side, grouped by employee, project, month, week, relation or WBS. Use this for totals, overviews and reporting. Do NOT use projects_timecost_search for that: it returns individual lines, so the context fills up or pagination stops early and the total ends up incomplete.",
            "auth_required": true,
            "via": "mcp",
            "operation": "projects_timecost_summary",
            "inputs": {
                "groupBy": {
                    "type": "string",
                    "required": false,
                    "default": "employee"
                },
                "projectCode": {
                    "type": "string",
                    "required": false
                },
                "employeeName": {
                    "type": "string",
                    "required": false
                },
                "dateFrom": {
                    "type": "string",
                    "required": false
                },
                "dateTo": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "string",
                    "required": false
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "hours"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 100
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "projects_timecost_update",
            "description": "Update an existing time transaction in Exact Online. Required: transactionId (GUID). All other fields are optional - only provided fields will be updated. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "projects_timecost_update",
            "inputs": {
                "transactionId": {
                    "type": "string",
                    "required": true
                },
                "hours": {
                    "type": "string",
                    "required": false
                },
                "laborHours": {
                    "type": "string",
                    "required": false
                },
                "quantity": {
                    "type": "string",
                    "required": false
                },
                "percentageComplete": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "projects_update",
            "description": "Update an existing project in Exact Online. Required: projectId (GUID). All other fields are optional. Supports: description, code, startDate, endDate, notes, budgetedAmount, budgetedCosts, type, accountCode, paymentCondition, blockEntry, blockInvoicing. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "projects_update",
            "inputs": {
                "projectId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "code": {
                    "type": "string",
                    "required": false
                },
                "startDate": {
                    "type": "string",
                    "required": false
                },
                "endDate": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "budgetedAmount": {
                    "type": "string",
                    "required": false
                },
                "budgetedCosts": {
                    "type": "string",
                    "required": false
                },
                "type": {
                    "type": "string",
                    "required": false
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "paymentCondition": {
                    "type": "string",
                    "required": false
                },
                "blockEntry": {
                    "type": "string",
                    "required": false
                },
                "blockInvoicing": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchases_invoices_create",
            "description": "Create a new purchase invoice in Exact Online. Required: supplierCode, journal, type (8030=direct, 8033=normal) and at least 1 invoice line with itemCode and quantity. Search for the supplier with search_accounts and items with search_items first. Invoice lines are included inline.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchases_invoices_create",
            "inputs": {
                "supplierCode": {
                    "type": "string",
                    "required": true
                },
                "journal": {
                    "type": "string",
                    "required": true
                },
                "type": {
                    "type": "integer",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "paymentCondition": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchases_invoices_delete",
            "description": "Delete a purchase invoice from Exact Online. This is a permanent action and cannot be undone. Required: invoiceId (GUID). Use search_purchase_invoices to find the GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchases_invoices_delete",
            "inputs": {
                "invoiceId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "purchases_invoices_update",
            "description": "Update an existing purchase invoice in Exact Online. Required: invoiceId (GUID). All other fields are optional and only provided fields are updated. Supports description, remarks, payment condition, payment reference, your ref, due date and invoice date. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchases_invoices_update",
            "inputs": {
                "invoiceId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "paymentCondition": {
                    "type": "string",
                    "required": false
                },
                "paymentReference": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "dueDate": {
                    "type": "string",
                    "required": false
                },
                "invoiceDate": {
                    "type": "string",
                    "required": false
                },
                "journal": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchases_receipts_add_line",
            "description": "Add a receipt line to a goods receipt. Required: purchaseOrderLineId (GUID) and quantityReceived. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchases_receipts_add_line",
            "inputs": {
                "purchaseOrderLineId": {
                    "type": "string",
                    "required": true
                },
                "quantityReceived": {
                    "type": "number",
                    "required": true
                },
                "locationCode": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchasing_invoices_get",
            "description": "Get full details of a purchase invoice including all invoice lines. Use search_purchase_invoices to find the entry number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_invoices_get",
            "inputs": {
                "entryNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchasing_invoices_search",
            "description": "Search purchase invoices. The query parameter does case-insensitive substring matching on Description, PaymentReference, YourRef and Remarks - NOT directly on supplier name (look up the supplier first via accounts_search and use its GUID in supplierCode). supplierCode is always a 36-character GUID, not a textual code. Pass \"*\" to paginate without text filter (must have at least one other filter). On 0 results with a query, the response includes \"supplierSuggestions\" with phonetically/prefix-similar suppliers (including their GUID) - use those directly as supplierCode filter. Use get_purchase_invoice_details for full line details.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_invoices_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "invoiceDateFrom": {
                    "type": "string",
                    "required": false
                },
                "invoiceDateTo": {
                    "type": "string",
                    "required": false
                },
                "dueDateFrom": {
                    "type": "string",
                    "required": false
                },
                "dueDateTo": {
                    "type": "string",
                    "required": false
                },
                "supplierCode": {
                    "type": "string",
                    "required": false
                },
                "financialYear": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "financialPeriod": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "invoiceDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchasing_orders_add_line",
            "description": "Add an order line to an EXISTING purchase order in Exact Online. Required: orderNumber, itemCode and quantity. Optional: notes, description, unitPrice (purchase price), discount (0-100), vatCode, costCenter, costUnit, receiptDate (YYYY-MM-DD). Use search_purchase_orders and search_items to find codes. Do NOT use for new orders, use purchasing.orders.create instead.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_orders_add_line",
            "inputs": {
                "orderNumber": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": true
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "unitPrice": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "discount": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "receiptDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchasing_orders_create",
            "description": "Create a NEW purchase order in Exact Online. Required: supplierCode and lines (JSON array with at least itemCode and quantity per line). Optional: description, yourRef, receiptDate (YYYY-MM-DD), remarks, paymentCondition, orderDate (YYYY-MM-DD). Search supplier with search_accounts and items with search_items first. Do NOT use for existing orders, use purchasing.orders.update instead.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_orders_create",
            "inputs": {
                "supplierCode": {
                    "type": "string",
                    "required": true
                },
                "lines": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "receiptDate": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "paymentCondition": {
                    "type": "string",
                    "required": false
                },
                "orderDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchasing_orders_delete",
            "description": "Delete a purchase order from Exact Online. Required: orderId (GUID). Warning: this permanently deletes the purchase order. Use purchasing.orders.get to find the order GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_orders_delete",
            "inputs": {
                "orderId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "purchasing_orders_delete_line",
            "description": "Delete a purchase order line from Exact Online. Required: lineId (GUID). Warning: this permanently deletes the line. Use purchasing.orders.get to find the line GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_orders_delete_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "purchasing_orders_get",
            "description": "Get full details of a purchase order including all order lines with items, quantities ordered and received. Use search_purchase_orders to find the order number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_orders_get",
            "inputs": {
                "orderNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchasing_orders_search",
            "description": "Search and filter purchase orders. Automatically filters on the active warehouse. Use warehouseCode \"*\" to search all warehouses. Use get_purchase_order_details for full order line details.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_orders_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "orderDateFrom": {
                    "type": "string",
                    "required": false
                },
                "orderDateTo": {
                    "type": "string",
                    "required": false
                },
                "receiptDateFrom": {
                    "type": "string",
                    "required": false
                },
                "receiptDateTo": {
                    "type": "string",
                    "required": false
                },
                "receiptStatus": {
                    "type": "string",
                    "required": false
                },
                "invoiceStatus": {
                    "type": "string",
                    "required": false
                },
                "supplierCode": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "orderDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchasing_orders_update",
            "description": "Update an existing purchase order in Exact Online. Required: orderId (GUID). Optional: description, yourRef, remarks, receiptDate (YYYY-MM-DD), paymentCondition, orderDate (YYYY-MM-DD). Use purchasing.orders.get to find the order GUID first. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_orders_update",
            "inputs": {
                "orderId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "receiptDate": {
                    "type": "string",
                    "required": false
                },
                "paymentCondition": {
                    "type": "string",
                    "required": false
                },
                "orderDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchasing_orders_update_line",
            "description": "Update an existing purchase order line in Exact Online. Required: lineId (GUID). Optional: quantity, unitPrice, discount (percentage 0-100), description, notes, vatCode, costCenter, costUnit, receiptDate (YYYY-MM-DD). Use purchasing.orders.get to find the line GUID first. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_orders_update_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "unitPrice": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "discount": {
                    "type": "number",
                    "required": false,
                    "default": -1
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "receiptDate": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchasing_returns_add_line",
            "description": "Add a line to an existing purchase return. Required: returnId (GUID), goodsReceiptLineId (GUID) and returnQuantity.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_returns_add_line",
            "inputs": {
                "returnId": {
                    "type": "string",
                    "required": true
                },
                "goodsReceiptLineId": {
                    "type": "string",
                    "required": true
                },
                "returnQuantity": {
                    "type": "string",
                    "required": true
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "createCredit": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchasing_returns_create",
            "description": "Create a purchase return in Exact Online. Each line references the original goods receipt: provide goodsReceiptLineId and returnQuantity. Supplier and warehouse are derived from the receipt. Use logistics_receipts_get to find the goodsReceiptLineId.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_returns_create",
            "inputs": {
                "lines": {
                    "type": "string",
                    "required": true
                },
                "returnDate": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchasing_returns_get",
            "description": "Get full purchase return details including all lines. Use purchasing_returns_search to find the return number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_returns_get",
            "inputs": {
                "returnNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "purchasing_returns_search",
            "description": "Search and filter purchase returns. Use purchasing_returns_get for full lines. Reflects the last synchronization.",
            "auth_required": true,
            "via": "mcp",
            "operation": "purchasing_returns_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_channels_list",
            "description": "List all active sales channels of the current administration with code and description. Use the code as the salesChannel parameter in sales_orders_create.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_channels_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_deliveries_add_line",
            "description": "Add a delivery line to an existing goods delivery. Required: salesOrderLineId (GUID) and quantityDelivered. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_deliveries_add_line",
            "inputs": {
                "salesOrderLineId": {
                    "type": "string",
                    "required": true
                },
                "quantityDelivered": {
                    "type": "number",
                    "required": true
                },
                "entryId": {
                    "type": "string",
                    "required": false
                },
                "storageLocationCode": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "trackingNumber": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_deliveries_update_line",
            "description": "Update a delivery line. Only notes and tracking number can be changed. Required: deliveryLineId (GUID). All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_deliveries_update_line",
            "inputs": {
                "deliveryLineId": {
                    "type": "string",
                    "required": true
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "trackingNumber": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_invoices_add_line",
            "description": "Add a line to an existing sales invoice in Exact Online. Required: invoiceId (GUID), itemCode and glAccountCode. Optional: quantity, unitPrice, description, discount, notes, costCenter, costUnit, vatCode. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_invoices_add_line",
            "inputs": {
                "invoiceId": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "glAccountCode": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": false,
                    "default": 1
                },
                "unitPrice": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "discount": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_invoices_create",
            "description": "Create a new sales invoice in Exact Online. Required: accountCode (customer code), journal (journal code), itemCode (item code for first invoice line), quantity and unitPrice. The customer is looked up by accountCode, the item by itemCode.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_invoices_create",
            "inputs": {
                "accountCode": {
                    "type": "string",
                    "required": true
                },
                "journal": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": true
                },
                "unitPrice": {
                    "type": "number",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "paymentCondition": {
                    "type": "string",
                    "required": false
                },
                "paymentReference": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "lineDescription": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_invoices_delete",
            "description": "Delete a sales invoice from Exact Online. This is a permanent action and cannot be undone. Required: invoiceId (GUID). Use search_sales_invoices or get_sales_invoice_details to find the GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_invoices_delete",
            "inputs": {
                "invoiceId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "sales_invoices_delete_line",
            "description": "Delete a line from a sales invoice in Exact Online. This is a permanent action and cannot be undone. Required: lineId (GUID of the invoice line). All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_invoices_delete_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "sales_invoices_from_orders",
            "description": "Generate sales invoices from one or more sales orders via the InvoiceSalesOrders action. Required: salesOrderIds (JSON array of order GUIDs). Optional: createMode (0=per customer, 1=per order), invoiceMode (0=by delivered qty, 1=by ordered qty), journalCode (sales journal). This creates final invoices.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_invoices_from_orders",
            "inputs": {
                "salesOrderIds": {
                    "type": "string",
                    "required": true
                },
                "createMode": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "invoiceMode": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "journalCode": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_invoices_get",
            "description": "Get full details of a sales invoice including all invoice lines. Looks up the invoice number, and otherwise the order number (an open invoice has no invoice number yet in Exact; the screen then shows the order number) or the invoice GUID (invoiceId).",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_invoices_get",
            "inputs": {
                "invoiceNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_invoices_print",
            "description": "Mark a sales invoice as printed and generate its document in Exact Online via the PrintedSalesInvoices action. Required: invoiceId (GUID). Only for an open (not yet processed) invoice. Returns documentId: the Exact document holding the invoice PDF.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_invoices_print",
            "inputs": {
                "invoiceId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_invoices_search",
            "description": "Search sales invoices. The query parameter does case-insensitive substring matching on invoice number, order number, description, reference and remarks - NOT directly on customer name (look up the customer first via accounts_search and use its GUID in accountCode). accountCode is always a 36-character GUID, not a textual customer code. Pass \"*\" to paginate without text filter (must have at least one other filter). On 0 results with a query, the response includes \"customerSuggestions\" with phonetically/prefix-similar customers (including GUID) - use those as accountCode filter. Use get_sales_invoice_details for full line details.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_invoices_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "invoiceDateFrom": {
                    "type": "string",
                    "required": false
                },
                "invoiceDateTo": {
                    "type": "string",
                    "required": false
                },
                "dueDateFrom": {
                    "type": "string",
                    "required": false
                },
                "dueDateTo": {
                    "type": "string",
                    "required": false
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "invoiceDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_invoices_update",
            "description": "Update an existing sales invoice in Exact Online. Required: invoiceId (GUID). All other fields are optional. Supports: description, remarks, paymentCondition, paymentReference, yourRef and dueDate. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_invoices_update",
            "inputs": {
                "invoiceId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "paymentCondition": {
                    "type": "string",
                    "required": false
                },
                "paymentReference": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "dueDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_invoices_update_line",
            "description": "Update an existing sales invoice line in Exact Online. Required: lineId (GUID). All other fields are optional. Supports: quantity, unitPrice, description, discount, notes, costCenter, costUnit and vatCode. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_invoices_update_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "string",
                    "required": false
                },
                "unitPrice": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "discount": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_order_lines_search",
            "description": "Search sales order LINES by item, date or customer. Use this for questions like \"when and how much of item X needs to be delivered?\". Default shows only open lines. Use sales_orders_search for header-level order filtering, get_sales_order_details for full lines of one order.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_order_lines_search",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "query": {
                    "type": "string",
                    "required": false
                },
                "deliveryDateFrom": {
                    "type": "string",
                    "required": false
                },
                "deliveryDateTo": {
                    "type": "string",
                    "required": false
                },
                "customerCode": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "onlyOpen": {
                    "type": "boolean",
                    "required": false,
                    "default": true
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "deliveryDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "asc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_orders_add_line",
            "description": "Add an order line to an EXISTING sales order in Exact Online. Required: orderNumber, itemCode and quantity. Optional: description, notes, discount (0-100), netPrice, unitPrice, vatCode, costCenter, costUnit, deliveryDate (YYYY-MM-DD). Use search_sales_orders and search_items to find codes. Do NOT use for new orders, use sales.orders.create instead.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_orders_add_line",
            "inputs": {
                "orderNumber": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "discount": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "netPrice": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "unitPrice": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "deliveryDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_orders_complete",
            "description": "Mark a sales order as completed in Exact Online. Required: salesOrderId (GUID).",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_orders_complete",
            "inputs": {
                "salesOrderId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_orders_create",
            "description": "Create a NEW sales order in Exact Online. Required: customerCode and lines (JSON array with at least itemCode and quantity per line). Search customer with search_accounts and items with search_items first. Do NOT use for existing orders, use sales.orders.update instead. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_orders_create",
            "inputs": {
                "customerCode": {
                    "type": "string",
                    "required": true
                },
                "lines": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "shippingMethodCode": {
                    "type": "string",
                    "required": false
                },
                "deliveryDate": {
                    "type": "string",
                    "required": false
                },
                "deliverTo": {
                    "type": "string",
                    "required": false
                },
                "deliverToContactPerson": {
                    "type": "string",
                    "required": false
                },
                "deliveryAddress": {
                    "type": "string",
                    "required": false
                },
                "selectionCode": {
                    "type": "string",
                    "required": false
                },
                "document": {
                    "type": "string",
                    "required": false
                },
                "paymentCondition": {
                    "type": "string",
                    "required": false
                },
                "paymentReference": {
                    "type": "string",
                    "required": false
                },
                "orderDate": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "salesChannel": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_orders_delete",
            "description": "Delete a sales order from Exact Online. Required: orderId (GUID). Warning: this permanently deletes the sales order. Use sales.orders.get to find the order GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_orders_delete",
            "inputs": {
                "orderId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "sales_orders_delete_line",
            "description": "Delete a sales order line from Exact Online. Required: lineId (GUID). Warning: this permanently deletes the line. Use sales.orders.get to find the line GUID first. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_orders_delete_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "sales_orders_get",
            "description": "Get full details of a sales order including all order lines with items, quantities ordered/delivered, and delivery status per line. Use search_sales_orders to find the order number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_orders_get",
            "inputs": {
                "orderNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_orders_print",
            "description": "Mark a sales order as printed and generate its document in Exact Online via the PrintedSalesOrders action. Required: orderId (GUID).",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_orders_print",
            "inputs": {
                "orderId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_orders_search",
            "description": "Search and filter sales orders. Searches ALL warehouses by default; optionally provide a warehouseCode to restrict to one warehouse. Use get_sales_order_details for full order line details of a specific order.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_orders_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "orderDateFrom": {
                    "type": "string",
                    "required": false
                },
                "orderDateTo": {
                    "type": "string",
                    "required": false
                },
                "deliveryDateFrom": {
                    "type": "string",
                    "required": false
                },
                "deliveryDateTo": {
                    "type": "string",
                    "required": false
                },
                "deliveryStatus": {
                    "type": "string",
                    "required": false
                },
                "invoiceStatus": {
                    "type": "string",
                    "required": false
                },
                "customerCode": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "orderDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_orders_update",
            "description": "Update order properties of an existing sales order in Exact Online. Required: orderId (GUID). Optional: description, yourRef, remarks, shippingMethodCode (shipping method, code or description), deliveryDate, paymentCondition, paymentReference, orderDate (YYYY-MM-DD). Use sales.orders.get to find the GUID. Do NOT use for order lines, use sales.orders.update_line instead. All ID parameters are 36-character GUIDs. An empty or omitted value leaves a field unchanged; send a single space for description, yourRef or remarks to clear that field.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_orders_update",
            "inputs": {
                "orderId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "yourRef": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "shippingMethodCode": {
                    "type": "string",
                    "required": false
                },
                "deliveryDate": {
                    "type": "string",
                    "required": false
                },
                "paymentCondition": {
                    "type": "string",
                    "required": false
                },
                "paymentReference": {
                    "type": "string",
                    "required": false
                },
                "orderDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_orders_update_line",
            "description": "Update an existing sales order line in Exact Online. Required: lineId (GUID). Optional: quantity, unitPrice, netPrice, discount (percentage 0-100), description, notes, vatCode, costCenter, costUnit, deliveryDate (YYYY-MM-DD). Use sales.orders.get to find the line GUID first. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_orders_update_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "unitPrice": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "discount": {
                    "type": "number",
                    "required": false,
                    "default": -1
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "deliveryDate": {
                    "type": "string",
                    "required": false
                },
                "netPrice": {
                    "type": "number",
                    "required": false,
                    "default": 0
                },
                "vatCode": {
                    "type": "string",
                    "required": false
                },
                "costCenter": {
                    "type": "string",
                    "required": false
                },
                "costUnit": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_pricelists_list",
            "description": "List sales price lists with description and currency.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_pricelists_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_prices_create",
            "description": "Create a NEW sales price for an item. Use this tool when an item has no sales price yet, or to add a new price rule (customer-specific, price break, validity period). Search for the item first with items.search. Use sales.prices.update to modify an existing price.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_prices_create",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "price": {
                    "type": "string",
                    "required": true
                },
                "currency": {
                    "type": "string",
                    "required": false
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "quantity": {
                    "type": "string",
                    "required": false
                },
                "startDate": {
                    "type": "string",
                    "required": false
                },
                "endDate": {
                    "type": "string",
                    "required": false
                },
                "unit": {
                    "type": "string",
                    "required": false
                },
                "numberOfItemsPerUnit": {
                    "type": "string",
                    "required": false
                },
                "projectId": {
                    "type": "string",
                    "required": false
                },
                "employeeId": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_prices_delete",
            "description": "Delete a sales item price. Use sales.prices.search first to find the price and get the GUID. Warning: this action cannot be undone. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_prices_delete",
            "inputs": {
                "priceId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "sales_prices_search",
            "description": "Search and filter sales item prices by item, customer, currency or date range. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_prices_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "currency": {
                    "type": "string",
                    "required": false
                },
                "startDateFrom": {
                    "type": "string",
                    "required": false
                },
                "endDateTo": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "itemcode"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "asc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_prices_update",
            "description": "Use this tool to change/modify sales prices. Change, modify, adjust, increase or decrease the sales price of an item. Provide an item code (itemCode) and new price (price). The tool automatically finds the item and current sales price. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_prices_update",
            "inputs": {
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "price": {
                    "type": "string",
                    "required": false
                },
                "priceId": {
                    "type": "string",
                    "required": false
                },
                "startDate": {
                    "type": "string",
                    "required": false
                },
                "endDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_returns_add_line",
            "description": "Add a line to an existing planned sales return in Exact Online. Required: returnId (GUID), itemCode, quantity. Optional: notes. The item is looked up by itemCode. Use search_sales_returns and search_items to find the correct IDs. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_returns_add_line",
            "inputs": {
                "returnId": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": true
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_returns_create",
            "description": "Create a planned sales return for a sales order in Exact Online. Only delivered items can be returned. Required: orderNumber, lines (JSON array with itemCode and quantity).",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_returns_create",
            "inputs": {
                "orderNumber": {
                    "type": "string",
                    "required": true
                },
                "lines": {
                    "type": "string",
                    "required": true
                },
                "returnDate": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "processDirectly": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "sales_returns_delete",
            "description": "Delete a planned sales return from Exact Online. Required: returnId (GUID). The return will be permanently deleted. Use search_sales_returns to find the correct return. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_returns_delete",
            "inputs": {
                "returnId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "sales_returns_delete_line",
            "description": "Delete a planned sales return line. Permanent. Required: lineId (GUID). Use sales.returns.get to view lines. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_returns_delete_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "sales_returns_get",
            "description": "Get full details of a planned sales return including all return lines with items, planned and received quantities. Use search_sales_returns to find the return number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_returns_get",
            "inputs": {
                "returnNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_returns_search",
            "description": "Search and filter planned sales returns. Automatically filters on the active warehouse. Use get_sales_return_details for full details.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_returns_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "returnDateFrom": {
                    "type": "string",
                    "required": false
                },
                "returnDateTo": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "returnDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "sales_returns_update_line",
            "description": "Update a planned sales return line in Exact Online. Required: lineId (GUID of the line). Only provided fields will be updated. Use get_sales_return_details to find the correct line GUID. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "sales_returns_update_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "stock_batch_search",
            "description": "Search by (partial) batch number to see which items and locations belong to a batch with current stock. This is NOT the batch history - use items.batch.history for full transaction history.",
            "auth_required": true,
            "via": "mcp",
            "operation": "stock_batch_search",
            "inputs": {
                "batchNumber": {
                    "type": "string",
                    "required": true
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 50
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "stock_location_search",
            "description": "Search stock by (partial) storage location code. Shows which items are at a location. Use warehouse.locations.stock for detailed location stock with warehouse filters.",
            "auth_required": true,
            "via": "mcp",
            "operation": "stock_location_search",
            "inputs": {
                "locationCode": {
                    "type": "string",
                    "required": true
                },
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 50
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "stock_serial_search",
            "description": "Search by (partial) serial number to see which item and location belongs to a serial number. This is NOT the serial history - use items.serial.history for full transaction history.",
            "auth_required": true,
            "via": "mcp",
            "operation": "stock_serial_search",
            "inputs": {
                "serialNumber": {
                    "type": "string",
                    "required": true
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 50
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "subscriptions_add_line",
            "description": "Add a line to a subscription. Required: subscriptionId (GUID) and itemCode. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "subscriptions_add_line",
            "inputs": {
                "subscriptionId": {
                    "type": "string",
                    "required": true
                },
                "itemCode": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "string",
                    "required": false
                },
                "unitPrice": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "startDate": {
                    "type": "string",
                    "required": false
                },
                "endDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "subscriptions_create",
            "description": "Create a new subscription. Required: accountCode (customer), description and subscriptionType (GUID). All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "subscriptions_create",
            "inputs": {
                "accountCode": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": true
                },
                "subscriptionTypeId": {
                    "type": "string",
                    "required": true
                },
                "startDate": {
                    "type": "string",
                    "required": false
                },
                "endDate": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "currency": {
                    "type": "string",
                    "required": false
                },
                "paymentCondition": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "subscriptions_delete",
            "description": "Delete a subscription. Permanent. Required: subscriptionId (GUID). All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "subscriptions_delete",
            "inputs": {
                "subscriptionId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "subscriptions_delete_line",
            "description": "Delete a subscription line. Permanent. Required: lineId (GUID). All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "subscriptions_delete_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "subscriptions_get",
            "description": "Get full subscription details including all lines. Use search_subscriptions to find the number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "subscriptions_get",
            "inputs": {
                "number": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "subscriptions_linetypes_list",
            "description": "List subscription line types with number and description.",
            "auth_required": true,
            "via": "mcp",
            "operation": "subscriptions_linetypes_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "subscriptions_reasoncodes_list",
            "description": "List subscription reason codes with code and description.",
            "auth_required": true,
            "via": "mcp",
            "operation": "subscriptions_reasoncodes_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "subscriptions_search",
            "description": "Search and filter subscriptions/contracts.",
            "auth_required": true,
            "via": "mcp",
            "operation": "subscriptions_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "accountCode": {
                    "type": "string",
                    "required": false
                },
                "startDateFrom": {
                    "type": "string",
                    "required": false
                },
                "startDateTo": {
                    "type": "string",
                    "required": false
                },
                "endDateFrom": {
                    "type": "string",
                    "required": false
                },
                "endDateTo": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "number"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "subscriptions_types_list",
            "description": "List subscription types with code and description.",
            "auth_required": true,
            "via": "mcp",
            "operation": "subscriptions_types_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "subscriptions_update",
            "description": "Update a subscription. Required: subscriptionId (GUID). Change description, dates, notes, payment condition or cancellation date. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "subscriptions_update",
            "inputs": {
                "subscriptionId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "startDate": {
                    "type": "string",
                    "required": false
                },
                "endDate": {
                    "type": "string",
                    "required": false
                },
                "cancellationDate": {
                    "type": "string",
                    "required": false
                },
                "notes": {
                    "type": "string",
                    "required": false
                },
                "paymentCondition": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "subscriptions_update_line",
            "description": "Update a subscription line. Required: lineId (GUID). Change quantity, unit price, description or dates. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "subscriptions_update_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "string",
                    "required": false
                },
                "unitPrice": {
                    "type": "string",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "startDate": {
                    "type": "string",
                    "required": false
                },
                "endDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "warehouse_create",
            "description": "Create a new warehouse in Exact Online. Required: code and description. Optional: isMain, useStorageLocations, email. Always check list_warehouses first to see if the warehouse already exists.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_create",
            "inputs": {
                "code": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": true
                },
                "isMain": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "useStorageLocations": {
                    "type": "boolean",
                    "required": false,
                    "default": false
                },
                "email": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "warehouse_current",
            "description": "Get the current active warehouse. Returns warehouse code, description, whether it is the main warehouse, and whether storage locations are enabled. Use switch_warehouse to change to a different warehouse.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_current",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "warehouse_delete",
            "description": "Delete a warehouse from Exact Online. Required: warehouseCode. The warehouse will be permanently deleted. Use list_warehouses to confirm the correct warehouse code.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_delete",
            "inputs": {
                "warehouseCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "warehouse_list",
            "description": "List all warehouses with their storage locations in the current administration. Use switch_warehouse to change warehouse, use get_current_warehouse to see which warehouse is currently active.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "warehouse_locations_list",
            "description": "List all storage locations of a warehouse. Defaults to the active warehouse.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_locations_list",
            "inputs": {
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "warehouse_locations_stock",
            "description": "Get stock per storage location. Filter by warehouse code, storage location code, and/or item code. For warehouses without storage locations, warehouse-level stock is shown. Use this to see which items are at a specific location, or to find where an item is stored.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_locations_stock",
            "inputs": {
                "warehouseCode": {
                    "type": "string",
                    "required": false
                },
                "storageLocationCode": {
                    "type": "string",
                    "required": false
                },
                "itemCode": {
                    "type": "string",
                    "required": false
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 50
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "warehouse_shipping_list",
            "description": "List all active shipping methods in the current administration. Use the code as shippingMethodCode parameter in create_goods_delivery.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_shipping_list",
            "inputs": {
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "warehouse_switch",
            "description": "Switch to a different warehouse. Provide the warehouse code. Use list_warehouses to see available warehouses. After switching, all search tools automatically filter on the new warehouse.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_switch",
            "inputs": {
                "warehouseCode": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "warehouse_transfers_create",
            "description": "Create a warehouse transfer between two warehouses. Required: warehouseFrom, warehouseTo and lines (JSON array with itemCode and quantity). Use search_warehouses and search_items to find codes. Do NOT use for stock mutations, use manufacturing.materials.issue instead.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_transfers_create",
            "inputs": {
                "warehouseFrom": {
                    "type": "string",
                    "required": true
                },
                "warehouseTo": {
                    "type": "string",
                    "required": true
                },
                "lines": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "warehouse_transfers_delete",
            "description": "Delete a warehouse transfer from Exact Online. Required: transferId (GUID). The transfer will be permanently deleted. Use search_warehouse_transfers to find the correct transfer. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_transfers_delete",
            "inputs": {
                "transferId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "warehouse_transfers_delete_line",
            "description": "Delete a warehouse transfer line from Exact Online. Required: lineId (GUID of the line). The line will be permanently deleted. Use get_warehouse_transfer_details to find the correct line GUID. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_transfers_delete_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "warehouse_transfers_get",
            "description": "Get full details of a warehouse transfer including all lines with items, quantities and storage locations. Use search_warehouse_transfers to find the transfer number first.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_transfers_get",
            "inputs": {
                "transferNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "warehouse_transfers_process",
            "description": "Process (finalize) an existing warehouse transfer in Exact Online. This makes the transfer permanent. Required: transferNumber. Use search_warehouse_transfers to find the transfer number.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_transfers_process",
            "inputs": {
                "transferNumber": {
                    "type": "string",
                    "required": true
                },
                "context": {
                    "type": "string",
                    "required": false
                },
                "requestContext": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "destructive",
            "requires_human_confirmation": true
        },
        {
            "id": "warehouse_transfers_search",
            "description": "Search and filter warehouse transfers. Use get_warehouse_transfer_details for full line details with items and storage locations.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_transfers_search",
            "inputs": {
                "query": {
                    "type": "string",
                    "required": false
                },
                "status": {
                    "type": "string",
                    "required": false
                },
                "transferDateFrom": {
                    "type": "string",
                    "required": false
                },
                "transferDateTo": {
                    "type": "string",
                    "required": false
                },
                "warehouseFromCode": {
                    "type": "string",
                    "required": false
                },
                "warehouseToCode": {
                    "type": "string",
                    "required": false
                },
                "sortBy": {
                    "type": "string",
                    "required": false,
                    "default": "transferDate"
                },
                "sortDirection": {
                    "type": "string",
                    "required": false,
                    "default": "desc"
                },
                "limit": {
                    "type": "integer",
                    "required": false,
                    "default": 20
                },
                "offset": {
                    "type": "integer",
                    "required": false,
                    "default": 0
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "warehouse_transfers_update",
            "description": "Update an existing warehouse transfer in Exact Online. Required: transferId (GUID). Only provided fields will be updated. Use search_warehouse_transfers to find the correct transfer. All ID parameters are 36-character GUIDs. An empty value leaves a field unchanged; send a single space for a text field to clear it.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_transfers_update",
            "inputs": {
                "transferId": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "remarks": {
                    "type": "string",
                    "required": false
                },
                "plannedDeliveryDate": {
                    "type": "string",
                    "required": false
                },
                "plannedReceiptDate": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "warehouse_transfers_update_line",
            "description": "Update a warehouse transfer line in Exact Online. Required: lineId (GUID of the line). Only provided fields will be updated. Use get_warehouse_transfer_details to find the correct line GUID. All ID parameters are 36-character GUIDs.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_transfers_update_line",
            "inputs": {
                "lineId": {
                    "type": "string",
                    "required": true
                },
                "quantity": {
                    "type": "number",
                    "required": false
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "storageLocationFromId": {
                    "type": "string",
                    "required": false
                },
                "storageLocationToId": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        },
        {
            "id": "warehouse_update",
            "description": "Update an existing warehouse in Exact Online. Required: warehouseCode (to find the warehouse). Only provided fields will be updated. Use list_warehouses to find the correct warehouse code.",
            "auth_required": true,
            "via": "mcp",
            "operation": "warehouse_update",
            "inputs": {
                "warehouseCode": {
                    "type": "string",
                    "required": true
                },
                "description": {
                    "type": "string",
                    "required": false
                },
                "isMain": {
                    "type": "boolean",
                    "required": false
                },
                "useStorageLocations": {
                    "type": "boolean",
                    "required": false
                },
                "email": {
                    "type": "string",
                    "required": false
                },
                "context": {
                    "type": "string",
                    "required": false
                }
            },
            "outputs": {
                "result": {
                    "type": "object",
                    "description": "JSON result of the MCP tool call"
                }
            },
            "sensitivity": "standard"
        }
    ],
    "agent_status": {
        "operational": true
    }
}
