Skip to main content
Glama
John0n1
by John0n1

ChainRPC MCP

JSON-RPC MCP server for EVM chains and Bitcoin

npm CI Node.js License: MIT

A safety-first Model Context Protocol 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.

  • 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:

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

For clients that accept a remote Streamable HTTP server:

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

Health and upstream status:

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.

npx -y chainrpc-mcp

Example client configuration:

{
  "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.

Related MCP server: Ethereum RPC MCP Server

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 for vulnerability reporting and the complete trust boundary.

Configuration

Copy 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:

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

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

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:

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:

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.

Development

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. Contributions are welcome through issues and pull requests. Please use a private GitHub security advisory—not a public issue—for suspected vulnerabilities.

License

MIT

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
6moRelease cycle
2Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Comprehensive Model Context Protocol server that enables AI agents to interact with 30+ Ethereum-compatible blockchain networks, supporting token transfers, smart contract interactions, and ENS name resolution through a unified interface.
    1
  • F
    license
    A
    quality
    B
    maintenance
    A server that exposes blockchain data (balances, tokens, NFTs, contract metadata) via the Model Context Protocol, enabling AI agents and tools to access and analyze blockchain information contextually.
    18
    43

View all related MCP servers

Related MCP Connectors

  • AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.

  • MEOK ABCI Bridge MCP — read-only Tendermint / Cosmos blockchain query for agents. Built-in registry

  • Abstraxn: public Web3 MCP server for read-only chain data and pay-per-call relays.

View all MCP Connectors

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/John0n1/chainrpc-mcp'

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