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.

Short answer

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

ServerWhat it printed (verbatim)Where we saw itTested
SAP CAP MCP
@cap-js/mcp-server 0.1.0
Failed to provision embedding model 'BAAI/bge-small-en-v1.5' during startupsearch_docs tool result (isError false)2026-11-11
SAP CAP MCP
@cap-js/mcp-server 0.1.0
version `VERS_1.31.1' not foundsame tool result, shared-library error2026-11-11
Memory Keeper
mcp-memory-keeper 0.14.1
node_modules/better-sqlite3/lib/binding/node-v137-linux-x64/better_sqlite3.nodelast 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.nodelast 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

  1. Let the add-on build. If you or your tools install with --ignore-scripts, run npm 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.
  2. 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
  3. 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 with overrides in package.json (npm overrides). not tested by us
  4. SAP CAP's own hint. Its message suggests npx @cap-js/ai install-model BAAI/bge-small-en-v1.5 to 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

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.