Three install paths — pick whichever matches your setup. All three end at the same place: a vaultpilot-mcp server binary your MCP client runs, plus a one-time setup wizard that writes the config file.
| Path | Best for | Prerequisites |
|---|---|---|
| A. Bundled binary | Non-developers, anyone without Node.js | None — runtime is bundled |
| B. From npm | Developers with Node.js already installed | Node.js ≥ 18.17, npm |
| C. From source | Contributors, anyone who wants to build their own | Node.js ≥ 18.17, npm, git, OS build toolchain |
Sections 3–9 (setup wizard, verification, MCP-client wiring, Ledger pairing, update, uninstall, troubleshooting) apply to all three paths.
Open the latest release page and download two files for your platform:
| Platform | Server binary | Setup wizard |
|---|---|---|
| Linux x64 | vaultpilot-mcp-linux-x64 | vaultpilot-mcp-setup-linux-x64 |
| macOS Apple silicon (M1/M2/M3) | vaultpilot-mcp-macos-arm64 | vaultpilot-mcp-setup-macos-arm64 |
| macOS Intel | vaultpilot-mcp-macos-x64 | vaultpilot-mcp-setup-macos-x64 |
| Windows x64 | vaultpilot-mcp-windows-x64.exe | vaultpilot-mcp-setup-windows-x64.exe |
Move both files into a stable location — somewhere they will live permanently and your MCP client can reach them. Suggested paths:
~/.local/bin/%LOCALAPPDATA%\Programs\vaultpilot-mcp\Create the directory first if it doesn't exist (mkdir -p ~/.local/bin on Unix; right-click → New folder on Windows).
macOS Gatekeeper blocks unsigned binaries by default. Two options to get past it:
Option A — strip the quarantine attribute (one-time, command-line)
chmod +x ~/.local/bin/vaultpilot-mcp-macos-* ~/.local/bin/vaultpilot-mcp-setup-macos-*
xattr -d com.apple.quarantine ~/.local/bin/vaultpilot-mcp-macos-* 2>/dev/null
xattr -d com.apple.quarantine ~/.local/bin/vaultpilot-mcp-setup-macos-* 2>/dev/null
Option B — Finder right-click → Open
Right-click the file in Finder, choose Open, click Open in the "unidentified developer" dialog. Repeat for both files. macOS remembers your choice; you only do this once per file.
.github/workflows/release-binaries.yml and matching the build provenance against the asset filenames. Code-signing is on the roadmap but not shipped yet.chmod +x ~/.local/bin/vaultpilot-mcp-linux-x64 ~/.local/bin/vaultpilot-mcp-setup-linux-x64
If you plan to use TRON or Solana hardware-signing flows, you also need Ledger udev rules. The setup wizard in the next step detects this and prints the install one-liner if they're missing.
Windows SmartScreen will warn when you run an unsigned binary. Click More info → Run anyway the first time you launch each binary.
Now skip to section 3 — Run the setup wizard.
Prerequisites: Node.js ≥ 18.17 and npm. Check with node -v and npm -v. If you don't have them, install via nvm on Unix or the official Node.js installer on Windows. On macOS / Linux, prefer nvm so the global-install path lands under your home directory rather than /usr/local/ (avoids EACCES permission errors).
npm install -g vaultpilot-mcp
This places two executables on your PATH:
vaultpilot-mcp — the MCP servervaultpilot-mcp-setup — the setup wizardLinux: if you also want TRON / Solana hardware-signing, install the build toolchain so node-hid can compile during install:
sudo apt install libudev-dev build-essential # Debian / Ubuntu
sudo dnf install systemd-devel gcc-c++ make # Fedora
which vaultpilot-mcp # macOS / Linux
where.exe vaultpilot-mcp # Windows
Both paths should resolve. If not, check npm bin -g is on your PATH.
Now go to section 3 — Run the setup wizard.
Prerequisites: Node.js ≥ 18.17, npm, git, plus the OS build toolchain listed in Path B (Linux only — macOS includes Xcode CLT, Windows ships MSBuild with current Visual Studio installs).
git clone https://github.com/szhygulin/vaultpilot-mcp.git
cd vaultpilot-mcp
npm install --legacy-peer-deps
npm run build
--legacy-peer-deps is required because the Kamino SDK has a transitive peer-dep nest npm 7+ rejects by default.
You have two options for invoking the server:
# Option 1: run via npm scripts (stays in the repo)
npm start # MCP server
npm run setup # setup wizard
# Option 2: link globally so you can call from anywhere
npm link
# Then `vaultpilot-mcp` and `vaultpilot-mcp-setup` work from any directory.
npm link is reversible: npm unlink -g vaultpilot-mcp removes the symlink. Useful if you want to test a local fork against your real config without uninstalling the npm-published version.
npm test
A successful run prints Tests <N> passed. As of v0.6.1 the suite is ~1,000 cases and runs in ~15s.
Now go to section 3 — Run the setup wizard.
This is the one mandatory configuration step. It writes ~/.vaultpilot-mcp/config.json (or %USERPROFILE%\.vaultpilot-mcp\config.json on Windows) with your RPC providers and optional API keys.
How you invoke the wizard depends on which install path you used:
# Path A — bundled binary (macOS / Linux)
~/.local/bin/vaultpilot-mcp-setup-<platform>
# Path A — bundled binary (Windows, PowerShell)
& "$env:LOCALAPPDATA\Programs\vaultpilot-mcp\vaultpilot-mcp-setup-windows-x64.exe"
# Path B — installed via npm
vaultpilot-mcp-setup
# Path C — from source
npm run setup
The wizard:
vaultpilot-mcp entry to each of their MCP-server configs automatically. You don't need to find or edit JSON files.vaultpilot-skill for signing-time integrity invariants and vaultpilot-setup-skill for the conversational /setup flow) into ~/.claude/skills/.You can re-run the wizard any time to add or change a key.
The setup wizard probably auto-registered VaultPilot with at least one of your MCP clients. Restart the client and try a read-only question:
If your client knows about VaultPilot, the agent will call get_ledger_status and get_portfolio_summary (or similar) and return results. If the client says it doesn't know about VaultPilot, see Manual MCP-client wiring below.
You can also confirm the server itself runs by piping a JSON-RPC request into stdin:
# Path A — bundled binary
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | \
~/.local/bin/vaultpilot-mcp-<platform> | head -c 200
# Path B — installed via npm
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | \
vaultpilot-mcp | head -c 200
# Path C — from source
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | \
node dist/index.js | head -c 200
A JSON envelope listing tools should print to stdout.
If the setup wizard couldn't detect your client, or you skipped the auto-register prompt, add the entry manually. The JSON shape varies slightly per install path:
// Path A — bundled binary (use the absolute path to the server binary)
{
"mcpServers": {
"vaultpilot-mcp": {
"command": "/absolute/path/to/vaultpilot-mcp-<platform>"
}
}
}
// Path B — installed via npm (the bin shim is on PATH)
{
"mcpServers": {
"vaultpilot-mcp": {
"command": "vaultpilot-mcp"
}
}
}
// Path C — from source
{
"mcpServers": {
"vaultpilot-mcp": {
"command": "node",
"args": ["/absolute/path/to/vaultpilot-mcp/dist/index.js"]
}
}
}
Per-client config locations:
| Client | Config path |
|---|---|
| Claude Desktop (macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Claude Desktop (Windows) | %APPDATA%\Claude\claude_desktop_config.json |
| Claude Desktop (Linux) | ~/.config/Claude/claude_desktop_config.json |
| Claude Code (user-level) | ~/.claude.json |
| Cursor (user-level) | ~/.cursor/mcp.json |
If the file already has a mcpServers block, merge into it — don't overwrite. Always back up the file before editing.
VaultPilot is self-custodial: it never holds your keys. To sign, your hardware wallet pairs once per chain.
pair_ledger_live — open Ledger Live on your phone and complete the WC handshake.pair_ledger_solana.pair_ledger_tron.Read-only portfolio reads need none of this — they just need on-chain data, which the public RPC fallbacks provide.
xattr -d com.apple.quarantine (or right-click → Open once each). On Windows, click through SmartScreen once each.npm update -g vaultpilot-mcp
# or for a specific version:
npm install -g vaultpilot-mcp@<version>
Then restart your MCP client.
cd /path/to/vaultpilot-mcp
git pull --ff-only
npm install --legacy-peer-deps
npm run build
Your config file at ~/.vaultpilot-mcp/config.json is preserved across all three update paths.
# Remove the binaries
rm ~/.local/bin/vaultpilot-mcp-* ~/.local/bin/vaultpilot-mcp-setup-*
# (Windows: delete the files in %LOCALAPPDATA%\Programs\vaultpilot-mcp\)
npm uninstall -g vaultpilot-mcp
# If you ran `npm link`:
npm unlink -g vaultpilot-mcp
# Then delete the source checkout:
rm -rf /path/to/vaultpilot-mcp
rm -rf ~/.vaultpilot-mcp/ (Unix) or delete %USERPROFILE%\.vaultpilot-mcp\ (Windows).vaultpilot-mcp entry from your MCP client's config file (paths in section 5).rm -rf ~/.claude/skills/vaultpilot-{preflight,setup}/."Permission denied" on Linux/macOS launch. You forgot chmod +x. Re-run with the path from section 2.
"Apple could not verify..." macOS Gatekeeper. Right-click → Open, or run the xattr -d com.apple.quarantine one-liner from section 2.
"Windows protected your PC" SmartScreen. Click More info → Run anyway.
Setup wizard hangs at "Pairing Ledger Live..." The WalletConnect relay timed out. Check your Ledger Live mobile app is open, has internet, and is on a recent build. Hit Ctrl-C and re-run setup with --skip-pairing (you can pair later via pair_ledger_live).
MCP client doesn't see vaultpilot-mcp. Most likely the auto-register didn't catch your client. Verify the JSON config exists at the path in section 5 and contains a mcpServers.vaultpilot-mcp entry pointing at the server binary's absolute path. Restart the client after editing.
Solana sends fail with "blockhash expired" on slow Ledger blind-signing. As of v0.6.1, every Solana send is durable-nonce-protected, so this should not happen — if it does, file an issue with the preview output.
Linux: TRON / Solana signing returns "permission denied" on USB. Ledger udev rules aren't installed. Re-run the setup wizard; it detects this and prints the install one-liner. Or install directly from Ledger's repo.
Anything else. File an issue with the vaultpilot-mcp issue tracker including your OS, the binary version (./vaultpilot-mcp-<platform> --version), the failing tool name, and the agent's verbatim output (redact any wallet addresses or hashes you don't want in public logs).
For the technically curious: each binary contains the Node.js 22 runtime, the compiled dist/ JS, every npm dependency, and the platform-specific native .node artifacts for node-hid, usb, bufferutil, and utf-8-validate. The binaries are built per-OS via @yao-pkg/pkg on a GitHub Actions matrix — see .github/workflows/release-binaries.yml. At first launch the runtime extracts the bundled .node files to a platform-specific cache directory (override via PKG_NATIVE_CACHE_PATH).