ChainRPC MCP

io.github.John0n1Published by GitHub account John0n1v2.0.2Updated Oct 24, 2026

Safety-first EVM and Bitcoin RPC tools for balances, contracts, blocks, and transactions

The publisher's own server: Agent.chain.tokyo Address Contracts

VerifiedStreamable HTTPWeb executableFinanceDeveloper Tools

Overview

AI-generated overview

A safety-first MCP server that gives an assistant read access to EVM chains and Bitcoin for balances, blocks, transactions, contracts, logs and fees, with gated

What you can do
Read EVM chain state: block number, chain info, native balances, blocks, transactions and receipts, event logs, and gas estimation for unsigned transactions. Read and call smart contracts by encoding calldata or a function from its ABI and decoding the result. Read Bitcoin data: blockchain info, blocks, raw transactions, transaction outputs, address UTXO balances and fee estimates, and decode raw transactions. Broadcast already-signed EVM or Bitcoin transactions, only when explicitly enabled and after a literal confirmation phrase.
When to use it
Useful when an assistant needs to inspect on-chain state on Ethereum-compatible chains or Bitcoin, check balances, decode transactions or contracts, or estimate fees. Suited to evaluation and public-chain reads through the hosted endpoint, or to production use through your own deployment and RPC endpoints.
Requirements
Runs as a hosted remote endpoint or locally via npx with Node.js 20 or newer. EVM_RPC_URL and BITCOIN_RPC_URL are optional and default to public PublicNode endpoints; optional HTTP Basic credentials use EVM_RPC_USERNAME/EVM_RPC_PASSWORD and BITCOIN_RPC_USERNAME/BITCOIN_RPC_PASSWORD. Outbound network access to the RPC endpoints is required. Broadcasts stay off unless ALLOW_EVM_BROADCAST or ALLOW_BITCOIN_BROADCAST is enabled.
Before you install
Broadcasting submits real transactions and spends real funds; it is disabled by default and requires the literal confirmation phrase. The server never accepts private keys or signs transactions, so signing happens elsewhere. The hosted service is shared, rate-limited, has no SLA, and its requests are visible to the operator and upstream providers. RPC responses are untrusted and a compromised endpoint can lie or observe queries, so verify high-value decisions independently. A broadcast timeout,

Installation

In SourceWeft

  1. Open ChainRPC MCP in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.John0n1%2Fchainrpc-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

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

README

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:

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

ToolPurposeState-changing
evm_getBlockNumberReturn the latest block numberNo
evm_getChainInfoReturn chain ID and client versionNo
evm_getNativeBalanceRead a native-token balance at a blockNo
evm_getBlockRead a block by number, tag, or hashNo
evm_getTransactionRead a transaction and receiptNo
evm_callExecute an eth_call with encoded calldataNo
evm_readContractEncode, call, and decode a function from its ABINo
evm_estimateTransactionEstimate gas for an unsigned transactionNo
evm_getLogsQuery event logs with address and topic filtersNo
evm_broadcastTransactionPreflight and submit signed transaction bytesYes

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

ToolPurposeState-changing
btc_getBlockchainInfoReturn network, height, sync, and pruning informationNo
btc_getAddressBalanceScan confirmed UTXOs for an addressNo
btc_getBlockRead a block by height or hashNo
btc_getTransactionRead raw transaction detailsNo
btc_getTxOutLook up an unspent transaction outputNo
btc_estimateFeeEstimate a fee rate for a confirmation targetNo
btc_decodeRawTransactionDecode serialized transaction bytesNo
btc_broadcastTransactionValidate and submit signed transaction bytesYes

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.

VariableDefaultDescription
EVM_RPC_URLhttps://ethereum-rpc.publicnode.comAny HTTP(S) EVM JSON-RPC endpoint
BITCOIN_RPC_URLhttps://bitcoin-rpc.publicnode.comAny HTTP(S) Bitcoin Core-compatible endpoint
EVM_RPC_USERNAME / EVM_RPC_PASSWORDunsetOptional EVM HTTP Basic authentication pair
BITCOIN_RPC_USERNAME / BITCOIN_RPC_PASSWORDunsetOptional Bitcoin HTTP Basic authentication pair
RPC_TIMEOUT_MS12000Per-attempt upstream timeout
RPC_RETRIES1Retry count for retryable reads only
RPC_MAX_RESPONSE_BYTES10000000Maximum upstream response body
RPC_MAX_CONCURRENCY20Maximum concurrent requests per chain client
ALLOW_EVM_BROADCASTfalseEnable signed EVM transaction submission
ALLOW_BITCOIN_BROADCASTfalseEnable signed Bitcoin transaction submission
TRANSPORTstdioDefault transport: stdio or http
HOST / PORT127.0.0.1 / 3000HTTP bind address and port
MCP_PATH/mcpStreamable HTTP MCP path
MCP_AUTH_TOKENunsetOptional bearer token for /mcp
ALLOWED_HOSTSunsetRequired allowlist when binding HTTP to a non-loopback address
CORS_ORIGINSunsetComma-separated browser-origin allowlist
MAX_MCP_SESSIONS1000Maximum concurrent HTTP MCP sessions
HTTP_BODY_LIMIT1mbExpress 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 startcurl '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    |    vCloudflare 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

sh
git clone https://github.com/John0n1/chainrpc-mcp.gitcd chainrpc-mcpnpm cinpm run checknpm run test:coverage

Useful commands:

CommandPurpose
npm run start:stdioStart the stdio transport
npm startStart Streamable HTTP
npm run devStart HTTP with Node watch mode
npm testRun the test suite
npm run checkSyntax-check the entry point and run all tests
npm pack --dry-runInspect 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

Source: README.md at commit 707c39e

Tools

0
SourceWeft has not read this server's tools yet.

Version history

1
  1. v2.0.2LatestSep 16, 2026

Score

85% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Chain integrations