read.strategy.recommendation
Read-onlyIdempotent
Get rebalancing recommendations for Arcadia accounts to optimize yield by suggesting asset changes based on 1-day APY data.
Instructions
Get a rebalancing recommendation for an Arcadia account — suggests asset changes to optimize yield. Uses 1d APY (not 7d like read.strategy.list), so recommended strategies may differ from the list ranking. APY values are decimal fractions (0.05 = 5%). weekly_earning_difference is in USD.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| account_address | Yes | Arcadia account address | |
| chain_id | No | Chain ID: 8453 (Base) or 130 (Unichain) |
Implementation Reference
- src/tools/read/strategy.ts:140-189 (handler)The tool read.strategy.recommendation is registered in src/tools/read/strategy.ts. It takes an account address and chain ID as input and fetches recommendation data from the Arcadia API client.
server.registerTool( "read.strategy.recommendation", { annotations: { title: "Get Recommendation", readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true, }, description: "Get a rebalancing recommendation for an Arcadia account — suggests asset changes to optimize yield. Uses 1d APY (not 7d like read.strategy.list), so recommended strategies may differ from the list ranking. APY values are decimal fractions (0.05 = 5%). weekly_earning_difference is in USD.", inputSchema: { account_address: z.string().describe("Arcadia account address"), chain_id: z.number().default(8453).describe("Chain ID: 8453 (Base) or 130 (Unichain)"), }, outputSchema: StrategyRecommendationOutput, }, async ({ account_address, chain_id }) => { try { const result = await api.getRecommendation(chain_id, account_address); const rec = result as Record<string, unknown>; if ( Array.isArray(rec.added_assets) && rec.added_assets.length === 0 && Array.isArray(rec.removed_assets) && rec.removed_assets.length === 0 && Number(rec.current_apy ?? 0) === 0 && Number(rec.proposed_apy ?? 0) === 0 ) { rec.context_note = "Account has no active positions — no rebalancing recommendations available."; } return { content: [{ type: "text" as const, text: JSON.stringify(rec, null, 2) }], structuredContent: rec, }; } catch (err) { return { content: [ { type: "text" as const, text: `Error: ${err instanceof Error ? err.message : String(err)}`, }, ], isError: true, }; } }, );