Skip to main content
ClaudeWave

Safety-first MCP server for EVM chains and Bitcoin

MCP ServersRegistry oficial3 estrellas0 forksJavaScriptMITActualizado today
ClaudeWave Trust Score
100/100
Verified
Passed
  • Open-source license (MIT)
  • Actively maintained (<30d)
  • Clear description
  • Topics declared
  • Mature repo (>1y old)
  • Documented (README)
Last scanned: 8/20/2026
Install in Claude Code / Claude Desktop
Method: NPX · chainrpc-mcp
Claude Code CLI
claude mcp add chainrpc-mcp -- npx -y chainrpc-mcp
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "chainrpc-mcp": {
      "command": "npx",
      "args": ["-y", "chainrpc-mcp"],
      "env": {
        "MCP_AUTH_TOKEN": "<mcp_auth_token>"
      }
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
Detected environment variables
MCP_AUTH_TOKEN
Casos de uso

Resumen de MCP Servers

# ChainRPC MCP

<!-- mcp-name: io.github.John0n1/chainrpc-mcp -->

[![npm](https://img.shields.io/npm/v/chainrpc-mcp?logo=npm)](https://www.npmjs.com/package/chainrpc-mcp)
[![CI](https://github.com/John0n1/chainrpc-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/John0n1/chainrpc-mcp/actions/workflows/ci.yml)
[![Node.js](https://img.shields.io/node/v/chainrpc-mcp)](package.json)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)

A safety-first [Model Context Protocol](https://modelcontextprotocol.io/) server for EVM chains and Bitcoin.

ChainRPC MCP gives agents a focused set of tools for balances, blocks, transactions, logs, smart-contract reads, gas and fee estimation, and transaction decoding. It can submit **already-signed** transactions, but only behind explicit, disabled-by-default safety gates. It never accepts private keys, manages wallets, or signs transactions.

- **Two ecosystems, one server:** EVM JSON-RPC and Bitcoin Core-compatible RPC.
- **Useful without an account:** defaults to public Ethereum and Bitcoin endpoints from [PublicNode](https://publicnode.com/).
- **Bring your own infrastructure:** replace either endpoint and optionally use HTTP Basic authentication.
- **Official transports:** local stdio and stateful Streamable HTTP through the official MCP SDK.
- **Constrained by design:** no arbitrary RPC passthrough and no wallet, admin, debug, miner, or node-management methods.

## Choose how to connect

### Hosted, read-only service

The public endpoint is available now:

```text
https://chainrpc-mcp.mitander.io/mcp
```

For clients that accept a remote Streamable HTTP server:

```json
{
  "mcpServers": {
    "chainrpc-mcp": {
      "url": "https://chainrpc-mcp.mitander.io/mcp"
    }
  }
}
```

Health and upstream status:

```sh
curl 'https://chainrpc-mcp.mitander.io/health?upstream=1'
```

The hosted service is shared, rate-limited, and intentionally has both broadcast features disabled. It is suitable for evaluation and public-chain reads, but has no availability SLA. Requests are visible to the service operator and upstream RPC providers; use your own deployment for sensitive queries or production workloads.

### Local stdio server

Requirements: Node.js 20 or newer.

```sh
npx -y chainrpc-mcp
```

Example client configuration:

```json
{
  "mcpServers": {
    "chainrpc-mcp": {
      "command": "npx",
      "args": ["-y", "chainrpc-mcp"],
      "env": {
        "EVM_RPC_URL": "https://ethereum-rpc.publicnode.com",
        "BITCOIN_RPC_URL": "https://bitcoin-rpc.publicnode.com"
      }
    }
  }
}
```

The RPC variables are optional; they are shown to make the defaults explicit.

## Available tools

### EVM

| Tool | Purpose | State-changing |
|---|---|---:|
| `evm_getBlockNumber` | Return the latest block number | No |
| `evm_getChainInfo` | Return chain ID and client version | No |
| `evm_getNativeBalance` | Read a native-token balance at a block | No |
| `evm_getBlock` | Read a block by number, tag, or hash | No |
| `evm_getTransaction` | Read a transaction and receipt | No |
| `evm_call` | Execute an `eth_call` with encoded calldata | No |
| `evm_readContract` | Encode, call, and decode a function from its ABI | No |
| `evm_estimateTransaction` | Estimate gas for an unsigned transaction | No |
| `evm_getLogs` | Query event logs with address and topic filters | No |
| `evm_broadcastTransaction` | Preflight and submit signed transaction bytes | **Yes** |

Any HTTP(S) EVM JSON-RPC endpoint can be used, so the same tools work with Ethereum mainnet, testnets, and compatible chains. Results always come from the configured endpoint; callers should inspect `evm_getChainInfo` before making chain-specific assumptions.

### Bitcoin

| Tool | Purpose | State-changing |
|---|---|---:|
| `btc_getBlockchainInfo` | Return network, height, sync, and pruning information | No |
| `btc_getAddressBalance` | Scan confirmed UTXOs for an address | No |
| `btc_getBlock` | Read a block by height or hash | No |
| `btc_getTransaction` | Read raw transaction details | No |
| `btc_getTxOut` | Look up an unspent transaction output | No |
| `btc_estimateFee` | Estimate a fee rate for a confirmation target | No |
| `btc_decodeRawTransaction` | Decode serialized transaction bytes | No |
| `btc_broadcastTransaction` | Validate and submit signed transaction bytes | **Yes** |

Bitcoin Core is not an address indexer. `btc_getAddressBalance` uses `scantxoutset`, which reports currently unspent, confirmed outputs—not history or unconfirmed balance. Only one scan can run on a node at a time, so a shared endpoint may return `scan already in progress`. Use a dedicated node for frequent address scans.

## Safety model

ChainRPC MCP treats transaction submission as an exceptional operation:

- Broadcasting is off unless `ALLOW_EVM_BROADCAST` or `ALLOW_BITCOIN_BROADCAST` is explicitly enabled.
- The server accepts only serialized, already-signed transaction bytes.
- Every broadcast call requires the literal confirmation `I understand this broadcasts a real transaction`.
- EVM submission checks the endpoint and transaction chain IDs, rejects unprotected legacy transactions, recovers the signer, and runs `eth_estimateGas` first.
- Bitcoin submission checks the endpoint network and requires `testmempoolaccept` to approve the transaction.
- Submission requests are never automatically retried. A timeout can leave broadcast status ambiguous.
- Read inputs use strict schemas; upstream concurrency, timeout, retry, and response sizes are bounded.
- HTTP mode validates hosts and browser origins, supports bearer authentication, caps request bodies, and binds to loopback by default.

RPC responses are untrusted external data. A compromised endpoint can lie about chain state, censor requests, or observe queries. Independently verify high-value decisions, ideally against infrastructure you control.

See [SECURITY.md](SECURITY.md) for vulnerability reporting and the complete trust boundary.

## Configuration

Copy [`example.env`](example.env) to `.env` when running from a checkout.

| Variable | Default | Description |
|---|---|---|
| `EVM_RPC_URL` | `https://ethereum-rpc.publicnode.com` | Any HTTP(S) EVM JSON-RPC endpoint |
| `BITCOIN_RPC_URL` | `https://bitcoin-rpc.publicnode.com` | Any HTTP(S) Bitcoin Core-compatible endpoint |
| `EVM_RPC_USERNAME` / `EVM_RPC_PASSWORD` | unset | Optional EVM HTTP Basic authentication pair |
| `BITCOIN_RPC_USERNAME` / `BITCOIN_RPC_PASSWORD` | unset | Optional Bitcoin HTTP Basic authentication pair |
| `RPC_TIMEOUT_MS` | `12000` | Per-attempt upstream timeout |
| `RPC_RETRIES` | `1` | Retry count for retryable reads only |
| `RPC_MAX_RESPONSE_BYTES` | `10000000` | Maximum upstream response body |
| `RPC_MAX_CONCURRENCY` | `20` | Maximum concurrent requests per chain client |
| `ALLOW_EVM_BROADCAST` | `false` | Enable signed EVM transaction submission |
| `ALLOW_BITCOIN_BROADCAST` | `false` | Enable signed Bitcoin transaction submission |
| `TRANSPORT` | `stdio` | Default transport: `stdio` or `http` |
| `HOST` / `PORT` | `127.0.0.1` / `3000` | HTTP bind address and port |
| `MCP_PATH` | `/mcp` | Streamable HTTP MCP path |
| `MCP_AUTH_TOKEN` | unset | Optional bearer token for `/mcp` |
| `ALLOWED_HOSTS` | unset | Required allowlist when binding HTTP to a non-loopback address |
| `CORS_ORIGINS` | unset | Comma-separated browser-origin allowlist |
| `MAX_MCP_SESSIONS` | `1000` | Maximum concurrent HTTP MCP sessions |
| `HTTP_BODY_LIMIT` | `1mb` | Express request-body limit |

`GETH_URL` remains a deprecated compatibility alias for `EVM_RPC_URL`. Credentials embedded in RPC URLs are rejected; use the matching username and password variables.

## Self-host with Streamable HTTP

Start a loopback-only HTTP server:

```sh
npm start
curl 'http://127.0.0.1:3000/health?upstream=1'
```

To bind beyond loopback, explicitly set the host allowlist and authentication:

```sh
HOST=0.0.0.0 \
ALLOWED_HOSTS=mcp.example.com \
MCP_AUTH_TOKEN='replace-with-a-long-random-secret' \
npm start
```

Terminate TLS at a trusted reverse proxy, preserve the original `Host` header, and keep the origin private. A bearer token is useful for a single trusted client; use an OAuth-capable gateway and network access policy for multi-user deployments.

Docker defaults to stdio. Override the command for HTTP:

```sh
docker build -t chainrpc-mcp .
docker run --rm -p 127.0.0.1:3000:3000 \
  -e HOST=0.0.0.0 \
  -e ALLOWED_HOSTS=localhost,127.0.0.1 \
  -e MCP_AUTH_TOKEN='replace-with-a-long-random-secret' \
  chainrpc-mcp --http
```

Production service topology:

```text
MCP client
    |
    v
Cloudflare edge -> outbound-only Cloudflare Tunnel -> nginx on loopback
                                                     |
                                                     v
                                              ChainRPC MCP
                                                /       \
                                               v         v
                                          EVM RPC    Bitcoin RPC
```

Deployment units, nginx configuration, hardening details, and operating commands are in [docs/OPERATIONS.md](docs/OPERATIONS.md).

## Development

```sh
git clone https://github.com/John0n1/chainrpc-mcp.git
cd chainrpc-mcp
npm ci
npm run check
npm run test:coverage
```

Useful commands:

| Command | Purpose |
|---|---|
| `npm run start:stdio` | Start the stdio transport |
| `npm start` | Start Streamable HTTP |
| `npm run dev` | Start HTTP with Node watch mode |
| `npm test` | Run the test suite |
| `npm run check` | Syntax-check the entry point and run all tests |
| `npm pack --dry-run` | Inspect the npm package contents |

The detailed design and remediation record is in [docs/AUDIT.md](docs/AUDIT.md). Contributions are welcome through issues and pull requests. Please use a private GitHub security advisory—not a public issue—for suspected vulnerabilities.

## License

[MIT](LICENSE)
blockchainethereumgethgeth-rpcjavascriptjson-rpcmcpmcp-servernethermindnodejsserver

Lo que la gente pregunta sobre chainrpc-mcp

¿Qué es John0n1/chainrpc-mcp?

+

John0n1/chainrpc-mcp es mcp servers para el ecosistema de Claude AI. Safety-first MCP server for EVM chains and Bitcoin Tiene 3 estrellas en GitHub y su última actualización registrada es del 2026-08-19.

¿Cómo se instala chainrpc-mcp?

+

Puedes instalar chainrpc-mcp clonando el repositorio (https://github.com/John0n1/chainrpc-mcp) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.

¿Es seguro usar John0n1/chainrpc-mcp?

+

Nuestro agente de seguridad ha analizado John0n1/chainrpc-mcp y le ha asignado un Trust Score de 100/100 (tier: Verified). Revisa el desglose completo de comprobaciones superadas y flags en esta página.

¿Quién mantiene John0n1/chainrpc-mcp?

+

John0n1/chainrpc-mcp es mantenido por John0n1. La última actividad registrada en GitHub es del 2026-08-19, con 3 issues abiertos.

¿Hay alternativas a chainrpc-mcp?

+

Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.

Despliega chainrpc-mcp en tu cloud

Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.

¿Mantienes este repo? Añade un badge a tu README

Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.

Featured on ClaudeWave: John0n1/chainrpc-mcp
[![Featured on ClaudeWave](https://claudewave.com/api/badge/john0n1-chainrpc-mcp)](https://claudewave.com/repo/john0n1-chainrpc-mcp)
<a href="https://claudewave.com/repo/john0n1-chainrpc-mcp"><img src="https://claudewave.com/api/badge/john0n1-chainrpc-mcp" alt="Featured on ClaudeWave: John0n1/chainrpc-mcp" width="320" height="64" /></a>

Más MCP Servers

Alternativas a chainrpc-mcp