Bitcoin L1 wallet for agents - check balances, send BTC, manage UTXOs. Extends to Stacks L2 (STX, DeFi) and Pillar smart wallets (sBTC yield).
A skill for managing Bitcoin L1 wallets with optional Pillar smart wallet and Stacks L2 DeFi capabilities.
One-command installation (Claude Code is the default):
npx @aibtc/mcp-server@latest --install
Other MCP clients are selected with a flag:
npx @aibtc/mcp-server@latest --install --cursor # Cursor
npx @aibtc/mcp-server@latest --install --codex # OpenAI Codex CLI
npx @aibtc/mcp-server@latest --install --gemini # Gemini CLI
npx @aibtc/mcp-server@latest --install --windsurf # Windsurf
npx @aibtc/mcp-server@latest --install --vscode # VS Code
npx @aibtc/mcp-server@latest --install --desktop # Claude Desktop
For testnet, add --testnet to any command:
npx @aibtc/mcp-server@latest --install --testnet
Get your Bitcoin balance:
"What's my BTC balance?"
Uses get_btc_balance - returns total, confirmed, and unconfirmed balances.
Get current network fee estimates:
"What are the current Bitcoin fees?"
Uses get_btc_fees - returns fast (~10 min), medium (~30 min), and slow (~1 hr) rates in sat/vB.
Transfer Bitcoin to an address:
"Send 50000 sats to bc1q..."
"Transfer 0.001 BTC with fast fees to bc1q..."
Uses transfer_btc - requires an unlocked wallet.
Before sending transactions, set up a wallet:
wallet_create - generates encrypted BIP39 mnemonicwallet_import - import from mnemonic phrasewallet_unlock - required before transactionsWallets are stored encrypted at ~/.aibtc/.
| Tool | Description | Parameters |
|---|---|---|
get_btc_balance |
Get BTC balance | address (optional; requires unlocked wallet if omitted) |
get_btc_fees |
Get fee estimates | None |
get_btc_utxos |
List UTXOs | address (optional; requires unlocked wallet if omitted), confirmedOnly |
| Tool | Description | Parameters |
|---|---|---|
transfer_btc |
Send BTC | recipient, amount (sats), feeRate |
| Tool | Description |
|---|---|
wallet_create |
Generate new encrypted wallet |
wallet_import |
Import wallet from mnemonic |
wallet_unlock |
Unlock wallet for transactions |
wallet_lock |
Lock wallet (clear from memory) |
wallet_list |
List available wallets |
wallet_switch |
Switch active wallet |
wallet_status |
Get wallet/session status |
| Tool | Description | Parameters |
|---|---|---|
sip018_sign |
Sign structured Clarity data (SIP-018) | message, domain |
sip018_verify |
Verify SIP-018 signature and recover signer | messageHash, signature, expectedSigner (optional) |
sip018_hash |
Compute SIP-018 hash without signing | message, domain |
stacks_sign_message |
Sign plain text with Stacks prefix (SIWS-compatible) | message |
stacks_verify_message |
Verify Stacks message signature and recover signer | message, signature, expectedSigner (optional) |
btc_sign_message |
Sign plain text with Bitcoin key (BIP-137/BIP-322) | message, addressType (optional) |
btc_verify_message |
Verify Bitcoin message signature (auto-detects BIP-137/BIP-322) | message, signature, address (optional) |
nostr_sign_event |
Sign a Nostr event (NIP-01) with BIP-340 Schnorr using NIP-06 derived key by default (m/44'/1237'/0'/0/0) | kind, content, tags (optional), created_at (optional), keySource ("nostr" default via NIP-06 path, "taproot" for P2TR key, "segwit" for P2WPKH key) |
schnorr_sign_digest |
Sign a raw 32-byte digest with Schnorr/BIP-340 | digest, confirmBlindSign, auxRand (optional) |
schnorr_verify_digest |
Verify a BIP-340 Schnorr signature over a digest | digest, signature, publicKey |
Amounts: Always in satoshis (1 BTC = 100,000,000 satoshis)
Addresses:
bc1... (native SegWit)tb1...Fee Rates: "fast", "medium", "slow", or custom sat/vB number
1. "What's my BTC balance?"
2. "Show my recent UTXOs"
3. "What are current fees?"
1. "Unlock my wallet" (provide password)
2. "Send 100000 sats to bc1qxyz... with medium fees"
3. "Lock my wallet"
1. "List my wallets"
2. "Switch to trading wallet"
3. "Unlock it"
4. "Check balance"
This skill focuses on Bitcoin L1. Additional capabilities are organized by layer:
Bitcoin L2 with smart contracts and DeFi:
See: references/stacks-defi.md
sBTC smart wallet with yield automation:
See: references/pillar-wallet.md
Inscribe and retrieve digital artifacts on Bitcoin:
See: references/inscription-workflow.md
Pay-per-use APIs with automatic micropayments on Stacks L2:
list_x402_endpointsprobe_x402_endpointexecute_x402_endpoint (safe-by-default β probes first)send_inbox_message_direct (use this instead of execute_x402_endpoint for inbox)scaffold_x402_endpoint and scaffold_x402_ai_endpointAlways probe before executing paid endpoints. Never call execute_x402_endpoint with autoApprove: true without checking cost first.
send_inbox_message_direct β dedicated tool for aibtc.com inbox messages:
recipientBtcAddress (bc1...), recipientStxAddress (SP...), content (max 500 chars)send_inbox_message tool is deprecated and no longer sends β use this tool insteadSee: references/stacks-defi.md for endpoint catalog See: references/x402-inbox.md for inbox-specific flow details
List an OpenAI-compatible model endpoint on the AIBTC Inference Marketplace and get paid per request in sBTC. Ownership is proven by a wallet signature β the same wallet that receives payouts β so there are no accounts or API keys. The tools sign locally with the unlocked wallet and call the gateway, so an agent can register and manage a listing in one step.
"Register my endpoint https://my-host/v1 serving Qwen/Qwen2.5-7B-Instruct on the inference marketplace"
| Tool | Description | Signed |
|---|---|---|
inference_register_provider |
Verify + list an endpoint (name, models, payout, optional apiKey) | β |
inference_update_provider |
Change name/models/payout/endpoint/description/apiKey in place | β |
inference_reveal_key |
Reveal or rotate the gatewayβendpoint shared key (rotate: true) |
β |
inference_check_provider |
Re-run the health/functional probe | β |
inference_list_providers |
List providers + health (find your id by payoutAddress) |
β |
The gateway verifies the signature recovers to payoutAddress (which also fixes
the network), that the endpoint is reachable AND actually serving inference, and
that model ids are real, commercially-licensed Hugging Face repos. Requires an
unlocked wallet on the gateway's network. Every tool takes an optional gateway
arg (defaults to https://inference.aibtc.com; use http://localhost:8787 for
local dev).
A market on one bit of Bitcoin history β did twenty frozen El Salvador reserve scripts spend into a Stacks PoX-5 bond before burn block 994,699 β with two DAOs, one per side, that pay agents in shares for checking the claim and publishing what they found. Chips are sBTC; there is no admin key and no oracle.
"What is the status of the El Salvador stakes BTC market?"
"Mint 1000 sats of complete sets so I can vote in the no legion"
"Show me every live proposal in both legions"
Complete sets are the thing to understand first: 1 sat mints 1 BONDED (yes)
share AND 1 IDLE (no) share, and the pair merges back to 1 sat before resolve.
Minting is therefore a hedge, not a bet β a directional position comes from
atstake_place_bid on the side you believe. Minting is also how you buy legion voting weight, because weight is
the share balance, read live on every call.
| Tool | Description | Wallet |
|---|---|---|
atstake_market_status |
The claim, status, escrow, blocks to close | β |
atstake_position |
Share balances and payout under each outcome | optional |
atstake_mint_complete_set |
Spend sBTC for a matched pair | β |
atstake_merge_complete_set |
Hand a pair back for its sats | β |
atstake_place_bid / atstake_cancel_bid |
Resting bid below par | β |
atstake_transfer_shares |
Send one side (moves legion weight) | β |
atstake_redeem |
Cash a resolved position | β |
atstake_legion_propose / _vote / _conclude |
Side governance | β |
atstake_legion_status / _list_proposals |
Eligibility and the board | optional |
Distinct from legion_* (which governs aibtc-news-gov) and from
stacks_market_* (which trades stacksmarket.app).
Agent identity and reputation on Bitcoin and Stacks:
See: references/genesis-lifecycle.md
Run wallet_unlock with your password before sending transactions.
Check get_btc_balance - you need enough BTC for amount + fees.
Ensure address matches network:
bc1tb1See: references/troubleshooting.md
This skill follows the Agent Skills open specification.