Tool tree
gradeNot graded
canix_healthAnswer
Check canix402 gateway liveness via GET /health. Free endpoint.
View tool JSON
{
"name": "canix_health",
"kind": "answer",
"impl": "imperative",
"description": "Check canix402 gateway liveness via GET /health. Free endpoint.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/webmcp"
}canix_get_metadataAnswer
Fetch canix402 metadata and endpoint policy matrix via GET /metadata. Free endpoint.
View tool JSON
{
"name": "canix_get_metadata",
"kind": "answer",
"impl": "imperative",
"description": "Fetch canix402 metadata and endpoint policy matrix via GET /metadata. Free endpoint.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/webmcp"
}canix_get_discoveryAnswer
Fetch the discovery catalog via GET /discovery. Free endpoint.
View tool JSON
{
"name": "canix_get_discovery",
"kind": "answer",
"impl": "imperative",
"description": "Fetch the discovery catalog via GET /discovery. Free endpoint.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/webmcp"
}canix_get_openapiAnswer
Fetch the OpenAPI contract via GET /openapi.json. Free endpoint.
View tool JSON
{
"name": "canix_get_openapi",
"kind": "answer",
"impl": "imperative",
"description": "Fetch the OpenAPI contract via GET /openapi.json. Free endpoint.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/webmcp"
}canix_get_token_pricesAction
Fetch CompX USD oracle prices for Algorand asset IDs via POST /pricing. Free endpoint; missing prices are returned as null.
View tool JSON
{
"name": "canix_get_token_prices",
"kind": "act",
"impl": "imperative",
"description": "Fetch CompX USD oracle prices for Algorand asset IDs via POST /pricing. Free endpoint; missing prices are returned as null.",
"inputSchema": {
"type": "object",
"properties": {
"assetIds": {
"type": "array",
"minItems": 1,
"maxItems": 100,
"items": {
"type": "integer",
"minimum": 0
}
}
},
"required": [
"assetIds"
]
},
"page": "/webmcp"
}canix_list_execution_shapesAnswer
List verified execution shape catalog metadata via GET /execution/shapes (free). Returns shapeKey, requiredInputs, opportunityRole, docsPath, and meta.caveatsDocsPath from the live protocol registry. Catalog only — compile unsigned groups with canix_get_execution_quote (paid). Do not guess pool discovery, opt-ins, min-balance, slippage, liquidity limits, or app upgrades — read protocol/docs/execution-shapes/protocol-caveats.md and each shape's docsPath.
View tool JSON
{
"name": "canix_list_execution_shapes",
"kind": "answer",
"impl": "imperative",
"description": "List verified execution shape catalog metadata via GET /execution/shapes (free). Returns shapeKey, requiredInputs, opportunityRole, docsPath, and meta.caveatsDocsPath from the live protocol registry. Catalog only — compile unsigned groups with canix_get_execution_quote (paid). Do not guess pool discovery, opt-ins, min-balance, slippage, liquidity limits, or app upgrades — read protocol/docs/execution-shapes/protocol-caveats.md and each shape's docsPath.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/webmcp"
}canix_list_opportunitiesAction
List top aggregated DeFi opportunities across supported chains ranked by risk then APY (GET /opportunities). Each row includes chain (algorand|base). Paid ~0.01 USDC.
View tool JSON
{
"name": "canix_list_opportunities",
"kind": "act",
"impl": "imperative",
"description": "List top aggregated DeFi opportunities across supported chains ranked by risk then APY (GET /opportunities). Each row includes chain (algorand|base). Paid ~0.01 USDC.",
"inputSchema": {
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"type": "integer",
"minimum": 0
},
"includeInactive": {
"type": "boolean"
},
"protocol": {
"type": "string",
"enum": [
"tinyman",
"pact",
"folks-finance",
"compx",
"dorkfi",
"myth-finance",
"haystack",
"reti",
"alpha-arcade",
"stamm",
"morpho",
"aave",
"aerodrome"
]
},
"chain": {
"type": "string",
"enum": [
"algorand",
"base"
]
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
},
"sessionReceipt": {
"type": "string",
"minLength": 1,
"description": "Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."
}
}
},
"page": "/webmcp"
}canix_search_opportunitiesAction
Search/filter opportunities via GET /opportunities/search. Optional chain=algorand|base. Optional assetIds is a comma-separated list of ASA ids (0 = ALGO). Paid ~0.01 USDC.
View tool JSON
{
"name": "canix_search_opportunities",
"kind": "act",
"impl": "imperative",
"description": "Search/filter opportunities via GET /opportunities/search. Optional chain=algorand|base. Optional assetIds is a comma-separated list of ASA ids (0 = ALGO). Paid ~0.01 USDC.",
"inputSchema": {
"type": "object",
"properties": {
"platform": {
"type": "string"
},
"type": {
"type": "string"
},
"minApy": {
"type": "number"
},
"maxApy": {
"type": "number"
},
"minTvlUsd": {
"type": "number",
"minimum": 0
},
"chain": {
"type": "string",
"enum": [
"algorand",
"base"
]
},
"assetIds": {
"type": "string",
"description": "Comma-separated ASA ids (0 = ALGO)."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"type": "integer",
"minimum": 0
},
"includeInactive": {
"type": "boolean"
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
},
"sessionReceipt": {
"type": "string",
"minLength": 1,
"description": "Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."
}
}
},
"page": "/webmcp"
}canix_get_personalized_opportunitiesAction
Fetch wallet-aware opportunities matched to held assets (GET /opportunities/personalized). Applies eligibility rules so full/gated venues are not recommended as enterable. Use canix_check_eligibility for missingAssets/gates/capacity. Paid ~0.05 USDC.
View tool JSON
{
"name": "canix_get_personalized_opportunities",
"kind": "act",
"impl": "imperative",
"description": "Fetch wallet-aware opportunities matched to held assets (GET /opportunities/personalized). Applies eligibility rules so full/gated venues are not recommended as enterable. Use canix_check_eligibility for missingAssets/gates/capacity. Paid ~0.05 USDC.",
"inputSchema": {
"type": "object",
"properties": {
"address": {
"type": "string",
"minLength": 58,
"maxLength": 58,
"description": "58-character account address."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"type": "integer",
"minimum": 0
},
"includeInactive": {
"type": "boolean"
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
},
"sessionReceipt": {
"type": "string",
"minLength": 1,
"description": "Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."
}
},
"required": [
"address"
]
},
"page": "/webmcp"
}canix_get_opportunity_historyAnswer
Fetch a bounded APY/TVL history series for one opportunity (GET /opportunities/{opportunityId}/history). Window is 1d, 7d, or 30d (default 30d). Empty points until snapshots exist. Includes a stability signal so snapshot APY cannot dominate plan sizing. Paid ~0.01 USDC.
View tool JSON
{
"name": "canix_get_opportunity_history",
"kind": "answer",
"impl": "imperative",
"description": "Fetch a bounded APY/TVL history series for one opportunity (GET /opportunities/{opportunityId}/history). Window is 1d, 7d, or 30d (default 30d). Empty points until snapshots exist. Includes a stability signal so snapshot APY cannot dominate plan sizing. Paid ~0.01 USDC.",
"inputSchema": {
"type": "object",
"properties": {
"opportunityId": {
"type": "string",
"minLength": 1
},
"window": {
"type": "string",
"enum": [
"1d",
"7d",
"30d"
]
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
},
"sessionReceipt": {
"type": "string",
"minLength": 1,
"description": "Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."
}
},
"required": [
"opportunityId"
]
},
"page": "/webmcp"
}canix_check_eligibilityAction
Check whether a wallet can enter selected opportunities before quoting (POST /eligibility). Pass address and opportunityIds (1–25). Returns canEnter, missingAssets, gates, capacity, suggestedSwap, and eligibilityFullyCheckable. NFD/creator gates stay unresolved — canEnter is never true until fully checkable. Paid ~0.01 USDC.
View tool JSON
{
"name": "canix_check_eligibility",
"kind": "act",
"impl": "imperative",
"description": "Check whether a wallet can enter selected opportunities before quoting (POST /eligibility). Pass address and opportunityIds (1–25). Returns canEnter, missingAssets, gates, capacity, suggestedSwap, and eligibilityFullyCheckable. NFD/creator gates stay unresolved — canEnter is never true until fully checkable. Paid ~0.01 USDC.",
"inputSchema": {
"type": "object",
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Account address."
},
"opportunityIds": {
"type": "array",
"minItems": 1,
"maxItems": 25,
"items": {
"type": "string",
"minLength": 1
}
},
"refresh": {
"type": "boolean"
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
},
"sessionReceipt": {
"type": "string",
"minLength": 1,
"description": "Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."
}
},
"required": [
"address",
"opportunityIds"
]
},
"page": "/webmcp"
}canix_get_planAction
Compile an allocation intent into an ordered unsigned plan (POST /plans). Pass address and budget { assetId, amount } (base units; 0 = ALGO). Optional constraints and opportunityIds. Optional swapSlippage for multi-router compose. Returns eligibility, live multi-router opt-in/swap groups when requiredAssetIds differ from the budget asset, setup/enter quotes[] as independent unsigned groups (never merged), expected position delta, attached data.simulation when groups compiled, x402 + network fee totals, and expiry. Paid ~0.25 USDC. Canix does not sign or submit.
View tool JSON
{
"name": "canix_get_plan",
"kind": "act",
"impl": "imperative",
"description": "Compile an allocation intent into an ordered unsigned plan (POST /plans). Pass address and budget { assetId, amount } (base units; 0 = ALGO). Optional constraints and opportunityIds. Optional swapSlippage for multi-router compose. Returns eligibility, live multi-router opt-in/swap groups when requiredAssetIds differ from the budget asset, setup/enter quotes[] as independent unsigned groups (never merged), expected position delta, attached data.simulation when groups compiled, x402 + network fee totals, and expiry. Paid ~0.25 USDC. Canix does not sign or submit.",
"inputSchema": {
"type": "object",
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Account address."
},
"budget": {
"type": "object",
"required": [
"assetId",
"amount"
],
"properties": {
"assetId": {
"type": "integer",
"minimum": 0
},
"amount": {
"type": "string",
"minLength": 1
}
}
},
"constraints": {
"type": "object",
"additionalProperties": false,
"properties": {
"maxProtocolWeightBps": {
"type": "integer",
"minimum": 1,
"maximum": 10000
},
"noNewBorrows": {
"type": "boolean"
},
"executionReadyOnly": {
"type": "boolean"
},
"minTvlUsd": {
"type": "number",
"minimum": 0
},
"maxSourceAgeSeconds": {
"type": "integer",
"minimum": 0
},
"maxAllocations": {
"type": "integer",
"minimum": 1,
"maximum": 10
}
}
},
"opportunityIds": {
"type": "array",
"minItems": 1,
"maxItems": 25,
"items": {
"type": "string",
"minLength": 1
}
},
"swapSlippage": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"refresh": {
"type": "boolean"
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
},
"sessionReceipt": {
"type": "string",
"minLength": 1,
"description": "Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."
}
},
"required": [
"address",
"budget"
]
},
"page": "/webmcp"
}canix_get_protocol_opportunitiesAction
List opportunities for a single protocol (GET /protocols/{protocol}/opportunities). Paid ~0.01 USDC.
View tool JSON
{
"name": "canix_get_protocol_opportunities",
"kind": "act",
"impl": "imperative",
"description": "List opportunities for a single protocol (GET /protocols/{protocol}/opportunities). Paid ~0.01 USDC.",
"inputSchema": {
"type": "object",
"properties": {
"protocol": {
"type": "string",
"enum": [
"tinyman",
"pact",
"folks-finance",
"compx",
"dorkfi",
"myth-finance",
"haystack",
"reti",
"alpha-arcade",
"stamm",
"morpho",
"aave",
"aerodrome"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"type": "integer",
"minimum": 0
},
"includeInactive": {
"type": "boolean"
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
},
"sessionReceipt": {
"type": "string",
"minLength": 1,
"description": "Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."
}
},
"required": [
"protocol"
]
},
"page": "/webmcp"
}canix_get_positionsAction
Fetch Algorand DeFi positions for a wallet via GET /positions. Paid ~0.005 USDC. First call returns PAYMENT-REQUIRED metadata; retry with paymentSignature.
View tool JSON
{
"name": "canix_get_positions",
"kind": "act",
"impl": "imperative",
"description": "Fetch Algorand DeFi positions for a wallet via GET /positions. Paid ~0.005 USDC. First call returns PAYMENT-REQUIRED metadata; retry with paymentSignature.",
"inputSchema": {
"type": "object",
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Account address."
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
},
"sessionReceipt": {
"type": "string",
"minLength": 1,
"description": "Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."
}
},
"required": [
"address"
]
},
"page": "/webmcp"
}canix_list_claimableAction
List claimable DeFi rewards for a wallet via GET /positions/claimable. Returns USD value, network-fee / worth-claiming hints, claim shapeKeys, and claimAllQuotes ready for canix_get_execution_quote. Paid ~0.001 USDC. Then compile with canix_get_execution_quote (~0.10 USDC flat); groups are never merged. Sign and submit locally.
View tool JSON
{
"name": "canix_list_claimable",
"kind": "act",
"impl": "imperative",
"description": "List claimable DeFi rewards for a wallet via GET /positions/claimable. Returns USD value, network-fee / worth-claiming hints, claim shapeKeys, and claimAllQuotes ready for canix_get_execution_quote. Paid ~0.001 USDC. Then compile with canix_get_execution_quote (~0.10 USDC flat); groups are never merged. Sign and submit locally.",
"inputSchema": {
"type": "object",
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Account address."
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
},
"sessionReceipt": {
"type": "string",
"minLength": 1,
"description": "Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."
}
},
"required": [
"address"
]
},
"page": "/webmcp"
}canix_get_execution_quoteAction
Compile one or more unsigned groups (POST /execution/quotes). Algorand shapes return Algorand groups; Morpho shapes (base:morpho:vault:*), Aave shapes (base:aave:v3:*), and Aerodrome shapes (base:aerodrome:v2:*) return unsigned Base calldata. Pass an Algorand userAddress unless the shape is on Base. Omitting a Base address does not change rank, eligibility, price, or access. Pass quotes: [{ shapeKey, input }, ...]. Required input fields vary by shapeKey — call canix_list_execution_shapes and use each shape's requiredInputs (userAddress is always required). Response data is an ExecutableQuote array. Paid flat ~0.10 USDC per request on Algorand or Base (not per item). On failure, error.details includes quoteIndex and shapeKey. Do not guess pool discovery, opt-ins, min-balance, slippage, liquidity limits, or app upgrades — read protocol/docs/execution-shapes/protocol-caveats.md and each shape's docsPath. Haystack Launch compiles here too: mainnet:haystack:v1:launch:token takes an existing ipfs:// or https:// assetUrl, and mainnet:haystack:v1:buy:bonding buys a token still on the curve (direct bonding-asset payment, or a Haystack-router leg). A bonding buy is not canix_swap.
View tool JSON
{
"name": "canix_get_execution_quote",
"kind": "act",
"impl": "imperative",
"description": "Compile one or more unsigned groups (POST /execution/quotes). Algorand shapes return Algorand groups; Morpho shapes (base:morpho:vault:*), Aave shapes (base:aave:v3:*), and Aerodrome shapes (base:aerodrome:v2:*) return unsigned Base calldata. Pass an Algorand userAddress unless the shape is on Base. Omitting a Base address does not change rank, eligibility, price, or access. Pass quotes: [{ shapeKey, input }, ...]. Required input fields vary by shapeKey — call canix_list_execution_shapes and use each shape's requiredInputs (userAddress is always required). Response data is an ExecutableQuote array. Paid flat ~0.10 USDC per request on Algorand or Base (not per item). On failure, error.details includes quoteIndex and shapeKey. Do not guess pool discovery, opt-ins, min-balance, slippage, liquidity limits, or app upgrades — read protocol/docs/execution-shapes/protocol-caveats.md and each shape's docsPath. Haystack Launch compiles here too: mainnet:haystack:v1:launch:token takes an existing ipfs:// or https:// assetUrl, and mainnet:haystack:v1:buy:bonding buys a token still on the curve (direct bonding-asset payment, or a Haystack-router leg). A bonding buy is not canix_swap.",
"inputSchema": {
"type": "object",
"properties": {
"quotes": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"shapeKey",
"input"
],
"properties": {
"shapeKey": {
"type": "string",
"minLength": 1
},
"input": {
"type": "object",
"required": [
"userAddress"
],
"properties": {
"userAddress": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
}
}
}
}
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
},
"sessionReceipt": {
"type": "string",
"minLength": 1,
"description": "Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."
}
},
"required": [
"quotes"
]
},
"page": "/webmcp"
}canix_get_quoteAction
Get a stateless multi-router swap quote via POST /swaps/quote. Quotes enabled routers in parallel and returns the best expected net out. Optional router forces one adapter. Pass the response data unchanged into canix_optin / canix_swap.
View tool JSON
{
"name": "canix_get_quote",
"kind": "act",
"impl": "imperative",
"description": "Get a stateless multi-router swap quote via POST /swaps/quote. Quotes enabled routers in parallel and returns the best expected net out. Optional router forces one adapter. Pass the response data unchanged into canix_optin / canix_swap.",
"inputSchema": {
"type": "object",
"properties": {
"address": {
"type": "string",
"minLength": 1,
"description": "Account address."
},
"fromAssetId": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "string",
"pattern": "^[0-9]+$"
}
]
},
"toAssetId": {
"anyOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "string",
"pattern": "^[0-9]+$"
}
]
},
"amount": {
"anyOf": [
{
"type": "integer",
"minimum": 1
},
{
"type": "string",
"pattern": "^[1-9][0-9]*$"
}
]
},
"type": {
"type": "string",
"enum": [
"fixed-input",
"fixed-output"
]
},
"router": {
"type": "string",
"enum": [
"haystack",
"hogswap",
"tinyman",
"pact-smart-router",
"folks-router",
"asastats"
]
},
"slippage": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"disabledProtocols": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Tinyman",
"Humble",
"TinymanV2",
"Algofi",
"Algomint",
"Pact",
"Folks",
"TAlgo"
]
}
},
"maxGroupSize": {
"type": "integer",
"minimum": 1,
"maximum": 16
},
"maxDepth": {
"type": "integer",
"minimum": 1,
"maximum": 4
}
},
"required": [
"address",
"fromAssetId",
"toAssetId",
"amount"
]
},
"page": "/webmcp"
}canix_optinAction
Build missing output-asset and application opt-ins via POST /swaps/optin for the winning quote. Free endpoint; pass the quote data object unchanged.
View tool JSON
{
"name": "canix_optin",
"kind": "act",
"impl": "imperative",
"description": "Build missing output-asset and application opt-ins via POST /swaps/optin for the winning quote. Free endpoint; pass the quote data object unchanged.",
"inputSchema": {
"type": "object",
"properties": {
"address": {
"type": "string",
"minLength": 58,
"maxLength": 58,
"description": "58-character account address."
},
"quote": {
"type": "object",
"required": [
"router",
"address",
"fromAssetId",
"toAssetId",
"amount",
"type",
"quotedAmount",
"minOut",
"networkFeeMicroAlgos",
"slippageBps",
"createdAt",
"expiresAt",
"score",
"alternatives",
"legs",
"payload"
],
"properties": {
"router": {
"type": "string",
"enum": [
"haystack",
"hogswap",
"tinyman",
"pact-smart-router",
"folks-router",
"asastats"
]
},
"address": {
"type": "string",
"minLength": 58,
"maxLength": 58,
"description": "58-character account address."
},
"fromAssetId": {
"type": "string",
"pattern": "^[0-9]+$"
},
"toAssetId": {
"type": "string",
"pattern": "^[0-9]+$"
},
"amount": {
"type": "string",
"pattern": "^[1-9][0-9]*$"
},
"type": {
"type": "string",
"enum": [
"fixed-input",
"fixed-output"
]
},
"quotedAmount": {
"type": "string",
"pattern": "^[0-9]+$"
},
"minOut": {
"type": "string",
"pattern": "^[0-9]+$"
},
"networkFeeMicroAlgos": {
"type": "string",
"pattern": "^[0-9]+$"
},
"slippageBps": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"expiresAt": {
"type": "string",
"format": "date-time"
},
"score": {
"type": "object",
"required": [
"expectedNetOut",
"minOut",
"expectedIn",
"networkFeeMicroAlgos",
"feeAlreadyNetted"
],
"properties": {
"expectedNetOut": {
"type": "string",
"pattern": "^[0-9]+$"
},
"minOut": {
"type": "string",
"pattern": "^[0-9]+$"
},
"expectedIn": {
"type": "string",
"pattern": "^[0-9]+$"
},
"maxIn": {
"type": "string",
"pattern": "^[0-9]+$"
},
"networkFeeMicroAlgos": {
"type": "string",
"pattern": "^[0-9]+$"
},
"feeAlreadyNetted": {
"type": "boolean"
}
}
},
"alternatives": {
"type": "array",
"items": {
"type": "object",
"required": [
"router",
"status"
],
"properties": {
"router": {
"type": "string",
"enum": [
"haystack",
"hogswap",
"tinyman",
"pact-smart-router",
"folks-router",
"asastats"
]
},
"status": {
"type": "string",
"enum": [
"quoted",
"error",
"skipped",
"timeout"
]
},
"expectedNetOut": {
"type": "string",
"pattern": "^[0-9]+$"
},
"minOut": {
"type": "string",
"pattern": "^[0-9]+$"
},
"networkFeeMicroAlgos": {
"type": "string",
"pattern": "^[0-9]+$"
},
"reason": {
"type": "string"
}
}
}
},
"legs": {
"type": "array",
"items": {}
},
"payload": {}
}
}
},
"required": [
"address",
"quote"
]
},
"page": "/webmcp"
}canix_swapAction
Build unsigned swap transactions via paid POST /swaps/transactions (~0.005 USDC) for the winning quote. Omit paymentSignature for x402 preflight, then retry with the same inputs. Canix does not sign or submit.
View tool JSON
{
"name": "canix_swap",
"kind": "act",
"impl": "imperative",
"description": "Build unsigned swap transactions via paid POST /swaps/transactions (~0.005 USDC) for the winning quote. Omit paymentSignature for x402 preflight, then retry with the same inputs. Canix does not sign or submit.",
"inputSchema": {
"type": "object",
"properties": {
"address": {
"type": "string",
"minLength": 58,
"maxLength": 58,
"description": "58-character account address."
},
"quote": {
"type": "object",
"required": [
"router",
"address",
"fromAssetId",
"toAssetId",
"amount",
"type",
"quotedAmount",
"minOut",
"networkFeeMicroAlgos",
"slippageBps",
"createdAt",
"expiresAt",
"score",
"alternatives",
"legs",
"payload"
],
"properties": {
"router": {
"type": "string",
"enum": [
"haystack",
"hogswap",
"tinyman",
"pact-smart-router",
"folks-router",
"asastats"
]
},
"address": {
"type": "string",
"minLength": 58,
"maxLength": 58,
"description": "58-character account address."
},
"fromAssetId": {
"type": "string",
"pattern": "^[0-9]+$"
},
"toAssetId": {
"type": "string",
"pattern": "^[0-9]+$"
},
"amount": {
"type": "string",
"pattern": "^[1-9][0-9]*$"
},
"type": {
"type": "string",
"enum": [
"fixed-input",
"fixed-output"
]
},
"quotedAmount": {
"type": "string",
"pattern": "^[0-9]+$"
},
"minOut": {
"type": "string",
"pattern": "^[0-9]+$"
},
"networkFeeMicroAlgos": {
"type": "string",
"pattern": "^[0-9]+$"
},
"slippageBps": {
"type": "integer",
"minimum": 0,
"maximum": 10000
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"expiresAt": {
"type": "string",
"format": "date-time"
},
"score": {
"type": "object",
"required": [
"expectedNetOut",
"minOut",
"expectedIn",
"networkFeeMicroAlgos",
"feeAlreadyNetted"
],
"properties": {
"expectedNetOut": {
"type": "string",
"pattern": "^[0-9]+$"
},
"minOut": {
"type": "string",
"pattern": "^[0-9]+$"
},
"expectedIn": {
"type": "string",
"pattern": "^[0-9]+$"
},
"maxIn": {
"type": "string",
"pattern": "^[0-9]+$"
},
"networkFeeMicroAlgos": {
"type": "string",
"pattern": "^[0-9]+$"
},
"feeAlreadyNetted": {
"type": "boolean"
}
}
},
"alternatives": {
"type": "array",
"items": {
"type": "object",
"required": [
"router",
"status"
],
"properties": {
"router": {
"type": "string",
"enum": [
"haystack",
"hogswap",
"tinyman",
"pact-smart-router",
"folks-router",
"asastats"
]
},
"status": {
"type": "string",
"enum": [
"quoted",
"error",
"skipped",
"timeout"
]
},
"expectedNetOut": {
"type": "string",
"pattern": "^[0-9]+$"
},
"minOut": {
"type": "string",
"pattern": "^[0-9]+$"
},
"networkFeeMicroAlgos": {
"type": "string",
"pattern": "^[0-9]+$"
},
"reason": {
"type": "string"
}
}
}
},
"legs": {
"type": "array",
"items": {}
},
"payload": {}
}
},
"slippage": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
},
"sessionReceipt": {
"type": "string",
"minLength": 1,
"description": "Prepaid session receipt (X-Canix-Session). Omit to pay per request with paymentSignature. If this header was sent, Caddy skipped x402; a 402 SESSION_* means drop the header and retry with paymentSignature."
}
},
"required": [
"address",
"quote",
"slippage"
]
},
"page": "/webmcp"
}canix_create_sessionAction
Buy a prepaid agent session (POST /sessions, ~0.25 USDC). One x402 payment mints a walletless receipt that unlocks N research calls and M quotes/plans until TTL. Sessions are receipts, not keys. Create/refresh cannot be paid with an existing session.
View tool JSON
{
"name": "canix_create_session",
"kind": "act",
"impl": "imperative",
"description": "Buy a prepaid agent session (POST /sessions, ~0.25 USDC). One x402 payment mints a walletless receipt that unlocks N research calls and M quotes/plans until TTL. Sessions are receipts, not keys. Create/refresh cannot be paid with an existing session.",
"inputSchema": {
"type": "object",
"properties": {
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
}
}
},
"page": "/webmcp"
}canix_refresh_sessionAction
Refresh a prepaid session (POST /sessions/refresh, ~0.25 USDC). Resets N/M and TTL in place, or mints a new receipt if the previous one is gone. One-shot only.
View tool JSON
{
"name": "canix_refresh_session",
"kind": "act",
"impl": "imperative",
"description": "Refresh a prepaid session (POST /sessions/refresh, ~0.25 USDC). Resets N/M and TTL in place, or mints a new receipt if the previous one is gone. One-shot only.",
"inputSchema": {
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"minLength": 1
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
}
}
},
"page": "/webmcp"
}canix_get_sessionAnswer
Read remaining N/M and expiry for a prepaid session receipt (GET /sessions/{sessionId}). Free. Prefer this over the public indexer /transactions showcase.
View tool JSON
{
"name": "canix_get_session",
"kind": "answer",
"impl": "imperative",
"description": "Read remaining N/M and expiry for a prepaid session receipt (GET /sessions/{sessionId}). Free. Prefer this over the public indexer /transactions showcase.",
"inputSchema": {
"type": "object",
"properties": {
"sessionId": {
"type": "string",
"minLength": 1
}
},
"required": [
"sessionId"
]
},
"page": "/webmcp"
}canix_create_watchSensitive Action
Register a paid wallet watch retainer (POST /watch, ~0.25 USDC). Address + thresholds + optional HTTPS webhook. HMAC secret shown once. Canix never stores wallet keys.
View tool JSON
{
"name": "canix_create_watch",
"kind": "transact",
"impl": "imperative",
"description": "Register a paid wallet watch retainer (POST /watch, ~0.25 USDC). Address + thresholds + optional HTTPS webhook. HMAC secret shown once. Canix never stores wallet keys.",
"inputSchema": {
"type": "object",
"properties": {
"address": {
"type": "string",
"minLength": 58,
"maxLength": 58,
"description": "58-character account address."
},
"thresholds": {
"type": "object",
"additionalProperties": false,
"minProperties": 1,
"properties": {
"healthFactor": {
"type": "number",
"exclusiveMinimum": 0
},
"claimableUsd": {
"type": "number",
"minimum": 0
},
"apyDropBps": {
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"retiCapacity": {
"anyOf": [
{
"type": "boolean",
"const": true
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"minStakerSlotsRemaining": {
"type": "integer",
"minimum": 0
},
"minAlgoRoomMicroAlgos": {
"type": "string",
"pattern": "^[0-9]+$"
}
}
}
]
}
}
},
"webhookUrl": {
"type": "string",
"minLength": 8,
"maxLength": 2048
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
}
},
"required": [
"address",
"thresholds"
]
},
"page": "/webmcp"
}canix_refresh_watchAction
Refresh a paid watch retainer (POST /watch/refresh, ~0.25 USDC). Extends TTL. Optionally rotateSecret. One-shot only.
View tool JSON
{
"name": "canix_refresh_watch",
"kind": "act",
"impl": "imperative",
"description": "Refresh a paid watch retainer (POST /watch/refresh, ~0.25 USDC). Extends TTL. Optionally rotateSecret. One-shot only.",
"inputSchema": {
"type": "object",
"properties": {
"watchId": {
"type": "string",
"minLength": 1
},
"rotateSecret": {
"type": "boolean"
},
"paymentSignature": {
"type": "string",
"minLength": 1,
"description": "Optional PAYMENT-SIGNATURE base64 payload. Omit on first call to receive PAYMENT-REQUIRED metadata."
}
},
"required": [
"watchId"
]
},
"page": "/webmcp"
}canix_get_watchAnswer
Read a watch receipt and recent threshold firings (GET /watch/{watchId}). Free. Does not return the HMAC secret.
View tool JSON
{
"name": "canix_get_watch",
"kind": "answer",
"impl": "imperative",
"description": "Read a watch receipt and recent threshold firings (GET /watch/{watchId}). Free. Does not return the HMAC secret.",
"inputSchema": {
"type": "object",
"properties": {
"watchId": {
"type": "string",
"minLength": 1
}
},
"required": [
"watchId"
]
},
"page": "/webmcp"
}canix_rotate_watch_secretAction
Rotate the watch webhook HMAC secret (POST /watch/{watchId}/rotate-secret). Free. Requires the current secret.
View tool JSON
{
"name": "canix_rotate_watch_secret",
"kind": "act",
"impl": "imperative",
"description": "Rotate the watch webhook HMAC secret (POST /watch/{watchId}/rotate-secret). Free. Requires the current secret.",
"inputSchema": {
"type": "object",
"properties": {
"watchId": {
"type": "string",
"minLength": 1
},
"webhookSecret": {
"type": "string",
"minLength": 1
}
},
"required": [
"watchId",
"webhookSecret"
]
},
"page": "/webmcp"
}