MCP server native module won't load
Some MCP servers depend on compiled Node.js add-ons (.node files). In our tests, two listed servers exited at start because Node could not find their SQLite binding: we install npm packages with install scripts off. A third loaded a mismatched ONNX Runtime library inside a tool call.
If the stack trace ends in a list of paths to a .node file, the add-on was never built or downloaded. Run npm rebuild for that package with the same Node.js version you run the server with. If the error says a shared library version was "not found", look for two copies of that library with npm ls.
Last tested 2026-11-11
How we test: methodology. Context cost: lowest context cost MCP servers. Not tested by us: security, output quality, and behaviour with real credentials.
Symptom
The server exits at start with a Node.js stack trace whose last lines are a list of paths ending in .node, followed by the Node version. Or the server starts, but one tool returns an error naming a shared library (.so) and a version that was "not found".
The exact errors we saw
| Server | What it printed (verbatim) | Where we saw it | Tested |
|---|---|---|---|
SAP CAP MCP@cap-js/mcp-server 0.1.0 | Failed to provision embedding model 'BAAI/bge-small-en-v1.5' during startup | search_docs tool result (isError false) | 2026-11-11 |
SAP CAP MCP@cap-js/mcp-server 0.1.0 | version `VERS_1.31.1' not found | same tool result, shared-library error | 2026-11-11 |
Memory Keepermcp-memory-keeper 0.14.1 | node_modules/better-sqlite3/lib/binding/node-v137-linux-x64/better_sqlite3.node | last lines of stderr: the paths Node searched for the binding (exited code 1) | 2026-11-10 |
SQLite (npx)mcp-server-sqlite-npx 0.8.0 | node_modules/sqlite3/lib/binding/node-v137-linux-x64/node_sqlite3.node | last lines of stderr, installed with npm --ignore-scripts (exited code 1) | 2026-11-03 |
Our stored stderr keeps only the end of each server's output, which here is the list of paths Node searched. We quote one path from each list, with the sandbox folder left out.
Cause
Binding never built. Packages such as sqlite3 and better-sqlite3 download or compile their binding in an install script. We install with npm --ignore-scripts (npm scripts), so that step never ran. Node then searched the paths it prints and gave up. The path names the Node ABI it looked for (node-v137); our test ran Node.js v24.22.1. SQLite (npx) started again when we reinstalled the same version with scripts on (2026-11-03). We have not rerun Memory Keeper with scripts on.
Two copies of a library. The SAP CAP MCP error names two onnxruntime-node folders: one nested under @huggingface/transformers/node_modules and one at the top level. The binding from one copy needed symbol version VERS_1.31.1, and the library that was loaded did not have it. The server's other tool, search_model, worked in the same test.
wigolo 0.3.1 (not listed on TestedMCP) stopped the same way in our 2026-11-11 run. Our test note records a missing better-sqlite3 native binding with install scripts off. Its stored stderr kept only the end of the stack trace, so we have no line from it to quote.
Fix
- Let the add-on build. If you or your tools install with
--ignore-scripts, runnpm rebuild <package>in the install folder so its install step runs (npm rebuild). This runs code from the package, so read what the script does first. not tested by us, except that SQLite (npx) started with scripts on. - Keep one Node.js version. Run the server with the Node.js major version you installed it with, and rebuild or reinstall after a Node upgrade. not tested by us
- Version "not found" in a shared library: run
npm ls onnxruntime-node(or the library named in your error) to find duplicate copies (npm ls). Then pin a single version withoverridesin package.json (npm overrides). not tested by us - SAP CAP's own hint. Its message suggests
npx @cap-js/ai install-model BAAI/bge-small-en-v1.5to download the model ahead of time. We have not run it, and it may not fix the library mismatch. not tested by us
Affected listings
- SAP CAP MCP (
@cap-js/mcp-server, tested 2026-11-11, status working) - Memory Keeper (
mcp-memory-keeper, tested 2026-11-10, status failed) - SQLite (npx) (
mcp-server-sqlite-npx, tested 2026-11-03, status failed)
More troubleshooting: all troubleshooting pages · MCP error -32000: Connection closed · MCP servers that need an API key or sign-in. Quotes are verbatim from our own test logs (colour codes removed; a trailing … marks a shortened line). We have not run these servers inside Claude Code, Claude Desktop or Cursor.
FAQ
Why can't Node find the .node file for an MCP server?
Usually the add-on was never built or downloaded. Packages like sqlite3 and better-sqlite3 do that in an install script, and installs with install scripts off skip it. Node then lists every path it searched and exits.
Does npm rebuild fix it?
It runs the package's install step again, which builds or downloads the binding. In our tests, SQLite (npx) started again when we reinstalled the same version with scripts on. We have not tested npm rebuild on the other servers here.
What does version `VERS_1.31.1' not found mean?
A compiled binding needed a symbol version that the shared library loaded at that moment did not have. In SAP CAP MCP's case the error named two copies of onnxruntime-node in one install, a nested one and a top-level one.