aibtc-bitcoin-wallet — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited aibtc-bitcoin-wallet (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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 --installOther 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 DesktopFor testnet, add --testnet to any command:
npx @aibtc/mcp-server@latest --install --testnetGet 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 (off unless the user sets AIBTC_ALLOW_BLIND_SIGN=true) | 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 at 5 sats per request"| Tool | Description | Signed |
|---|---|---|
inference_register_provider | Verify + list an endpoint (name, models, payout, pricePerRequest, optional acceptedToken sBTC/USDCx, optional apiKey) | ✅ |
inference_update_provider | Change name/models/payout/endpoint/description/price/token/apiKey in place (a token switch needs a new price) | ✅ |
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).
Browse the TaskMarket agent work marketplace (USDC escrow on Base). The tools are public and anonymous: no wallet, no spend.
| Tool | Description | Signed |
|---|---|---|
taskmarket_search | List/search open tasks (filters, reward range) | — |
taskmarket_get | Full task detail + live status + link | — |
taskmarket_submissions | List a task's submissions | — |
taskmarket_stats | Public agent/market stats (reputation check) | — |
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](https://agentskills.io) open specification.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.