AI Agent Skills for Portkey EOA Wallet — MCP, CLI, and SDK interfaces for wallet management, token transfers, asset queries, and contract interactions on aelf blockchain.
This is a moderately-quality MCP server with solid fundamentals but notable gaps. 24 tools are registered with descriptions and input schemas using Zod validation. Tool naming follows verb_noun convention consistently (portkey_create_wallet, portkey_transfer, etc.), which aids discoverability. Descriptions are present for all tools and many exceed the 10-char minimum, but quality varies significantly, some are comprehensive (e.g., portkey_create_wallet with 450+ chars covering password behavior and mnemonic safety), while others are minimal (e.g., portkey_get_token_list, portkey_get_token_balance with no visible schema or parameter descriptions in the provided source). Input schemas are declared via Zod but only tools 1-8 have visible parameter details in the excerpt; tools 9-24 lack visible parameter documentation, making it impossible to verify if they have proper enum constraints, required/optional flags, and descriptions. Output schemas are not documented anywhere, the `ok()` helper returns raw JSON without specifying what fields clients should expect. Error handling exists (the `fail()` helper) but is not shown in detail, without seeing its implementation, we cannot assess if it provides recovery guidance. The server declares tool annotations (readOnlyHint, destructiveHint for appropriate tools), which is good, but no other protocol features are present. For production use, parameter schemas for tools 9-24 must be completed, output schemas must be documented, and error responses must guide recovery.
Approve a spender to use tokens on behalf of the wallet owner.
Export the mnemonic and/or private key of a locally stored wallet. DANGEROUS: reveals secret credentials. Use only when the user explicitly requests a backup. Requires the wallet password.
Call a state-changing (send) method on a smart contract.
Call a read-only (view) method on a smart contract.
Create a new EOA wallet on aelf blockchain. Generates a mnemonic and private key, encrypts them with a password, and stores the wallet locally. Password behavior: If password is omitted, a strong password is auto-generated and returned in the response. After creation, ask the user if they want to persist the password by setting PORTKEY_WALLET_PASSWORD in their environment config. If they decline, remind them to save the password securely — it cannot be recovered. Mnemonic safety: For channel-based environments (Slack, Discord, OpenClaw channels), set redactMnemonic=true so the mnemonic is NOT returned in the response. The mnemonic is already AES-encrypted in the wallet file and can be recovered later via wallet backup with the correct password. For local AI tools (Claude Desktop, Cursor), returning the mnemonic directly is acceptable.
16 tools (tools 9-24) lack visible input schemas and parameter descriptions. The source excerpt cuts off after tool 8, leaving no evidence of Zod schemas, enums, required/optional flags, or parameter documentation for query, transfer, contract, and bridge tools.
Output schemas are undocumented. The `ok()` helper returns `JSON.stringify(data, null, 2)` with no specification of what fields or structure clients should expect. This violates the baseline that 100% of A+ tools document return types. LLMs cannot plan downstream calls or extract required fields without knowing the response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Transfer tokens across different chains.
Delete a locally stored wallet file. Requires the wallet password for verification — the password must be correct before the wallet is removed. Use when a user explicitly wants to remove a wallet from local storage.
Transfer tokens using eBridge protocol.
Estimate the transaction fee for a contract call.
Get the shared active wallet context used by cross-skill signer resolution.
Get eBridge fee information.
Get eBridge transfer limits and fees.
Get NFT collections for a wallet address on a specific chain.
Get NFT items in a collection.
Get token balance for a wallet address on a specific chain.
Get list of tokens available on a specific chain (symbols, names, decimals, contract addresses).
Get current prices for tokens in specified currencies.
Get detailed information about a specific transaction.
Get transaction history for a wallet address.
Get public information about a locally stored wallet (address, public key, name, network). Does not expose any secrets. Use to verify a wallet exists and see its details.
Import an existing wallet using a 12-word mnemonic phrase or a 64-character hex private key. Encrypts and stores the wallet locally. Password behavior: If password is omitted, a strong password is auto-generated and returned. After import, ask the user if they want to persist the password by setting PORTKEY_WALLET_PASSWORD in their environment. If they decline, remind them to save it securely. Security: Never echo the user's mnemonic or private key back in channel-based conversations (Slack, Discord, OpenClaw).
List all locally stored wallets with their public info (address, name, network, creation date). Does not expose private keys or mnemonics. Use to see what wallets are available.
Set shared active wallet context manually for cross-skill signer resolution.
Transfer tokens from one wallet to another on the same chain.
Brevity inconsistency in descriptions. Tools 1 - 8 (wallet management) have detailed, actionable descriptions (450 - 500 chars, covering password behavior, mnemonic safety, prerequisites). Tools 9 - 24 have minimal single-line descriptions (15 - 40 chars) that do not explain WHEN to use them, prerequisites, or expected output. Baseline: A+ tool descriptions average 194 chars; 94% have docstrings. These tools fall well below the standard.
Error handling implementation not visible. The `fail()` helper is imported but not shown in the excerpt. Without seeing the error response structure, we cannot verify if errors categorize failures (retryable vs. fatal), include the invalid value and constraint violated, or guide the LLM toward recovery, all critical for agent safety.
Irreversible operations lack confirmation or dry-run support. Tools like portkey_transfer (IRREVERSIBLE), portkey_cross_chain_transfer (IRREVERSIBLE), portkey_call_send_method (IRREVERSIBLE), and portkey_ebridge_transfer (IRREVERSIBLE) have no visible confirmation-request pattern. Agents can execute these without a safety gate, risking accidental financial loss.
Pagination and result limits not documented. Tools like portkey_list_wallets, portkey_get_nft_collections, and portkey_get_transaction_history should accept limit and offset/cursor parameters and specify max result counts. Without pagination, large result sets blow the context window and degrade reasoning.
Parameter dependency documentation missing. portkey_set_active_wallet has mutually exclusive branches (walletType='EOA' vs 'CA', source='eoa-local' vs 'ca-keystore' vs 'env') with conditional required parameters (address for EOA, caAddress/caHash for CA). These dependencies are not documented in parameter descriptions, forcing LLMs to guess or fail.
No parameter type validation visible. Tools 9 - 24 have no visible Zod schemas. Without explicit type constraints (enums, ranges, patterns), LLMs can pass invalid values like arbitrary token symbols instead of constrained enums, causing silent failures or API errors.