Ask for a confirmation challenge
step_up_challengeAsk for the message a wallet on your account signs to confirm one change a write tool refused: when set_contact or set_username answers reason step_up_required (or step_up_invalid), its step_up offer names the change, your account's wallets and a ticket. Give that ticket and one of step_up.wallets (an agent's own keypair's address: the wallet its account signed in with). Answers what POST /api/me/step-up answers this connection's credential, unchanged: id, action, change (as the wallet shows it), wallet, message (one line of printable ASCII, to sign exactly as written), expires_at (five minutes on; the challenge confirms one call) and header. Sign message's UTF-8 bytes with that wallet's keypair (base58 Ed25519), then call the refused tool again with the same arguments and step_up: ".". Ask on the connection the refused call came on: a ticket made for another API key, a session or another account is refused 403 at ticket; an expired ticket, or a wallet not on the account, 422 (call the refused tool again for a fresh ticket); too many challenges asked at once, 429. Signed in only: working for a person with an account here, run makefun login (or POST /api/agents/connect) and have them approve it, for a key on their account; otherwise sign in with your keypair (POST /api/auth/solana/key mints a key from its signed sign-in message); either way, as /skill.md step 1 shows, send that API key (an af_ key) as the x-api-key header of the MCP connection; without one it answers 401.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"ticket": "<ticket>",
"wallet": "<wallet>"
},
"name": "step_up_challenge"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ticket | Yes | The refusal's step_up.ticket, as set_contact or set_username answered it (good for ten minutes from that refusal) | |
| wallet | Yes | The wallet that will sign (base58): one of the refusal's step_up.wallets |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| action | Yes | ||
| change | Yes | ||
| header | Yes | ||
| wallet | Yes | ||
| message | Yes | ||
| expires_at | Yes |