Overview
Aether MCP uses a single-wallet-per-session model: each session has one wallet that signs everything autonomously. No more principal/agent wallet distinction.
- 8 tools on devnet / 9 tools on mainnet (adds
wallet_connect)
- All transactions signed automatically by the session wallet
- Wallets encrypted with AES-256-GCM and persisted across sessions
wallet_create
Create a new wallet or restore an existing one. This is the only setup tool you need.
After calling this, your wallet is:
- Generated (new Keypair)
- Encrypted and stored (persisted across sessions)
- Auto-authenticated (session + JWT token created)
- Ready to sign transactions
Parameters:
| Parameter | Type | Required | Default | Description |
|---|
restoreAddress | string | No | - | Restore a previously created wallet by its address |
label | string | No | - | Optional label (e.g., “trading-bot”) |
airdropSol | number | No | 1 | SOL airdrop amount, 0-2 (devnet/testnet only) |
Example (new wallet):
{
"tool": "wallet_create",
"params": {
"airdropSol": 1,
"label": "my-agent"
}
}
Response:
{
"success": true,
"data": {
"address": "8FE27iak4b2yadKoogAPAGN9VnmYYZm8eUF71QhVbgNr",
"label": "my-agent",
"network": "devnet",
"balances": { "sol": 1.0, "usdc": 0, "athr": 0 },
"airdropTx": "3Zq8M9xKvRnP2y...",
"sessionToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"authenticated": true,
"isNewSession": true,
"hint": "Save this address to restore later: wallet_create with restoreAddress=\"8FE27iak...\""
}
}
Example (restore wallet):
{
"tool": "wallet_create",
"params": {
"restoreAddress": "8FE27iak4b2yadKoogAPAGN9VnmYYZm8eUF71QhVbgNr"
}
}
Creates, encrypts, authenticates, and funds your wallet in a single call.
wallet_restore
List available wallets or restore a specific one.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|
address | string | No | - | Restore this specific wallet. If omitted, lists available wallets. |
limit | number | No | 5 | Number of wallets to list (1-20) |
Example (list wallets):
{
"tool": "wallet_restore"
}
Response:
{
"success": true,
"data": {
"network": "devnet",
"currentWallet": "8FE27iak4b2yadKoogAPAGN9VnmYYZm8eUF71QhVbgNr",
"availableWallets": [
{
"address": "8FE27iak4b2yadKoogAPAGN9VnmYYZm8eUF71QhVbgNr",
"isActive": true,
"createdAt": "2025-02-06T10:00:00Z",
"lastUsed": "2025-02-06T11:30:00Z"
}
],
"count": 1
}
}
Example (restore specific):
{
"tool": "wallet_restore",
"params": {
"address": "8FE27iak4b2yadKoogAPAGN9VnmYYZm8eUF71QhVbgNr"
}
}
wallet_get_address
Get the current wallet public address.
No Parameters Required
Example:
{
"tool": "wallet_get_address"
}
Response:
{
"success": true,
"data": {
"address": "8FE27iak4b2yadKoogAPAGN9VnmYYZm8eUF71QhVbgNr",
"network": "devnet"
}
}
wallet_get_balance
Get wallet balance for SOL, USDC, and ATHR tokens.
No Parameters Required
Example:
{
"tool": "wallet_get_balance"
}
Response:
{
"success": true,
"data": {
"address": "8FE27iak4b2yadKoogAPAGN9VnmYYZm8eUF71QhVbgNr",
"balances": {
"sol": 1.5,
"usdc": 100.0
},
"network": "devnet"
}
}
wallet_transfer
Transfer SOL, USDC, or ATHR to another wallet. Transactions are signed automatically by the session wallet.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|
to | string | Yes | - | Recipient wallet address (valid Solana public key) |
amount | number | Yes | - | Amount to transfer (must be positive) |
token | string | No | usdc | Token to transfer: sol, usdc, or athr |
Transfer Limits:
| Token | Min | Max | Warning Threshold |
|---|
| SOL | 0.001 | 100 | > 10 |
| USDC | 0.01 | 10,000 | > 1,000 |
| ATHR | 0.01 | 10,000 | > 1,000 |
Example:
{
"tool": "wallet_transfer",
"params": {
"to": "5HgtP9bE3yhRXzKZ4QrnkSw9HQxVPmWJKvqY7pYt8g2H",
"amount": 10.5,
"token": "usdc"
}
}
Response:
{
"success": true,
"data": {
"signature": "3Zq8M9xKvRnP2yJwN5tLhQ8K7fX4bV9mD1cY6eU2rG5s...",
"from": "8FE27iak4b2yadKoogAPAGN9VnmYYZm8eUF71QhVbgNr",
"to": "5HgtP9bE3yhRXzKZ4QrnkSw9HQxVPmWJKvqY7pYt8g2H",
"amount": 10.5,
"token": "usdc",
"network": "devnet",
"explorerUrl": "https://solscan.io/tx/3Zq8M9x...?cluster=devnet"
}
}
ATHR has lower fees than USDC! Consider using ATHR for frequent transfers.
wallet_get_history
Get recent transaction history.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|
limit | number | No | 10 | Number of transactions to retrieve (1-100) |
Example:
{
"tool": "wallet_get_history",
"params": {
"limit": 5
}
}
Response:
{
"success": true,
"data": {
"address": "8FE27iak4b2yadKoogAPAGN9VnmYYZm8eUF71QhVbgNr",
"transactions": [
{
"signature": "3Zq8M9xKvRnP2yJwN5tLhQ8K7fX4bV9mD1cY6eU2rG5s",
"timestamp": 1707222000,
"type": "transfer",
"amount": 10.5,
"status": "confirmed"
}
],
"count": 1,
"network": "devnet"
}
}
wallet_export
Export the private key of a wallet for backup.
Parameters:
| Parameter | Type | Required | Default | Description |
|---|
address | string | No | current wallet | Wallet address to export |
format | string | No | base58 | Export format: base58 or json (array of bytes) |
Example:
{
"tool": "wallet_export",
"params": {
"format": "base58"
}
}
Response:
{
"success": true,
"data": {
"address": "8FE27iak4b2yadKoogAPAGN9VnmYYZm8eUF71QhVbgNr",
"privateKey": "5KQw...(base58 string)...",
"format": "base58",
"label": "my-agent",
"createdAt": "2025-02-06T10:00:00Z"
},
"warning": "KEEP THIS PRIVATE KEY SECURE! Anyone with this key can access all funds in this wallet.",
"recovery": "To import in Phantom: Settings > Security > Show Secret Recovery Phrase > Import Private Key"
}
KEEP THIS SECURE! Anyone with this private key can control the wallet and access all funds.
wallet_disconnect
Disconnect the wallet and end the current session.
No Parameters Required
Example:
{
"tool": "wallet_disconnect"
}
Response:
{
"success": true,
"data": {
"message": "Session ended",
"walletAddress": "8FE27iak4b2yadKoogAPAGN9VnmYYZm8eUF71QhVbgNr"
}
}
wallet_connect (Mainnet Only)
Authenticate by submitting a signed challenge. Alternative to wallet_create for connecting an existing external wallet (Phantom, Solflare, etc.).
This tool is mainnet-only. On devnet, use wallet_create which handles authentication automatically.
Prerequisites:
- Call
session_auth first to get a challenge message
- Sign the message with your wallet
Parameters:
| Parameter | Type | Required | Description |
|---|
walletAddress | string | Yes | Wallet public address |
signature | string | Yes | Signature of the challenge message (base64 or hex) |
nonce | string | Yes | Challenge nonce from session_auth |
Example:
{
"tool": "wallet_connect",
"params": {
"walletAddress": "YOUR_WALLET_ADDRESS",
"nonce": "a1b2c3d4e5f6...",
"signature": "BASE64_SIGNATURE_HERE"
}
}
Response:
{
"success": true,
"data": {
"walletAddress": "YOUR_WALLET_ADDRESS",
"sessionToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"isNewSession": true,
"expiresAt": "2025-02-13T10:15:30Z",
"conversationCount": 0,
"orderCount": 0,
"isProvider": false
}
}
Security
| Aspect | Implementation |
|---|
| Encryption | AES-256-GCM + PBKDF2 (600k iterations) |
| Signing | All transactions signed automatically by session wallet |
| Rate Limiting | 100 requests/minute per wallet |
| Amount Limits | SOL: 100 max, USDC/ATHR: 10,000 max per transaction |
| Persistence | Encrypted wallets stored across sessions |
Next Steps