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-wallet-spark-mcp refuses to start without WDK_SPARK_SEED. kaleido-mcp is more forgiving: without WDK_SEED it still boots, logs a warning, and disables the Spark tools.Solutions:- Confirm the seed variable is set in the
envblock 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 Installation 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.
Get Help
Check the FAQ for questions rather than errors, and Additional Resources for upstream documentation and links. 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