Belt-and-suspenders on the base64-misread class — 3.0.14 description hardening cut the rate, this closes the failure shape structurally.
Defensive input-contract validation in dispatchTool runs before any server round-trip. If file_path is missing or a base64-shaped blob lands in a path field, the model gets an actionable error code (BASE64_MISREAD / MISSING_REQUIRED_ARG) instead of a base64-bash-hang — the response text names the offending field, restates the path-string-not-bytes contract, and tells the model to retry.
Drill-down footer on triage tools. When a response mentions follow-on xlsx_* tools (e.g. xlsx_doctor references xlsx_external_links / xlsx_workbook_views), the client appends concrete invocations with the caller's file_path pre-filled — Bob's feedback from yesterday. Doubles as a correct-usage exemplar the agent imitates.
Install
One-click: drag this .mcpb into Claude Desktop → Settings → Extensions.
Full changelog: https://github.com/senoff/xlsx-for-ai/blob/main/CHANGELOG.md