比特币钱包MCP服务器

一个支持比特币(Layer 1)和Stacks(Layer 2)钱包操作的MCP服务器,提供安全的接口和多种工具。

  • by markmhendrickson
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 markmhendrickson/mcp-server-bitcoin

使用说明

比特币钱包MCP服务器

⚠️ 警告: 实验。对于有意义的资金来说还不安全。仅与您准备丢失的钱包一起使用。代码没有经过实战测试、审计或强化。本文档涵盖了设置、配置、运行和完整的工具参考。

介绍

此回购是一个单一的 主控程序 将比特币(第1层)和Stacks(第2层)钱包操作作为工具公开的服务器。代理或其他MCP客户端通过stdio连接,以JSON形式传递工具名称和参数,并返回结构化结果。服务器封装了本地Python钱包代码和外部API(mempool.space、Hiro、CoinGecko等)。破坏性行动(发送、签署和广播、部署)支持 dry_run 默认情况下不进行广播。任何键或助记符都不会返回。

它揭示了什么: 两组93个工具。

  1. 第1层(比特币): 地址、余额(已确认和未确认)、UTXO、费用估算、单个和多个收件人发送、扫描、PSBT签名/解码、消息签名/验证、序号/铭文、铭文创建、交易历史和RBF、分类账(比特币应用程序)。
  2. 第2层(堆叠): STX地址和余额、随机数、STX和代币转移、Clarity调用/部署/读取、签名、掉期(Alex、Bitflow、Velar)、sBTC桥接、堆叠、BNS、市场和投资组合数据、Ledger(Stacks应用程序)、具有过滤功能的增强交易查询、内存池监控、区块浏览器、合约事件监控、代币元数据(SIP-10/SIP-9)和网络统计。一个助记符或WIF键驱动两层;堆栈键来自同一种子。

目录


概述

  • 目的: 第1层(比特币)和第2层(堆栈)钱包操作作为具有单一安全接口的MCP工具。
  • 设计: 破坏性行动支持 dry_run (默认值 true).响应: { "success": true, ... } 或 { "success": false, "error": "..." }回复中没有按键或助记符。

需求

  • python:3.10或更高版本(用于类型提示和运行时)。
  • 操作系统:Python及其依赖项(Linux、macOS、Windows)支持的任何平台。Ledger工具需要Ledger设备和USB(或Speculos interface: "tcp").
  • 依赖项:列在 requirements.txt;安装 pip install -r requirements.txt (参见 安装).
包装 用途
mcp MCP服务器和stdio传输
python-dotenv 负载 .env 配置
bip-utils BIP-39/44/84推导
bit 比特币交易构建(传统路径)
python-bitcoinlib PSBT、密钥、地址、原始tx
requests 用于mempool.space、Hiro、CoinGecko等的HTTP。
coincurve ECDSA和关键操作
ledgercomm 分类账设备通信(分类账工具可选)

安装

  1. 克隆 回购。如果你没有使用 --recurse-submodules,跑 git submodule update --init foundation.

  2. 创建虚拟环境 (推荐):

    python3 -m venv .venv
    source .venv/bin/activate   # Windows: .venv\Scripts\activate
    
  3. 安装依赖项:

    pip install -r requirements.txt
    
  4. 配置环境:复制 .env.example 到 .env 并设置至少一个密钥源和网络(请参阅 配置).

  5. 可选的:如果你使用回购 run_btc_wallet_mcp.sh,它会更喜欢 ../../execution/venv 当存在时;否则,它将使用 python3 从 PATH.


配置

配置来自 环境变量运行者脚本已加载 .env 从 存储库根目录 (此目录之上两层)。您还可以在shell或MCP主机中设置变量。

关键材料(选择一个)

变量 描述
BTC_PRIVATE_KEY 钱包的WIF私钥。
BTC_MNEMONIC BIP-39助记符(12或24个单词)。
BTC_MNEMONIC_PASSPHRASE 使用时可选BIP-39密码 BTC_MNEMONIC.

Stacks(STX)键是使用Stacks路径从同一助记符派生出来的 m/44'/5757'/0'/0/0.

网络与安全

变量 描述 默认值
BTC_NETWORK mainnet 或 testnet. testnet
BTC_DRY_RUN 如果 true,默认情况下,发送/签名工具不进行广播。 true

限制(可选)

变量 描述
BTC_MAX_SEND_BTC 每次转账的最大BTC(十进制字符串或数字)。
BTC_MAX_FEE_SATS 每笔交易的最高手续费(satoshis)。

收费行为

变量 描述
BTC_FEE_RATE_SAT_PER_BYTE 固定费率(sat/vB)。如果设置,则覆盖层。
BTC_FEE_TIER mempool.space层: hourFee, halfHourFee, fastestFee。未设置固定费率时使用。

运行服务器

  • 包装脚本 (推荐): run_btc_wallet_mcp.sh 负载 .env 从repo根目录,使用 execution/venv/bin/python3 如果存在其他 python3,通过stdio运行服务器。
  • 直接: 设置环境变量 .env,然后运行 python3 bitcoin_wallet_mcp_server.py 从这个目录。

光标MCP配置

增添 .cursor/mcp.json (或您的Cursor MCP配置文件):

{
  "mcpServers": {
    "bitcoin-wallet": {
      "command": "/absolute/path/to/repo/mcp/btc_wallet/run_btc_wallet_mcp.sh"
    }
  }
}

使用指向您的仓库的绝对路径。服务器位于 mcp/btc_wallet/.放 .env 如果您使用脚本的env加载,请在repo根目录下执行。


建筑

  • 入口点: bitcoin_wallet_mcp_server.py单台MCP服务器;注册所有工具并委托给钱包模块。
  • 第1层(比特币)模块: bitcoin_wallet.py (地址、账户、余额、发送、PSBT、消息签名、费用、UTXO); ord_wallet.py (序号和铭文); inscribe_onramp_wallet.py (题词创作、购买报价); advanced_wallet.py (交易历史、RBF、钱包网络、增强STX交易查询、网络统计); ledger_wallet.py (Ledger比特币应用程序)。
  • 第2层(堆叠)模块: stx_wallet.py (地址、账户、余额、STX/代币转账、合同、签署); defi_wallet.py (通过Alex、Bitflow、Velar进行交换;sBTC桥;叠加增强的周期指标); bns_market_wallet.py (BNS、市场、投资组合); stx_mempool.py (内存池监测和统计); stx_explorer.py (区块浏览器查询); stx_events.py (合同事件监控); stx_token_metadata.py (SIP-10/SIP-9令牌元数据); ledger_wallet.py (Ledger Stacks应用程序)。

响应: JSON格式 "success": true 和数据,或 "success": false 和 "error"。密钥和助记符永远不会返回。


工具参考

93工具,按第1层(比特币)和第2层(堆栈)分组。参数和响应形状如下;可选参数可以省略。 dry_run 默认为 BTC_DRY_RUN (通常 true).


第1层(比特币)

比特币链工具:地址、余额、转账、PSBT、消息签名、费用、UTXO、序数、铭文创建、交易管理和分类账(比特币应用程序)。

核心比特币

地址和账户管理、余额、价格、转账、PSBT、消息签名、费用、UTXO。

工具 说明
btc_get_addresses 所有带有公钥和派生路径的派生地址(P2PKH、P2SH-P2WPKH、P21WPKH、P2TR)。
btc_get_accounts 按地址类型列出余额的账户;使用mempool.space存储UTXO数据。
btc_get_info 钱包版本、网络、支持的工具和配置(例如dry_run_default、fee_tier)。

参数:没有。

示例响应 (btc_get_addresses):

{
  "success": true,
  "addresses": [
    {
      "symbol": "BTC",
      "type": "p2wpkh",
      "address": "bc1q...",
      "publicKey": "02abc...",
      "derivationPath": "m/84'/0'/0'/0/0",
      "label": "bip84_p2wpkh_0"
    }
  ],
  "network": "mainnet"
}

工具 说明
btc_wallet_get_balance 当前BTC钱包余额。
btc_wallet_get_prices 当前BTC的美元和欧元价格

参数:没有。

示例响应 (btc_wallet_get_balance): { "success": true, "balance_btc": "0.12345678", "network": "testnet" }
示例响应 (btc_wallet_get_prices): { "success": true, "usd": "91000.12", "eur": "84000.34" }


工具 说明
btc_wallet_preview_transfer 预览转账和预计费用。提供其中之一 amount_btc 或 amount_eur.
btc_wallet_send_transfer 将BTC发送给单个收件人(BTC或EUR金额)。最好先调用预览工具,并要求用户明确确认。

参数 (预览): to_address (必填), amount_btc 或 amount_eur (需要一个)。
参数 (发送): to_address (必填), amount_btc 或 amount_eur (需要一个),可选 max_fee_sats, memo, dry_run.


工具 说明
btc_send_transfer 将BTC发送给一个或多个收款人,金额以sats为单位;多输出。
btc_send_max 抽奖:将最大可消费BTC发送到一个地址(扣除费用后的金额)。
btc_combine_utxos 将UTXO合并到一个输出中(可选地合并到给定的地址)。

参数 (btc_send_transfer): recipients (数组 { "address", "amount_sats" }),可选 max_fee_sats, memo, dry_run.
参数 (btc_send_max): to_address (必填),可选 fee_rate, dry_run.
参数 (btc_combine_utxos):可选 to_address, fee_rate, dry_run.

请求示例 (btc_send_transfer):

{
  "recipients": [
    { "address": "bc1q...", "amount_sats": 50000 },
    { "address": "bc1q...", "amount_sats": 30000 }
  ],
  "dry_run": true
}

示例响应: { "success": true, "txid": "DRYRUN_...", "num_recipients": 2, "dry_run": true, "network": "testnet" }


工具 说明
btc_sign_psbt 签署PSBT(十六进制或base64)。可选的 sign_at_index, broadcast, dry_run.
btc_sign_batch_psbt 在一次通话中签署多个PSBT。
btc_decode_psbt 解码PSBT并返回人类可读的摘要(输入、输出、总值、最终确定)。

参数 (btc_sign_psbt): psbt (十六进制或base64),可选 sign_at_index (输入索引数组), broadcast, dry_run.
参数 (btc_sign_batch_psbt): psbts (PSBT字符串数组),可选 broadcast.
参数 (btc_decode_psbt): psbt.

示例响应 (btc_decode_psbt): { "success": true, "num_inputs": 2, "num_outputs": 3, "total_input_sats": 150000, "has_witness_utxo": true, "is_finalized": false, "size_bytes": 512 }


工具 说明
btc_sign_message 签署消息(ECDSA传统比特币签名消息或BIP-322)。
btc_verify_message 验证已签名的比特币消息。

参数 (签名): message,可选 protocol (ecdsa |BIP-322), address_type (例如。 p2wpkh).
参数 (验证): message, signature, address.

示例响应 (签名): { "success": true, "signature": "H...", "address": "bc1q...", "message": "Hello, world!", "protocol": "ecdsa" }


工具 说明
btc_get_fees mempool.space(所有级别)的推荐费率。
btc_estimate_fee 估算给定输入/输出计数和地址类型的费用。

参数 (btc_estimate_fee): num_inputs, num_outputs, address_type (例如。 p2wpkh),可选 fee_tier.

示例响应 (btc_get_fees): { "success": true, "fastest_sat_per_vb": 25, "half_hour_sat_per_vb": 18, "hour_sat_per_vb": 12, "economy_sat_per_vb": 5, "minimum_sat_per_vb": 1, "network": "mainnet", "source": "mempool.space" }


工具 说明
btc_list_utxos 列出带有可选过滤器的UTXO:地址类型、最小值、仅确认。
btc_get_utxo_details 一个UTXO的详细信息(scriptPubKey、确认、tx元数据)。

参数 (btc_list_utxos):可选 address_type, min_value_sats, confirmed_only.
参数 (btc_get_utxo_details): txid, vout.

示例响应 (btc_list_utxos): { "success": true, "utxos": [{ "txid": "...", "vout": 0, "value_sats": 50000, "value_btc": "0.00050000", "confirmed": true, "address": "bc1q...", "address_type": "p2wpkh" }], "count": 1, "total_sats": 50000, "total_btc": "0.00050000" }


序号和铭文

使用Hiro Ordinals API作为铭文数据;主根(P2TR)用于普通存储;P2WPKH用于费用资助。

工具 说明
ord_get_inscriptions 列出钱包所拥有的铭文;通过分页 offset, limit.
ord_get_inscription_details 详细的铭文信息(起源、内容类型、序列号、稀有性、UTXO位置)。

参数 (ord_get_inscriptions):可选 offset, limit.
参数 (ord_get_inscription_details): inscription_id.


工具 说明
ord_send_inscriptions 向收件人发送题词;完整的UTXO传输;单独向UTXO支付费用。
ord_send_inscriptions_split 使用UTXO拆分发送铭文(只有铭文的sat范围发送给收件人,其余发送给发件人)。
ord_extract_from_utxo 从混合的UTXO中提取序数到单独的输出中。
ord_recover_bitcoin 从普通地址恢复BTC(将非铭文UTXO扫描到付款地址)。
ord_recover_ordinals 将带有UTXO的铭文从付款地址移动到序数(主根)地址。

参数 (发送工具): transfers (数组 { "address", "inscriptionId" }),可选 dry_run.
参数 (ord_extract_from_utxo): outpoint (txid:vout),可选 dry_run.
参数 (恢复工具):可选 dry_run.


铭文创作和入口

工具 说明
ord_create_inscription 创建单个铭文;内容类型和正文;估算承诺/披露费用。
ord_create_repeat_inscriptions 通过共享费用估算批量创建多个铭文。
buy_get_providers 列出法定货币到加密货币的入口提供商和支持的货币。
buy_get_quote 菲亚特到加密货币报价(例如价格和费用)。

参数 (ord_create_inscription): content_type, content (如果是文本或十六进制 content_encoding: hex),可选 content_encoding, dry_run.
参数 (ord_create_repeat_inscriptions): content_type, contents (数组),可选 dry_run.
参数 (buy_get_providers):可选 crypto, fiat.
参数 (buy_get_quote): crypto, fiat, fiat_amount (或同等)。


交易和钱包管理

工具 说明
tx_get_history BTC和/或STX的交易历史。
tx_get_status 单笔交易的状态(BTC或STX)。
tx_speed_up 通过RBF加速待处理的BTC交易。
tx_cancel 取消待定的BTC交易(RBF发送给自己)。
wallet_get_network 当前网络配置、API端点、费用设置。
wallet_switch_network 在主网和测试网之间切换。
wallet_add_network 添加自定义网络(名称、BTC API URL等)。
wallet_get_supported_methods 列出所有MCP工具名称和说明。

参数 (tx_get_history):可选 chain (btc | stx | both), limit.
参数 (tx_get_status): txid, chain (btc | stx).
参数 (tx_speed_up, tx_cancel): txid,可选 dry_run.
参数 (wallet_switch_network): network (mainnet | testnet).
参数 (wallet_add_network): name, btc_api_url,以及根据需要的其他端点字段。


账本硬件钱包(比特币)

需要一个通过USB连接的Ledger设备,并打开比特币应用程序。使用 interface: "tcp" 对于Speculos来说。

工具 说明
ledger_get_addresses 从分类账获取BTC地址(P2PKH、P2SH-P2WPKH、P21WPKH、P2TR)。
ledger_sign_psbt 使用Ledger比特币应用程序签署PSBT。

参数: account (可选), display (可选,在设备上显示), interface (hid 或 tcp 对于Speculos)。
参数 (签署PSBT): psbt, interface.


第2层(堆叠)

Stacks链的工具:STX地址、余额、转账、合约、掉期、sBTC桥接、堆叠、BNS、市场/投资组合数据和分类账(Stacks应用程序)。

堆叠(STX)

密钥来源于 BTC_MNEMONIC 使用路径 m/44'/5757'/0'/0/0Hiro Stacks API用于链数据和广播。

工具 说明
stx_get_addresses 使用公钥和派生路径堆叠地址。
stx_get_accounts 有STX余额、锁定金额、非账户的账户。
stx_get_balance 地址的STX余额加上可替代和不可替代的令牌余额。
stx_get_networks 可用堆栈网络(主网、测试网),具有链ID和API URL

参数 (stx_get_balance):可选 address.

示例响应 (stx_get_balance): { "success": true, "address": "SP...", "balance_ustx": 5000000, "balance_stx": "5.000000", "fungible_tokens": [...], "non_fungible_tokens": [...] }


工具 说明
stx_transfer_stx 传输STX;微STX中的数量(1 STX=1_000_000 uSTX)。
stx_preview_transfer 预览STX转账,包括费用和余额检查。
stx_transfer_sip10_ft 通过合约调用转移SIP-10可替代代币。
stx_transfer_sip9_nft 通过合约呼叫转移SIP-9 NFT。

参数 (stx_transfer_stx): recipient, amount_ustx,可选 memo, dry_run.
参数 (stx_transfer_sip10_ft): recipient, asset (例如。 SP...contract::token), amount,可选 dry_run.
参数 (stx_transfer_sip9_nft): recipient, asset, asset_id,可选 dry_run.


工具 说明
stx_call_contract 调用公共Clarity函数;用Clarity表示法表示args。
stx_deploy_contract 部署Clarity合约。
stx_read_contract 只读合约调用(无交易)。

参数 (stx_call_contract): contract_address, contract_name, function_name, function_args (Clarity文字数组),可选 dry_run.
参数 (stx_deploy_contract): contract_name, clarity_code,可选 dry_run.
参数 (stx_read_contract): contract_address, contract_name, function_name,可选 function_args.

清晰论证示例: u100, i-5, true/false, none, 'SP... (负责人), 0xDEADBEEF (缓冲器), "hello" (字符串ascii)。


工具 说明
stx_sign_transaction 签署序列化的Stacks交易(SIP-30);十六进制输入,十六进制输出。
stx_sign_transactions 签署多个Stacks交易。
stx_sign_message 对UTF-8消息进行签名(可恢复的ECDSA)。
stx_sign_structured_message 签署SIP-018结构化数据(域+消息)。
stx_get_nonce Stacks地址的当前随机数。
stx_estimate_fee 在微型STX中估算Stacks交易费用。
stx_update_profile 链配置文件更新(schema.org/Person);需要BNS名称。

参数 (stx_sign_message): message.
参数 (stx_sign_structured_message): domain, message (JSON字符串)。
参数 (stx_get_nonce):可选 address.


掉期、DeFi和桥接

交换协议: 亚历克斯、比特流和维拉尔。使用 protocol 对于报价和配对列表: 亚历克斯 (池和代币价格), 比特流 (股票代码API), 舌根音 (Alex代币价格)。 执行: swap_execute 支持 protocol=alex 仅(默认)。对于bitflow或velar,您只能获得报价;要执行,请使用alex协议。Bitflow和Velar的执行可以通过协议sdk添加(例如Velar的@velarprotocol/vear-sdk返回contract-call参数;Bitflow需要它们的sdk或API)。

工具 说明
swap_get_supported_pairs 列出支持的交换对和协议(Alex池、Bitflow股票代码)。
swap_get_quote 获取掉期报价:估计产量、利率、费用。协议:alex(默认)、bitflow或velar。
swap_execute 通过Alex DEX合约调用执行掉期(protocol=Alex)。可以通过协议SDK添加Bitflow/Velar执行。
swap_get_history 交换链上活动的交易历史记录。
sbtc_get_balance 钱包的sBTC代币余额。
sbtc_bridge_deposit 桥接BTC的存款信息→ sBTC.
sbtc_bridge_withdraw sBTC的提款信息→ BTC.
stx_get_stacking_info PoX堆叠状态、周期信息、阈值、钱包堆叠状态。
stx_stack 启动STX单人堆叠(锁定STX以获得奖励周期)。
stx_revoke_delegation 通过PoX合约撤销堆叠委托。

参数 (swap_get_quote): token_in, token_out, amount,可选 protocol (alex | bitflow | velar,默认值 alex).
参数 (swap_execute): token_in, token_out, amount,可选 min_output, protocol (必须是 alex 用于执行), dry_run.
参数 (sbtc_bridge_deposit): amount_sats,可选 dry_run.
参数 (sbtc_bridge_withdraw): amount_sats, btc_address,可选 dry_run.
参数 (stx_stack): amount_ustx, pox_address, num_cycles,可选 dry_run.


BNS和市场数据

工具 说明
bns_lookup 将BNS名称解析为Stacks地址。
bns_get_names 地址所拥有的BNS名称。
bns_register 注册BNS名称(合同呼叫)。
market_get_prices 多资产价格(例如CoinGecko)。
market_get_history 用于绘制图表的价格历史记录。
portfolio_get_summary 带有美元估值的投资组合摘要(BTC+STX)。
portfolio_get_assets 所有有余额的资产(BTC、STX、可替代代币)。
portfolio_get_collectibles 收藏品:比特币铭文和Stacks NFT。

参数 (bns_lookup): name (例如。 alice.btc).
参数 (bns_get_names): address.
参数 (bns_register): name, namespace (例如。 btc),可选 dry_run.
参数 (market_get_prices): coins (例如。 ["bitcoin", "blockstack"]).
参数 (market_get_history): coin, days,可选 interval (例如。 daily).
参数 (portfolio_get_collectibles):可选 limit.


分类账硬件钱包(Stacks)

需要通过USB连接的Ledger设备,并打开Stacks应用程序。使用 interface: "tcp" 对于Speculos来说。

工具 说明
ledger_get_stx_addresses 使用公钥和派生路径从Ledger设备获取Stacks地址。
ledger_sign_stx_transaction 使用Ledger Stacks应用程序签署Stacks交易。

参数 (ledger_get_stx_addresses):可选 account, display, interface.
参数 (ledger_sign_stx_transaction): tx_hex,可选 derivation_path, interface.


增强的交易查询

高级堆栈事务查询,包括过滤、合约特定查询和内存池包含。使用Hiro /extended/v2/addresses/ 和 /extended/v1/address/ 端点。

工具 说明
stx_query_transactions 查询堆栈地址的事务,按类型和内存池包含进行过滤。
stx_query_transactions_by_contract 查询调用特定合约的交易,可选择按函数名过滤。

参数 (stx_query_transactions):可选 address, limit, offset, tx_type (token_transfer, contract_call, smart_contract, coinbase, poison_microblock), unanchored (包括内存池)。
参数 (stx_query_transactions_by_contract): contract_id (必填),可选 function_name, limit, offset.

示例响应 (stx_query_transactions): { "success": true, "address": "SP...", "transactions": [{ "txid": "0x...", "tx_type": "token_transfer", "status": "success", "block_height": 150000 }], "total": 42, "tx_type_filter": null, "unanchored": false }


Mempool运营

监控挂起的Stacks事务,查看内存池统计信息,并跟踪丢弃的事务。使用Hiro /extended/v1/tx/mempool/ 端点。

工具 说明
stx_mempool_list_pending 列出待处理的内存池事务,可选择按地址筛选。
stx_mempool_get_stats 获取内存池统计信息:按类型、费用平均值、年龄、字节大小分类的事务计数。
stx_mempool_get_dropped 获取最近丢弃的内存池事务(未被挖掘而删除)。

参数 (stx_mempool_list_pending):可选 address, limit, offset.
参数 (stx_mempool_get_dropped):可选 limit, offset.

示例响应 (stx_mempool_get_stats): { "success": true, "tx_type_counts": { "token_transfer": 42, "contract_call": 18 }, "tx_simple_fee_averages": { "token_transfer": { "p50": 200 } } }


区块浏览器

按高度、哈希或比特币块关联查询堆栈块。使用Hiro /extended/v2/blocks/ 和 /extended/v2/burn-blocks/ 端点。

工具 说明
stx_get_recent_blocks 使用元数据(高度、哈希、tx计数、烧录块信息)获取最近的Stacks块。
stx_get_block_by_height 按高度获取特定的Stacks块,包括事务ID。
stx_get_block_by_hash 通过哈希值获取特定的Stacks块。
stx_get_stacks_blocks_for_bitcoin_block 获取在特定比特币区块期间生成的所有Stacks区块。

参数 (stx_get_recent_blocks):可选 limit, offset.
参数 (stx_get_block_by_height): height (必填)。
参数 (stx_get_block_by_hash): block_hash (必填,有或没有 0x 前缀)。
参数 (stx_get_stacks_blocks_for_bitcoin_block): bitcoin_height (必填),可选 limit, offset.

示例响应 (stx_get_block_by_height): { "success": true, "height": 150000, "hash": "0x...", "burn_block_height": 935748, "tx_count": 12, "transaction_ids": ["0x..."] }


合同事件监控

跟踪智能合约和地址资产转移发出的事件。使用Hiro /extended/v1/contract/ 和 /extended/v1/address/ 端点。

工具 说明
stx_get_contract_events 获取合同的事件历史记录(打印事件、FT/NFT事件、STX事件)。
stx_get_address_asset_events 获取地址的资产事件(FT、NFT、STX传输)。

参数 (stx_get_contract_events): contract_id (必填),可选 limit, offset.
参数 (stx_get_address_asset_events):可选 address (默认:钱包), limit, offset.

示例响应 (stx_get_contract_events): { "success": true, "contract_id": "SP...contract", "events": [{ "event_type": "fungible_token_asset", "tx_id": "0x...", "asset_id": "SP...::token", "amount": "1000" }], "total": 5 }


令牌元数据

查询SIP-10可替换和SIP-9不可替换令牌元数据和持有者信息。使用Hiro代币元数据API(/metadata/v1/).

工具 说明
stx_get_token_metadata 获取可互换(SIP-10)或不可互换(SIP-9)令牌的元数据:名称、符号、小数、供应。
stx_get_token_holders 获取可替代代币的持有人地址和余额。

参数 (stx_get_token_metadata): contract_id (必填),可选 token_type (ft 或 nft,默认值: ft).
参数 (stx_get_token_holders): contract_id (必填),可选 limit, offset.

示例响应 (stx_get_token_metadata): { "success": true, "contract_id": "SP...::alex-token", "name": "Alex Token", "symbol": "ALEX", "decimals": 8, "total_supply": "1000000000000" }


网络统计与健康

查询Stacks网络状态、对等信息和链提示详细信息。使用Hiro /v2/info 和 /extended/v1/status 端点。

工具 说明
stx_get_network_info 核心网络信息:对等版本、烧块高度、服务器版本、链提示。
stx_get_network_status 区块链同步状态和链提示详细信息。

参数:没有。

示例响应 (stx_get_network_info): { "success": true, "peer_version": 402653189, "burn_block_height": 935748, "stacks_tip_height": 150000, "server_version": "stacks-node 2.5.0" }


安全

  • 秘密: 不得在工具响应(密钥、助记符、密码)中返回。
  • 破坏性行动: 发送、签名、广播和部署工具支持 dry_run.保持 BTC_DRY_RUN=true 除非你打算广播。之前需要明确确认 dry_run=false.
  • 先预览: 发送前使用预览/估计工具(例如。 btc_wallet_preview_transfer, btc_estimate_fee, stx_preview_transfer).
  • 限制: 可选的 BTC_MAX_SEND_BTC 和 BTC_MAX_FEE_SATS 上限金额和费用。
  • 环境: 保持 .env 超出版本控制和限制权限。运行脚本从repo根目录加载它。

测试

现场单元测试 tests/unit/ 并针对MCP服务器行为和钱包模块:

# From mcp/btc_wallet (this directory) or repo root
python -m pytest mcp/btc_wallet/tests/unit -v

测试模块包括: test_bitcoin_wallet_mcp_server.py, test_stx_wallet_mcp_server.py, test_ord_wallet_mcp_server.py, test_defi_wallet_mcp_server.py, test_phase5ab_mcp_server.py, test_phase5d_mcp_server.py, test_ledger_wallet_mcp_server.py, test_hiro_integration_mcp_server.py分类账测试需要设备或Speculos。


故障排除

问题 检查什么
服务器启动失败 Python 3.10+, pip install -r requirements.txt,并且正确 PATH.
“缺少密钥”或“无助记符” 设置以下任一项 BTC_PRIVATE_KEY 或 BTC_MNEMONIC 在 .env (并确保run脚本从repo根目录加载它)。
错误的网络 设置 BTC_NETWORK=mainnet 或 testnet;有些工具也接受显式 network 争论。
传输未广播 确认 BTC_DRY_RUN 和/或工具 dry_run 是 false 当你打算广播的时候。
Ledger“无设备” 设备已连接,Bitcoin/Stacks应用程序已打开,没有其他应用程序持有该设备;尝试 interface: "tcp" 与Speculos合作开发
费用或余额错误 检查mempool.space(或已配置的API)是否可访问;对于Stacks,请检查Hiro API和网络
导入错误 从仓库根目录或从 mcp/btc_wallet 以便 bitcoin_wallet, stx_wallet等是可进口的;或者,如果您使用包布局,请安装该包。

参考

  • 主控程序: 模型上下文协议.此服务器使用的协议和工具合同。
  • 基础: markmhendrickson/基金会共享开发流程和文件惯例。克隆后,运行 git submodule update --init foundation 如果 foundation/ 目录为空。