[{"slug":"ZV-2026-0282","server_name":"mcp.expensebot.ai","severity":"breaking","title":"mcp.expensebot.ai: Type of csvContent on add_income_from_csv changed string → object.","summary":"[risky] Optional field csvText was added to add_income_from_csv; may shift model behaviour. [breaking] Type of csvContent on add_income_from_csv changed string → object. [risky] Optional field photoBase64 was added to add_income_from_file; may shift model behaviour. [breaking] Type of photo on add_income_from_file changed string → object. [safe] Description of get_accounting_integration_status changed (8% word delta). [risky] Description of get_accounting_push_status changed (45% word delta). [safe] Description of get_client_invoice changed (13% word delta). [safe] Description of submit_receipt changed (14% word delta). [risky] Optional field photoBase64 was added to submit_receipt; may shift model behaviour. [breaking] Type of photo on submit_receipt changed string → object.","changes":[{"kind":"input_property_added","path":"inputSchema.properties.csvText","tool":"add_income_from_csv","after":{"type":"string","description":"Legacy fallback for MCP clients that send raw CSV/TSV/text content inline. ChatGPT should use csvContent."},"detail":"Optional field `csvText` was added to `add_income_from_csv`; may shift model behaviour.","severity":"risky"},{"kind":"input_type_changed","path":"inputSchema.properties.csvContent","tool":"add_income_from_csv","after":"object","before":"string","detail":"Type of `csvContent` on `add_income_from_csv` changed string → object.","severity":"breaking"},{"kind":"input_property_added","path":"inputSchema.properties.photoBase64","tool":"add_income_from_file","after":{"type":"string","description":"Legacy fallback for MCP clients that send complete image/PDF bytes as base64. ChatGPT should use photo."},"detail":"Optional field `photoBase64` was added to `add_income_from_file`; may shift model behaviour.","severity":"risky"},{"kind":"input_type_changed","path":"inputSchema.properties.photo","tool":"add_income_from_file","after":"object","before":"string","detail":"Type of `photo` on `add_income_from_file` changed string → object.","severity":"breaking"},{"kind":"description_changed","tool":"get_accounting_integration_status","after":"Check whether an accounting destination is connected and ready for owner-authorized agent posting. Returns the selected organization/account, authorization state, rollout state, and the single setup link for connecting or reconnecting the destination. When an existing ExpenseBot report is available, pass reportId so the link opens that exact report's provider setup control instead of the general Reports setup. This is read-only and never posts accounting data. Zoho Books is the first supported provider; the contract is shared for future providers.","before":"Check whether an accounting destination is connected and ready for owner-authorized agent posting. Returns the selected organization/account, authorization state, rollout state, and a setup or reconnect link. When an existing ExpenseBot report is available, pass reportId so the link opens that exact report's provider setup control instead of the general Reports setup. This is read-only and never posts accounting data. Zoho Books is the first supported provider; the contract is shared for future providers.","detail":"Description of `get_accounting_integration_status` changed (8% word delta).","severity":"safe","descriptionDelta":0.08064516129032262},{"kind":"description_changed","tool":"get_accounting_push_status","after":"Read the authoritative posting and reconciliation status for one ExpenseBot report at an accounting destination. Use after a timeout or uncertain response before considering any retry. Returns status, submission time, posting mode, posted receipt count, any public error, and whether reconciliation is required. Never re-post a completed report or a report marked needs_reconciliation; show that state to the owner instead. This tool is read-only and owner-account only.","before":"Read the terminal posting and reconciliation status for an ExpenseBot report at an accounting destination. Use after a timeout or uncertain response before considering any retry. This tool is read-only and owner-account only.","detail":"Description of `get_accounting_push_status` changed (45% word delta).","severity":"risky","descriptionDelta":0.4545454545454546},{"kind":"description_changed","tool":"get_client_invoice","after":"Get the full financial and delivery summary for one issued client invoice, including subtotal, markup, tax, advance applied, balance due, dates, status, source report, and private Google Doc/PDF/DOCX links when available. Provide invoiceId or invoiceNumber — one is required; invoiceNumber is accepted only when it is unique. Read-only.","before":"Get the full financial and delivery summary for one issued client invoice, including subtotal, markup, tax, advance applied, balance due, dates, status, source report, and private Google Doc/PDF/DOCX links when available. Supply invoiceId when possible; invoiceNumber is accepted when unique. Read-only.","detail":"Description of `get_client_invoice` changed (13% word delta).","severity":"safe","descriptionDelta":0.1333333333333333},{"kind":"description_changed","tool":"submit_receipt","after":"Submit a photo or PDF of a receipt for processing. Covers requests phrased as 'log this', 'log this receipt', 'save this receipt', 'expense this', or 'add this to my expenses', including when the user simply shares a photo of a receipt or invoice. The receipt image is validated, uploaded to cloud storage, and processed by AI to extract vendor, amount, date, tax, and category. The expense appears in the user's spreadsheet in about 1-3 minutes, and longer for PDFs or large batches. Handles images and PDFs, mixed together in one batch.\n\nTO SEND FILES (preferred, and required for PDFs): call this tool with filesToUpload listing every file the user gave you. It returns one signed upload URL per file. Upload them ONE AT A TIME with an HTTP PUT, telling the user which file you just finished and how many remain, then call this tool ONCE with uploadRefs for all of them — that processes the whole set as a single batch, like the ExpenseBot web app. Do not call this tool once per file.\n\nUse the photo parameter for one image or PDF attached in ChatGPT. MCP clients that cannot supply file references may use photoBase64 for one small image; use the upload flow for large files or batches.\n\nOptional note and tag values use the same receipt metadata path as ExpenseBot's camera, file uploader, and forwarded-email intake. The note is stored in the Notes column (L); the tag is stored in the Tag column (K). Batch defaults apply to every file, and each uploadRefs item may override either value for that file.","before":"Submit a photo or PDF of a receipt for processing. Covers requests phrased as 'log this', 'log this receipt', 'save this receipt', 'expense this', or 'add this to my expenses', including when the user simply shares a photo of a receipt or invoice. The receipt image is validated, uploaded to cloud storage, and processed by AI to extract vendor, amount, date, tax, and category. The expense appears in the user's spreadsheet in about 1-3 minutes, and longer for PDFs or large batches. Handles images and PDFs, mixed together in one batch.\n\nTO SEND FILES (preferred, and required for PDFs): call this tool with filesToUpload listing every file the user gave you. It returns one signed upload URL per file. Upload them ONE AT A TIME with an HTTP PUT, telling the user which file you just finished and how many remain, then call this tool ONCE with uploadRefs for all of them — that processes the whole set as a single batch, like the ExpenseBot web app. Do not call this tool once per file.\n\nOnly use the photo parameter for a single small image whose base64 you can reliably include in full — large base64 payloads are frequently dropped in transit, which silently loses the receipt.\n\nOptional note and tag values use the same receipt metadata path as ExpenseBot's camera, file uploader, and forwarded-email intake. The note is stored in the Notes column (L); the tag is stored in the Tag column (K). Batch defaults apply to every file, and each uploadRefs item may override either value for that file.","detail":"Description of `submit_receipt` changed (14% word delta).","severity":"safe","descriptionDelta":0.14375000000000004},{"kind":"input_property_added","path":"inputSchema.properties.photoBase64","tool":"submit_receipt","after":{"type":"string","description":"Legacy fallback for MCP clients that send one small image as complete base64 data. ChatGPT should use photo or uploadRefs instead."},"detail":"Optional field `photoBase64` was added to `submit_receipt`; may shift model behaviour.","severity":"risky"},{"kind":"input_type_changed","path":"inputSchema.properties.photo","tool":"submit_receipt","after":"object","before":"string","detail":"Type of `photo` on `submit_receipt` changed string → object.","severity":"breaking"}],"published_at":"2026-08-22T05:26:19.054Z"},{"slug":"ZV-2026-0279","server_name":"mcp.expensebot.ai","severity":"breaking","title":"mcp.expensebot.ai: Field taxPct was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored.","summary":"[breaking] Field taxPct was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field reportId was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field taxLabel was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field issueDate was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field markupPct was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field clientName was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field receiptIds was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field billToEmail was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field paymentTerms was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field clientAddress was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field invoiceNumber was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field advanceApplied was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field customLineItems was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field mentionSupportingReceipts was removed from create_client_invoice input; consumers still sending it may be rejected or silently ignored. [breaking] Field preparationId on create_clie","changes":[{"kind":"input_property_removed","path":"inputSchema.properties.taxPct","tool":"create_client_invoice","before":{"type":"number","maximum":100,"minimum":0},"detail":"Field `taxPct` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.reportId","tool":"create_client_invoice","before":{"type":"string","description":"In in-app chat, the saved report ID to prepare and confirm."},"detail":"Field `reportId` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.taxLabel","tool":"create_client_invoice","before":{"type":"string"},"detail":"Field `taxLabel` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.issueDate","tool":"create_client_invoice","before":{"type":"string","description":"In in-app chat, a calendar-valid YYYY-MM-DD invoice date."},"detail":"Field `issueDate` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.markupPct","tool":"create_client_invoice","before":{"type":"number","maximum":100,"minimum":0},"detail":"Field `markupPct` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.clientName","tool":"create_client_invoice","before":{"type":"string","description":"In in-app chat, the full client name shown on the invoice."},"detail":"Field `clientName` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.receiptIds","tool":"create_client_invoice","before":{"type":"array","items":{"type":"string"}},"detail":"Field `receiptIds` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.billToEmail","tool":"create_client_invoice","before":{"type":"string"},"detail":"Field `billToEmail` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.paymentTerms","tool":"create_client_invoice","before":{"enum":["due_on_receipt","net7","net14","net15","net30","net45","net60"],"type":"string"},"detail":"Field `paymentTerms` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.clientAddress","tool":"create_client_invoice","before":{"type":"string"},"detail":"Field `clientAddress` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.invoiceNumber","tool":"create_client_invoice","before":{"type":"string"},"detail":"Field `invoiceNumber` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.advanceApplied","tool":"create_client_invoice","before":{"type":"number","minimum":0},"detail":"Field `advanceApplied` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.customLineItems","tool":"create_client_invoice","before":{"type":"array","items":{"type":"object","required":["description","amount"],"properties":{"amount":{"type":"number","exclusiveMinimum":0},"description":{"type":"string"}}},"maxItems":25},"detail":"Field `customLineItems` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_property_removed","path":"inputSchema.properties.mentionSupportingReceipts","tool":"create_client_invoice","before":{"type":"boolean"},"detail":"Field `mentionSupportingReceipts` was removed from `create_client_invoice` input; consumers still sending it may be rejected or silently ignored.","severity":"breaking"},{"kind":"input_required_added","path":"inputSchema.required.preparationId","tool":"create_client_invoice","detail":"Field `preparationId` on `create_client_invoice` is now required.","severity":"breaking"}],"published_at":"2026-08-22T04:23:18.826Z"}]