MCP Connection Issues
The server does not appear in my MCP client
The server does not appear in my MCP client
- Build first. The focused servers run from
dist/, which does not exist untilnpm run buildhas succeeded. - Use an absolute path.
argsmust point at the full path todist/index.js, not a relative one. The host does not run from your project directory. - Restart the host. MCP hosts read their config at startup, so a running client will not pick up a new server.
- Check the JSON. A trailing comma or an unquoted key silently invalidates the whole config in most hosts.
Server starts then exits immediately
Server starts then exits immediately
WDK_SEED is the only mandatory one, and the process refuses to start without it.Solutions:- Confirm
WDK_SEEDis set in theenvblock of the host config, not in your shell (the host does not inherit your shell environment). - Verify the mnemonic is a valid BIP-39 phrase with words separated by single spaces.
- Run the server by hand with the same env vars to see the error directly:
Some tool prefixes are missing
Some tool prefixes are missing
spark_* tools work but wdk_* or kaleidoswap_* do not, or vice versa.Cause: You are connected to a focused server rather than the gateway. Each focused server exposes only its own domain.Solutions:- Use
kaleido-mcpto get every prefix over one connection. - Or add each focused server to the host config separately.
Node and Wallet Errors
Connection refused on wdk_* tools
Connection refused on wdk_* tools
RLN_NODE_URL, which defaults to http://localhost:3001.Solutions:- Start a node. The quickest route is the CLI:
- Verify it answers:
- If the node runs elsewhere, set
RLN_NODE_URLto that address in the host config. - See Node Environments for the Docker-backed setup.
The node is running but locked
The node is running but locked
- Unlock through the CLI, or use the
kaleido_node_unlocktool exposed bykaleido-mcp. - Expect a wait: unlocking syncs the node before it becomes fully accessible.
KaleidoCLI not found
KaleidoCLI not found
skill mode, or the kaleido_node_* tools, fail to execute.Cause: The binary is not on PATH where the process can see it.Solutions:- Confirm it resolves:
kaleido --version - Set
KALEIDO_BINto the absolute path of the binary in the server or agent config. - Install it per CLI Getting Started if it is missing.
Balances read zero when funds exist
Balances read zero when funds exist
- Check the network.
SPARK_NETWORKand the node’s own network must match where the funds are. A Regtest seed shows nothing on mainnet. - Confirm the seed. A different mnemonic derives a different wallet, not an empty one.
- Wait for sync. A node that has just unlocked may not have caught up to the chain tip.
- Distinguish on-chain from Lightning.
wdk_get_balancesseparates vanilla and colored UTXOs from the Lightning balance, and an asset in a channel is not an on-chain balance.
Swap Failures
Quote expired before execution
Quote expired before execution
rfq_id is rejected when you try to use it.Cause: Quotes carry a short expiry, and an LLM turn plus a confirmation prompt can outlast it.Solutions:- Re-quote immediately before initiating, rather than reusing an earlier
rfq_id. - Reduce the number of steps between quote and execution in your prompt or skill.
Atomic swap fails or stalls
Atomic swap fails or stalls
kaleidoswap_atomic_execute errors, or the status never leaves pending.Cause: An atomic swap needs both the DEX tools and the wallet tools, in order, plus channel liquidity on your side.Solutions:- Confirm the sequence ran fully: init on the DEX,
wdk_atomic_takerto whitelist the HTLC on your node, then execute. See the cross-server sequence. - Check the asset is actually in a channel. On-chain balance alone cannot settle a Lightning swap.
- Poll
kaleidoswap_atomic_statusbypayment_hashfor the real state. - If either side stalls, the timelocks expire and both sides recover their own funds. That is the designed outcome, not a lost swap.
Amounts are wrong by orders of magnitude
Amounts are wrong by orders of magnitude
- Read
kaleidoswap_get_assetsfor each asset’s precision before constructing an amount. - Have the model state the raw amount and the display amount in its confirmation, so a mismatch is visible before you approve.
KaleidoAgent Issues
The agent decides but never trades
The agent decides but never trades
portfolio.dry_run is true. This is the default and is intentional.Solution: Set it to false only once the dry-run decisions have looked correct across several runs.Trading stopped on its own
Trading stopped on its own
stop_loss_btc_sats, which halts all trading below its BTC threshold, or min_btc_reserve_sats.Solutions:- Read
GET /statusfor balances and recent runs. - Compare them against the limits in
agent.config.json. - Fund the wallet or adjust the threshold deliberately, rather than removing the guard.
Rebalance never triggers
Rebalance never triggers
rebalance_threshold_pct, which defaults to 5 percent.Solution: Lower the threshold, or trigger a run by hand with POST /run and {"task_id":"rebalance"}.Missing API key or wrong provider
Missing API key or wrong provider
- Confirm
ANTHROPIC_API_KEYorOPENAI_API_KEYis set in.env. - Confirm
AGENT_PROVIDERmatches the key you actually provided.
Rate Limits and Data
Price tools return errors under load
Price tools return errors under load
l402_get_price or l402_get_market_data fail intermittently.Cause: The free CoinGecko tier behind the public endpoints is rate limited.Solutions:- Avoid calling price tools more than once every 30 seconds.
- Use
l402_get_market_datato batch several assets into one call instead of looping. - Set
MPP_GATEWAY_URLto reach an authenticated MPP server if you need higher throughput.
Get Help
Check the FAQ for questions rather than errors. For anything else, report a problem through your preferred channel from the options below, including:- Which surface and version (MCP server name, KaleidoAgent commit, or Desktop App version)
- The network you are on (Regtest, Signet, or mainnet)
- The tool name that failed and the error text
- Host and runtime versions (MCP client, Node.js)
- Your config with the seed and any keys removed