<a href="https://github.com/AbdelStark/bitcoin-mcp/actions/workflows/ci.yml"><img alt="GitHub Workflow Status" src="https://img.shields.io/github/actions/workflow/status/AbdelStark/bitcoin-mcp/ci.yml?style=for-the-badge" height=30></a> <a href="https://bitcoin.org/"> <img alt="Bitcoin" src="https://img.shields.io/badge/Bitcoin-000?style=for-the-badge&logo=bitcoin&logoColor=white" height=30></a> <a href="https://modelcontextprotocol.com/"> <img alt="MCP" src="https://img.shields.io/badge/MCP-000?style=for-the-badge&logo=modelcontextprotocol&logoColor=white" height=30></a>
</div>₿itcoin & Lightning Network MCP Server
<div align="center"> <h3> <a href="abdelstark.github.io/bitcoin-mcp/"> Documentation </a> <span> | </span> <a href="https://abdelstark.github.io/bitcoin-mcp/docs/integration/claude-desktop"> Try with Claude </a> <span> | </span> <a href="https://abdelstark.github.io/bitcoin-mcp/docs/integration/goose"> Try with Goose </a> </h3> </div> <div align="center"> <a href="https://smithery.ai/server/@AbdelStark/bitcoin-mcp"><img alt="Smithery Badge" src="https://smithery.ai/badge/@AbdelStark/bitcoin-mcp"></a> <a href="https://www.npmjs.com/package/bitcoin-mcp"><img alt="NPM Version" src="https://img.shields.io/npm/v/bitcoin-mcp"></a> </div>Overview
A Model Context Protocol (MCP) server that enables AI models to interact with Bitcoin and Lightning Network, allowing them to generate keys, validate addresses, decode transactions, query the blockchain, and more.
🎮 Demo
| Claude Demo Video | Goose Demo Video |
|---|---|
| <img src="docs/static/img/bitcoin-mcp-claude-desktop-screenshot.png" alt="Claude Desktop Demo" width="400"/> | <img src="docs/static/img/bitcoin-mcp-goose-screenshot.png" alt="Goose Demo" width="400"/> |
💼 Table of Contents
- ₿itcoin & Lightning Network MCP Server
🔧 Features
- Key Generation: Create new Bitcoin key pairs — including address, public key, and private key (WIF).
- Address Validation: Validate the correctness of a Bitcoin address.
- Transaction Decoding: Parse a raw Bitcoin transaction and display its details in a human-readable format.
- Blockchain Queries:
- Latest Block: Retrieve details about the most recent block (hash, height, timestamp, transaction count, etc.).
- Transaction Details: Fetch detailed information about a transaction using its TXID.
- Lightning Network:
- Invoice Decoding: Parse a BOLT11 Lightning invoice and display human-readable information.
- Payment: Pay a Lightning invoice directly from your LNBits wallet.
🔑 Claude Desktop Integration
To use the Bitcoin MCP server with Claude Desktop (Anthropic's desktop app for Claude), follow these steps:
-
Download and Install Claude Desktop: Visit the official Claude Desktop downloads page and get the app for your operating system (macOS or Windows) (Installing Claude for Desktop | Anthropic Help Center). Install the app and ensure you're using the latest version (you can check for updates in the app menu).
-
Configure Claude Desktop to use the Bitcoin MCP Server: Open the Claude Desktop configuration file (it's created when you first edit settings in Claude Desktop):
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Add an entry for the Bitcoin MCP server in this JSON config under the"mcpServers"section. For example:
{ "mcpServers": { "bitcoin-mcp": { "command": "npx", "args": ["-y", "bitcoin-mcp@latest"] } } }In the snippet above,
"bitcoin-mcp"is an identifier for the server (you can name it whatever you want). Thecommandis set to run thenpxcommand, andargspoints to the path of your Bitcoin MCP server script or the command to run the server. - macOS:
-
Restart Claude Desktop: Save the
claude_desktop_config.jsonfile and then close and reopen Claude Desktop. On the next launch, Claude will automatically start the Bitcoin MCP server as configured. If Claude Desktop was running, you need to restart it for the changes to take effect.
Testing the Claude Desktop Integration
Once Claude Desktop is restarted, you can test whether the Bitcoin MCP server is working correctly:
-
Ask Claude a sample question related to Bitcoin. For example, try asking: "What's the latest block on the Bitcoin network?" If the integration is successful, Claude's response should include the latest block fetched via the MCP server, rather than an "I don't know" or a generic answer. You can also try other queries like "Give me information about the transaction with TXID abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890." Claude should use the MCP server's tools to retrieve the data and answer your query.
-
Verify the response: Claude should return a detailed answer (e.g. the latest block on the Bitcoin network) without errors. If you get an error message or no useful response, the MCP server might not be connected properly.
-
Check Claude's logs (if needed): Claude Desktop provides log files that can help debug MCP integrations. If the tool isn't responding, check the log files in:
- macOS:
~/Library/Logs/Claude/ - Windows:
%APPDATA%\Claude\logs\
Look formcp.logfor general MCP connection messages, and a file namedmcp-server-bitcoin-mcp.log(or with whatever name you used) for the MCP server's output/errors. These logs will show if the server started up or if there were any errors (such as a wrong path or exceptions in the server). If you see errors, fix the configuration or environment as needed, then restart Claude Desktop and test again.
- macOS:
🦆 Goose Integration
Goose is an open-source AI agent framework by Block that supports extensions via the Model Context Protocol. You can integrate the Bitcoin MCP server as a Goose extension to allow Goose to interact with the Bitcoin blockchain. Goose supports two modes of integration for MCP servers: running the server as a local process (STDIO) or connecting to it as a remote service via Server-Sent Events (SSE). Below are instructions for both methods:
Using STDIO (Local Extension)
This method runs the Bitcoin MCP server locally as a subprocess of Goose, communicating through standard input/output.
-
Add a new extension in Goose: Open Goose's configuration interface. You can do this via the command line by running
goose configure, or in the Goose Desktop app by going to Settings > Extensions. From the menu, choose "Add Extension." (Using Extensions | goose) -
Choose the extension type – Command-Line Extension: When prompted for the type of extension, select Command-Line Extension (in the CLI menu or UI) so that Goose knows it should launch a local command (Using Extensions | goose) (as opposed to a built-in or remote extension).
-
Enter the extension details: Provide a name and command for the Bitcoin MCP server:
-
Name: You can call it "bitcoin", or any identifier (this will be how you refer to the extension).
-
Command: Specify how to run the MCP server. For example, if you have the Python script, enter the command to run it. In the CLI configurator, it might ask "What command should be run?" – you would enter:
npx -y bitcoin-mcp@latestThis tells Goose to launch the Bitcoin MCP server (GitHub - AbdelStark/bitcoin-mcp: Bitcoin MCP Server). (Make sure to use the correct path to your server script or the correct command to run the server, just like in the Claude config.)
-
You typically do not need to add any arguments beyond the script path (unless your server requires special flags). The above command uses the default STDIO transport, which Goose expects for a command-line extension. (In the Goose config file, this would correspond to an entry with
cmd: "npx"andargs: ["-y", "bitcoin-mcp@latest"], withtype: stdioindicating standard I/O mode (Using Extensions | goose).)
-
-
Finalize and enable: Complete the extension addition. Goose will add this new extension to its configuration (usually
~/.config/goose/config.yaml). Ensure the extension is enabled (if using the CLI wizard, it should be enabled by default once added; in the Goose Desktop app, you can check the Extensions list and toggle it on if it isn't already (Using Extensions | goose) (Using Extensions | goose)). -
Start a Goose session with the new extension: You can now use the extension in Goose. If you're running Goose via CLI, start a session that includes the extension by running:
goose session --with-extension "bitcoin"
replacing "bitcoin" with whatever name you gave the extension (Using Extensions | goose). (This ensures the session loads the extension. Alternatively, if the extension is enabled globally, Goose Desktop or CLI will automatically have it available in all sessions.)
Using SSE (Remote Extension)
This method connects Goose to an already-running MCP server via an HTTP SSE stream. Use this if you want to run the Bitcoin MCP server as a standalone service (possibly on another machine or just independently of Goose).
- Launch the MCP server as a standalone service: Run the Bitcoin MCP server so that it listens for connections. In practice, this means the server needs to be started in a mode that serves an HTTP endpoint for MCP. For example, you might run the server with a specific command or option to listen on a port (such as usi
…
