Environment:
Bolt AI (macOS, latest version) MCP Server: @xeroapi/xero-mcp-server@latest (via npx) Auth: Bearer token with full scopes Node: v22.x via NVM Summary: When Bolt passes parameters to an MCP tool, any numeric value nested inside an array or object is incorrectly serialised as a boolean (true/false) rather than a number. This breaks all MCP tools that accept arrays containing numeric fields.
Affected tools (confirmed):
create-invoice — fails on lineItems[0].quantity and lineItems[0].unitAmount list-invoices — fails on page parameter list-bank-transactions — fails on page list-quotes — fails on page list-credit-notes — fails on page Working tools (no nested numeric params):
list-organisation-details list-accounts list-contacts list-trial-balance list-tax-rates create-contact Error returned:
JSON { "code": -32602, "message": "Input validation error: Invalid arguments for tool create-invoice", "details": [ { "code": "invalid_type", "expected": "number", "received": "boolean", "path": ["lineItems", 0, "quantity"], "message": "Expected number, received boolean" } ] } Reproduction steps:
Connect Xero MCP server via bearer token Ask the assistant to create an invoice with a line item (quantity: 1, unitAmount: 4495) Observe the MCP error — quantity is received as boolean instead of number Expected behaviour: Numeric values inside nested arrays/objects should be serialised as numbers in the JSON payload sent to the MCP server.
Likely cause: A type coercion issue in Bolt's parameter serialisation layer. The value 1 appears to be converted to true during JSON encoding when it sits inside an array. Top-level numeric parameters (not nested) work fine, suggesting the bug is specific to how Bolt handles nested structures before passing them to the MCP transport.
