There is no write path here, so the worst a mistaken call can do is read the wrong block — which is the right shape for pointing a model at a chain. The author also names the rough edge honestly: models tend to send strings where the input schema asks for something else, and some of that is handled in code but not all of it. Your client will ask permission per method and show the input and output inline, which makes the calls easy to check.
A Starknet server that exposes the chain's JSON-RPC read methods as MCP tools, pointed at whatever RPC endpoint you configure.
- Blocks: `starknet_getBlockWithTxHashes`, `starknet_getBlockWithTxs`, `starknet_getBlockWithReceipts`, `starknet_getBlockTransactionCount`, `starknet_blockNumber`, `starknet_blockHashAndNumber`
- Transactions: `starknet_getTransactionByHash`, `starknet_getTransactionByBlockIdAndIndex`, `starknet_getTransactionStatus`, `starknet_getTransactionReceipt`
- Contracts: `starknet_call` to read from a contract, `starknet_getClass`, `starknet_getClassAt`, `starknet_getClassHashAt`, `starknet_getStorageAt`, `starknet_getNonce`
- Chain state: `starknet_getStateUpdate`, `starknet_getEvents`, `starknet_chainId`, `starknet_syncing`, `starknet_specVersion`
- Write methods are not supported, and neither are `starknet_estimateFee` or `starknet_estimateMessageFee`
Bun, a clone of the repository, and `bun install`. Point your client at `index.ts` with STARKNET_RPC_URL set to your RPC endpoint. No account and no key beyond whatever your RPC provider requires.
One command — npx -y starknet-mcp
