View full policy →

Aibtc: 89 unrestricted tools

The Aibtc MCP server exposes tools that can move money, delete data, or destroy resources. Without policy enforcement, an autonomous agent has unrestricted access to every one of them.

15 move money
12 delete data
14 execute code
48 modify data
Write / Execute (62) Destructive / Financial (27)

Financial operations (identity_transfer, jingswap_deposit_sbtc, jingswap_deposit_stx) can move real money. An agent caught in a loop could drain accounts before anyone notices.

Destructive tools (credentials_delete, identity_unset_wallet, jingswap_cancel_cycle) permanently delete resources. There is no undo. An agent calling these in a retry loop causes irreversible damage.

Write operations (credentials_set, credentials_unlock, identity_register) modify state. Without rate limits, an agent can make hundreds of changes in seconds -- faster than any human can review or revert.

Execute tools (alex_swap, arxiv_compile_digest, deploy_contract) trigger processes with side effects. Builds, notifications, workflows -- all fired without throttling.

These Aibtc tools can modify, create, or destroy resources. Without a policy, your agent has unrestricted access to all of them.

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. Write
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. Write
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. Write
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. Write
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. Write
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. Write
identity_set_wallet Link the active Stacks wallet address to an agent identity in the ERC-8004 identity registry. Requires an unlocked wallet. Write
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. Write
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). Write
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") Write
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. Write
nostr_post Publish a short-text note (kind:1) to Nostr relays. Optionally include hashtag tags and specify target relays. Requires an unlocked wallet. Write
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. Write
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. Write
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. Write
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. Write
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. Write
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. Write
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. Write
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. Write
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. Write
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. Write
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. Write
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. Write
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. Write
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. Write
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. Write
pillar_disconnect Disconnect from Pillar. Clears locally stored wallet address. Write
pillar_invite Get your Pillar referral link to invite friends. Share this link and earn rewards when friends sign up. Write
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). Write
pillar_key_lock Lock the signing key, clearing sensitive data from memory. Write
pillar_key_unlock Unlock a signing key for Pillar direct operations. Uses auto-derived password. Usually not needed — tools auto-unlock on first use. Write
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...). Write
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! Write
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. Write
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. Write
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. Write
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. Write
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) Write
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! Write
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. Write
wallet_import Import an existing wallet for the agent using a BIP39 mnemonic phrase. The wallet is encrypted locally and stored in ~/.aibtc/. Write
wallet_lock Lock the agent's wallet, clearing sensitive data from memory. Write
wallet_set_timeout Set how long the agent's wallet stays unlocked before automatically locking. Set to 0 to disable auto-lock. Write
wallet_switch Switch to a different wallet. Note: The new wallet will need to be unlocked before use. Write
wallet_unlock Unlock the agent's wallet to enable transactions. If no wallet ID is provided, unlocks the active wallet. Write
yield_hunter_configure Configure yield hunter settings. Adjust the deposit threshold, reserve, or check interval. Changes take effect on the next check cycle. Write
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. Write
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. Financial
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. Financial
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). Financial
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. Financial
pillar_direct_withdraw_collateral Withdraw sBTC collateral from Zest on the Pillar smart wallet. Agent-signed, no browser needed. Backend sponsors gas. Financial
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). Financial
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). Financial
sbtc_withdraw Alias for sbtc_initiate_withdrawal. Initiates an sBTC peg-out request to BTC L1. Financial
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. Financial
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). Financial
transfer_nft Transfer an NFT (SIP-009) to a recipient address. Financial
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). Financial
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 Financial
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. Financial
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. Financial
credentials_delete Remove a stored credential by service and key. The encrypted store file is rewritten without the deleted entry. Destructive
identity_unset_wallet Remove the agent wallet association from an agent identity in the ERC-8004 identity registry. Requires an unlocked wallet. Destructive
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. Destructive
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. Destructive
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. Destructive
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 Destructive
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. Destructive
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. Destructive
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. Destructive
reputation_revoke_feedback Revoke a previously submitted feedback entry by index. Only the original submitter can revoke their feedback. Requires an unlocked wallet. Destructive
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. Destructive
wallet_delete Permanently delete a wallet. WARNING: This cannot be undone! Make sure you have backed up your mnemonic. Destructive
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. Execute
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. Execute
deploy_contract Deploy a Clarity smart contract to the Stacks blockchain. Execute
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. Execute
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. Execute
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
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 Execute
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. Execute
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 Execute
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 ``` Execute
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 ``` Execute
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. Execute
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 Execute
yield_hunter_stop Stop autonomous yield hunting. Stops the background process that monitors and deposits sBTC. Your existing Zest positions remain untouched. Execute

These rules are based on the tool categories exposed by the Aibtc MCP server. Adjust the limits to match your use case.

Block financial tools by default
identity_transfer:
    rules:
      - action: deny
        on_deny: "Financial operations require approval"

Financial tools should be explicitly enabled per use case, not open by default.

Deny destructive operations
credentials_delete:
    rules:
      - action: deny
        on_deny: "Destructive operations blocked by policy"

Destructive tools should never be available to autonomous agents without human approval.

Rate limit write operations
credentials_set:
    rules:
      - name: "write-rate-limit"
        rate_limit: 30/hour
        on_deny: "Write rate limit reached"

Prevents bulk unintended modifications from agents caught in loops.

Cap read operations
alex_get_pool_info:
    rules:
      - action: allow
        rate_limit: 60/minute

Controls API costs and prevents retry loops from exhausting upstream rate limits.

This is the complete policy file for Aibtc. It lists every tool with suggested default rules. Download it, adjust the limits, and run with Intercept.

io-github-aibtcdev-mcp-server.yaml
version: "1"
default: "deny"

tools:
  credentials_delete:
    rules:
      - action: deny
        on_deny: "Destructive operation blocked by policy"
  identity_unset_wallet:
    rules:
      - action: deny
        on_deny: "Destructive operation blocked by policy"
  jingswap_cancel_cycle:
    rules:
      - action: deny
        on_deny: "Destructive operation blocked by policy"
  jingswap_cancel_sbtc:
    rules:
      - action: deny
        on_deny: "Destructive operation blocked by policy"
  jingswap_cancel_stx:
    rules:
      - action: deny
        on_deny: "Destructive operation blocked by policy"
  ordinals_cancel_listing:
    rules:
      - action: deny
        on_deny: "Destructive operation blocked by policy"
  ordinals_p2p_cancel:
    rules:
      - action: deny
        on_deny: "Destructive operation blocked by policy"
  pillar_direct_revoke_fast_pool:
    rules:
      - action: deny
        on_deny: "Destructive operation blocked by policy"
  recover_sponsor_nonce:
    rules:
      - action: deny
        on_deny: "Destructive operation blocked by policy"
  reputation_revoke_feedback:
    rules:
      - action: deny
        on_deny: "Destructive operation blocked by policy"
  stackspot_cancel_pot:
    rules:
      - action: deny
        on_deny: "Destructive operation blocked by policy"
  wallet_delete:
    rules:
      - action: deny
        on_deny: "Destructive operation blocked by policy"
  alex_swap:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  arxiv_compile_digest:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  deploy_contract:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  dual_stacking_enroll:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  dual_stacking_opt_out:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  execute_x402_endpoint:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  nonce_heal:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  pillar_direct_auto_compound:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  probe_x402_endpoint:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  scaffold_x402_ai_endpoint:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  scaffold_x402_endpoint:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  stackspot_start_pot:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  yield_hunter_start:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  yield_hunter_stop:
    rules:
      - action: allow
        rate_limit: 10/hour
        validate:
          required_args: true
  identity_transfer:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  jingswap_deposit_sbtc:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  jingswap_deposit_stx:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  ordinals_p2p_transfer:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  pillar_direct_withdraw_collateral:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  sbtc_deposit:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  sbtc_transfer:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  sbtc_withdraw:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  styx_deposit:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  transfer_btc:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  transfer_nft:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  transfer_rune:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  transfer_stx:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  transfer_token:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  zest_withdraw:
    rules:
      - action: deny
        on_deny: "Financial operation requires approval"
  alex_get_pool_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  alex_get_swap_quote:
    rules:
      - action: allow
        rate_limit: 60/minute
  alex_list_pools:
    rules:
      - action: allow
        rate_limit: 60/minute
  arxiv_list_digests:
    rules:
      - action: allow
        rate_limit: 60/minute
  arxiv_search:
    rules:
      - action: allow
        rate_limit: 60/minute
  bounty_claim:
    rules:
      - action: allow
        rate_limit: 60/minute
  bounty_get:
    rules:
      - action: allow
        rate_limit: 60/minute
  bounty_list:
    rules:
      - action: allow
        rate_limit: 60/minute
  bounty_match:
    rules:
      - action: allow
        rate_limit: 60/minute
  bounty_my_claims:
    rules:
      - action: allow
        rate_limit: 60/minute
  bounty_stats:
    rules:
      - action: allow
        rate_limit: 60/minute
  bounty_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  broadcast_transaction:
    rules:
      - action: allow
        rate_limit: 60/minute
  btc_sign_message:
    rules:
      - action: allow
        rate_limit: 60/minute
  btc_verify_message:
    rules:
      - action: allow
        rate_limit: 60/minute
  call_contract:
    rules:
      - action: allow
        rate_limit: 60/minute
  call_read_only_function:
    rules:
      - action: allow
        rate_limit: 60/minute
  check_bns_availability:
    rules:
      - action: allow
        rate_limit: 60/minute
  check_relay_health:
    rules:
      - action: allow
        rate_limit: 60/minute
  claim_bns_name_fast:
    rules:
      - action: allow
        rate_limit: 60/minute
  credentials_get:
    rules:
      - action: allow
        rate_limit: 60/minute
  credentials_list:
    rules:
      - action: allow
        rate_limit: 60/minute
  dual_stacking_get_rewards:
    rules:
      - action: allow
        rate_limit: 60/minute
  dual_stacking_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  extend_stacking:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_account_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_account_transactions:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_block_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_bns_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_bns_price:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_btc_address_txs:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_btc_balance:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_btc_fees:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_btc_mempool_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_btc_transaction_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_btc_utxos:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_cardinal_utxos:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_collection_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_contract_events:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_contract_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_inscriptions_by_address:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_mempool_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_network_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_nft_history:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_nft_holdings:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_nft_metadata:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_nft_owner:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_ordinal_utxos:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_pox_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_rune_balances:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_rune_utxos:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_stacking_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_stx_balance:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_stx_fees:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_token_balance:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_token_holders:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_token_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_transaction_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  get_wallet_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  identity_get:
    rules:
      - action: allow
        rate_limit: 60/minute
  identity_get_last_id:
    rules:
      - action: allow
        rate_limit: 60/minute
  identity_get_metadata:
    rules:
      - action: allow
        rate_limit: 60/minute
  jingswap_get_cycle_state:
    rules:
      - action: allow
        rate_limit: 60/minute
  jingswap_get_cycles_history:
    rules:
      - action: allow
        rate_limit: 60/minute
  jingswap_get_depositors:
    rules:
      - action: allow
        rate_limit: 60/minute
  jingswap_get_prices:
    rules:
      - action: allow
        rate_limit: 60/minute
  jingswap_get_settlement:
    rules:
      - action: allow
        rate_limit: 60/minute
  jingswap_get_user_activity:
    rules:
      - action: allow
        rate_limit: 60/minute
  jingswap_get_user_deposit:
    rules:
      - action: allow
        rate_limit: 60/minute
  jingswap_settle:
    rules:
      - action: allow
        rate_limit: 60/minute
  list_user_domains:
    rules:
      - action: allow
        rate_limit: 60/minute
  list_user_tokens:
    rules:
      - action: allow
        rate_limit: 60/minute
  list_x402_endpoints:
    rules:
      - action: allow
        rate_limit: 60/minute
  lookup_bns_name:
    rules:
      - action: allow
        rate_limit: 60/minute
  news_check_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  news_file_signal:
    rules:
      - action: allow
        rate_limit: 60/minute
  news_front_page:
    rules:
      - action: allow
        rate_limit: 60/minute
  news_leaderboard:
    rules:
      - action: allow
        rate_limit: 60/minute
  news_list_beats:
    rules:
      - action: allow
        rate_limit: 60/minute
  news_list_signals:
    rules:
      - action: allow
        rate_limit: 60/minute
  nonce_health:
    rules:
      - action: allow
        rate_limit: 60/minute
  nostr_get_profile:
    rules:
      - action: allow
        rate_limit: 60/minute
  nostr_get_pubkey:
    rules:
      - action: allow
        rate_limit: 60/minute
  nostr_read_feed:
    rules:
      - action: allow
        rate_limit: 60/minute
  nostr_relay_list:
    rules:
      - action: allow
        rate_limit: 60/minute
  nostr_search_tags:
    rules:
      - action: allow
        rate_limit: 60/minute
  nostr_sign_event:
    rules:
      - action: allow
        rate_limit: 60/minute
  openrouter_models:
    rules:
      - action: allow
        rate_limit: 60/minute
  ordinals_buy:
    rules:
      - action: allow
        rate_limit: 60/minute
  ordinals_get_listings:
    rules:
      - action: allow
        rate_limit: 60/minute
  ordinals_list_for_sale:
    rules:
      - action: allow
        rate_limit: 60/minute
  ordinals_list_for_sale_submit:
    rules:
      - action: allow
        rate_limit: 60/minute
  ordinals_p2p_agents:
    rules:
      - action: allow
        rate_limit: 60/minute
  ordinals_p2p_counter:
    rules:
      - action: allow
        rate_limit: 60/minute
  ordinals_p2p_get_trade:
    rules:
      - action: allow
        rate_limit: 60/minute
  ordinals_p2p_list_trades:
    rules:
      - action: allow
        rate_limit: 60/minute
  ordinals_p2p_my_trades:
    rules:
      - action: allow
        rate_limit: 60/minute
  ordinals_p2p_psbt_swap:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_dca_leaderboard:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_dca_partners:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_dca_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_direct_dca_leaderboard:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_direct_dca_partners:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_direct_dca_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_direct_position:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_direct_quote:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_direct_stack_stx:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_direct_stacking_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_direct_supply:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_direct_unwind:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_fund:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_key_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_position:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_supply:
    rules:
      - action: allow
        rate_limit: 60/minute
  pillar_unwind:
    rules:
      - action: allow
        rate_limit: 60/minute
  reputation_append_response:
    rules:
      - action: allow
        rate_limit: 60/minute
  reputation_get_approved_limit:
    rules:
      - action: allow
        rate_limit: 60/minute
  reputation_get_clients:
    rules:
      - action: allow
        rate_limit: 60/minute
  reputation_get_feedback_count:
    rules:
      - action: allow
        rate_limit: 60/minute
  reputation_get_last_index:
    rules:
      - action: allow
        rate_limit: 60/minute
  reputation_get_summary:
    rules:
      - action: allow
        rate_limit: 60/minute
  reputation_give_feedback:
    rules:
      - action: allow
        rate_limit: 60/minute
  reputation_read_all_feedback:
    rules:
      - action: allow
        rate_limit: 60/minute
  reputation_read_feedback:
    rules:
      - action: allow
        rate_limit: 60/minute
  reverse_bns_lookup:
    rules:
      - action: allow
        rate_limit: 60/minute
  runes_get_activity:
    rules:
      - action: allow
        rate_limit: 60/minute
  runes_get_address_activity:
    rules:
      - action: allow
        rate_limit: 60/minute
  runes_get_address_balances:
    rules:
      - action: allow
        rate_limit: 60/minute
  runes_get_etching:
    rules:
      - action: allow
        rate_limit: 60/minute
  runes_get_holders:
    rules:
      - action: allow
        rate_limit: 60/minute
  runes_list_etchings:
    rules:
      - action: allow
        rate_limit: 60/minute
  sbtc_deposit_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  sbtc_get_balance:
    rules:
      - action: allow
        rate_limit: 60/minute
  sbtc_get_deposit_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  sbtc_get_peg_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  sbtc_withdraw_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  sbtc_withdrawal_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  schnorr_sign_digest:
    rules:
      - action: allow
        rate_limit: 60/minute
  schnorr_verify_digest:
    rules:
      - action: allow
        rate_limit: 60/minute
  sip018_hash:
    rules:
      - action: allow
        rate_limit: 60/minute
  sip018_sign:
    rules:
      - action: allow
        rate_limit: 60/minute
  sip018_verify:
    rules:
      - action: allow
        rate_limit: 60/minute
  souldinals_display_soul:
    rules:
      - action: allow
        rate_limit: 60/minute
  souldinals_list_souls:
    rules:
      - action: allow
        rate_limit: 60/minute
  souldinals_load_soul:
    rules:
      - action: allow
        rate_limit: 60/minute
  souldinals_reveal_soul:
    rules:
      - action: allow
        rate_limit: 60/minute
  stack_stx:
    rules:
      - action: allow
        rate_limit: 60/minute
  stacks_market_buy_no:
    rules:
      - action: allow
        rate_limit: 60/minute
  stacks_market_buy_yes:
    rules:
      - action: allow
        rate_limit: 60/minute
  stacks_market_get:
    rules:
      - action: allow
        rate_limit: 60/minute
  stacks_market_get_position:
    rules:
      - action: allow
        rate_limit: 60/minute
  stacks_market_list:
    rules:
      - action: allow
        rate_limit: 60/minute
  stacks_market_quote_buy:
    rules:
      - action: allow
        rate_limit: 60/minute
  stacks_market_quote_sell:
    rules:
      - action: allow
        rate_limit: 60/minute
  stacks_market_redeem:
    rules:
      - action: allow
        rate_limit: 60/minute
  stacks_market_search:
    rules:
      - action: allow
        rate_limit: 60/minute
  stacks_market_sell_no:
    rules:
      - action: allow
        rate_limit: 60/minute
  stacks_market_sell_yes:
    rules:
      - action: allow
        rate_limit: 60/minute
  stacks_sign_message:
    rules:
      - action: allow
        rate_limit: 60/minute
  stacks_verify_message:
    rules:
      - action: allow
        rate_limit: 60/minute
  stackspot_claim_rewards:
    rules:
      - action: allow
        rate_limit: 60/minute
  stackspot_get_pot_state:
    rules:
      - action: allow
        rate_limit: 60/minute
  stackspot_join_pot:
    rules:
      - action: allow
        rate_limit: 60/minute
  stackspot_list_pots:
    rules:
      - action: allow
        rate_limit: 60/minute
  styx_fees:
    rules:
      - action: allow
        rate_limit: 60/minute
  styx_history:
    rules:
      - action: allow
        rate_limit: 60/minute
  styx_pool_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  styx_pools:
    rules:
      - action: allow
        rate_limit: 60/minute
  styx_price:
    rules:
      - action: allow
        rate_limit: 60/minute
  styx_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  taproot_get_pubkey:
    rules:
      - action: allow
        rate_limit: 60/minute
  taproot_multisig_guide:
    rules:
      - action: allow
        rate_limit: 60/minute
  taproot_verify_cosig:
    rules:
      - action: allow
        rate_limit: 60/minute
  tenero_holder_stats:
    rules:
      - action: allow
        rate_limit: 60/minute
  tenero_market_stats:
    rules:
      - action: allow
        rate_limit: 60/minute
  tenero_market_summary:
    rules:
      - action: allow
        rate_limit: 60/minute
  tenero_search:
    rules:
      - action: allow
        rate_limit: 60/minute
  tenero_token_info:
    rules:
      - action: allow
        rate_limit: 60/minute
  tenero_top_gainers:
    rules:
      - action: allow
        rate_limit: 60/minute
  tenero_top_losers:
    rules:
      - action: allow
        rate_limit: 60/minute
  tenero_trending_pools:
    rules:
      - action: allow
        rate_limit: 60/minute
  tenero_wallet_holdings:
    rules:
      - action: allow
        rate_limit: 60/minute
  tenero_wallet_trades:
    rules:
      - action: allow
        rate_limit: 60/minute
  tenero_whale_trades:
    rules:
      - action: allow
        rate_limit: 60/minute
  tx_status_deep:
    rules:
      - action: allow
        rate_limit: 60/minute
  wallet_list:
    rules:
      - action: allow
        rate_limit: 60/minute
  wallet_rotate_password:
    rules:
      - action: allow
        rate_limit: 60/minute
  wallet_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  yield_dashboard_apy_breakdown:
    rules:
      - action: allow
        rate_limit: 60/minute
  yield_dashboard_overview:
    rules:
      - action: allow
        rate_limit: 60/minute
  yield_dashboard_positions:
    rules:
      - action: allow
        rate_limit: 60/minute
  yield_dashboard_rebalance:
    rules:
      - action: allow
        rate_limit: 60/minute
  yield_hunter_status:
    rules:
      - action: allow
        rate_limit: 60/minute
  zest_borrow:
    rules:
      - action: allow
        rate_limit: 60/minute
  zest_get_position:
    rules:
      - action: allow
        rate_limit: 60/minute
  zest_list_assets:
    rules:
      - action: allow
        rate_limit: 60/minute
  zest_repay:
    rules:
      - action: allow
        rate_limit: 60/minute
  zest_supply:
    rules:
      - action: allow
        rate_limit: 60/minute
  credentials_set:
    rules:
      - action: allow
        rate_limit: 30/hour
  credentials_unlock:
    rules:
      - action: allow
        rate_limit: 30/hour
  identity_register:
    rules:
      - action: allow
        rate_limit: 30/hour
  identity_set_approval:
    rules:
      - action: allow
        rate_limit: 30/hour
  identity_set_metadata:
    rules:
      - action: allow
        rate_limit: 30/hour
  identity_set_uri:
    rules:
      - action: allow
        rate_limit: 30/hour
  identity_set_wallet:
    rules:
      - action: allow
        rate_limit: 30/hour
  jingswap_close_deposits:
    rules:
      - action: allow
        rate_limit: 30/hour
  jingswap_settle_with_refresh:
    rules:
      - action: allow
        rate_limit: 30/hour
  news_claim_beat:
    rules:
      - action: allow
        rate_limit: 30/hour
  nonce_fill_gap:
    rules:
      - action: allow
        rate_limit: 30/hour
  nostr_post:
    rules:
      - action: allow
        rate_limit: 30/hour
  nostr_set_profile:
    rules:
      - action: allow
        rate_limit: 30/hour
  openrouter_integration_guide:
    rules:
      - action: allow
        rate_limit: 30/hour
  ordinals_p2p_create_offer:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_add_admin:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_auto_compound:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_boost:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_connect:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_create_wallet:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_dca_invite:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_direct_add_admin:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_direct_boost:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_direct_create_wallet:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_direct_dca_invite:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_direct_resolve_recipient:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_direct_send:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_disconnect:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_invite:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_key_generate:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_key_lock:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_key_unlock:
    rules:
      - action: allow
        rate_limit: 30/hour
  pillar_send:
    rules:
      - action: allow
        rate_limit: 30/hour
  preorder_bns_name:
    rules:
      - action: allow
        rate_limit: 30/hour
  register_bns_name:
    rules:
      - action: allow
        rate_limit: 30/hour
  reputation_approve_client:
    rules:
      - action: allow
        rate_limit: 30/hour
  sbtc_initiate_withdrawal:
    rules:
      - action: allow
        rate_limit: 30/hour
  send_inbox_message:
    rules:
      - action: allow
        rate_limit: 30/hour
  souldinals_inscribe_soul:
    rules:
      - action: allow
        rate_limit: 30/hour
  wallet_create:
    rules:
      - action: allow
        rate_limit: 30/hour
  wallet_export:
    rules:
      - action: allow
        rate_limit: 30/hour
  wallet_import:
    rules:
      - action: allow
        rate_limit: 30/hour
  wallet_lock:
    rules:
      - action: allow
        rate_limit: 30/hour
  wallet_set_timeout:
    rules:
      - action: allow
        rate_limit: 30/hour
  wallet_switch:
    rules:
      - action: allow
        rate_limit: 30/hour
  wallet_unlock:
    rules:
      - action: allow
        rate_limit: 30/hour
  yield_hunter_configure:
    rules:
      - action: allow
        rate_limit: 30/hour
  zest_enable_collateral:
    rules:
      - action: allow
        rate_limit: 30/hour

Two commands. Under two minutes.

01

Download the policy

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

Run Intercept in front of the server

intercept -c io-github-aibtcdev-mcp-server.yaml -- npx -y @@aibtc/mcp-server

Works with any MCP client:

Every tool call is now checked against your policy before it reaches Aibtc. Denied calls are blocked and logged. Allowed calls pass through with no latency impact.

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.