# io.github.XCP/mcp-server (npm · @21e14/mcp-server)

Interact with Counterparty — the token protocol on Bitcoin. Query, compose, sign.

- Trust score: 70/100 (medium)
- Change this week: +17
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@21e14/mcp-server`: 70/100 (this document), [markdown](https://verifymcp.io/servers/xcp-mcp-server/21e14-mcp-server.md), [page](https://verifymcp.io/servers/xcp-mcp-server/21e14-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@21e14/mcp-server`
- Version: `1.0.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 83/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known medium-severity CVE affects @hono/node-server 1.19.17, reached via @modelcontextprotocol/sdk > @hono/node-server. A fixed version is available.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (100 of 104), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 172 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 87/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 5441 tokens (~106/item across 51 items; 48 tools + 3 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add xcp-mcp-server -- npx -y @21e14/mcp-server
```

### Codex

```bash
codex mcp add xcp-mcp-server -- npx -y @21e14/mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "xcp-mcp-server": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@21e14/mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add xcp-mcp-server --command npx --arg -y --arg @21e14/mcp-server
```

### Hermes

```yaml
mcp_servers:
  xcp-mcp-server:
    command: "npx"
    args: ["-y", "@21e14/mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "xcp-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@21e14/mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 70, +10)

- [security regression] Known CVEs: unverified → fail
- [security regression] Provenance: fail → unverified
- [security regression] Install scripts: pass → unverified
- [functional regression] License: pass → unverified
- [functional regression] Maintenance: pass → unverified
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Stability: unverified → 0.23
- [functional] Licence: MIT

### 2026-08-01 (score 60, −9)

- [security regression] Known CVEs: fail → unverified
- [functional regression] Dependency health: partial → unverified

### 2026-07-31 (score 69, +6)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 63, −18)

- [security regression] Malware scan: pass → unverified

### 2026-07-29 (score 81, +28)

- [security regression] GHSA-frvp-7c67-39w9 affects this package: medium
- [security regression] Known CVEs: unverified → fail
- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional improvement] Schema quality: unverified → excellent
- [functional] Licence: MIT

### 2026-07-27 (score 53)

First indexed and scored.

## MCP tools (48)

### `get_balances` (~65 tokens)

Get all Counterparty token balances for a Bitcoin address

Input parameters:

- `address` (string, required): Bitcoin address
- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip

### `get_balance` (~48 tokens)

Get the balance of a specific asset for a Bitcoin address

Input parameters:

- `address` (string, required): Bitcoin address
- `asset` (string, required): Asset name (e.g. XCP, PEPECASH)

### `get_asset_info` (~52 tokens)

Get metadata for a Counterparty asset (supply, divisibility, issuer, description, etc.)

Input parameters:

- `asset` (string, required): Asset name (e.g. XCP, PEPECASH, A12345)

### `get_asset_balances` (~66 tokens)

Get all balances for a specific asset across all holders

Input parameters:

- `asset` (string, required): Asset name
- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip

### `get_assets` (~63 tokens)

Search or list Counterparty assets

Input parameters:

- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `named` (boolean): Filter to named assets only
- `offset` (integer): Number of results to skip

### `get_issuances` (~65 tokens)

Get the issuance history for a Counterparty asset

Input parameters:

- `asset` (string, required): Asset name
- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip

### `get_owned_assets` (~65 tokens)

Get all assets issued/owned by a specific address

Input parameters:

- `address` (string, required): Bitcoin address
- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip

### `get_orders` (~67 tokens)

Get orders on the Counterparty DEX (default: open)

Input parameters:

- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip
- `status` (string): Order status filter

### `get_order` (~32 tokens)

Get details of a specific DEX order by its transaction hash

Input parameters:

- `order_hash` (string, required): Order transaction hash

### `get_order_matches` (~75 tokens)

Get matches for a specific DEX order

Input parameters:

- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip
- `order_hash` (string, required): Order transaction hash
- `status` (string): Match status filter

### `get_orders_by_pair` (~103 tokens)

Get the order book for a specific trading pair on the DEX

Input parameters:

- `asset1` (string, required): First asset (e.g. XCP)
- `asset2` (string, required): Second asset (e.g. PEPECASH)
- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip
- `status` (string): Order status filter

### `get_asset_orders` (~74 tokens)

Get all DEX orders involving a specific asset

Input parameters:

- `asset` (string, required): Asset name
- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip
- `status` (string): Order status filter

### `get_address_orders` (~75 tokens)

Get all DEX orders placed by a specific address

Input parameters:

- `address` (string, required): Bitcoin address
- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip
- `status` (string): Order status filter

### `get_dispensers` (~78 tokens)

Get Counterparty dispensers (default: open)

Input parameters:

- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip
- `status` (string): Status: 0=open, 1=closed, 10=closing

### `get_dispenser` (~31 tokens)

Get details of a specific dispenser by its transaction hash

Input parameters:

- `hash` (string, required): Dispenser transaction hash

### `get_dispensers_by_asset` (~91 tokens)

Get dispensers for a specific asset (default: open)

Input parameters:

- `asset` (string, required): Asset name
- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip
- `status` (string): Status: 0=open, 1=closed, 10=closing

### `get_address_dispensers` (~88 tokens)

Get all dispensers created by a specific address

Input parameters:

- `address` (string, required): Bitcoin address
- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip
- `status` (string): Status: 0=open, 1=closed, 10=closing

### `get_dispenses` (~68 tokens)

Get dispense records (purchases) for a specific dispenser

Input parameters:

- `cursor` (string): Pagination cursor from previous response
- `hash` (string, required): Dispenser transaction hash
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip

### `get_dividends` (~63 tokens)

Get dividend distributions for a specific asset

Input parameters:

- `asset` (string, required): Asset name
- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip

### `get_address_transactions` (~65 tokens)

Get transaction history for a Bitcoin address on Counterparty

Input parameters:

- `address` (string, required): Bitcoin address
- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip

### `get_sends` (~66 tokens)

Get all sends (token transfers) from a specific address

Input parameters:

- `address` (string, required): Bitcoin address
- `cursor` (string): Pagination cursor from previous response
- `limit` (integer): Number of results to return
- `offset` (integer): Number of results to skip

### `get_transaction` (~30 tokens)

Get details of a specific Counterparty transaction by its hash

Input parameters:

- `tx_hash` (string, required): Transaction hash

### `get_utxo_balances` (~41 tokens)

Get Counterparty token balances attached to a specific UTXO

Input parameters:

- `utxo` (string, required): UTXO identifier (txid:vout)

### `get_latest_block` (~20 tokens)

Get the latest block information from the Counterparty node

### `compose_send` (~231 tokens)

Compose a transaction to send Counterparty tokens to an address

Input parameters:

- `address` (string, required): Source Bitcoin address
- `asset` (string, required): Asset to send (e.g. XCP, PEPECASH)
- `destination` (string, required): Destination Bitcoin address
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `memo` (string): Optional memo to attach
- `memo_is_hex` (boolean): Whether memo is hex-encoded
- `no_dispense` (boolean): If true, prevent this send from triggering a dispenser on the destination address
- `quantity` (integer, required): Raw integer amount. For divisible assets: multiply human amount by 10^8 (e.g. 1.0 XCP = 100000000). For indivisible: use whole number. Check get_asset_info for divisibility.
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.

### `compose_mpma` (~217 tokens)

Compose a multi-party multi-asset send transaction. Sends multiple assets to multiple destinations in a single transaction. All three arrays must be the same length.

Input parameters:

- `address` (string, required): Source Bitcoin address
- `assets` (string, required): Comma-separated asset names, one per recipient (e.g. "XCP,PEPECASH,XCP")
- `destinations` (string, required): Comma-separated destination addresses, one per recipient
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `memo` (string): Optional memo to attach
- `memo_is_hex` (boolean): Whether memo is hex-encoded
- `quantities` (string, required): Comma-separated raw integer quantities, one per recipient. For divisible assets: human amount * 10^8.
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.

### `compose_order` (~218 tokens)

Compose a DEX order to trade Counterparty assets. Creates a limit order on the decentralized exchange.

Input parameters:

- `address` (string, required): Source Bitcoin address
- `expiration` (integer, required): Number of blocks until order expires (max 8064, ~2 months)
- `get_asset` (string, required): Asset to receive/buy
- `get_quantity` (integer, required): Raw integer amount to receive. For divisible assets: human amount * 10^8. For BTC: satoshis.
- `give_asset` (string, required): Asset to give/sell
- `give_quantity` (integer, required): Raw integer amount to give. For divisible assets: human amount * 10^8. For BTC: satoshis.
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.

### `compose_cancel` (~117 tokens)

Compose a transaction to cancel an open DEX order

Input parameters:

- `address` (string, required): Source Bitcoin address (must be order creator)
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `offer_hash` (string, required): Transaction hash of the order to cancel
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.

### `compose_btcpay` (~126 tokens)

Compose a BTC payment for a matched DEX order. Used to complete BTC trades on the DEX.

Input parameters:

- `address` (string, required): Source Bitcoin address
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `order_match_id` (string, required): ID of the order match to pay for
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.

### `compose_issuance` (~291 tokens)

Compose a transaction to issue (create) a new Counterparty asset, or update an existing one.

Input parameters:

- `address` (string, required): Source Bitcoin address (will be the issuer)
- `asset` (string, required): Asset name to create (4-12 uppercase chars, cannot start with A; or A + numeric ID for free numeric assets)
- `description` (string): Asset description (max 52 chars)
- `divisible` (boolean): Whether the asset is divisible (8 decimal places)
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `inscription` (string): Base64-encoded inscription data (requires P2TR address)
- `lock` (boolean): Lock the asset (no further issuance)
- `mime_type` (string): MIME type for inscription (e.g. image/png, text/plain)
- `quantity` (integer, required): Raw integer amount to issue. For divisible: human amount * 10^8. For indivisible: whole number. Use 0 for metadata-only updates.
- `reset` (boolean): Reset the asset
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.
- `transfer_destination` (string): Transfer asset ownership to this address

### `compose_dispenser` (~237 tokens)

Compose a transaction to create, open, or close a dispenser. Dispensers automatically sell tokens for BTC.

Input parameters:

- `address` (string, required): Source Bitcoin address
- `asset` (string, required): Asset to dispense
- `escrow_quantity` (integer, required): Raw integer total amount to load into dispenser. For divisible: human amount * 10^8. Use 0 when closing.
- `give_quantity` (integer, required): Raw integer amount of asset per dispense. For divisible: human amount * 10^8. Use 0 when closing.
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `mainchainrate` (integer, required): BTC price per dispense (in satoshis). Use 0 when closing.
- `open_address` (string): Open dispenser on a different address
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.
- `status` (integer): 0=open, 10=close

### `compose_dispense` (~140 tokens)

Compose a transaction to buy from a dispenser by sending BTC to it

Input parameters:

- `address` (string, required): Source Bitcoin address (buyer)
- `dispenser` (string, required): Dispenser address to buy from
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `quantity` (integer, required): Amount of BTC to send in satoshis (1 BTC = 100000000)
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.

### `compose_dividend` (~155 tokens)

Compose a transaction to distribute dividends to all holders of an asset

Input parameters:

- `address` (string, required): Source Bitcoin address
- `asset` (string, required): Asset whose holders will receive dividends
- `dividend_asset` (string, required): Asset to distribute as dividend
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `quantity_per_unit` (integer, required): Raw integer amount of dividend asset per unit held. For divisible: human amount * 10^8.
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.

### `compose_broadcast` (~185 tokens)

Compose a transaction to broadcast a text message or numeric value to the Counterparty network

Input parameters:

- `address` (string, required): Source Bitcoin address
- `fee_fraction` (number): Fee fraction for bet matching
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `inscription` (string): Base64-encoded inscription data (requires P2TR address)
- `mime_type` (string): MIME type for inscription (e.g. image/png, text/plain)
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.
- `text` (string, required): Text to broadcast
- `timestamp` (integer): Unix timestamp
- `value` (number): Numeric value

### `compose_sweep` (~149 tokens)

Compose a transaction to sweep all assets and/or BTC from one address to another

Input parameters:

- `address` (string, required): Source Bitcoin address
- `destination` (string, required): Destination Bitcoin address
- `flags` (integer): Bitfield: 1=transfer balances, 2=transfer ownership, 4=transfer BTC
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `memo` (string): Optional memo
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.

### `compose_destroy` (~146 tokens)

Compose a transaction to permanently destroy (burn) Counterparty tokens

Input parameters:

- `address` (string, required): Source Bitcoin address
- `asset` (string, required): Asset to destroy
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `quantity` (integer, required): Raw integer amount to destroy. For divisible: human amount * 10^8.
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.
- `tag` (string): Optional tag/memo for the destruction

### `compose_fairminter` (~510 tokens)

Compose a transaction to create a fair minting launch for a new asset. For XCP-420 compliant launches, use compose_xcp420_fairminter instead.

Input parameters:

- `address` (string, required): Source Bitcoin address
- `asset` (string, required): Asset name to create
- `burn_payment` (boolean): Whether payment is burned (true) or sent to issuer (false)
- `description` (string): Asset description
- `divisible` (boolean): Whether the asset is divisible (8 decimal places)
- `end_block` (integer): Block height when minting ends
- `hard_cap` (integer): Raw integer max total supply. For divisible: human amount * 10^8.
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `inscription` (string): Base64-encoded inscription data (requires P2TR address)
- `lock_quantity` (boolean): Lock supply so no further issuance is possible
- `max_mint_per_address` (integer): Raw integer max per address. For divisible: human amount * 10^8.
- `max_mint_per_tx` (integer): Raw integer max per tx. For divisible: human amount * 10^8.
- `mime_type` (string): MIME type for inscription (e.g. image/png, text/plain)
- `minted_asset_commission` (number): Commission fraction (0-1) on minted assets
- `premint_quantity` (integer): Raw integer amount to premint to issuer. For divisible: human amount * 10^8.
- `price` (integer): Raw integer price per mint in the payment asset (XCP). For XCP: human amount * 10^8 (e.g. 0.1 XCP = 10000000).
- `quantity_by_price` (integer): Raw integer tokens received per price payment. For divisible: human amount * 10^8.
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.
- `soft_cap` (integer): Raw integer soft cap. For divisible: human amount * 10^8.
- `soft_cap_deadline_block` (integer): Deadline block for reaching soft cap. Must be less than end_block.
- `start_block` (integer): Block height when minting starts

### `compose_xcp420_fairminter` (~238 tokens)

Compose a XCP-420 compliant fair launch. XCP-420 is a community standard that enforces fixed parameters: 10M supply, 4.2M soft cap, 0.1 XCP per mint, 1000 tokens per mint, 1000 block duration, no premine, no commission, burn payment, locked supply. Only the asset name, start block, and description are configurable.

Input parameters:

- `address` (string, required): Source Bitcoin address
- `asset` (string, required): Asset name to create (4-12 uppercase chars, cannot start with A)
- `description` (string): Asset description
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.
- `start_block` (integer, required): Block height when minting starts. Must be a future block. Minting runs for exactly 1000 blocks.

### `compose_fairmint` (~142 tokens)

Compose a transaction to mint tokens from an active fair minter

Input parameters:

- `address` (string, required): Source Bitcoin address
- `asset` (string, required): Asset to mint
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `quantity` (integer): Raw integer amount to mint. For divisible: human amount * 10^8. If omitted, mints max allowed.
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.

### `compose_attach` (~148 tokens)

Compose a transaction to attach Counterparty tokens to a specific UTXO

Input parameters:

- `address` (string, required): Source Bitcoin address
- `asset` (string, required): Asset to attach
- `destination_vout` (integer): Output index to attach to
- `inputs_set` (string): Comma-separated UTXOs to use as inputs (txid:vout)
- `quantity` (integer, required): Raw integer amount to attach. For divisible: human amount * 10^8.
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.

### `compose_detach` (~99 tokens)

Compose a transaction to detach Counterparty tokens from a UTXO back to an address

Input parameters:

- `destination` (string, required): Destination Bitcoin address
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.
- `utxo` (string, required): UTXO identifier (txid:vout)

### `compose_movetoutxo` (~103 tokens)

Compose a transaction to move a UTXO (and any attached tokens) to a new output

Input parameters:

- `destination` (string): Destination Bitcoin address
- `sat_per_vbyte` (number): Fee rate in satoshis per virtual byte (e.g. 1, 5.5, 0.15). Check get_fee_estimate for current market rates.
- `utxo` (string, required): UTXO identifier (txid:vout)

### `broadcast_transaction` (~34 tokens)

Broadcast a signed Bitcoin transaction to the network via the Counterparty node

Input parameters:

- `raw_transaction` (string, required): Signed raw transaction hex

### `get_fee_estimate` (~39 tokens)

Get the current Bitcoin fee rate estimate from the Counterparty node

Input parameters:

- `conf_target` (integer): Confirmation target in blocks (default 3)

### `decode_transaction` (~37 tokens)

Decode a raw Bitcoin transaction hex into its components (inputs, outputs, etc.)

Input parameters:

- `raw_transaction` (string, required): Raw transaction hex to decode

### `unpack_transaction` (~62 tokens)

Decode and unpack a Counterparty message from a raw transaction, revealing the embedded Counterparty data

Input parameters:

- `block_index` (integer): Block index for context (optional)
- `raw_transaction` (string, required): Hex data to unpack (raw transaction hex or Counterparty data hex)

### `get_server_info` (~21 tokens)

Get Counterparty node status, version, and network information

### `api_request` (~128 tokens)

Make a raw API request to any Counterparty REST endpoint not covered by the other tools. Full API reference: https://raw.githubusercontent.com/CounterpartyXCP/counterparty-core/refs/heads/master/apiary.apib — Example: endpoint="/v2/blocks/last", method="GET"

Input parameters:

- `endpoint` (string, required): API endpoint path (e.g. /v2/blocks/last, /v2/addresses/{addr}/credits)
- `method` (string): HTTP method
- `params` (object): Query parameters (for GET) or body fields (for POST)

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/xcp-mcp-server/21e14-mcp-server#diagnostics

## Score history

- 2026-08-03: 70
- 2026-08-02: 70
- 2026-08-01: 60
- 2026-07-31: 69
- 2026-07-30: 63
- 2026-07-29: 81
- 2026-07-28: 53
- 2026-07-27: 53

## Links

- npm package: https://www.npmjs.com/package/@21e14/mcp-server
- Socket report: https://socket.dev/npm/package/@21e14/mcp-server
- Repository: https://github.com/XCP/mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/xcp-mcp-server/21e14-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/xcp-mcp-server/21e14-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/xcp-mcp-server/21e14-mcp-server
