read.strategy.info
Retrieve APY per range width, pool info, and configuration for a concentrated liquidity strategy by ID.
Instructions
Get full detail for a specific LP strategy by ID — includes APY per range width (narrower range = higher APY but more rebalancing cost/risk), pool info, and configuration. Use read.strategy.list to discover strategy IDs. All APY values are decimal fractions (1.0 = 100%, 0.05 = 5%).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| strategy_id | Yes | Strategy ID | |
| chain_id | No | Chain ID: 8453 (Base), 130 (Unichain), or 10 (Optimism) |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/tools/read/strategy.ts:141-159 (handler)Handler function for read.strategy.info tool. Calls api.getStrategyInfo(chain_id, strategy_id) and returns the full strategy detail including APY per range width, pool info, and configuration.
async ({ strategy_id, chain_id }) => { try { const result = await api.getStrategyInfo(chain_id, strategy_id); return { content: [{ type: "text" as const, text: JSON.stringify(result, null, 2) }], structuredContent: result as Record<string, unknown>, }; } catch (err) { return { content: [ { type: "text" as const, text: `Error: ${err instanceof Error ? err.message : String(err)}`, }, ], isError: true, }; } }, - src/tools/read/strategy.ts:123-160 (registration)Registration of read.strategy.info tool with title 'Get Strategy Info', input schema (strategy_id: number, chain_id: number with default 8453), output schema (StrategyDetailOutput), and annotations (readOnlyHint, idempotentHint).
server.registerTool( "read.strategy.info", { annotations: { title: "Get Strategy Info", readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true, }, description: "Get full detail for a specific LP strategy by ID — includes APY per range width (narrower range = higher APY but more rebalancing cost/risk), pool info, and configuration. Use read.strategy.list to discover strategy IDs. All APY values are decimal fractions (1.0 = 100%, 0.05 = 5%).", inputSchema: { strategy_id: z.number().describe("Strategy ID"), chain_id: z.number().default(8453).describe(CHAIN_ID_DESCRIPTION), }, outputSchema: StrategyDetailOutput, }, async ({ strategy_id, chain_id }) => { try { const result = await api.getStrategyInfo(chain_id, strategy_id); return { content: [{ type: "text" as const, text: JSON.stringify(result, null, 2) }], structuredContent: result as Record<string, unknown>, }; } catch (err) { return { content: [ { type: "text" as const, text: `Error: ${err instanceof Error ? err.message : String(err)}`, }, ], isError: true, }; } }, ); - src/tools/index.ts:7-43 (registration)Import and registration call for registerStrategyTools which registers read.strategy.info (and list/recommendation).
import { registerStrategyTools } from "./read/strategy.js"; import { registerPointsTools } from "./read/points.js"; import { registerGuideTools } from "./read/guides.js"; import { registerWalletTools } from "./read/wallet.js"; import { registerAssetManagerTools } from "./read/asset-managers.js"; import { registerCreateTool } from "./write/account/create.js"; import { registerDepositTool } from "./write/account/deposit.js"; import { registerWithdrawTool } from "./write/account/withdraw.js"; import { registerBorrowTool } from "./write/account/borrow.js"; import { registerRepayTool } from "./write/account/repay.js"; import { registerApproveTool } from "./write/wallet/approve.js"; import { registerPoolDepositTool } from "./write/pool/deposit.js"; import { registerPoolRedeemTool } from "./write/pool/redeem.js"; import { registerRebalancerTool } from "./write/asset-managers/rebalancer.js"; import { registerCompounderTools } from "./write/asset-managers/compounder.js"; import { registerYieldClaimerTools } from "./write/asset-managers/yield-claimer.js"; import { registerCowSwapperTool } from "./write/asset-managers/cow-swapper.js"; import { registerMerklOperatorTool } from "./write/asset-managers/merkl-operator.js"; import { registerSetAssetManagersTool } from "./write/asset-managers/set-asset-managers.js"; import { registerSendTool } from "./dev/send.js"; import { registerAddLiquidityTool } from "./write/account/add-liquidity.js"; import { registerRemoveLiquidityTool } from "./write/account/remove-liquidity.js"; import { registerSwapTool } from "./write/account/swap.js"; import { registerDeleverageTool } from "./write/account/deleverage.js"; import { registerStakeTool } from "./write/account/stake.js"; import { registerCloseTool } from "./write/account/close.js"; export function registerAllTools( server: McpServer, api: ArcadiaApiClient, chains: Record<ChainId, ChainConfig>, ) { // Read tools registerAccountTools(server, api, chains); registerPoolTools(server, api); registerAssetTools(server, api); registerStrategyTools(server, api); - src/tools/output-schemas.ts:145-145 (schema)Output schema for StrategyDetailOutput - passthrough object (accepts any response shape).
export const StrategyDetailOutput = z.object({}).passthrough(); - src/clients/api.ts:174-176 (helper)API client method getStrategyInfo that calls GET /strategies/{strategyId}/info with chain_id query parameter.
async getStrategyInfo(chainId: number, strategyId: number) { return this.get(`/strategies/${strategyId}/info`, { chain_id: chainId }); }