Critical gaps across all dimensions. Only 1 of 5 tools has a complete schema visible in list_tools(). The other 4 tools (get_balance, deploy_token, make_trade, transfer_asset) are defined as @server.call_tool() handlers but NOT registered in handle_list_tools(), making their definitions invisible to clients. Descriptions are present but often verbose and include implementation details rather than user-facing intent. Parameters lack descriptions in schemas. No error recovery guidance. No output schemas documented. Naming is inconsistent (add-note vs get_balance vs deploy_token).
Add a new note
Deploy a new token. Input: name: str, the name of the token symbol: str, the symbol of the token desc: str, the description of the token image: str, the image of the token Output: token_addr: str, the address of the token
Handle tool to get the 'token_addr' balance of user address 'addr'. Input: addr: str, the address of the user. if user is not provided, the address of the user will be the address of the private key. token_addr: str, the address of the token. if token is not provided, the token will be the native token. Output: balance: int, the balance of the user
Make a trade. Input: input_token: str, the address of the input token. if input_token is not provided, the input token will be the native token. output_token: str, the address of the output token. if output_token is not provided, the output token will be the native token. amount: int, the amount of the trade Output: tx_hash: str, the hash of the trade
Transfer an asset. Input: token_addr: str, the address of the token, if token_addr is not provided, the token will be the native token. recipient: str, the address of the recipient. amount: int, the amount of the transfer. Output: tx_hash: str, the hash of the transfer.
4 of 5 tools not registered in list_tools(). Only add-note appears in handle_list_tools(); get_balance, deploy_token, make_trade, transfer_asset are defined as handlers but invisible to MCP clients.
Parameter descriptions missing from JSON schemas. get_balance schema lists 'addr' and 'token_addr' properties but no 'description' field in the schema object. LLMs cannot infer parameter meaning from names alone (e.g., 'addr' could be email, username, or address).
No output schemas documented. Tools return TextContent with free-form text (e.g., 'you deploy a new token...'). LLMs cannot parse structured results or chain outputs to downstream tools. No documented return types.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 31 | <=2025-11-25 | v2 |
Irreversible operations (deploy_token, make_trade, transfer_asset) lack confirmation or dry-run support. No error recovery guidance. Generic ValueError exceptions with minimal context ('Error processing X with error: ...') do not guide LLM recovery.
Inconsistent naming convention. 'add-note' uses kebab-case; 'get_balance', 'deploy_token' use snake_case. Inconsistency confuses LLM tool selection and violates naming convention baseline (90% of A+ tools use consistent verb_noun pattern).