xlsx-for-ai v3.0.2
Hotfix closing two SPM P0s that broke 3.0.0's .mcpb install path in Claude Desktop.
What was broken in 3.0.0
.mcpbattach hung under Claude Desktop's built-in Node 24.15.0.mcp.jsblockedinitializeon the first-run registration POST and the dynamic tool-catalog GET; under Electron's bundled Node 24 the dial would stall (IPv6 / Happy-Eyeballs), the client's 60s timeout fired, and the MCP attach died beforetools/listwas ever called. Same bundle worked under system Node 25.6.1 because the dial resolved instantly.tools/listshipped withoutinputSchema/description. The hosted/api/v1/tools/listreturns minimal stubs ({name, category, maturity_state, endpoint}only), andmergeToolswas letting those stubs replace the bundled-catalog full schemas. Claude Desktop received a tools/list with noinputSchemaand silently dropped the entire array — tool permissions panel empty, notools/callever fires, even after reinstall / connector toggle / restart.
How 3.0.2 fixes it
initializeno longer blocks on the network. Transport connects first; the bundled 50-tool catalog serves as the floor. Background-upgrade with bounded timeouts (10s registration, 8s catalog).notifications/tools/list_changedfires when the live catalog lands.capabilities.tools.listChanged = true.mergeToolsis now a field-level merge. Remote wins on every field it provides; baked-in fills the gaps. The bundled-catalogdescription+inputSchemasurvive when the server returns a minimal stub.sanitizeForMcpfloor inlib/annotations.js. Safety net for any tool that still reaches the transport withoutinputSchema/description.- Real per-tool
inputSchemafor all 50 tools.xlsx_read_handleandxlsx_session_set_validationsmoved into the bundledTOOLSarray with fullproperties+requiredmirroring server-side route validation. Dispatch handlers added. Zero tools fall through to the sanitize floor.
Other defenses: EPIPE on stdout exits cleanly (0) instead of crashing on Socket 'error'; stderr EPIPE silenced; non-EPIPE rethrown so transport failures still surface. withTimeout helper attaches a no-op catch so late rejections from the original promise don't crash Node minutes after startup.
Regression tests pin the invariants under XLSX_FOR_AI_API = TCP black hole and against a fake server that emits stub-shape tools. 54/54 tests pass.
Install
One-click (recommended):
Drag this .mcpb into Claude Desktop → Settings → Extensions.
Config (self-heals on restart):
{
"mcpServers": {
"xlsx-for-ai": {
"command": "npx",
"args": ["-y", "-p", "xlsx-for-ai@latest", "xlsx-for-ai-mcp"]
}
}
}Full changelog: https://github.com/senoff/xlsx-for-ai/blob/main/CHANGELOG.md