Substrate Blockchain Interface
STDIOMCP server for Substrate blockchains, exposing dynamic operations via MCP protocol.
MCP server for Substrate blockchains, exposing dynamic operations via MCP protocol.
A Model Context Protocol (MCP) server for Substrate blockchains, written in Rust. This project exposes dynamic Substrate blockchain operations (querying balances, blocks, pallets, storage, events, and more) via the MCP protocol, and is fully configurable via environment variables.
Designed to interface with the subxt crate.
AI-Driven Blockchain Operations
Custom Dashboards and Monitoring
Clone the repository and build:
git clone https://github.com/ThomasMarches/substrate-mcp-rs.git cd substrate-mcp-rs cargo build --release
Create a .env
file in the project root with the following variables:
# WebSocket endpoint for the Substrate node RPC_URL=wss://your-node-url.example.com # Signing keypair as hex (32 bytes, e.g. output of subkey inspect-key --scheme Sr25519) SIGNING_KEYPAIR_HEX=your_signing_keypair_hex_here
You can generate a keypair and get the secret seed in hex using subkey:
subkey generate --scheme Sr25519 --output-type Json
Use the secretSeed
field (strip the 0x prefix if present) for SIGNING_KEYPAIR_HEX
.
Export the runtime metadata from your node and place it at artifacts/metadata.scale
:
subxt metadata -f bytes > artifacts/metadata.scale
Important: The file must be named metadata.scale
and located in the artifacts/
directory before building. The build will fail if this file is missing or misnamed.
To start the MCP server:
cargo run --release
The server will start and listen for MCP requests via stdio.
To use this MCP server with Cursor, you need to add it to your Cursor MCP configuration. This allows Cursor to discover and interact with your Substrate MCP server.
Build your server in release mode:
cargo build --release
Locate the path to the built binary (typically target/release/substrate-mcp-rs
).
In your project (or global) .cursor/mcp.json
file, add an entry for your server. For example:
{ "mcpServers": { "substrate-mcp-rs": { "command": "$PROJECT_ROOT_ABSOLUTE_PATH/target/release/substrate-mcp-rs", "args": [] } } }
command
path with the absolute path to your built binary if it differs.Restart Cursor. It should now detect and connect to your Substrate MCP server, making its tools available for use.
For more details, see the Cursor documentation or the Model Context Protocol introduction.
The server exposes a set of tools for interacting with a Substrate blockchain, including:
query_balance
: Fetch the balance of an accountlist_pallets
: List all pallets in the runtimelist_pallet_entries
: List all storage entries for a palletdynamic_runtime_call
: Execute a runtime API callsend_dynamic_signed_transaction
: Construct, sign, and send a transactionquery_storage
: Query storage by pallet and entryget_latest_events
: Get all events from the latest blockfind_events
: Find specific events by pallet and variantget_latest_block
: Get details about the latest blockget_block_by_hash
: Get block details by hashfind_extrinsics
: Find extrinsics in the latest blockget_system_info
: Get system info via RPCcustom_rpc
: Make a custom RPC callSee src/tooling/substrate.rs
for full details and parameters.
src/main.rs
: Entry point, sets up logging and starts the MCP serversrc/tooling/
: Contains the Substrate tool implementationartifacts/
: Place your runtime metadata file here as metadata.scale
(required before building)Contributions are welcome! Please open issues or pull requests. For larger changes, open an issue first to discuss your proposal.
cargo fmt
and cargo clippy
before submittingMIT