Skip to main content
Glama

What is this?

An MCP (Model Context Protocol) server that enables Claude to interact with Bitcoin's OP_RETURN functionality. Store documents, create timestamps, deploy tokens, and build custom protocols—all through natural language.

Works with Claude Desktop, Cursor, and any MCP-compatible client.

Supports Bitcoin Core v30+ with up to ~100KB OP_RETURN data.


Quick Start

# Install from source
git clone https://github.com/EricGrill/mcp-bitcoin-cli.git
cd mcp-bitcoin-cli
pip install -e .

# Run the server
mcp-bitcoin-cli

Add to your Claude Desktop config and start working with Bitcoin:

"Create a timestamp for this document on Bitcoin testnet"


Why Use This?

Feature

Description

Document Storage

Embed documents up to 100KB directly on-chain

Timestamping

Create immutable SHA-256/SHA3 hash commitments

BRC-20 Tokens

Deploy, mint, and transfer tokens using the BRC-20 standard

Custom Protocols

Build your own OP_RETURN protocols with the BTCD envelope format

Offline-Capable

Encode/decode data without a running Bitcoin node

Safety First

Testnet default, dry-run mode, fee warnings


Available Tools

Low-Level Primitives

Offline-capable tools for data encoding and transaction building.

Tool

Description

encode_op_return

Encode arbitrary data into OP_RETURN script format

decode_op_return

Parse and extract data from OP_RETURN scripts

build_op_return_transaction

Construct transactions with OP_RETURN outputs

parse_envelope

Parse BTCD envelope structure from raw bytes

Bitcoin Core Interface

Tools for interacting with a running Bitcoin node.

Tool

Description

get_node_info

Check connection status and network info

list_utxos

List available UTXOs for funding transactions

broadcast_transaction

Send signed transactions (dry-run by default)

get_transaction

Fetch and decode transaction details

search_op_returns

Scan blocks for OP_RETURN transactions

Token Operations (BRC-20)

Create and manage tokens using the BRC-20 standard.

Tool

Description

create_token_deploy

Deploy a new BRC-20 token

create_token_mint

Mint tokens from an existing deployment

create_token_transfer

Create a transfer inscription

Document Storage

Store and retrieve documents on the blockchain.

Tool

Description

embed_document

Prepare documents for on-chain storage

read_document

Parse and extract documents from transactions

Timestamping & Attestation

Create cryptographic proofs of existence.

Tool

Description

create_timestamp

Create SHA-256/SHA3 hash commitments

verify_timestamp

Verify data against on-chain timestamps


Data Envelope Format

All data uses the BTCD envelope format for discoverability and proper parsing:

┌─────────────────────────────────────────────────────────┐
│ OP_RETURN Envelope (variable size, up to ~100KB)        │
├──────────┬──────────┬──────────┬────────────────────────┤
│ Magic    │ Version  │ Type     │ Payload                │
│ (4 bytes)│ (1 byte) │ (1 byte) │ (variable)             │
├──────────┼──────────┼──────────┼────────────────────────┤
│ "BTCD"   │ 0x01     │ See below│ Type-specific data     │
└──────────┴──────────┴──────────┴────────────────────────┘

Type

Hex

Description

RAW

0x00

Raw bytes, no structure

TEXT

0x01

UTF-8 text

JSON

0x02

JSON document

HASH

0x03

Hash commitment (timestamp)

TOKEN

0x04

Token operation (BRC-20)

FILE

0x05

File with content-type

CUSTOM

0x80+

User-defined protocols


Configuration

Claude Desktop Setup

Add to your Claude Desktop config:

Platform

Config Path

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

Linux

~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "bitcoin": {
      "command": "mcp-bitcoin-cli",
      "env": {
        "BITCOIN_NETWORK": "testnet",
        "BITCOIN_CLI_PATH": "/usr/local/bin/bitcoin-cli"
      }
    }
  }
}

Configuration File

Create ~/.mcp-bitcoin-cli/config.toml:

[connection]
method = "cli"              # "cli" or "rpc"
network = "testnet"         # "mainnet", "testnet", "signet", "regtest"

[cli]
path = "bitcoin-cli"        # Path to bitcoin-cli binary
datadir = ""                # Optional: custom datadir

[rpc]
host = "127.0.0.1"
port = 18332                # Testnet default
user = ""
password = ""

[safety]
require_confirmation = true # Prompt before broadcast
dry_run_default = true      # Always dry-run first
max_data_size = 102400      # 100KB limit

Network Ports

Network

Default RPC Port

Mainnet

8332

Testnet

18332

Signet

38332

Regtest

18443


Examples

"Create a SHA-256 timestamp for this contract"
"Verify this document against timestamp in transaction abc123..."
"Create a SHA3-256 hash commitment for my research paper"
"Embed this JSON configuration on the blockchain"
"Store this text document with content-type text/plain"
"Read the document from transaction def456..."
"Deploy a new token called TEST with max supply 21 million"
"Mint 1000 TEST tokens"
"Create a transfer inscription for 500 TEST"
"Encode this hex data into an OP_RETURN script"
"Decode the OP_RETURN from this transaction"
"Build a transaction with this message embedded"

Architecture

┌─────────────────────────────────────────────────────────┐
│                    MCP Server                           │
├─────────────────────────────────────────────────────────┤
│  High-Level Tools                                       │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐   │
│  │ BRC-20 Ops  │ │ Document    │ │ Timestamp/      │   │
│  │ deploy/mint │ │ Storage     │ │ Attestation     │   │
│  └──────┬──────┘ └──────┬──────┘ └────────┬────────┘   │
│         │               │                  │            │
│  ───────┴───────────────┴──────────────────┴─────────  │
│                                                         │
│  Low-Level Primitives                                   │
│  ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐   │
│  │ encode_     │ │ decode_     │ │ build_op_return │   │
│  │ op_return   │ │ op_return   │ │ _transaction    │   │
│  └─────────────┘ └─────────────┘ └─────────────────┘   │
├─────────────────────────────────────────────────────────┤
│  Bitcoin Core Interface (configurable)                  │
│  ┌──────────────────┐  ┌────────────────────────────┐  │
│  │ bitcoin-cli      │  │ JSON-RPC (direct)          │  │
│  │ (subprocess)     │  │                            │  │
│  └──────────────────┘  └────────────────────────────┘  │
└─────────────────────────────────────────────────────────┘

Safety Features

Feature

Description

Testnet Default

Network locked to testnet unless explicitly configured

Dry-Run Mode

Transactions validated before broadcast by default

Fee Warnings

Alerts for unusually high fees

Size Validation

Rejects data exceeding configured max before building

Network Lock

Can't switch networks mid-session


Development

# Clone
git clone https://github.com/EricGrill/mcp-bitcoin-cli.git
cd mcp-bitcoin-cli

# Install with dev dependencies
pip install -e ".[dev]"

# Run tests
pytest -v

# Run tests with coverage
pytest --cov=mcp_bitcoin_cli

Project Structure

src/mcp_bitcoin_cli/
├── __init__.py          # Public exports
├── server.py            # MCP server with 16 tools
├── envelope.py          # BTCD envelope encoding/decoding
├── primitives.py        # OP_RETURN script encoding/decoding
├── config.py            # Configuration loading
├── node/
│   ├── interface.py     # Abstract node interface
│   ├── cli.py           # bitcoin-cli subprocess
│   └── rpc.py           # JSON-RPC direct connection
└── protocols/
    ├── base.py          # Base protocol class
    └── brc20.py         # BRC-20 token protocol

Troubleshooting

  1. Verify Bitcoin Core is running: bitcoin-cli getblockchaininfo

  2. Check network matches config (testnet vs mainnet)

  3. Verify RPC credentials if using JSON-RPC mode

  1. Use broadcast_transaction with dry_run=true first

  2. Check fee rate is sufficient

  3. Verify UTXOs have enough confirmations

  • Bitcoin Core v30+ supports up to ~100KB OP_RETURN

  • Older versions limited to 80 bytes

  • Check max_data_size in config

# Verify installation
python -c "import mcp_bitcoin_cli; print(mcp_bitcoin_cli.__version__)"

# Reinstall if needed
pip install -e ".[dev]"

Contributing

Contributions welcome!

  1. Fork the repository

  2. Create feature branch: git checkout -b feature/my-feature

  3. Make changes and test: pytest

  4. Commit: git commit -m 'Add my feature'

  5. Push: git push origin feature/my-feature

  6. Open a Pull Request



License

MIT

Install Server
A
security – no known vulnerabilities
F
license - not found
A
quality - confirmed to work

Resources

Looking for Admin?

Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/EricGrill/mcp-bitcoin-cli'

If you have feedback or need assistance with the MCP directory API, please join our Discord server