Public leaderboard

Public assessment

Starknet MCP Server (@mcpdotdirect/starknet-mcp-server, Smithery popular)

mcpdotdirect-starknet-mcp-server · v1.0.0 · scanned

What changed in the harness

Selection accuracy 96→100, token cost up 8%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

17.2 / 30

17.2 out of 30
03Economics

18.2 / 20

18.2 out of 20
04Discoverability

12.1 / 20

12.1 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

25 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
get_starknet_chain_info
no_return_description
Return detailed information about a Starknet network (e.g., chain ID, name, status) for the specified network, which defaults to Mainnet.
get_supported_starknet_networks
no_return_description
Return the list of Starknet networks this server supports (e.g., 'mainnet', 'sepolia'), which can be passed to the network parameter of other tools.
get_starknet_eth_balance
name_restates_behavior no_return_description
Return the ETH balance for a Starknet address or Starknet ID (with or without .stark) on the specified network, which defaults to Mainnet.
get_starknet_token_balance
name_restates_behavior no_return_description
Return the token balance for a Starknet address or Starknet ID, given the token contract address and the owner's address or Starknet ID, on the specified network, which defaults to Mainnet.
get_starknet_strk_balance
name_restates_behavior no_return_description
Return the STRK token balance for a Starknet address or Starknet ID (with or without .stark) on the specified network, which defaults to Mainnet.
get_starknet_native_balances
name_restates_behavior no_return_description
Return all native token balances (ETH and STRK) for a Starknet address or Starknet ID (with or without .stark) on the specified network, which defaults to Mainnet.
resolve_starknet_name
no_return_description
Return the Starknet ID (name) associated with a Starknet address. The address must be a valid address, not a name. Specify the network or default to Mainnet.
resolve_starknet_address
no_return_description
Return the address associated with a Starknet ID (with or without .stark). Specify the network or default to Mainnet.
get_starknet_profile
name_restates_behavior no_return_description
Return the full Starknet ID profile (e.g., name and associated address) for a Starknet address or Starknet ID on the specified network, which defaults to Mainnet.
validate_starknet_domain
no_return_description
Return whether the provided string is a valid Starknet ID (with or without .stark).
get_starknet_block
no_return_description
Return information about a specific Starknet block, identified by number, hash, or 'latest'/'pending' (defaults to 'latest'). Specify the network or default to Mainnet.
get_starknet_block_transactions
name_restates_behavior no_return_description
Return the transactions contained in a specific Starknet block, identified by number, hash, or 'latest'/'pending' (defaults to 'latest'). Specify the network or default to Mainnet.
get_starknet_transaction
no_return_description
Return details about a Starknet transaction given its transaction hash. Specify the network or default to Mainnet.
get_starknet_transaction_receipt
name_restates_behavior no_return_description
Return the receipt for a Starknet transaction given its transaction hash. Specify the network or default to Mainnet.
call_starknet_contract
no_return_description
Call a read-only function on a Starknet contract and return its decoded return values, using the expected resultTypes for decoding. Specify the network or default to Mainnet.
get_starknet_contract_class
name_restates_behavior no_return_description
Return the class of a Starknet contract (its ABI and other class information) for a given contract address or Starknet ID. Specify the network or default to Mainnet.
get_starknet_token_info
no_return_description
Return information about a token on Starknet (e.g., its name, symbol, and decimals) for a given token contract address or Starknet ID. Specify the network or default to Mainnet.
check_starknet_nft_ownership
no_return_description
Return whether an address or Starknet ID owns a specific NFT (token ID) in a collection, given the collection's contract address. Specify the network or default to Mainnet.
get_starknet_nft_balance
no_return_description
Return the number of NFTs an address or Starknet ID owns in a specific NFT collection. Specify the network or default to Mainnet.
get_starknet_token_supply
name_restates_behavior no_return_description
Return the total supply of a token on Starknet for a given token contract address or Starknet ID. Specify the network or default to Mainnet.
check_starknet_transaction_status
no_return_description
Return the confirmation status (finalized or not) of a Starknet transaction given its transaction hash. Specify the network or default to Mainnet.
transfer_starknet_eth
no_return_description
Transfer ETH from one account to another on Starknet, signing with the sender's private key. Return the transaction hash of the transfer. Specify the network or default to Mainnet.
transfer_starknet_strk
no_return_description
Transfer STRK from one account to another on Starknet, signing with the sender's private key. Return the transaction hash of the transfer. Specify the network or default to Mainnet.
transfer_starknet_token
no_return_description
Transfer ERC20 tokens from one account to another on Starknet, signing with the sender's private key. Return the transaction hash of the transfer. Specify the network or default to Mainnet.
execute_starknet_contract
no_return_description
Execute a state-changing call on a Starknet contract, signing with the sender's private key. Return the transaction hash (or result) of the executed call. Specify the network or default to Mainnet.

Selection evidence

Confusable tool pairs.

18 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
resolve_starknet_name resolve_starknet_address high Tool names are near-identical and their descriptions are inverses (name resolves address->ID, address resolves ID->address). A user asking to 'resolve a name' or 'resolve an address' can easily pick the wrong one.
call_starknet_contract execute_starknet_contract high 'Call' and 'execute' are used interchangeably in natural language ('call this function' vs 'execute this function'), and the boundary (read-only vs write) is not obvious from the names alone.
get_starknet_block get_starknet_block_transactions medium A task like 'get me the block' when the user actually wants the transactions in that block, or 'show me details of a block' when they mean transactions contained in it, can select the wrong member.
get_starknet_block_transactions get_starknet_transaction medium A request like 'get the transactions for block 100 or tx hash X' is ambiguous about whether the agent should list a block's transactions or fetch one transaction's details.
get_starknet_transaction get_starknet_transaction_receipt medium Both take a txHash and return data about a transaction; a task like 'did my transaction go through' or 'get info on this transaction' could pick either since both yield status-related info.
get_starknet_token_balance get_starknet_strk_balance medium A task like 'what's my STRK token balance' may route to the generic token_balance tool (which needs a tokenAddress) rather than the dedicated strk_balance tool, or vice versa for ETH-like tokens.
get_starknet_eth_balance get_starknet_token_balance medium ETH is itself an ERC20 token; a task like 'get my ETH token balance' could plausibly select the generic token_balance instead of the ETH-specific balance tool.
get_starknet_strk_balance get_starknet_native_balances medium A task like 'show my native token balances' or 'what ETH/STRK do I hold' could map to either the single-STRK tool or the all-native-balances tool depending on how the agent parses the wording.
get_starknet_eth_balance get_starknet_native_balances medium A request phrased as 'my native balances' when the user only wants ETH, or 'my ETH and STRK' when they want the combined tool, is ambiguous between these two.
get_starknet_token_balance get_starknet_native_balances medium A generic 'what's my balance' or 'check token balances' request offers no signal about whether the agent needs the all-native tool or the arbitrary-token tool.
get_starknet_token_info get_starknet_token_supply medium Both accept a tokenAddress; a task like 'get info/supply details about this token' could land on either since token info typically includes supply figures.
transfer_starknet_eth transfer_starknet_token medium A user asking to 'transfer an ERC20/token' could mean ETH, and the generic token transfer tool is a plausible fallback for an ETH transfer request.
transfer_starknet_strk transfer_starknet_token medium A transfer request phrased generically as 'transfer this token' when the token is STRK could route to the wrong one of the dedicated vs generic transfer tools.
get_starknet_transaction_receipt check_starknet_transaction_status medium Both take a txHash and report transaction outcome; a task like 'is this transaction confirmed' or 'how did this tx go' fits either tool's description almost equally.
resolve_starknet_address validate_starknet_domain medium A task like 'check if this .stark domain is valid/resolvable' could send the agent to resolve_starknet_address (which actually resolves) instead of validate_starknet_domain, or vice versa.
resolve_starknet_name validate_starknet_domain medium Both deal with Starknet names/IDs; a request to 'verify or look up a name' is ambiguous between validating the domain and resolving it to an address.
get_starknet_chain_info get_supported_starknet_networks medium A task like 'which Starknet networks are available' could pick chain_info (network info) instead of the supported-networks list, or a 'tell me about the network' request might pick the list.
get_starknet_token_balance get_starknet_nft_balance low Even though NFT and token balances are distinct domains, a generic task like 'how many of this collection do I own' could prompt an agent to reuse token_balance, though descriptions keep them mostly distinct.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard