Skip to content

[Feat]: Add support for Android / ARM builds #145

Description

@Jelloeater

Problem or motivation

So I tried to install vestige-mcp-server on an Android (Termux) device (Pixel 5, aarch64) and the install fails with EBADPLATFORM. The package currently restricts supported OS to darwin, linux, win32 which prevents Termux/Android users (process.platform === "android") from installing even though the CPU (arm64) is allowed.

Tried to install, no luck, see logs below <3
npm install -g vestige-mcp-server@latest

TBH if this is too much work, or it might run crappy, you can scrap the idea 👍🏻

u0_a499@localhost
-----------------
OS: Android 14 aarch64
Host: google Pixel 5
Kernel: 4.19.278-g7b0944645172-ab10812814
Uptime: 22 days, 12 hours, 7 mins
Packages: 239 (dpkg), 1 (pkg)
Shell: fish 4.7.1
CPU: Qualcomm LITO (8) @ 1.804GHz
Memory: 6158MiB / 7461MiB
Processing triggers for mandoc (1.14.6-6) ...
u0_a499@localhost ~/s/s/s/Diary> npm install -g vestige-mcp-server@latest
npm error code EBADPLATFORM
npm error notsup Unsupported platform for vestige-mcp-server@2.2.1: wanted {"os":"darwin,linux,win32","cpu":"x64,arm64"} (current: {"os":"android","cpu":"arm64"})
npm error notsup Valid os:   darwin,linux,win32
npm error notsup Actual os:  android
npm error notsup Valid cpu:  x64,arm64
npm error notsup Actual cpu: arm64
npm notice
npm notice New major version of npm available! 11.18.0 -> 12.0.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.1
npm notice To update run: npm install -g npm@12.0.1
npm notice
npm error A complete log of this run can be found in: /data/data/com.termux/files/home/.npm/_logs/2026-07-15T15_22_58_123Z-debug-0.log
0 verbose cli /data/data/com.termux/files/usr/bin/node /data/data/com.termux/files/usr/bin/npm
1 info using npm@11.18.0
2 info using node@v26.4.0
3 silly config load:file:/data/data/com.termux/files/usr/lib/node_modules/npm/npmrc
4 silly config load:file:/data/data/com.termux/files/home/.npmrc
5 silly config load:file:/data/data/com.termux/files/usr/etc/npmrc
6 verbose title npm install vestige-mcp-server@latest
7 verbose argv "install" "--global" "vestige-mcp-server@latest"
8 verbose logfile logs-max:10 dir:/data/data/com.termux/files/home/.npm/_logs/2026-07-15T15_22_58_123Z-
9 verbose logfile /data/data/com.termux/files/home/.npm/_logs/2026-07-15T15_22_58_123Z-debug-0.log
10 silly packumentCache heap:1174405120 maxSize:293601280 maxEntrySize:146800640
11 silly logfile done cleaning log files
12 silly packumentCache corgi:https://registry.npmjs.org/vestige-mcp-server cache-miss
13 http fetch GET 200 https://registry.npmjs.org/npm 892ms
14 http fetch GET 200 https://registry.npmjs.org/vestige-mcp-server 1066ms (cache miss)
15 silly packumentCache corgi:https://registry.npmjs.org/vestige-mcp-server set size:undefined disposed:false
16 silly idealTree buildDeps
17 silly fetch manifest vestige-mcp-server@2.2.1
18 silly packumentCache full:https://registry.npmjs.org/vestige-mcp-server cache-miss
19 http fetch GET 200 https://registry.npmjs.org/vestige-mcp-server 283ms (cache miss)
20 silly packumentCache full:https://registry.npmjs.org/vestige-mcp-server set size:undefined disposed:false
21 silly placeDep ROOT vestige-mcp-server@2.2.1 OK for:  want: 2.2.1
22 verbose stack Error: Unsupported platform
22 verbose stack     at checkPlatform (/data/data/com.termux/files/usr/lib/node_modules/npm/node_modules/npm-install-checks/lib/index.js:42:25)
22 verbose stack     at #checkEngineAndPlatform (/data/data/com.termux/files/usr/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:213:9)
22 verbose stack     at Arborist.buildIdealTree (/data/data/com.termux/files/usr/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/build-ideal-tree.js:183:41)
22 verbose stack     at async Arborist.reify (/data/data/com.termux/files/usr/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:118:5)
22 verbose stack     at async Install.exec (/data/data/com.termux/files/usr/lib/node_modules/npm/lib/commands/install.js:158:5)
22 verbose stack     at async Npm.exec (/data/data/com.termux/files/usr/lib/node_modules/npm/lib/npm.js:193:9)
22 verbose stack     at async module.exports (/data/data/com.termux/files/usr/lib/node_modules/npm/lib/cli/entry.js:67:5)
23 verbose pkgid vestige-mcp-server@2.2.1
24 error code EBADPLATFORM
25 error notsup Unsupported platform for vestige-mcp-server@2.2.1: wanted {"os":"darwin,linux,win32","cpu":"x64,arm64"} (current: {"os":"android","cpu":"arm64"})
26 error notsup Valid os:   darwin,linux,win32
26 error notsup Actual os:  android
26 error notsup Valid cpu:  x64,arm64
26 error notsup Actual cpu: arm64
27 silly unfinished npm timer reify 1784128983235
28 silly unfinished npm timer reify:loadTrees 1784128983565
29 verbose cwd /storage/emulated/0/syncthing/Diary
30 verbose os Linux 4.19.278-g7b0944645172-ab10812814
31 verbose node v26.4.0
32 verbose npm  v11.18.0
33 notice
33 notice New major version of npm available! 11.18.0 -> 12.0.1
33 notice Changelog: https://github.com/npm/cli/releases/tag/v12.0.1
33 notice To update run: npm install -g npm@12.0.1
33 notice  { force: true, Symbol(proc-log.meta): true }
34 verbose exit 1
35 verbose code 1
36 error A complete log of this run can be found in: /data/data/com.termux/files/home/.npm/_logs/2026-07-15T15_22_58_123Z-debug-0.log
u0_a499@localhost ~/s/s/s/Diary>

Proposed solution

From GPT-5-Mini ... 🤷🏻 Maybe helpful? IDK Maybe feed to bot? Eh?
Not sure how much harder it is to add a plat to Rust, I know it's not too bad w/ GoLang, but I have a feeling the ARM part might be an issue...


Short fix (recommended):

Update package.json "os" to include "android": "os": ["darwin", "linux", "win32", "android"] This allows Termux/Android installs without changing other constraints.
Alternative / complementary actions:

Remove the "os" restriction entirely if there are no real platform-specific reasons to keep it (many packages omit this restriction).
If native modules or other binaries are required, consider:
Adding Android-specific builds or instructions (e.g., build steps for Termux).
Marking problematic native deps as optionalDependencies and document limitations.
Add "arm" / additional cpu entries if you want broader support for 32-bit ARM devices: "cpu": ["x64", "arm64", "arm"]
Testing / CI suggestions

Add a test job that verifies installation on an aarch64 Linux/Android environment. If an Android emulator is not possible in CI, at least test on linux/arm64 (which is close) and add a short checklist for maintainers to verify on Termux manually.
Encourage community testing: I can help by testing on my Termux device and reporting results.
Compatibility / Caveats

process.platform === "android" is distinct from "linux"; adding "android" should be safe but only if there are no hard dependencies on Linux-specific behavior or packaged native binaries that fail on Android.
If any native modules require glibc, binaries built for typical desktop/server Linux distributions may fail on Android (Bionic vs glibc); in that case, document that manual builds or different packaging are required.
Suggested issue body / PR notes to include (example)

Change package.json "os" to include "android".
Run test suite on Termux or an Android device (Termux).
If native modules fail, mark them optional or add Android-specific build instructions.
Contact
I’m happy to provide logs, test changes on my Pixel 5/Termux, and open a PR that updates package.json and runs basic install tests.

Thanks for considering Android/Termux support — it would make this project usable on mobile devices and in a number of handy on-device use cases.

Alternatives considered

No response

Area

MCP Tools

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions