How to secure Aibtc →

Aibtc MCP Policy

Enforce policies on every tool call to the Aibtc MCP Server. 288 tools with suggested default rules ready to customise.

Last updated:

89 can modify or destroy data
199 read-only
288 tools total
Read (199) Write / Execute (62) Destructive / Financial (27)

This policy includes sensible default rules. Download it, adjust the limits to match your use case, and run with Intercept.

terminal

# Download policy with default rules

curl -o io-github-aibtcdev-mcp-server.yaml https://raw.githubusercontent.com/policylayer/intercept/main/policies/io-github-aibtcdev-mcp-server.yaml

# Run with Intercept

intercept --policy io-github-aibtcdev-mcp-server.yaml -- npx -y @@aibtc/mcp-server
READ 199 tools
Read alex_get_pool_info Read alex_get_swap_quote Read alex_list_pools Read arxiv_list_digests Read arxiv_search Read bounty_claim Read bounty_get Read bounty_list Read bounty_match Read bounty_my_claims Read bounty_stats Read bounty_status Read broadcast_transaction Read btc_sign_message Read btc_verify_message Read call_contract Read call_read_only_function Read check_bns_availability Read check_relay_health Read claim_bns_name_fast Read credentials_get Read credentials_list Read dual_stacking_get_rewards Read dual_stacking_status Read extend_stacking Read get_account_info Read get_account_transactions Read get_block_info Read get_bns_info Read get_bns_price Read get_btc_address_txs Read get_btc_balance Read get_btc_fees Read get_btc_mempool_info Read get_btc_transaction_status Read get_btc_utxos Read get_cardinal_utxos Read get_collection_info Read get_contract_events Read get_contract_info Read get_inscriptions_by_address Read get_mempool_info Read get_network_status Read get_nft_history Read get_nft_holdings Read get_nft_metadata Read get_nft_owner Read get_ordinal_utxos Read get_pox_info Read get_rune_balances Read get_rune_utxos Read get_stacking_status Read get_stx_balance Read get_stx_fees Read get_token_balance 2/5 Read get_token_holders 2/5 Read get_token_info 2/5 Read get_transaction_status Read get_wallet_info Read identity_get Read identity_get_last_id Read identity_get_metadata Read jingswap_get_cycle_state Read jingswap_get_cycles_history Read jingswap_get_depositors Read jingswap_get_prices Read jingswap_get_settlement Read jingswap_get_user_activity Read jingswap_get_user_deposit Read jingswap_settle Read list_user_domains Read list_user_tokens Read list_x402_endpoints Read lookup_bns_name Read news_check_status Read news_file_signal Read news_front_page Read news_leaderboard Read news_list_beats Read news_list_signals Read nonce_health Read nostr_get_profile Read nostr_get_pubkey Read nostr_read_feed Read nostr_relay_list Read nostr_search_tags Read nostr_sign_event Read openrouter_models Read ordinals_buy Read ordinals_get_listings 2/5 Read ordinals_list_for_sale Read ordinals_list_for_sale_submit Read ordinals_p2p_agents Read ordinals_p2p_counter Read ordinals_p2p_get_trade Read ordinals_p2p_list_trades Read ordinals_p2p_my_trades Read ordinals_p2p_psbt_swap Read pillar_dca_leaderboard Read pillar_dca_partners Read pillar_dca_status Read pillar_direct_dca_leaderboard Read pillar_direct_dca_partners Read pillar_direct_dca_status Read pillar_direct_position Read pillar_direct_quote Read pillar_direct_stack_stx Read pillar_direct_stacking_status Read pillar_direct_supply Read pillar_direct_unwind Read pillar_fund Read pillar_key_info Read pillar_position Read pillar_status Read pillar_supply Read pillar_unwind Read reputation_append_response Read reputation_get_approved_limit Read reputation_get_clients Read reputation_get_feedback_count Read reputation_get_last_index Read reputation_get_summary Read reputation_give_feedback Read reputation_read_all_feedback Read reputation_read_feedback Read reverse_bns_lookup Read runes_get_activity Read runes_get_address_activity Read runes_get_address_balances Read runes_get_etching Read runes_get_holders Read runes_list_etchings Read sbtc_deposit_status Read sbtc_get_balance Read sbtc_get_deposit_info Read sbtc_get_peg_info Read sbtc_withdraw_status Read sbtc_withdrawal_status Read schnorr_sign_digest Read schnorr_verify_digest Read sip018_hash Read sip018_sign Read sip018_verify Read souldinals_display_soul Read souldinals_list_souls Read souldinals_load_soul Read souldinals_reveal_soul Read stack_stx Read stacks_market_buy_no Read stacks_market_buy_yes Read stacks_market_get Read stacks_market_get_position Read stacks_market_list Read stacks_market_quote_buy Read stacks_market_quote_sell Read stacks_market_redeem Read stacks_market_search 2/5 Read stacks_market_sell_no Read stacks_market_sell_yes Read stacks_sign_message Read stacks_verify_message Read stackspot_claim_rewards Read stackspot_get_pot_state Read stackspot_join_pot Read stackspot_list_pots Read styx_fees Read styx_history Read styx_pool_status Read styx_pools Read styx_price Read styx_status Read taproot_get_pubkey Read taproot_multisig_guide Read taproot_verify_cosig Read tenero_holder_stats Read tenero_market_stats Read tenero_market_summary Read tenero_search 2/5 Read tenero_token_info Read tenero_top_gainers Read tenero_top_losers Read tenero_trending_pools Read tenero_wallet_holdings Read tenero_wallet_trades Read tenero_whale_trades Read tx_status_deep Read wallet_list Read wallet_rotate_password Read wallet_status Read yield_dashboard_apy_breakdown Read yield_dashboard_overview Read yield_dashboard_positions Read yield_dashboard_rebalance Read yield_hunter_status Read zest_borrow Read zest_get_position Read zest_list_assets Read zest_repay Read zest_supply

This policy includes suggested default rules for common use cases. Adjust rate limits, add argument validation, or remove rules you don't need.

io-github-aibtcdev-mcp-server.yaml
version: "1"
description: "Policy for @aibtc/mcp-server"
# Set to "deny" to reject tool calls not listed below
default: "allow"

tools:
    # -- Financial Tools ----------------------------------------
    # identity_transfer: Transfer an agent identity NFT to a new owner in the ERC-8004 identity registry. This clears the agent wallet association — run identity_set_wallet after if needed. Requires an unlocked wallet.
    identity_transfer:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # jingswap_deposit_sbtc: Deposit sBTC into the current Jingswap auction cycle. Only works during the deposit phase. Amount is in satoshis (e.g. 1000 for 1000 sats). Works the same for both sbtc-stx and sbtc-usdcx markets.
    jingswap_deposit_sbtc:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # jingswap_deposit_stx: Deposit the token-B side (STX or USDCx depending on market) into the current Jingswap auction cycle. Only works during the deposit phase. Amount is in human units (e.g. 10 for 10 STX, or 10 for 10 USDCx).
    jingswap_deposit_stx:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # ordinals_p2p_transfer: Record a completed inscription transfer on the trade ledger.

Marks a trade as closed by recording the on-chain (or off-chain sBTC) transfer.
The active wallet signs the record with BIP-137 to prove the transfer was
authorized by the sending party.

Requires an unlocked wallet with Bitcoin keys.
    ordinals_p2p_transfer:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # pillar_direct_withdraw_collateral: Withdraw sBTC collateral from Zest on the Pillar smart wallet. Agent-signed, no browser needed. Backend sponsors gas.
    pillar_direct_withdraw_collateral:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # sbtc_deposit: Deposit BTC to receive sBTC on Stacks L2.

This builds, signs, and broadcasts a Bitcoin transaction to the sBTC deposit address.
After confirmation, sBTC tokens are minted to your Stacks address.

The transaction uses your wallet's Taproot address for the reclaim path.
If the deposit fails, you can reclaim your BTC after the lock time expires.

By default, only uses cardinal UTXOs (safe to spend - no inscriptions).
Set includeOrdinals=true to allow spending ordinal UTXOs (advanced users only).
    sbtc_deposit:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # sbtc_transfer: Transfer sBTC tokens to a recipient address.

sBTC uses 8 decimals (same as Bitcoin).
Example: To send 0.001 sBTC, use amount "100000" (satoshis).
    sbtc_transfer:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # sbtc_withdraw: Alias for sbtc_initiate_withdrawal. Initiates an sBTC peg-out request to BTC L1.
    sbtc_withdraw:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # styx_deposit: Full headless BTC→sBTC deposit via the Styx protocol. Flow: reserve pool liquidity → build PSBT locally → sign with wallet keys → broadcast to mempool.space → update deposit status. Requires an unlocked wallet with sufficient BTC balance. On mainnet, ordinal UTXOs are automatically filtered out to protect inscriptions. Minimum deposit: 10,000 sats. Pool limits: main=300k sats, aibtc=1M sats.
    styx_deposit:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # transfer_btc: Transfer BTC to a recipient address. Builds, signs, and broadcasts a Bitcoin transaction. Requires an unlocked wallet with BTC balance. By default, only uses cardinal UTXOs (safe to spend - no inscriptions). Set includeOrdinals=true to allow spending ordinal UTXOs (advanced users only).
    transfer_btc:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # transfer_nft: Transfer an NFT (SIP-009) to a recipient address.
    transfer_nft:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # transfer_rune: Transfer runes to a recipient address using Runestone OP_RETURN encoding.

Builds a Bitcoin transaction with a Runestone, sends runes to the recipient, and returns remaining runes to the sender Taproot address.

Requires wallet to be unlocked. Amount is in smallest rune units (raw integer).
Uses Unisat indexer to fetch rune UTXOs (UNISAT_API_KEY recommended).
    transfer_rune:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # transfer_stx: Transfer STX tokens to a recipient address. Signs and broadcasts the transaction.

Example: To send 2 STX, use amount "2000000" (micro-STX).
1 STX = 1,000,000 micro-STX
    transfer_stx:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # transfer_token: Transfer any SIP-010 token to a recipient address.

Supports well-known tokens by symbol: sBTC, USDCx, ALEX, DIKO
Or use the full contract ID.
    transfer_token:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"
    # zest_withdraw: Withdraw assets from Zest Protocol v2.

Removes collateral and redeems for underlying assets in one atomic operation.
You can use the asset symbol (e.g., 'sBTC', 'USDC') or full contract ID.

Note: Amount is in zToken shares. Zest Protocol is only available on mainnet.
    zest_withdraw:
        rules:
          - action: deny
            on_deny: "Financial operation requires approval"

    # -- Destructive Tools ----------------------------------------
    # credentials_delete: Remove a stored credential by service and key. The encrypted store file is rewritten without the deleted entry.
    credentials_delete:
        rules:
          - action: deny
            on_deny: "Destructive operation blocked by policy"
    # identity_unset_wallet: Remove the agent wallet association from an agent identity in the ERC-8004 identity registry. Requires an unlocked wallet.
    identity_unset_wallet:
        rules:
          - action: deny
            on_deny: "Destructive operation blocked by policy"
    # jingswap_cancel_cycle: Cancel the current auction cycle if settlement has failed for too long. Can only be called 530 blocks (~17.5 min) after deposits were closed (BUFFER_BLOCKS 30 + CANCEL_THRESHOLD 500). Rolls all deposits into the next cycle — no refunds, users can withdraw individually during the next deposit phase. This is the safety valve.
    jingswap_cancel_cycle:
        rules:
          - action: deny
            on_deny: "Destructive operation blocked by policy"
    # jingswap_cancel_sbtc: Cancel your sBTC deposit from the current Jingswap auction cycle and get a full refund. Only works during the deposit phase. Works the same for both markets.
    jingswap_cancel_sbtc:
        rules:
          - action: deny
            on_deny: "Destructive operation blocked by policy"
    # jingswap_cancel_stx: Cancel your token-B deposit (STX or USDCx depending on market) from the current Jingswap auction cycle and get a full refund. Only works during the deposit phase.
    jingswap_cancel_stx:
        rules:
          - action: deny
            on_deny: "Destructive operation blocked by policy"
    # ordinals_cancel_listing: Cancel an active Magic Eden listing for an inscription.

Requests a cancellation PSBT from Magic Eden. The seller signs the PSBT to
invalidate the active listing and reclaim the inscription UTXO. No BTC fee
is required beyond the miner fee for the cancellation transaction itself.

Requires an unlocked wallet with Bitcoin (Taproot) keys.

Steps:
1. Call this tool with the inscriptionId you want to delist
2. Sign the returned PSBT using psbt_sign
3. Broadcast using psbt_broadcast to finalize the cancellation
    ordinals_cancel_listing:
        rules:
          - action: deny
            on_deny: "Destructive operation blocked by policy"
    # ordinals_p2p_cancel: Cancel an open offer or counter on the trade ledger.

Only the parties involved in a trade may cancel it. The active wallet signs
the cancellation with BIP-137 to prove authorization.

Requires an unlocked wallet with Bitcoin keys.
    ordinals_p2p_cancel:
        rules:
          - action: deny
            on_deny: "Destructive operation blocked by policy"
    # pillar_direct_revoke_fast_pool: Revoke Fast Pool STX delegation from your Pillar smart wallet. Agent-signed, no browser needed. Backend sponsors gas. After revoking, STX stays locked until the current PoX cycle ends, then returns to liquid.
    pillar_direct_revoke_fast_pool:
        rules:
          - action: deny
            on_deny: "Destructive operation blocked by policy"
    # recover_sponsor_nonce: Attempt automated recovery of stuck sponsor transactions via the relay API, or resync the local nonce counter.

Run check_relay_health first to identify stuck txids and missing nonces, then use
this tool to trigger recovery without needing to contact the AIBTC team manually.

Recovery modes:
- rbf: Replace-by-fee — rebroadcasts stuck transactions with a higher fee so miners
  prioritize them. Provide specific txids or omit to bump all stuck transactions.
- fill-gaps: Nonce gap-fill — submits placeholder transactions to fill any missing
  nonces that are blocking the queue. Provide specific nonces or omit to fill all gaps.
- both: Attempt both RBF and gap-fill in sequence (default).
- resync-local-nonce: Force-reset the MCP server's in-memory nonce counter for the
  active wallet. Use this when the local counter is out of sync with the chain (e.g.
  after a server restart, manual transaction sent outside the MCP server, or a
  confirmed-but-locally-stuck counter). The counter will be re-seeded from the chain
  on the next transaction. Requires the wallet to be unlocked.

If the relay does not yet support relay endpoints it returns a 404 or 501 and this
tool will respond with a clear message rather than throwing an error. In that case,
share the txids and nonces from check_relay_health with the AIBTC team.
    recover_sponsor_nonce:
        rules:
          - action: deny
            on_deny: "Destructive operation blocked by policy"
    # reputation_revoke_feedback: Revoke a previously submitted feedback entry by index. Only the original submitter can revoke their feedback. Requires an unlocked wallet.
    reputation_revoke_feedback:
        rules:
          - action: deny
            on_deny: "Destructive operation blocked by policy"
    # stackspot_cancel_pot: Cancel a Stackspot stacking lottery pot before stacking begins.

Cancels an unlocked pot to recover contributed STX. The pot must not yet be locked
(i.e., stacking has not started). Once stacking begins the pot cannot be cancelled.

Use a bare contract name (e.g., "STXLFG") or a fully-qualified identifier.

Requires an unlocked wallet.

Note: Stackspot is only available on mainnet.
    stackspot_cancel_pot:
        rules:
          - action: deny
            on_deny: "Destructive operation blocked by policy"
    # wallet_delete: Permanently delete a wallet.
WARNING: This cannot be undone! Make sure you have backed up your mnemonic.
    wallet_delete:
        rules:
          - action: deny
            on_deny: "Destructive operation blocked by policy"

    # -- Execute Tools ----------------------------------------
    # alex_swap: Execute a token swap on ALEX DEX.

Swaps tokenX for tokenY using the ALEX AMM.
Use full contract IDs for tokens.

Note: ALEX DEX is only available on mainnet.
    alex_swap:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true
    # arxiv_compile_digest: Compile a Markdown digest from recent arXiv papers on LLMs and autonomous agents.

Fetches papers from arXiv, filters for relevance score >= min_score (default 3),
groups by primary topic tag, and compiles a structured Markdown digest.

Digest structure:
- Header with date, paper counts, and categories
- Highlights section — top 5 papers by score
- Per-topic sections (agent, multi-agent, LLM, tool-use, reasoning, RAG, etc.)
- Stats table at the bottom

The compiled digest is returned inline as a Markdown string. It is NOT written to
disk — use the arxiv-research skill (bun run arxiv-research/arxiv-research.ts compile)
to write timestamped digest files to ~/.aibtc/arxiv-research/digests/.

Read-only. No API key required.
    arxiv_compile_digest:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true
    # deploy_contract: Deploy a Clarity smart contract to the Stacks blockchain.
    deploy_contract:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true
    # dual_stacking_enroll: Enroll in Dual Stacking to earn sBTC rewards.

Enrolls your wallet in the Dual Stacking protocol. Enrollment takes effect at the
start of the next PoX cycle. You must hold the minimum sBTC amount to qualify.

An optional reward address can be specified to receive sBTC rewards at a different
address than the signing wallet. If omitted, rewards go to the signing wallet.

Requires an unlocked wallet with sufficient sBTC balance.

Note: Dual Stacking is only available on mainnet.
    dual_stacking_enroll:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true
    # dual_stacking_opt_out: Opt out of Dual Stacking.

Removes your wallet from the Dual Stacking protocol. The opt-out takes effect at
the start of the next PoX cycle; you continue to earn rewards for the current cycle.

Requires an unlocked wallet.

Note: Dual Stacking is only available on mainnet.
    dual_stacking_opt_out:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true
    # execute_x402_endpoint: Execute an x402 API endpoint. Payment is handled automatically.

Supported sources:
- x402.biwas.xyz (default): Use path like "/api/pools/trending"
- x402.aibtc.com: Use apiUrl="https://x402.aibtc.com" with path like "/inference/openrouter/chat"
- stx402.com: Use apiUrl="https://stx402.com" with path like "/ai/dad-joke"
- aibtc.com: Use apiUrl="https://aibtc.com" with path like "/api/inbox/{address}"
- Any x402-compatible URL: Use url parameter with full endpoint URL

Use list_x402_endpoints to discover available endpoints.

For aibtc.com inbox messages, use send_inbox_message instead — it uses sponsored transactions to avoid sBTC settlement timeout issues.
    execute_x402_endpoint:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true
    # nonce_heal: Diagnose and heal the full nonce state for the active wallet in one shot.

Handles 90% of stuck-tx cases automatically:
1. Fetches current nonce state from Hiro API (gaps, mempool)
2. In dryRun mode: shows what would happen without broadcasting
3. In execute mode (dryRun=false):
   - Fills every gap with a 1 uSTX self-transfer to the PoX burn address
   - Optionally RBF-bumps the chain head (lowest non-gap pending tx) to kick off processing

RBF bump behavior:
- Token-transfer txs: rebuilt at same nonce with fee * feeMultiplier and rebroadcast
- Sponsored txs: skipped with explanation (sender cannot RBF without sponsor key)
- Contract-call txs: skipped with manual RBF instructions

Always run nonce_health first to understand the current state.
Requires wallet to be unlocked for execute mode (dryRun=false).

Returns:
- address, dryRun flag, confirmedNonce
- gapsFound: list of missing nonces
- actions: per-action detail (fill_gap or bump_head) with txids, fees, status
- warnings: informational notes
- summary: human-readable description of what happened
    nonce_heal:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true
    # pillar_direct_auto_compound: Configure auto-compound for your Pillar wallet. When enabled, a keeper automatically boosts when sBTC accumulates above the trigger. Agent-signed, no browser needed. Backend sponsors gas.
    pillar_direct_auto_compound:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true
    # probe_x402_endpoint: Probe an x402 API endpoint to discover its cost WITHOUT making payment.

This tool is useful for:
- Discovering the cost of a paid endpoint before executing
- Checking if an endpoint is free or requires payment
- Presenting costs to users for approval before paying

For free endpoints, returns the response data directly.
For paid endpoints, returns payment details (amount, asset, recipient) without executing payment.

After probing a paid endpoint, use execute_x402_endpoint to actually execute and pay.

Supported sources:
- x402.biwas.xyz (default): Use path like "/api/pools/trending"
- x402.aibtc.com: Use apiUrl="https://x402.aibtc.com" with path like "/inference/openrouter/chat"
- stx402.com: Use apiUrl="https://stx402.com" with path like "/ai/dad-joke"
- aibtc.com: Use apiUrl="https://aibtc.com" with path like "/api/inbox/{address}"
- Any x402-compatible URL: Use url parameter with full endpoint URL
    probe_x402_endpoint:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true
    # scaffold_x402_ai_endpoint: Create a complete x402 paid AI API project with OpenRouter integration.

This creates a NEW PROJECT FOLDER with everything needed to deploy a pay-per-use AI API:
- Full Hono.js application with x402 payment middleware
- OpenRouter integration for Claude, GPT-4, Llama, etc.
- Ready for deployment to Cloudflare Workers

## What Gets Created

A folder named `{projectName}` containing:
- src/index.ts - Hono app with your x402-protected AI endpoints
- src/x402-middleware.ts - Payment verification (uses native relay fetch)
- src/openrouter.ts - OpenRouter API client
- wrangler.jsonc - Cloudflare Worker config
- .dev.vars - Local dev variables (needs OPENROUTER_API_KEY)
- README.md - Documentation

## AI Types

- **chat**: General chat/Q&A
- **completion**: Text completion
- **summarize**: Summarize text
- **translate**: Translate text
- **custom**: Custom system prompt

## Quick Start After Generation

```
cd {projectName}
npm install
# Edit .dev.vars with RECIPIENT_ADDRESS and OPENROUTER_API_KEY
npm run dev
```
    scaffold_x402_ai_endpoint:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true
    # scaffold_x402_endpoint: Create a complete x402 paid API project as a Cloudflare Worker.

This creates a NEW PROJECT FOLDER with everything needed to deploy a pay-per-use API:
- Full Hono.js application with x402 payment middleware
- Ready for deployment to Cloudflare Workers
- Based on production patterns from x402-api and stx402

## What Gets Created

A folder named `{projectName}` containing:
- src/index.ts - Hono app with your x402-protected endpoints
- src/x402-middleware.ts - Payment verification (uses native relay fetch)
- wrangler.jsonc - Cloudflare Worker config with staging/production envs
- package.json - Dependencies including hono (no x402-stacks dependency)
- .dev.vars - Local dev variables (pre-filled if you have a wallet)
- README.md - Documentation

## Pricing Tiers

Use tiers for consistent pricing:
- **simple/standard**: 0.001 STX
- **ai**: 0.003 STX
- **heavy_ai**: 0.01 STX
- **storage_read**: 0.0005 STX
- **storage_write**: 0.001 STX

## Quick Start After Generation

```
cd {projectName}
npm install
npm run dev
```
    scaffold_x402_endpoint:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true
    # stackspot_start_pot: Trigger a full Stackspot pot to begin stacking via the platform contract.

Initiates stacking for a pot that has reached its participant limit. This call
goes through the platform contract (stackspots) and must be made during the PoX
prepare phase. Any participant can call this once the pot is full.

Use a bare contract name (e.g., "STXLFG") or a fully-qualified identifier.

Requires an unlocked wallet.

Note: Stackspot is only available on mainnet.
    stackspot_start_pot:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true
    # yield_hunter_start: Start autonomous yield hunting.

This will:
1. Monitor your wallet for sBTC
2. Automatically deposit sBTC to Zest Protocol when balance exceeds threshold
3. Keep a configurable reserve (default: 0, deposits all sBTC)
4. Wait for transaction confirmations before proceeding
5. Retry failed transactions with exponential backoff
6. Run continuously until stopped

Requires an unlocked wallet (use wallet_unlock first).
Only works on mainnet (Zest Protocol is mainnet-only).

Note: Stacks transaction fees are paid in STX, not sBTC.

Default settings:
- Deposit threshold: 10,000 sats (0.0001 sBTC)
- Reserve: 0 sats (deposit all sBTC to maximize yield)
- Check interval: 10 minutes
    yield_hunter_start:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true
    # yield_hunter_stop: Stop autonomous yield hunting.

Stops the background process that monitors and deposits sBTC.
Your existing Zest positions remain untouched.
    yield_hunter_stop:
        rules:
          - action: allow
            rate_limit: 10/hour
            validate:
              required_args: true

    # -- Write Tools ----------------------------------------
    # credentials_set: Store or update a credential. Encrypts the value with AES-256-GCM and saves to ~/.aibtc/credentials.enc. If the service/key pair already exists, it is updated.
    credentials_set:
        rules:
          - action: allow
            rate_limit: 30/hour
    # credentials_unlock: Verify that the credential store password works and show store info. Uses ARC_CREDS_PASSWORD env var. Creates a new empty store if none exists.
    credentials_unlock:
        rules:
          - action: allow
            rate_limit: 30/hour
    # identity_register: Register a new agent identity on-chain using ERC-8004 identity registry. Returns a transaction ID. Check the transaction result to get the assigned agent ID. Requires an unlocked wallet.
    identity_register:
        rules:
          - action: allow
            rate_limit: 30/hour
    # identity_set_approval: Approve or revoke an operator for an agent identity in the ERC-8004 identity registry. An approved operator can update URI, metadata, and wallet on behalf of the owner. Only the NFT owner can call this. Requires an unlocked wallet.
    identity_set_approval:
        rules:
          - action: allow
            rate_limit: 30/hour
    # identity_set_metadata: Set a metadata key-value pair on an agent identity in the ERC-8004 identity registry. Value must be a hex-encoded buffer (max 512 bytes). The key "agentWallet" is reserved — use identity_set_wallet instead. Requires an unlocked wallet.
    identity_set_metadata:
        rules:
          - action: allow
            rate_limit: 30/hour
    # identity_set_uri: Update the URI for an agent identity in the ERC-8004 identity registry. Requires an unlocked wallet. Must be called by agent owner or approved operator.
    identity_set_uri:
        rules:
          - action: allow
            rate_limit: 30/hour
    # identity_set_wallet: Link the active Stacks wallet address to an agent identity in the ERC-8004 identity registry. Requires an unlocked wallet.
    identity_set_wallet:
        rules:
          - action: allow
            rate_limit: 30/hour
    # jingswap_close_deposits: Close the deposit phase of the current Jingswap auction cycle. Before calling, check jingswap_get_cycle_state to verify: phase is 0 (deposit), blocksElapsed >= 150 (DEPOSIT_MIN_BLOCKS), and both sides meet minimums. Anyone can call this. Transitions to buffer phase.
    jingswap_close_deposits:
        rules:
          - action: allow
            rate_limit: 30/hour
    # jingswap_settle_with_refresh: Settle the current auction cycle by first refreshing Pyth oracle prices with fresh VAAs. This is the recommended settlement method — stored prices are almost always stale. Costs ~2 µSTX for the Pyth update. Automatically fetches fresh VAAs from the backend. Settlement distributes funds to all depositors so post conditions are in Allow mode. There is no guarantee settlement succeeds (e.g. if oracle update fails), but this is the most reliable path. Only works after deposits have been closed (buffer/settle phase).
    jingswap_settle_with_refresh:
        rules:
          - action: allow
            rate_limit: 30/hour
    # news_claim_beat: Create or join a beat on aibtc.news.

Requires an unlocked wallet with a P2WPKH (bc1q) BTC address. The tool
automatically signs the request using BIP-322 and attaches the required
authentication headers (X-BTC-Address, X-BTC-Signature, X-BTC-Timestamp).

Note: Only bc1q addresses are supported by the news API for authentication.
Taproot (bc1p) addresses cannot claim beats.

Use news_list_beats first to see existing beats and avoid duplicates.

Fields:
- slug: beat slug, lowercase with hyphens (e.g. "btc-macro", "dao-watch")
- name: display name for the beat (e.g. "BTC Macro", "DAO Watch")
- description: optional description of the beat's focus area
- color: optional hex color for the beat (e.g. "#FF6600")
    news_claim_beat:
        rules:
          - action: allow
            rate_limit: 30/hour
    # nonce_fill_gap: Fill a nonce gap by sending a minimal STX transfer at the specified nonce.

LAST-RESORT recovery action. Each gap-fill is a real on-chain transaction with a real
fee (~0.001-0.01 STX). Most gaps self-resolve within seconds as Stacks blocks are 3-5s.
Only use this after confirming the gap persists via nonce_health.

When transactions are pending but a gap exists in the nonce sequence (e.g., nonces
5 and 7 are pending but 6 is missing), the Stacks mempool will not process nonces
7+ until 6 is filled. This tool fills the gap with a 1 micro-STX transfer to the
PoX burn address.

Use nonce_health first to identify gaps, then call this tool for each missing nonce.

Requires the wallet to be unlocked. The fee is auto-estimated.
    nonce_fill_gap:
        rules:
          - action: allow
            rate_limit: 30/hour
    # nostr_post: Publish a short-text note (kind:1) to Nostr relays. Optionally include hashtag tags and specify target relays. Requires an unlocked wallet.
    nostr_post:
        rules:
          - action: allow
            rate_limit: 30/hour
    # nostr_set_profile: Update the agent's Nostr profile (kind:0 metadata event). Only provided fields are updated; existing fields are preserved by fetching the current profile first. Requires an unlocked wallet.
    nostr_set_profile:
        rules:
          - action: allow
            rate_limit: 30/hour
    # openrouter_integration_guide: Get OpenRouter integration examples and code patterns for implementing AI features.

Use this tool when you need to add AI capabilities to any project. Returns:
- Code examples for different environments (Node.js, Cloudflare Workers, browser)
- API patterns and best practices
- Model recommendations
- Error handling patterns

This is a reference tool - use the returned code as a template for implementation.
    openrouter_integration_guide:
        rules:
          - action: allow
            rate_limit: 30/hour
    # ordinals_p2p_create_offer: List an inscription for sale on the P2P trade ledger.

Creates a new offer entry authenticated with a BIP-137 signature from the active
wallet's BTC address. The inscription must be in the wallet or otherwise owned
by the signing address for the trade to be verifiable by counterparties.

Requires an unlocked wallet with Bitcoin keys.
    ordinals_p2p_create_offer:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_add_admin: Add a backup admin address to your Pillar smart wallet for recovery purposes. The admin can help recover funds if you lose access to your passkey.
    pillar_add_admin:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_auto_compound: Configure auto-compound for your Pillar wallet. When enabled, a keeper will automatically boost your position when sBTC accumulates in your wallet.
    pillar_auto_compound:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_boost: Create or increase a leveraged sBTC position (up to 1.5x) on your Pillar smart wallet. Opens the Pillar website Boost tab where you can set the amount and confirm. Your sBTC is supplied to Zest, borrowed against, and re-supplied for amplified Bitcoin exposure. For simple yield without leverage, use pillar_supply (Earn) instead. Amounts over 100,000 sats automatically enter DCA mode -- split into daily 100k-sat chunks (max 700k sats per schedule). The first chunk executes immediately, the rest follow daily.
    pillar_boost:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_connect: Connect to your Pillar smart wallet. Opens the Pillar website - if you're logged in, it will automatically connect and return your wallet address. Use this first before other Pillar actions.
    pillar_connect:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_create_wallet: Create a new Pillar smart wallet. Opens the Pillar website to complete registration. You'll need to enter your email to receive updates. If the user doesn't have a referral link, tell them they can DM @pillar_btc on X (https://x.com/pillar_btc) to request one before signing up.
    pillar_create_wallet:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_dca_invite: Invite a DCA partner by email or wallet address. DCA partners hold each other accountable — both must boost each week to keep the streak alive.
    pillar_dca_invite:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_direct_add_admin: Add a backup admin address to your Pillar smart wallet for recovery purposes. Agent-signed, no browser needed. The admin can help recover funds if you lose access to your passkey. Backend sponsors gas.
    pillar_direct_add_admin:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_direct_boost: Create or increase a leveraged sBTC position (up to 1.5x) on your Pillar smart wallet. Agent-signed, no browser needed. Your sBTC is supplied to Zest, borrowed against, and re-supplied for amplified Bitcoin exposure. Backend sponsors gas. For simple yield without leverage, use pillar_direct_supply instead.
    pillar_direct_boost:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_direct_create_wallet: Create a new Pillar smart wallet for agent direct operations. This is a bundled operation: generates a signing keypair, unlocks it, and deploys a new smart wallet with the pubkey registered. Backend deploys the contract and calls onboard() in background. After ~20-30 seconds the wallet is ready for pillar_direct_* operations.
    pillar_direct_create_wallet:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_direct_dca_invite: Invite a DCA partner by email or wallet address. DCA partners hold each other accountable — both must boost each week to keep the streak alive.
    pillar_direct_dca_invite:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_direct_resolve_recipient: Resolve a recipient before sending. Resolves BNS names (.btc) via backend, Pillar wallet names via backend, or validates a Stacks address. Use this BEFORE pillar_direct_send to confirm the resolved address with the user.
    pillar_direct_resolve_recipient:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_direct_send: Send sBTC from your Pillar smart wallet to a recipient. Agent-signed, no browser needed. Supports BNS names, wallet names, or Stacks addresses. Backend sponsors gas.
    pillar_direct_send:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_disconnect: Disconnect from Pillar. Clears locally stored wallet address.
    pillar_disconnect:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_invite: Get your Pillar referral link to invite friends. Share this link and earn rewards when friends sign up.
    pillar_invite:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_key_generate: Generate a new secp256k1 signing keypair for Pillar smart wallet direct operations. Returns the compressed public key (33 bytes hex). After generation, propose this pubkey on your smart wallet contract (admin must do this).
    pillar_key_generate:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_key_lock: Lock the signing key, clearing sensitive data from memory.
    pillar_key_lock:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_key_unlock: Unlock a signing key for Pillar direct operations. Uses auto-derived password. Usually not needed — tools auto-unlock on first use.
    pillar_key_unlock:
        rules:
          - action: allow
            rate_limit: 30/hour
    # pillar_send: Send sBTC from your Pillar smart wallet. Requires being connected first (use pillar_connect). Opens the frontend for signing, then waits for confirmation. Supports three recipient types: 'bns' for BNS names (muneeb.btc), 'wallet' for Pillar wallet names (iphone), 'address' for Stacks addresses (SP...).
    pillar_send:
        rules:
          - action: allow
            rate_limit: 30/hour
    # preorder_bns_name: Preorder a BNS domain name (step 1 of 2-step registration). NOTE: For .btc names, prefer claim_bns_name_fast instead — it registers in one transaction. Use this 2-step flow only for non-.btc namespaces or if claim-fast is unavailable. After preorder is confirmed (~10 minutes), call register_bns_name with the same salt. IMPORTANT: Save the returned salt - you'll need it for the register step!
    preorder_bns_name:
        rules:
          - action: allow
            rate_limit: 30/hour
    # register_bns_name: Register a BNS domain name after preorder is confirmed. This is step 2 of a 2-step process. You MUST use the same salt from the preorder step. Only call this after the preorder transaction has been confirmed on-chain (~10 minutes). Auto-detects contract version: V2 for .btc names, V1 for other namespaces.
    register_bns_name:
        rules:
          - action: allow
            rate_limit: 30/hour
    # reputation_approve_client: Approve a client to submit feedback up to a specified index limit. Must be called by the agent owner. Requires an unlocked wallet.
    reputation_approve_client:
        rules:
          - action: allow
            rate_limit: 30/hour
    # sbtc_initiate_withdrawal: Initiate an sBTC peg-out to a Bitcoin L1 address.

Locks (amount + maxFee) of sBTC in the sBTC protocol and creates a withdrawal request.
Signers later process the request and send BTC on L1.
    sbtc_initiate_withdrawal:
        rules:
          - action: allow
            rate_limit: 30/hour
    # send_inbox_message: Send a paid x402 message to another agent's inbox on aibtc.com.

Uses sponsored transactions so the sender only pays the sBTC message cost — no STX gas fees.

This tool handles the full 5-step x402 payment flow:
1. POST to inbox → receive 402 payment challenge
2. Parse payment requirements from response
3. Build sponsored sBTC transfer (relay pays gas)
4. Encode payment payload
5. Retry with payment proof → message delivered

Use this instead of execute_x402_endpoint for inbox messages — the generic tool has known settlement timeout issues with sBTC contract calls.
    send_inbox_message:
        rules:
          - action: allow
            rate_limit: 30/hour
    # souldinals_inscribe_soul: Inscribe a soul.md as a child inscription - STEP 1: Broadcast commit transaction.

Creates a child inscription linked to a parent genesis inscription, establishing on-chain provenance per the Ordinals provenance spec. Content type is always text/markdown.

You must own the parent inscription (it must be at your wallet's Taproot address).

This broadcasts the commit tx and returns immediately. After it confirms (typically 10-60 min), use `souldinals_reveal_soul` to complete.

Returns: commitTxid, revealAmount, contentBase64 (save all for souldinals_reveal_soul)
    souldinals_inscribe_soul:
        rules:
          - action: allow
            rate_limit: 30/hour
    # wallet_create: Create a new wallet for the agent with a generated BIP39 24-word mnemonic.
The wallet is encrypted locally and stored in ~/.aibtc/.
IMPORTANT: Save the mnemonic securely - it will only be shown once!
    wallet_create:
        rules:
          - action: allow
            rate_limit: 30/hour
    # wallet_export: Export the mnemonic phrase for a wallet.
WARNING: Only use this in a secure environment! Anyone with the mnemonic can access your funds.
    wallet_export:
        rules:
          - action: allow
            rate_limit: 30/hour
    # wallet_import: Import an existing wallet for the agent using a BIP39 mnemonic phrase.
The wallet is encrypted locally and stored in ~/.aibtc/.
    wallet_import:
        rules:
          - action: allow
            rate_limit: 30/hour
    # wallet_lock: Lock the agent's wallet, clearing sensitive data from memory.
    wallet_lock:
        rules:
          - action: allow
            rate_limit: 30/hour
    # wallet_set_timeout: Set how long the agent's wallet stays unlocked before automatically locking. Set to 0 to disable auto-lock.
    wallet_set_timeout:
        rules:
          - action: allow
            rate_limit: 30/hour
    # wallet_switch: Switch to a different wallet.
Note: The new wallet will need to be unlocked before use.
    wallet_switch:
        rules:
          - action: allow
            rate_limit: 30/hour
    # wallet_unlock: Unlock the agent's wallet to enable transactions.
If no wallet ID is provided, unlocks the active wallet.
    wallet_unlock:
        rules:
          - action: allow
            rate_limit: 30/hour
    # yield_hunter_configure: Configure yield hunter settings.

Adjust the deposit threshold, reserve, or check interval.
Changes take effect on the next check cycle.
    yield_hunter_configure:
        rules:
          - action: allow
            rate_limit: 30/hour
    # zest_enable_collateral: Add existing zTokens as collateral on Zest Protocol v2.

Use this when you deposited directly to a vault and need to register
those zTokens as collateral for borrowing.

Note: zest_supply already handles this atomically via supply-collateral-add.
This tool is only needed if you used vault deposit separately.

Mainnet only.
    zest_enable_collateral:
        rules:
          - action: allow
            rate_limit: 30/hour

    # -- Read Tools ----------------------------------------
    # alex_get_pool_info: Get liquidity pool information from ALEX DEX.

Returns reserve balances and pool details for a token pair.

Note: ALEX DEX is only available on mainnet.
    alex_get_pool_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # alex_get_swap_quote: Get a swap quote from ALEX DEX.

Returns the expected output amount for swapping tokenX to tokenY.
Use full contract IDs for tokens (e.g., 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.token-wstx-v2').

Note: ALEX DEX is only available on mainnet.
    alex_get_swap_quote:
        rules:
          - action: allow
            rate_limit: 60/minute
    # alex_list_pools: List all available trading pools on ALEX DEX.

Discovers all token pairs that can be swapped directly.
Returns pool ID, token pair, and factor (fee tier) for each pool.

Use this to find which tokens can be swapped before calling alex_swap.

Note: ALEX DEX is only available on mainnet.
    alex_list_pools:
        rules:
          - action: allow
            rate_limit: 60/minute
    # arxiv_list_digests: List recent arXiv digest files from ~/.aibtc/arxiv-research/digests/.

Digests are created by the arxiv-research skill's compile subcommand or by running
the skill CLI: bun run arxiv-research/arxiv-research.ts compile

Each digest is a timestamped Markdown file. This tool lists them newest-first so
agents can find and read recent digests by file path.

Note: This tool reads the local filesystem on the machine running the MCP server.
Digests are NOT created by arxiv_compile_digest (which returns Markdown inline).
Use the skill CLI to persist digests to disk.

Read-only.
    arxiv_list_digests:
        rules:
          - action: allow
            rate_limit: 60/minute
    # arxiv_search: Fetch recent papers from arXiv and score them for LLM/agent relevance.

Queries the public arXiv Atom API (no API key required). Papers are scored against
relevance signals for: LLMs, autonomous agents, multi-agent systems, tool use,
reasoning, RAG, alignment, orchestration, and MCP (Model Context Protocol).

Default categories: cs.AI, cs.CL, cs.LG, cs.MA (configurable).
Category boosts: cs.MA +3, cs.CL +1, cs.AI +1.

Returns total paper count, relevant paper count, and top papers by score.
Each paper includes title, authors (first 3), truncated abstract, arXiv link,
relevance score, and topic tags.

Read-only. No API key required.
    arxiv_search:
        rules:
          - action: allow
            rate_limit: 60/minute
    # bounty_claim: Claim a bounty on bounty.drx4.xyz.

Submits a claim for an open bounty. Requires an unlocked wallet with BTC keys.
The request is authenticated via BIP-322 signing.

After claiming, use bounty_get to see the bounty detail and track next steps.
The status flow is: open → claimed → submitted → approved → paid.

Fields:
- id: bounty UUID to claim
- notes: optional notes about your approach or qualifications
    bounty_claim:
        rules:
          - action: allow
            rate_limit: 60/minute
    # bounty_get: Get full details for a single bounty on bounty.drx4.xyz.

Returns the bounty description, reward amount, tags, status, all claims,
submissions, payments, and available actions for the current agent.

No authentication required.
    bounty_get:
        rules:
          - action: allow
            rate_limit: 60/minute
    # bounty_list: List bounties on the bounty.drx4.xyz sBTC bounty board.

Returns bounties matching the given filters in reverse chronological order.

Filters:
- status: "open", "claimed", "submitted", "approved", "paid", "cancelled" (default: all)
- tags: comma-separated tag filter (e.g. "stacks,defi")
- creator: filter by creator BTC address
- min_amount: minimum reward in satoshis
- max_amount: maximum reward in satoshis
- limit: max results (default 20)
- offset: pagination offset

No authentication required.
    bounty_list:
        rules:
          - action: allow
            rate_limit: 60/minute
    # bounty_match: Score open bounties against an agent's capability profile.

Fetches all open bounties and ranks them by tag overlap with the provided
capability_tags. Returns bounties sorted by match score (highest first),
with a match_score field showing how many tags matched.

Use this to discover which open bounties are most relevant to your skills.
Provide tags that describe your capabilities (e.g. ["stacks", "clarity", "defi"]).

No authentication required.
    bounty_match:
        rules:
          - action: allow
            rate_limit: 60/minute
    # bounty_my_claims: List all bounty claims and submissions for the current wallet's BTC address.

Returns the agent profile from bounty.drx4.xyz including all bounties created
and claims submitted. If no address is provided, uses the current wallet's BTC address.

No authentication required.
    bounty_my_claims:
        rules:
          - action: allow
            rate_limit: 60/minute
    # bounty_stats: Get aggregate platform statistics from bounty.drx4.xyz.

Returns totals for bounties, agents, claims, submissions, and sBTC paid out.

No authentication required.
    bounty_stats:
        rules:
          - action: allow
            rate_limit: 60/minute
    # bounty_status: Check the current status of a bounty on bounty.drx4.xyz.

Returns the bounty's current status in the workflow, along with any claims
and submission details. The status flow is:
open → claimed → submitted → approved → paid (or cancelled at any point by creator).

No authentication required.
    bounty_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # broadcast_transaction: Broadcast a pre-signed Stacks transaction to the network.
    broadcast_transaction:
        rules:
          - action: allow
            rate_limit: 60/minute
    # btc_sign_message: Sign a plain text message using Bitcoin message signing. Automatically selects BIP-322 for native SegWit (bc1q) and Taproot (bc1p) addresses, and BIP-137 for legacy (1...) and wrapped SegWit (3...) addresses. Use addressType 'p2tr' to force signing with the Taproot key. Use cases: proving Bitcoin address ownership, authentication, off-chain verification. Requires an unlocked wallet with Bitcoin keys.
    btc_sign_message:
        rules:
          - action: allow
            rate_limit: 60/minute
    # btc_verify_message: Verify a Bitcoin message signature (BIP-137 or BIP-322) and recover or confirm the signer. Auto-detects BIP-137 (65-byte compact) vs BIP-322 (witness-serialized) format. BIP-137 works for legacy addresses; BIP-322 is required for bc1q and bc1p addresses. Takes the original message and signature (hex or base64). Compatible with signatures from most Bitcoin wallets.
    btc_verify_message:
        rules:
          - action: allow
            rate_limit: 60/minute
    # call_contract: Call a function on a Stacks smart contract. Signs and broadcasts the transaction.

For typed arguments, use objects like {type: 'uint', value: 100} or {type: 'principal', value: 'SP...'}

Post conditions constrain what assets the transaction can move. Each condition is an object:
- STX: {type: 'stx', principal: 'SP...', conditionCode: 'eq'|'gt'|'gte'|'lt'|'lte', amount: '1000000'}
- FT: {type: 'ft', principal: 'SP...', asset: 'SP...contract', assetName: 'token-name', conditionCode: 'eq', amount: '1000'}
- NFT: {type: 'nft', principal: 'SP...', asset: 'SP...contract', assetName: 'nft-name', tokenId: '1', notSend?: boolean}
    call_contract:
        rules:
          - action: allow
            rate_limit: 60/minute
    # call_read_only_function: Call a read-only function on a smart contract (no signing required).
    call_read_only_function:
        rules:
          - action: allow
            rate_limit: 60/minute
    # check_bns_availability: Check if a BNS domain name is available for registration.
    check_bns_availability:
        rules:
          - action: allow
            rate_limit: 60/minute
    # check_relay_health: Check the sponsor relay health and nonce status.

Use this tool to diagnose sponsored transaction failures. It will:
- Check relay availability
- Inspect sponsor address nonce state
- Detect nonce gaps that block transactions
- Detect mempool desync (confirmed nonce far behind mempool nonce)
- List stuck transactions with txid, nonce, and how long they have been pending
- Report mempool congestion

If nonce gaps or stuck transactions are detected, the output includes
txids and pending durations to share with the AIBTC team for recovery.
    check_relay_health:
        rules:
          - action: allow
            rate_limit: 60/minute
    # claim_bns_name_fast: Register a BNS domain name in a single transaction using name-claim-fast. This is the RECOMMENDED method — no preorder/register wait needed. Burns the name price in STX and mints the BNS NFT atomically. Works for all open namespaces (BNS V2).
    claim_bns_name_fast:
        rules:
          - action: allow
            rate_limit: 60/minute
    # credentials_get: Retrieve a stored credential value by service and key. Returns the decrypted value. WARNING: The returned value is sensitive — do not log or display it unnecessarily.
    credentials_get:
        rules:
          - action: allow
            rate_limit: 60/minute
    # credentials_list: List all stored credentials. Shows service names, key names, and last-updated timestamps. Does NOT reveal credential values.
    credentials_list:
        rules:
          - action: allow
            rate_limit: 60/minute
    # dual_stacking_get_rewards: Get earned sBTC rewards for a specific Dual Stacking cycle.

Returns the reward amount in satoshis and BTC for a given cycle and address.
The rollback parameter lets you look up rewards from a specific snapshot offset
within the cycle (default 0 = most recent).

Note: Dual Stacking is only available on mainnet.
    dual_stacking_get_rewards:
        rules:
          - action: allow
            rate_limit: 60/minute
    # dual_stacking_status: Check Dual Stacking enrollment status, APR data, minimum amount, and cycle overview.

Dual Stacking lets sBTC holders earn BTC-denominated rewards (paid as sBTC) by
holding sBTC. Enrollment runs per PoX cycle; you enroll now to be active next cycle.

Returns enrollment state for both the current and next cycle, the APR range
(higher with more stacked STX), minimum enrollment amount, and current cycle data.

Note: Dual Stacking is only available on mainnet.
    dual_stacking_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # extend_stacking: Extend an existing stacking lock period.
    extend_stacking:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_account_info: Get detailed account information including nonce and balance.
    get_account_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_account_transactions: Get transaction history for an account.
    get_account_transactions:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_block_info: Get information about a specific block.
    get_block_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_bns_info: Get detailed information about a BNS domain name.
    get_bns_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_bns_price: Get the registration price for a BNS domain name.
    get_bns_price:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_btc_address_txs: Get recent transaction history for a Bitcoin address (last 25 transactions). Returns a summary of each transaction including confirmation status, fee, and amounts. Useful for monitoring address activity and verifying payment receipts.
    get_btc_address_txs:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_btc_balance: Get the BTC balance for a Bitcoin address. Returns both total balance (including unconfirmed) and confirmed balance.
    get_btc_balance:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_btc_fees: Get current Bitcoin fee estimates for different confirmation targets. Returns fast (~10 min), medium (~30 min), and slow (~1 hour) fee rates in sat/vB.
    get_btc_fees:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_btc_mempool_info: Get current Bitcoin mempool statistics including transaction count, virtual size, total fees, and fee histogram. Useful for monitoring network congestion and estimating confirmation times.
    get_btc_mempool_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_btc_transaction_status: Get confirmation status and details for a Bitcoin transaction by txid. Returns whether the transaction is confirmed, block height, fee, size, and I/O summary. Works for both confirmed and unconfirmed (mempool) transactions.
    get_btc_transaction_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_btc_utxos: List all UTXOs (Unspent Transaction Outputs) for a Bitcoin address. Useful for debugging, transparency, and understanding transaction inputs.
    get_btc_utxos:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_cardinal_utxos: Get cardinal UTXOs (safe to spend - no inscriptions). Cardinal UTXOs are regular Bitcoin outputs that do not contain ordinal inscriptions. These UTXOs can be safely used for regular Bitcoin transfers and fees. Only available on mainnet (Hiro Ordinals API does not index testnet).
    get_cardinal_utxos:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_collection_info: Get information about an NFT collection.
    get_collection_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_contract_events: Get events emitted by a smart contract.
    get_contract_events:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_contract_info: Get information about a smart contract including its ABI.
    get_contract_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_inscriptions_by_address: Get all inscriptions owned by a Bitcoin address. Returns inscription IDs, content types, and metadata. Only available on mainnet (Hiro Ordinals API does not index testnet).
    get_inscriptions_by_address:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_mempool_info: Get pending transactions in the mempool.
    get_mempool_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_network_status: Get the current status of the Stacks network.
    get_network_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_nft_history: Get the transfer history of NFTs in a collection.
    get_nft_history:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_nft_holdings: List all NFTs owned by an address.
    get_nft_holdings:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_nft_metadata: Get metadata for a specific NFT (SIP-016).
    get_nft_metadata:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_nft_owner: Get the current owner of a specific NFT.
    get_nft_owner:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_ordinal_utxos: Get ordinal UTXOs (contain inscriptions - do not spend). Ordinal UTXOs contain Bitcoin inscriptions and should not be spent in regular transfers. These UTXOs are valuable as they carry ordinal data (text, images, etc.). Only available on mainnet (Hiro Ordinals API does not index testnet).
    get_ordinal_utxos:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_pox_info: Get current Proof of Transfer (PoX) cycle information.
    get_pox_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_rune_balances: Fetch all rune token balances held at a Bitcoin address via the Unisat indexer.

Returns rune IDs, amounts, symbols, and divisibility for all runes at the address.

If no address is provided, uses the active wallet's Taproot address.
Set UNISAT_API_KEY for higher rate limits (5 req/s on free tier).
    get_rune_balances:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_rune_utxos: List UTXOs containing a specific rune at a Bitcoin address via the Unisat indexer.

Rune ID format: 'block:tx' (e.g., '840000:1' for UNCOMMONGOODS).

If no address is provided, uses the active wallet's Taproot address.
    get_rune_utxos:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_stacking_status: Check if an address is currently stacking STX.
    get_stacking_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_stx_balance: Get the STX balance for a wallet address.
    get_stx_balance:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_stx_fees: Get current STX fee estimates for different priority levels. Returns low, medium, and high fee tiers in micro-STX, based on mempool analysis.
    get_stx_fees:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_token_balance: Get the balance of any SIP-010 token for a wallet address.

Supports well-known tokens by symbol: sBTC, USDCx, ALEX, DIKO
Or use the full contract ID: address.contract-name
    get_token_balance:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_token_holders: Get the top holders of a SIP-010 token.
    get_token_holders:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_token_info: Get metadata for a SIP-010 token (name, symbol, decimals, supply).
    get_token_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_transaction_status: Check the status of a Stacks transaction by its txid.
    get_transaction_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # get_wallet_info: Get the agent's wallet address and status. If the agent doesn't have a wallet yet, provides guidance on how to assign one.
    get_wallet_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # identity_get: Get agent identity information from ERC-8004 identity registry. Returns owner address, URI, and wallet address if set.
    identity_get:
        rules:
          - action: allow
            rate_limit: 60/minute
    # identity_get_last_id: Get the most recently minted agent ID from the ERC-8004 identity registry. Returns null if no agents have been registered.
    identity_get_last_id:
        rules:
          - action: allow
            rate_limit: 60/minute
    # identity_get_metadata: Read a single metadata value by key from an agent's ERC-8004 identity. Returns the raw buffer value as a hex string.
    identity_get_metadata:
        rules:
          - action: allow
            rate_limit: 60/minute
    # jingswap_get_cycle_state: Get the current Jingswap auction cycle state including phase (deposit/buffer/settle), blocks elapsed, cycle totals (token B + sBTC deposited), and minimum deposit requirements. Use this to understand where the auction currently stands.
    jingswap_get_cycle_state:
        rules:
          - action: allow
            rate_limit: 60/minute
    # jingswap_get_cycles_history: Get the full history of all auction cycles from cycle 0 to the current cycle. Each entry includes settlement data (if settled) and cycle totals. Useful for analyzing historical auction performance and volume.
    jingswap_get_cycles_history:
        rules:
          - action: allow
            rate_limit: 60/minute
    # jingswap_get_depositors: Get the list of token B and sBTC depositors for a specific auction cycle. Returns arrays of Stacks addresses on each side. Max 50 depositors per side.
    jingswap_get_depositors:
        rules:
          - action: allow
            rate_limit: 60/minute
    # jingswap_get_prices: Get current oracle and DEX prices used by the Jingswap auction. Returns Pyth oracle prices (BTC/USD, STX/USD with confidence and freshness), on-chain DEX prices (XYK pool with TVL, DLMM), and the derived price ratio.
    jingswap_get_prices:
        rules:
          - action: allow
            rate_limit: 60/minute
    # jingswap_get_settlement: Get settlement details for a completed auction cycle. Returns clearing price, amounts cleared, fees, and the block height at which settlement occurred. Returns null settlement if the cycle hasn't been settled yet.
    jingswap_get_settlement:
        rules:
          - action: allow
            rate_limit: 60/minute
    # jingswap_get_user_activity: Get a user's auction activity history — deposits, cancellations, fills, and settlements. Indexed from on-chain contract events.
    jingswap_get_user_activity:
        rules:
          - action: allow
            rate_limit: 60/minute
    # jingswap_get_user_deposit: Get a specific user's deposit amounts (token B and sBTC) for a given auction cycle.
    jingswap_get_user_deposit:
        rules:
          - action: allow
            rate_limit: 60/minute
    # jingswap_settle: Settle the current auction cycle using stored Pyth oracle prices (free). WARNING: This will almost always fail because stored prices go stale quickly. Prefer jingswap_settle_with_refresh instead — it fetches fresh prices and is much more reliable. Only works after deposits have been closed (buffer/settle phase).
    jingswap_settle:
        rules:
          - action: allow
            rate_limit: 60/minute
    # list_user_domains: List all BNS domains owned by an address.
    list_user_domains:
        rules:
          - action: allow
            rate_limit: 60/minute
    # list_user_tokens: List all fungible tokens owned by an address.
    list_user_tokens:
        rules:
          - action: allow
            rate_limit: 60/minute
    # list_x402_endpoints: List known x402 API endpoints from x402.biwas.xyz, x402.aibtc.com, stx402.com, aibtc.com.

The agent can:
1. Execute x402 endpoints from these sources (paid API calls with automatic payment handling)
2. Execute direct Stacks transactions (transfer STX, call contracts, deploy contracts)

Sources:
- x402.biwas.xyz: DeFi analytics, market data, wallet analysis, Zest/ALEX protocols
- x402.aibtc.com: AI inference, OpenRouter integration, Stacks utilities, hashing, storage
- stx402.com: AI services, cryptography, storage, utilities, agent registry
- aibtc.com: Inbox messaging system
    list_x402_endpoints:
        rules:
          - action: allow
            rate_limit: 60/minute
    # lookup_bns_name: Resolve a .btc domain name to its Stacks address.
    lookup_bns_name:
        rules:
          - action: allow
            rate_limit: 60/minute
    # news_check_status: Check the news standing for a BTC address on aibtc.news.

Returns signal count, current streak, earnings, and display name for any correspondent.
If no address is provided, uses the current wallet's BTC address.

No authentication required.
    news_check_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # news_file_signal: File a signal on a beat at aibtc.news.

Requires an unlocked wallet with a P2WPKH (bc1q) BTC address. The tool
automatically signs the request using BIP-322 and attaches the required
authentication headers (X-BTC-Address, X-BTC-Signature, X-BTC-Timestamp).

Note: Only bc1q addresses are supported by the news API for authentication.
Taproot (bc1p) addresses cannot file signals.

Fields:
- beat_slug: the beat to file under (use news_list_beats to discover slugs)
- headline: short headline, max 120 chars (required)
- body: signal body, max 1000 chars (optional but recommended)
- sources: 1-5 source objects with url and title (required)
- tags: 1-10 lowercase tag slugs (required)
- disclosure: AI model and tooling declaration (optional but strongly recommended)
    news_file_signal:
        rules:
          - action: allow
            rate_limit: 60/minute
    # news_front_page: Get the latest compiled intelligence brief from aibtc.news.

Returns the most recent daily brief, including the compiled text, metadata, and
Bitcoin inscription info if the brief has been inscribed on-chain.

To get a specific date's brief, use the optional date parameter (YYYY-MM-DD).

No authentication required.
    news_front_page:
        rules:
          - action: allow
            rate_limit: 60/minute
    # news_leaderboard: Get ranked correspondents from aibtc.news with signal counts, streaks, and resolved display names.

Returns the full correspondent leaderboard sorted by activity. Use this to see
which agents are most active, check streak standings, or discover correspondents
covering specific beats.

No authentication required.
    news_leaderboard:
        rules:
          - action: allow
            rate_limit: 60/minute
    # news_list_beats: List all registered beats on aibtc.news.

Beats are topic areas that correspondents file signals under (e.g. "btc-macro",
"dao-watch", "agent-intel"). Use this to discover available beats before filing
a signal or to find which beat slug to use as a filter in news_list_signals.

No authentication required.
    news_list_beats:
        rules:
          - action: allow
            rate_limit: 60/minute
    # news_list_signals: Browse the aibtc.news signal feed. Returns signals in reverse chronological order.

Supports optional filters:
- beat: filter by beat slug (e.g. "btc-macro", "dao-watch")
- agent: filter by BTC address of the correspondent
- tag: filter by tag slug
- since: ISO timestamp — only return signals newer than this
- limit: max results (default 50, max 200)

No authentication required.
    news_list_signals:
        rules:
          - action: allow
            rate_limit: 60/minute
    # nonce_health: Check the sender nonce health for the active wallet.

Compares the local nonce tracker state (persisted at ~/.aibtc/nonce-state.json)
against the chain's view from Hiro API. Use this to diagnose:
- Nonce conflicts (ConflictingNonceInMempool)
- Stuck transaction queues
- Gaps in the nonce sequence
- Stale local tracker state

Returns:
- local: lastUsedNonce, pending count, staleness
- chain: possibleNextNonce, lastExecuted, mempool nonces, missing nonces
- healthy: whether the nonce state looks good
- issues: list of detected problems with recommendations
    nonce_health:
        rules:
          - action: allow
            rate_limit: 60/minute
    # nostr_get_profile: Get a Nostr profile (kind:0 metadata) for any public key. No wallet required.
    nostr_get_profile:
        rules:
          - action: allow
            rate_limit: 60/minute
    # nostr_get_pubkey: Derive the Nostr public key from the active wallet. Uses the NIP-06 derivation path (m/44'/1237'/0'/0/0). Returns both hex pubkey and npub (bech32) formats. Requires an unlocked wallet.
    nostr_get_pubkey:
        rules:
          - action: allow
            rate_limit: 60/minute
    # nostr_read_feed: Read recent kind:1 notes from Nostr relays. Optionally filter by author pubkey. No wallet required.
    nostr_read_feed:
        rules:
          - action: allow
            rate_limit: 60/minute
    # nostr_relay_list: List the configured default Nostr relay URLs. No wallet required.
    nostr_relay_list:
        rules:
          - action: allow
            rate_limit: 60/minute
    # nostr_search_tags: Search Nostr for kind:1 notes matching hashtags using NIP-12 #t filter. No wallet required.
    nostr_search_tags:
        rules:
          - action: allow
            rate_limit: 60/minute
    # nostr_sign_event: Sign a Nostr event (NIP-01) using BIP-340 Schnorr. Defaults to the NIP-06 derived key (m/44'/1237'/0'/0/0) for a proper Nostr identity. Use keySource to select a different key: 'taproot' (BIP-86) or 'segwit' (P2WPKH x-only). Computes the NIP-01 event ID (SHA-256 of the canonical serialization) and signs it. Returns the complete signed event ready to publish to Nostr relays. Requires an unlocked wallet.
    nostr_sign_event:
        rules:
          - action: allow
            rate_limit: 60/minute
    # openrouter_models: Get list of popular OpenRouter models with capabilities and context lengths.

Use this to choose the right model for your use case. For latest pricing, check openrouter.ai/models
    openrouter_models:
        rules:
          - action: allow
            rate_limit: 60/minute
    # ordinals_buy: Buy a listed inscription from Magic Eden.

Requests a buyer PSBT from the Magic Eden API, funded by the active wallet.
Returns a PSBT that combines the seller's listing inputs with the buyer's payment
inputs. The buyer signs the PSBT then broadcasts it to complete the purchase.

Requires an unlocked wallet with Bitcoin keys and sufficient BTC balance.

Steps:
1. Call ordinals_get_listings to find an inscription and its price
2. Call ordinals_buy with the inscriptionId and desired buyer address
3. Sign the returned PSBT using psbt_sign
4. Broadcast using psbt_broadcast
    ordinals_buy:
        rules:
          - action: allow
            rate_limit: 60/minute
    # ordinals_get_listings: Browse ordinals/inscriptions listed for sale on Magic Eden.

Returns active sale listings with price, seller, and inscription details.
Supports filtering by collection symbol and price range. No wallet required.

Note: Without a MAGIC_EDEN_API_KEY environment variable set, requests use the
shared unauthenticated rate limit of 30 QPM across all users. Set MAGIC_EDEN_API_KEY
to use an authenticated rate limit.

Examples:
- Browse all listings: ordinals_get_listings {}
- Filter by collection: ordinals_get_listings { collection: "nodemonkes" }
- Price range: ordinals_get_listings { minPriceSats: 100000, maxPriceSats: 1000000 }
    ordinals_get_listings:
        rules:
          - action: allow
            rate_limit: 60/minute
    # ordinals_list_for_sale: List a wallet inscription for sale on Magic Eden.

Requests a PSBT-based listing transaction from the Magic Eden API.
The seller signs the PSBT to authorize the sale without moving the inscription.
Requires an unlocked wallet with Bitcoin (Taproot) keys.

Steps:
1. Call this tool with inscriptionId and priceSats
2. Sign the returned PSBT using psbt_sign
3. Submit the signed PSBT back to Magic Eden to complete the listing

Note: The inscription must be in the wallet's Taproot (P2TR) address.
    ordinals_list_for_sale:
        rules:
          - action: allow
            rate_limit: 60/minute
    # ordinals_list_for_sale_submit: Submit a signed listing PSBT to Magic Eden to finalize an ordinal listing.

Call this after signing the PSBT returned by ordinals_list_for_sale.
The signed PSBT is POST'd to Magic Eden to register the listing on the marketplace.

Steps:
1. Call ordinals_list_for_sale to get a listing PSBT
2. Sign the PSBT using psbt_sign
3. Call this tool with the signed PSBT to publish the listing
    ordinals_list_for_sale_submit:
        rules:
          - action: allow
            rate_limit: 60/minute
    # ordinals_p2p_agents: List active agents registered on the ordinals P2P trade ledger.

Returns agents that have participated in trades, along with their trade counts
and last activity. Useful for discovering counterparties.

No wallet required.
    ordinals_p2p_agents:
        rules:
          - action: allow
            rate_limit: 60/minute
    # ordinals_p2p_counter: Counter an existing offer with a new proposed price.

Submits a counter-offer linked to a parent trade. The active wallet signs the
counter with BIP-137 to prove identity. Either party in a trade may counter.

Requires an unlocked wallet with Bitcoin keys.
    ordinals_p2p_counter:
        rules:
          - action: allow
            rate_limit: 60/minute
    # ordinals_p2p_get_trade: Fetch full details for a single trade from the ordinals P2P ledger.

Returns the trade record including all counters, transfer history, and current status.

No wallet required.
    ordinals_p2p_get_trade:
        rules:
          - action: allow
            rate_limit: 60/minute
    # ordinals_p2p_list_trades: Browse the public ordinals P2P trade ledger at ledger.drx4.xyz.

Returns a paginated list of trades with optional filters. Useful for discovering
open offers, reviewing recent activity, or searching for a specific inscription.

No wallet required.
    ordinals_p2p_list_trades:
        rules:
          - action: allow
            rate_limit: 60/minute
    # ordinals_p2p_my_trades: List all trades involving the active wallet's BTC address.

Queries the ledger for trades where the active wallet is either the buyer or seller.
Requires an unlocked wallet so the BTC address can be resolved automatically.

You can optionally filter by status.
    ordinals_p2p_my_trades:
        rules:
          - action: allow
            rate_limit: 60/minute
    # ordinals_p2p_psbt_swap: Record a completed PSBT atomic swap on the trade ledger.

After both parties have signed a PSBT and the transaction is broadcast, use this
tool to record the completed swap. The active wallet signs the record with BIP-137.

To construct and sign the PSBT itself, use psbt_create_ordinal_buy, psbt_sign,
and psbt_broadcast first, then call this tool with the resulting txid.

Requires an unlocked wallet with Bitcoin keys.
    ordinals_p2p_psbt_swap:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_dca_leaderboard: View the DCA streak leaderboard. Shows top partnerships by streak length, and highlights your entry if you have one.
    pillar_dca_leaderboard:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_dca_partners: View your DCA partners and weekly status. Shows active partnerships with streak, PnL, and weekly status badges, plus any pending invites.
    pillar_dca_partners:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_dca_status: Check your DCA schedule status. Shows all active DCA schedules (up to 10) with chunk progress (completed, pending, failed) and next execution time.
    pillar_dca_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_direct_dca_leaderboard: View the DCA streak leaderboard. Shows top partnerships by streak length, and highlights your entry if you have one.
    pillar_direct_dca_leaderboard:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_direct_dca_partners: View your DCA partners and weekly status. Shows active partnerships with streak, PnL, and weekly status badges, plus any pending invites.
    pillar_direct_dca_partners:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_direct_dca_status: Check your DCA schedule status. Shows all active DCA schedules (up to 10) with chunk progress (completed, pending, failed) and next execution time.
    pillar_direct_dca_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_direct_position: View your Pillar smart wallet balances (STX, sBTC, aeUSDC) and Zest position. No signing needed — reads on-chain data.
    pillar_direct_position:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_direct_quote: Get a boost quote showing projected leverage, LTV, and swap details. No signing needed. Use this to determine aeUsdcToBorrow and minSbtcFromSwap before calling pillar_direct_boost.
    pillar_direct_quote:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_direct_stack_stx: Stack STX from your Pillar smart wallet via Fast Pool or Stacking DAO. Agent-signed, no browser needed. Backend sponsors gas. Fast Pool delegates STX to the pox4-fast-pool-v3 contract. Stacking DAO deposits STX into Stacking DAO core for stSTX yield. Your wallet must be enrolled in dual stacking first (automatic for v2 wallets with sBTC).
    pillar_direct_stack_stx:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_direct_stacking_status: Check stacking status for your Pillar smart wallet. No signing needed — reads on-chain data. Shows STX balance (locked vs liquid), current PoX cycle info, and dual stacking enrollment status.
    pillar_direct_stacking_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_direct_supply: Earn yield on your Bitcoin. Supply sBTC from your Pillar smart wallet to Zest Protocol. No leverage, no liquidation risk. Agent-signed, no browser needed. Backend sponsors gas. For leveraged exposure (1.5x), use pillar_direct_boost instead.
    pillar_direct_supply:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_direct_unwind: Close or reduce your leveraged sBTC position. Agent-signed, no browser needed. Swaps sBTC to aeUSDC to repay debt, then withdraws remaining sBTC collateral. Backend sponsors gas.
    pillar_direct_unwind:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_fund: Fund your Pillar smart wallet. Supports multiple methods:
- 'exchange': Deposit BTC from an exchange (Coinbase, Binance, etc.) - generates a deposit address
- 'btc': Deposit BTC from your Leather/Xverse wallet - auto-converts to sBTC
- 'sbtc': Deposit sBTC directly from your Leather/Xverse wallet
Opens the frontend with the appropriate deposit flow.
    pillar_fund:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_key_info: Show signing key info: pubkey, smart wallet, lock status, and all stored keys.
    pillar_key_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_position: View your Pillar wallet balance and Zest position. Opens the Position page in the browser AND returns the data (sBTC balance, collateral, borrowed, LTV, liquidation price).
    pillar_position:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_status: Check if you're connected to Pillar and get your wallet address.
    pillar_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_supply: Earn yield on your Bitcoin. Supply sBTC from your Pillar smart wallet to Zest Protocol. Your sBTC earns interest with no leverage and no liquidation risk. This is the simplest way to earn on Pillar (Earn tab). For leveraged exposure, use pillar_boost instead.
    pillar_supply:
        rules:
          - action: allow
            rate_limit: 60/minute
    # pillar_unwind: Close or reduce your leveraged sBTC position. Opens a modal to repay borrowed sBTC and withdraw collateral back to your wallet.
    pillar_unwind:
        rules:
          - action: allow
            rate_limit: 60/minute
    # reputation_append_response: Append a response to feedback received from a client. Must be called by the agent that received the feedback. Requires an unlocked wallet.
    reputation_append_response:
        rules:
          - action: allow
            rate_limit: 60/minute
    # reputation_get_approved_limit: Get the approved feedback index limit for a specific client of an agent. Returns the maximum index up to which the client is approved to submit feedback. No wallet required.
    reputation_get_approved_limit:
        rules:
          - action: allow
            rate_limit: 60/minute
    # reputation_get_clients: Get a paginated list of clients who gave feedback to an agent. Returns client addresses and a nextCursor for pagination. No wallet required.
    reputation_get_clients:
        rules:
          - action: allow
            rate_limit: 60/minute
    # reputation_get_feedback_count: Get the total number of feedback entries for an agent from the ERC-8004 reputation registry. No wallet required.
    reputation_get_feedback_count:
        rules:
          - action: allow
            rate_limit: 60/minute
    # reputation_get_last_index: Get the last feedback index submitted by a specific client for an agent. No wallet required.
    reputation_get_last_index:
        rules:
          - action: allow
            rate_limit: 60/minute
    # reputation_get_summary: Get aggregated reputation summary for an agent from the ERC-8004 reputation registry. Returns average rating as a WAD string (18 decimals) and total feedback count. No wallet required.
    reputation_get_summary:
        rules:
          - action: allow
            rate_limit: 60/minute
    # reputation_give_feedback: Submit feedback for an agent using the ERC-8004 reputation registry. Value is normalized to 18 decimals (WAD) internally for aggregation. Requires an unlocked wallet.
    reputation_give_feedback:
        rules:
          - action: allow
            rate_limit: 60/minute
    # reputation_read_all_feedback: Read all feedback entries for an agent with optional tag filtering and pagination. Returns up to 20 entries per page. Pass nextCursor from the previous response to page. WARNING: Uses one RPC call per entry (N+1 pattern) — avoid calling for agents with large feedback sets without using cursor-based pagination. No wallet required.
    reputation_read_all_feedback:
        rules:
          - action: allow
            rate_limit: 60/minute
    # reputation_read_feedback: Read a specific feedback entry for an agent by index from the ERC-8004 reputation registry. Returns client address, value, decimals, tags, and timestamp. No wallet required.
    reputation_read_feedback:
        rules:
          - action: allow
            rate_limit: 60/minute
    # reverse_bns_lookup: Get the BNS domain names owned by an address.
    reverse_bns_lookup:
        rules:
          - action: allow
            rate_limit: 60/minute
    # runes_get_activity: Get recent on-chain activity (mints, transfers, burns) for a specific Bitcoin Rune.

Returns transaction events with amounts, addresses, block heights, and timestamps.

Useful for monitoring rune distribution and trading activity.
    runes_get_activity:
        rules:
          - action: allow
            rate_limit: 60/minute
    # runes_get_address_activity: Get Bitcoin Rune transaction activity for a specific Bitcoin address.

Returns mints received, transfers sent/received, and burns associated with this address across all runes.

Address can be any Bitcoin address format (P2WPKH bc1q..., P2TR bc1p..., legacy 1..., etc.)
    runes_get_address_activity:
        rules:
          - action: allow
            rate_limit: 60/minute
    # runes_get_address_balances: Get all Bitcoin Rune balances for a Bitcoin address.

Returns each rune the address holds along with its balance, divisibility, and symbol. Useful for checking which runes a wallet owns.

Address can be any Bitcoin address format (P2WPKH bc1q..., P2TR bc1p..., legacy 1..., etc.)
    runes_get_address_balances:
        rules:
          - action: allow
            rate_limit: 60/minute
    # runes_get_etching: Get details for a specific Bitcoin Rune by its name or numeric ID.

Returns name, ID, supply info, divisibility, symbol, etching transaction, cenotaph status, terms (mint conditions), and turbo flag.

Rune names use spacers (e.g., 'UNCOMMONGOODS' or 'UNCOMMON•GOODS').
    runes_get_etching:
        rules:
          - action: allow
            rate_limit: 60/minute
    # runes_get_holders: Get the list of holders for a specific Bitcoin Rune.

Returns Bitcoin addresses and their rune balances, sorted by balance descending.

Supports pagination for runes with many holders.
    runes_get_holders:
        rules:
          - action: allow
            rate_limit: 60/minute
    # runes_list_etchings: List all Bitcoin Rune etchings (token deployments) with pagination.

Returns rune names, IDs, supply, divisibility, symbol, etching transaction, and other metadata for each rune.

Use runes_get_etching to get full details on a specific rune.
    runes_list_etchings:
        rules:
          - action: allow
            rate_limit: 60/minute
    # sbtc_deposit_status: Check the status of an sBTC deposit transaction from Emily API.
    sbtc_deposit_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # sbtc_get_balance: Get the sBTC balance for a wallet address.
    sbtc_get_balance:
        rules:
          - action: allow
            rate_limit: 60/minute
    # sbtc_get_deposit_info: Get information about how to deposit BTC to receive sBTC.
    sbtc_get_deposit_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # sbtc_get_peg_info: Get sBTC peg information including total supply and peg ratio.
    sbtc_get_peg_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # sbtc_withdraw_status: Alias for sbtc_withdrawal_status. Check the status of an sBTC peg-out (withdrawal) request.
    sbtc_withdraw_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # sbtc_withdrawal_status: Check status of an sBTC withdrawal request by requestId or initiating txid.
    sbtc_withdrawal_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # schnorr_sign_digest: Sign a raw 32-byte digest with Schnorr (BIP-340) using the wallet's Taproot private key. Use for Taproot script-path spending, multisig coordination, or any case where you need a BIP-340 Schnorr signature over a pre-computed hash (e.g., BIP-341 sighash). WARNING: This signs raw digests that cannot be human-verified — use confirmBlindSign=true after reviewing the digest. Returns a 64-byte signature and the x-only public key. Requires an unlocked wallet.
    schnorr_sign_digest:
        rules:
          - action: allow
            rate_limit: 60/minute
    # schnorr_verify_digest: Verify a BIP-340 Schnorr signature over a 32-byte digest. Takes the digest, signature, and public key, returns whether the signature is valid. Use for verifying Taproot signatures from other agents in multisig coordination.
    schnorr_verify_digest:
        rules:
          - action: allow
            rate_limit: 60/minute
    # sip018_hash: Compute the SIP-018 message hash without signing. Returns the full encoded hash, domain hash, and message hash. Useful for preparing data for on-chain verification or multi-sig coordination. Does not require an unlocked wallet.
    sip018_hash:
        rules:
          - action: allow
            rate_limit: 60/minute
    # sip018_sign: Sign structured Clarity data using SIP-018 standard. Creates a signature that can be verified both off-chain and on-chain by smart contracts. Use cases: meta-transactions, off-chain voting, permits, proving address control. Requires an unlocked wallet.
    sip018_sign:
        rules:
          - action: allow
            rate_limit: 60/minute
    # sip018_verify: Verify a SIP-018 signature and recover the signer's address. Takes the verification hash (from sip018_sign or sip018_hash 'verification' field) and the signature, then recovers the public key and derives the signer's Stacks address.
    sip018_verify:
        rules:
          - action: allow
            rate_limit: 60/minute
    # souldinals_display_soul: Parse and display soul traits from a specific inscription.

Fetches the inscription content from Unisat and extracts structured soul traits:
- name: first H1 heading
- description: first paragraph after H1
- values: list items under 'Values' or 'Core Values' sections
- focusAreas: list items under 'Focus' or 'Focus Areas' sections
- sections: all named H2/H3 sections

Also returns raw Markdown content.
    souldinals_display_soul:
        rules:
          - action: allow
            rate_limit: 60/minute
    # souldinals_list_souls: List all soul inscriptions (text/markdown) owned by a Taproot address.

Queries the Unisat Ordinals API for inscriptions with content type text/markdown.
If no address is provided, uses the current wallet's Taproot address.

Returns: array of soul inscriptions with id, number, content type, size, and timestamp.
    souldinals_list_souls:
        rules:
          - action: allow
            rate_limit: 60/minute
    # souldinals_load_soul: Load and display the full content of the oldest soul inscription from a Taproot address.

Fetches the list of soul inscriptions (text/markdown) and returns the content of the oldest one. If no address is provided, uses the current wallet's Taproot address.

Returns: inscription metadata and full Markdown content.
    souldinals_load_soul:
        rules:
          - action: allow
            rate_limit: 60/minute
    # souldinals_reveal_soul: Complete a soul inscription - STEP 2: Broadcast reveal transaction.

Call this AFTER the commit transaction from `souldinals_inscribe_soul` has confirmed.
Provide the commitTxid, revealAmount, contentBase64, and parentInscriptionId from the commit step response.

The reveal tx spends both the commit output and the parent inscription UTXO, returning the parent to your address and creating the child soul inscription.

Returns: inscriptionId ({revealTxid}i0) on success
    souldinals_reveal_soul:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stack_stx: Lock STX for stacking to earn BTC rewards.

Requires a Bitcoin address (hash) for receiving rewards.
    stack_stx:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stacks_market_buy_no: Buy NO shares in a Stacks Market prediction market.

Uses the buy-no-auto function with slippage protection via a max-cost cap.
The transaction will fail if the cost exceeds max_cost_ustx.

Requires an unlocked wallet. Only available on mainnet.
    stacks_market_buy_no:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stacks_market_buy_yes: Buy YES shares in a Stacks Market prediction market.

Uses the buy-yes-auto function with slippage protection via a max-cost cap.
The transaction will fail if the cost exceeds max_cost_ustx.

Requires an unlocked wallet. Only available on mainnet.
    stacks_market_buy_yes:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stacks_market_get: Get full details for a specific prediction market on stacksmarket.app.

Market IDs are epoch millisecond timestamps (uint) visible in market URLs.

Note: Stacks Market is only available on mainnet.
    stacks_market_get:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stacks_market_get_position: Check YES and NO share balances for an address in a Stacks Market prediction market.

If no address is provided, uses the currently configured wallet address.
No wallet required when an address is explicitly supplied.

Note: Stacks Market is only available on mainnet.
    stacks_market_get_position:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stacks_market_list: List prediction markets on stacksmarket.app.

Returns a paginated list of markets with optional filtering by status, category, or featured flag.

Note: Stacks Market is only available on mainnet.
    stacks_market_list:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stacks_market_quote_buy: Get an LMSR buy price quote for YES or NO shares on a Stacks Market prediction market.

Returns the cost in micro-STX to buy the requested number of shares.
Side: 0 = YES, 1 = NO.

Note: Stacks Market is only available on mainnet.
    stacks_market_quote_buy:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stacks_market_quote_sell: Get an LMSR sell price quote for YES or NO shares on a Stacks Market prediction market.

Returns the proceeds in micro-STX for selling the requested number of shares.
Side: 0 = YES, 1 = NO.

Note: Stacks Market is only available on mainnet.
    stacks_market_quote_sell:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stacks_market_redeem: Redeem winning shares after a Stacks Market prediction market is resolved.

Call this after the market has been resolved to claim STX for the winning side shares you hold.

Requires an unlocked wallet. Only available on mainnet.
    stacks_market_redeem:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stacks_market_search: Search prediction markets by keyword on stacksmarket.app.

Searches across market titles and descriptions.

Note: Stacks Market is only available on mainnet.
    stacks_market_search:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stacks_market_sell_no: Sell NO shares in a Stacks Market prediction market.

Uses the sell-no-auto function with a minimum proceeds guard.
The transaction will fail if proceeds fall below min_proceeds_ustx.

Requires an unlocked wallet. Only available on mainnet.
    stacks_market_sell_no:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stacks_market_sell_yes: Sell YES shares in a Stacks Market prediction market.

Uses the sell-yes-auto function with a minimum proceeds guard.
The transaction will fail if proceeds fall below min_proceeds_ustx.

Requires an unlocked wallet. Only available on mainnet.
    stacks_market_sell_yes:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stacks_sign_message: Sign a plain text message using the Stacks message signing format. The message is prefixed with '\x17Stacks Signed Message:\n' before hashing (SIWS-compatible). Use cases: proving address ownership, authentication, sign-in flows. Requires an unlocked wallet.
    stacks_sign_message:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stacks_verify_message: Verify a Stacks message signature and recover the signer's address. Takes the original message and signature, applies the Stacks prefix, and verifies. Compatible with SIWS (Sign In With Stacks) authentication flows.
    stacks_verify_message:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stackspot_claim_rewards: Claim rewards from a completed Stackspot stacking lottery pot.

After stacking completes and a winner is selected by VRF, each participant claims
their share: all participants recover their contributed STX; the VRF-selected winner
also receives the sBTC yield earned during the stacking cycle.

Use a bare contract name (e.g., "STXLFG") or a fully-qualified identifier.

Requires an unlocked wallet.

Note: Stackspot is only available on mainnet.
    stackspot_claim_rewards:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stackspot_get_pot_state: Get full on-chain state for a Stackspot stacking lottery pot.

Returns the pot value, lock status, configurations, pool config, and detailed state.
Use a bare contract name (e.g., "STXLFG") or a fully-qualified identifier
(e.g., "SPT4SQP5RC1BFAJEQKBHZMXQ8NQ7G118F335BD85.STXLFG").

Note: Stackspot is only available on mainnet.
    stackspot_get_pot_state:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stackspot_join_pot: Contribute STX to a Stackspot stacking lottery pot.

Joins a pot by contributing STX. Your STX is locked until the stacking cycle
completes. All participants recover their STX regardless of who wins; only the
VRF-selected winner receives the sBTC yield.

Use a bare contract name (e.g., "STXLFG") or a fully-qualified identifier.
Amount must be in micro-STX (1 STX = 1,000,000 micro-STX).

Requires an unlocked wallet with sufficient STX balance.

Note: Stackspot is only available on mainnet.
    stackspot_join_pot:
        rules:
          - action: allow
            rate_limit: 60/minute
    # stackspot_list_pots: List all known Stackspot stacking lottery pots with current on-chain values.

Stackspot is a stacking lottery on Stacks: participants pool STX into a pot, the pot
stacks via PoX to earn BTC rewards. A VRF-selected winner receives the sBTC yield;
all participants recover their original STX contribution.

Returns each pot's contract ID, configuration, current STX value, and lock status.

Note: Stackspot is only available on mainnet.
    stackspot_list_pots:
        rules:
          - action: allow
            rate_limit: 60/minute
    # styx_fees: Get current Bitcoin network fee estimates (sat/vB) from Styx: low, medium, high.
    styx_fees:
        rules:
          - action: allow
            rate_limit: 60/minute
    # styx_history: Get BTC→sBTC deposit history for a Stacks address via Styx. Uses the active wallet's Stacks address if no address is provided.
    styx_history:
        rules:
          - action: allow
            rate_limit: 60/minute
    # styx_pool_status: Get current Styx pool liquidity and status. Shows realAvailable and estimatedAvailable BTC in the pool.
    styx_pool_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # styx_pools: List all available Styx pools with their configurations. Pools: main (up to 300k sats, sbtc/usda/pepe), aibtc (up to 1M sats, sbtc/aibtc). Minimum deposit: 10,000 sats for both pools.
    styx_pools:
        rules:
          - action: allow
            rate_limit: 60/minute
    # styx_price: Get current BTC price in USD from Styx.
    styx_price:
        rules:
          - action: allow
            rate_limit: 60/minute
    # styx_status: Check the status of a Styx BTC→sBTC deposit by deposit ID or Bitcoin transaction ID.
    styx_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # taproot_get_pubkey: Derive the x-only Taproot public key (32 bytes hex) from the active wallet using the BIP-86 derivation path m/86'/0'/0'/0/0. Share this pubkey with co-signers to construct a Taproot multisig script tree. Requires the wallet to be unlocked (use wallet_unlock first).
    taproot_get_pubkey:
        rules:
          - action: allow
            rate_limit: 60/minute
    # taproot_multisig_guide: Return a step-by-step guide for M-of-N Taproot multisig coordination between agents using OP_CHECKSIGADD (BIP-341/342). Read-only — no wallet needed.
    taproot_multisig_guide:
        rules:
          - action: allow
            rate_limit: 60/minute
    # taproot_verify_cosig: Verify a Schnorr co-signature against a BIP-341 sighash. Use this to confirm that a co-signer's signature is valid before combining and broadcasting. Read-only — no wallet unlock required.
    taproot_verify_cosig:
        rules:
          - action: allow
            rate_limit: 60/minute
    # tenero_holder_stats: Get token holder distribution and concentration statistics. Shows total holders, top holder percentages, and Gini coefficient. Powered by the Tenero API (api.tenero.io). No authentication required.
    tenero_holder_stats:
        rules:
          - action: allow
            rate_limit: 60/minute
    # tenero_market_stats: Get overall Stacks ecosystem market statistics including total volume, buy/sell netflow, unique traders, and active pools. Returns a time series of daily stats for recent periods. Powered by the Tenero API (api.tenero.io). No authentication required.
    tenero_market_stats:
        rules:
          - action: allow
            rate_limit: 60/minute
    # tenero_market_summary: Get token market summary including price history, 24h volume, and pool liquidity. Returns weighted price across all pools trading this token. Powered by the Tenero API (api.tenero.io). No authentication required.
    tenero_market_summary:
        rules:
          - action: allow
            rate_limit: 60/minute
    # tenero_search: Search tokens, pools, and wallets by name, symbol, or contract address. Returns matching tokens with metadata and pricing information. Powered by the Tenero API (api.tenero.io). No authentication required.
    tenero_search:
        rules:
          - action: allow
            rate_limit: 60/minute
    # tenero_token_info: Get token details including metadata, current price, market cap, and 24h volume. Powered by the Tenero API (api.tenero.io). No authentication required.
    tenero_token_info:
        rules:
          - action: allow
            rate_limit: 60/minute
    # tenero_top_gainers: List top gaining tokens by 24h price change percentage on the Stacks ecosystem. Useful for spotting momentum and trending assets. Powered by the Tenero API (api.tenero.io). No authentication required.
    tenero_top_gainers:
        rules:
          - action: allow
            rate_limit: 60/minute
    # tenero_top_losers: List top losing tokens by 24h price change percentage on the Stacks ecosystem. Useful for identifying underperforming assets or potential reversal candidates. Powered by the Tenero API (api.tenero.io). No authentication required.
    tenero_top_losers:
        rules:
          - action: allow
            rate_limit: 60/minute
    # tenero_trending_pools: List trending DEX liquidity pools by volume over the last hour. Includes pool platform, token pair, volume, and liquidity details. Powered by the Tenero API (api.tenero.io). No authentication required.
    tenero_trending_pools:
        rules:
          - action: allow
            rate_limit: 60/minute
    # tenero_wallet_holdings: Get token holdings with current USD value for a Stacks wallet address. Shows portfolio composition including token balances and estimated values. Powered by the Tenero API (api.tenero.io). No authentication required.
    tenero_wallet_holdings:
        rules:
          - action: allow
            rate_limit: 60/minute
    # tenero_wallet_trades: Get trade history for a Stacks wallet address. Returns recent buy/sell events with token, pool, and USD value details. Powered by the Tenero API (api.tenero.io). No authentication required.
    tenero_wallet_trades:
        rules:
          - action: allow
            rate_limit: 60/minute
    # tenero_whale_trades: Get recent large/whale trades above threshold value on the Stacks ecosystem. Useful for tracking smart money and large market movements. Powered by the Tenero API (api.tenero.io). No authentication required.
    tenero_whale_trades:
        rules:
          - action: allow
            rate_limit: 60/minute
    # tx_status_deep: Deep diagnostic view correlating sender nonces with sponsor nonces for sponsored transactions.

Reads the sender's local pending txid log and cross-references each entry against
the sponsor's mempool to show the full lifecycle of sponsored transactions:
- Which sender nonce maps to which sponsor nonce
- Whether sponsor nonce gaps are blocking specific transactions
- Which pending txids are missing from the sponsor mempool entirely
- Multiple competing txids (RBF candidates) for the same sender nonce slot

Output per nonce slot:
  Sender nonce N:
    - 0xabc (sponsored, sponsor nonce 47) -- BLOCKED by missing sponsor nonces [44, 45]
    - 0xdef (direct, fee 0.01 STX) -- competing RBF candidate
  Sender nonce M (0xghi, sponsored) -> sponsor nonce 48 -- pending, no gaps ahead
  Sender nonce P (0xjkl, sponsored) -> NOT IN SPONSOR MEMPOOL

Use this when check_relay_health shows issues but you need per-transaction clarity.
Returns structured JSON with pendingSlots, sponsorMissingNonces, and summary counts.
    tx_status_deep:
        rules:
          - action: allow
            rate_limit: 60/minute
    # wallet_list: List all wallets available for the agent to use.
    wallet_list:
        rules:
          - action: allow
            rate_limit: 60/minute
    # wallet_rotate_password: Change the password for a wallet's encrypted keystore.
Performs an atomic operation: backs up the keystore, re-encrypts with the new password, verifies the round-trip, then cleans up. If anything fails, the original keystore is restored.
If the wallet is currently unlocked, it will be locked after rotation (requires re-unlock with new password).
    wallet_rotate_password:
        rules:
          - action: allow
            rate_limit: 60/minute
    # wallet_status: Get the agent's wallet status - whether it has a wallet, if it's unlocked, and what it can do.
    wallet_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # yield_dashboard_apy_breakdown: Current APY rates across all supported Stacks DeFi protocols.

Returns live APY data for Zest Protocol (sBTC lending), ALEX DEX (aBTC/STX LP),
Bitflow (sBTC LP), and STX Stacking. No wallet required — pure market data.

Data sources:
- Zest Protocol: on-chain reserve state (current-liquidity-rate, Ray units)
- ALEX DEX: static 3.5% estimate (pool data available but per-user APY not live)
- Bitflow: public API at app.bitflow.finance/api/pools (fallback: 2.8% estimate)
- STX Stacking: static 8.0% estimate

Mainnet data only (contract addresses are mainnet-specific).
    yield_dashboard_apy_breakdown:
        rules:
          - action: allow
            rate_limit: 60/minute
    # yield_dashboard_overview: Portfolio overview across Stacks DeFi protocols.

Aggregates positions across Zest Protocol (sBTC lending), ALEX DEX (AMM LP),
Bitflow (DEX LP), and STX Stacking. Returns total value, weighted APY, and
per-protocol breakdown.

Read-only. Mainnet-only. Requires an unlocked wallet for address context.

Note: ALEX LP and Bitflow LP position values are 0 — these protocols do not
expose user LP positions via read-only calls. APY figures are still returned.
    yield_dashboard_overview:
        rules:
          - action: allow
            rate_limit: 60/minute
    # yield_dashboard_positions: Detailed per-protocol DeFi position data.

Returns an array of positions across Zest Protocol, ALEX DEX, Bitflow, and
STX Stacking. Each position includes protocol, asset, value, APY, risk score,
and protocol-specific details.

Read-only. Mainnet-only. Requires an unlocked wallet for address context.

Known limitations:
- ALEX LP and Bitflow LP: valueSats shows 0 (protocol does not expose user
  LP balances via read-only calls). APY is still returned.
- Stacking: denominated in microSTX, not sats.
    yield_dashboard_positions:
        rules:
          - action: allow
            rate_limit: 60/minute
    # yield_dashboard_rebalance: Rebalance suggestions based on risk-adjusted yield.

Reads current positions across all protocols, compares to optimal allocation
for the chosen risk tolerance, and returns actionable suggestions.

Risk tolerance levels:
- low:    Zest 40%, ALEX 10%, Bitflow 10%, Stacking 40%
- medium: Zest 45%, ALEX 20%, Bitflow 15%, Stacking 20% (default)
- high:   Zest 50%, ALEX 30%, Bitflow 20%, Stacking 0%

Read-only. Mainnet-only. Requires an unlocked wallet for address context.
    yield_dashboard_rebalance:
        rules:
          - action: allow
            rate_limit: 60/minute
    # yield_hunter_status: Get current yield hunter status.

Shows:
- Whether yield hunting is active
- Current configuration
- Statistics (checks run, deposits made)
- Recent activity logs
- Current Zest position
    yield_hunter_status:
        rules:
          - action: allow
            rate_limit: 60/minute
    # zest_borrow: Borrow assets from Zest Protocol v2.

Borrows assets against your supplied collateral.
Ensure you have sufficient collateral to maintain a healthy LTV.
You can use the asset symbol (e.g., 'USDC', 'sBTC') or full contract ID.

Three LTV tiers: ~75% (borrow limit), ~85% (partial liquidation), ~95% (full liquidation).

Note: Zest Protocol is only available on mainnet.
    zest_borrow:
        rules:
          - action: allow
            rate_limit: 60/minute
    # zest_get_position: Get user's lending position on Zest Protocol v2.

Returns collateral, debt, health factor, and LTV data across all assets.
The position query returns USD-denominated totals.

Note: Zest Protocol is only available on mainnet.
    zest_get_position:
        rules:
          - action: allow
            rate_limit: 60/minute
    # zest_list_assets: List all supported assets on Zest Protocol v2.

Returns the list of assets that can be supplied, borrowed, or used as collateral.
Each asset includes its symbol, name, and contract ID.

Supported assets: wSTX, sBTC, stSTX, USDC, USDH, stSTXbtc.

Note: Zest Protocol is only available on mainnet.
    zest_list_assets:
        rules:
          - action: allow
            rate_limit: 60/minute
    # zest_repay: Repay borrowed assets to Zest Protocol v2.

Repays borrowed assets plus accrued interest.
You can use the asset symbol (e.g., 'USDC', 'sBTC') or full contract ID.

Note: Zest Protocol is only available on mainnet.
    zest_repay:
        rules:
          - action: allow
            rate_limit: 60/minute
    # zest_supply: Supply assets to Zest Protocol v2.

Deposits assets and adds them as collateral in one atomic operation.
The supplied assets earn yield AND provide borrowing power.
You can use the asset symbol (e.g., 'sBTC', 'USDC') or full contract ID.

Supported assets: wSTX, sBTC, stSTX, USDC, USDH, stSTXbtc.

Note: Zest Protocol is only available on mainnet.
    zest_supply:
        rules:
          - action: allow
            rate_limit: 60/minute
Can an AI agent move money through the Aibtc MCP server? +

Yes. The Aibtc server exposes 15 financial tools including identity_transfer, jingswap_deposit_sbtc, jingswap_deposit_stx. Without a policy, an autonomous agent can call these with no spend caps, no rate limits, and no approval flow. Intercept lets you block financial tools by default or set per-tool rate limits.

Can an AI agent delete data through the Aibtc MCP server? +

Yes. The Aibtc server exposes 12 destructive tools including credentials_delete, identity_unset_wallet, jingswap_cancel_cycle. These permanently remove resources with no undo. Intercept blocks destructive tools by default so they never reach the upstream server.

How do I prevent bulk modifications through Aibtc? +

The Aibtc server has 48 write tools including credentials_set, credentials_unlock, identity_register. Set rate limits in your policy file -- for example, rate_limit: 10/hour prevents an agent from making more than 10 modifications per hour. Intercept enforces this at the transport layer.

How many tools does the Aibtc MCP server expose? +

288 tools across 5 categories: Destructive, Execute, Financial, Read, Write. 199 are read-only. 89 can modify, create, or delete data.

How do I add Intercept to my Aibtc setup? +

One line change. Instead of running the Aibtc server directly, prefix it with Intercept: intercept -c io-github-aibtcdev-mcp-server.yaml -- npx -y @@aibtc/mcp-server. Download a pre-built policy from policylayer.com/policies/io-github-aibtcdev-mcp-server and adjust the limits to match your use case.

Enforce policies on Aibtc

Open source. One binary. Zero dependencies.

npx -y @policylayer/intercept
github.com/policylayer/intercept →
// GET IN TOUCH

Have a question or want to learn more? Send us a message.

Message sent.

We'll get back to you soon.