0.0 / 30
Public leaderboard
Public assessment
Starknet MCP Server (@mcpdotdirect/starknet-mcp-server, Smithery popular)
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
02Legibility
17.2 / 30
03Economics
18.2 / 20
04Discoverability
12.1 / 20
Highest-impact fix
Estimated gain +30 pointsAdd 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