MCP 服务器

AssetFare

io.github.odaiin/assetfare
加密货币与 Web3 支付与金融科技 公开且可连接 MCP 2025-11-25

此 MCP 可以做什么

Provides quoted and unsigned transaction plans for moving assets from Solana to Base or other supported networks, while leaving signing and submission to the caller.

assetfare_manifest
Read the Ed25519-signed release manifest and safety-bundle binding before preparing an action. Example: call this once to verify the current release and contract pins; it never creates state, signs, or submits.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['service', 'release_commit', 'execution', 'safety_bundle', 'signature'], 'properties': {'service': {'type': 'string', 'const': 'AssetFare'}, 'execution': {'type': 'object', 'additionalProperties': {}}, 'signature': {'type': 'object', 'required': ['algorithm', 'key_id', 'public_key_url', 'value'], 'properties': {'value': {'type': 'string', 'minLength': 1}, 'key_id': {'type': 'string', 'minLength': 1}, 'algorithm': {'type': 'string', 'const': 'Ed25519'}, 'public_key_url': {'type': 'string', 'format': 'uri'}}, 'additionalProperties': True}, 'safety_bundle': {'type': 'object', 'required': ['schema', 'url', 'sha256', 'canonicalization'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'schema': {'type': 'string', 'format': 'uri'}, 'sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, 'canonicalization': {'type': 'string', 'minLength': 1}}, 'additionalProperties': True}, 'release_commit': {'type': 'string', 'pattern': '^[0-9a-f]{40}$'}}, 'additionalProperties': True}
assetfare_v2_capabilities
Read the 42 active routes, 48 economically inactive routes, live availability, route-specific guidance, direct_route_summary, and continuation_v3 contracts before quoting. Forty active routes have a verified best-from amount; two Sei routes are active for unique availability without a price threshold. Example: call once before requesting an exact route quote. Confirm every fresh quote. continuation_v3 separately binds execution selection, wallets, bounds, and mode. Read-only; creates no wallet login, session, or action.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': False}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['status', 'public_api_enabled', 'chains', 'asset_endpoints', 'source_only_asset_endpoints', 'source_only_routes', 'directed_conversion_routes', 'unsigned_route_plans_ready', 'execution_ready_routes', 'direct_route_summary', 'continuation_v3', 'action_lifetime', 'caller_owned_agent_execution', 'phase_b_blocked_routes', 'blocked_source_only_routes', 'server_signing', 'server_submission'], 'properties': {'chains': {'type': 'array', 'items': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic'], 'type': 'string'}, 'maxItems': 11, 'minItems': 6}, 'status': {'type': 'string', 'const': 'capped_public_agent_release'}, 'server_signing': {'type': 'boolean', 'const': False}, 'action_lifetime': {'type': 'object', 'required': ['quote_ttl_seconds', 'action_bundle_ttl_seconds', 'onchain_deadline_seconds', 'wallet_ready_minimum_remaining_seconds', 'refresh_policy', 'server_signing', 'server_submission'], 'properties': {'refresh_policy': {'type': 'string', 'const': 'expired_unsubmitted_only'}, 'server_signing': {'type': 'boolean', 'const': False}, 'quote_ttl_seconds': {'type': 'number', 'const': 60}, 'server_submission': {'type': 'boolean', 'const': False}, 'onchain_deadline_seconds': {'type': 'number', 'const': 240}, 'action_bundle_ttl_seconds': {'type': 'number', 'const': 180}, 'wallet_ready_minimum_remaining_seconds': {'type': 'number', 'const': 120}}, 'additionalProperties': False}, 'asset_endpoints': {'type': 'array', 'items': {'type': 'object', 'required': ['chain', 'token'], 'properties': {'chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic'], 'type': 'string'}, 'token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string'}}, 'additionalProperties': False}, 'maxItems': 16, 'minItems': 11}, 'continuation_v3': {'type': 'object', 'required': ['version', 'required_on_every_quote', 'enforcement', 'selection_status', 'automatic_selection_forbidden', 'caller_approved_boolean_is_not_human_proof', 'cache_scope', 'maximum_ttl_seconds', 'maximum_cache_records', 'multistep_allowed_modes', 'one_step_allowed_modes', 'session_owner_binding', 'whole_session_path_and_bounds_enforced', 'future_actions_requote_and_enforce_original_step_minimums', 'quote_payload_sha256_spec', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-quote-bound-continuation-v3'}, 'cache_scope': {'type': 'string', 'const': 'bounded_process_local_ttl_restart_fails_closed'}, 'enforcement': {'type': 'string', 'const': 'server_enforced_quote_binding'}, 'server_signing': {'type': 'boolean', 'const': False}, 'selection_status': {'type': 'string', 'const': 'unranked_candidate'}, 'server_submission': {'type': 'boolean', 'const': False}, 'maximum_ttl_seconds': {'type': 'number', 'const': 60}, 'maximum_cache_records': {'type': 'number', 'const': 2048}, 'session_owner_binding': {'type': 'string', 'const': 'sha256_of_caller_generated_session_token_raw_token_never_stored'}, 'one_step_allowed_modes': {'type': 'array', 'items': [{'type': 'string', 'const': 'one_shot'}, {'type': 'string', 'const': 'session'}], 'maxItems': 2, 'minItems': 2}, 'multistep_allowed_modes': {'type': 'array', 'items': [{'type': 'string', 'const': 'session'}], 'maxItems': 1, 'minItems': 1}, 'required_on_every_quote': {'type': 'boolean', 'const': True}, 'quote_payload_sha256_spec': {'type': 'string', 'const': 'sha256(AssetFare typed-canonical-v1 bytes of the quote without continuation_v3 after exact base-unit substitution: n=null; t/f=boolean; d=<IEEE-754 binary64 big-endian 16 lowercase hex> for each finite JSON number; s=<UTF-8 byte length>:<Unicode scalar text with lone surrogates forbidden>; a=<count>:[items]; o=<count>:{UTF-8-byte-sorted string-key/value pairs}; every non-substituted integral JSON number must be within +/-9007199254740991; substituted paths are intent.estimated_input_base, route.input_base, route.expected_output_base, route.minimum_output_base, and every route.steps[i].expected_input_base/floor_input_base/expected_output_base/minimum_output_base from direct_route_summary exact decimal strings)'}, 'automatic_selection_forbidden': {'type': 'boolean', 'const': True}, 'whole_session_path_and_bounds_enforced': {'type': 'boolean', 'const': True}, 'caller_approved_boolean_is_not_human_proof': {'type': 'boolean', 'const': True}, 'future_actions_requote_and_enforce_original_step_minimums': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, 'economic_guidance': {'anyOf': [{'type': 'object', 'required': ['version', 'as_of', 'route_count', 'currency', 'technical_quote_minimum_usd', 'economic_guidance_is_non_enforcing', 'amount_is_never_rejected_by_economic_guidance', 'values_change_with_market', 'fresh_quote_and_caller_decision_control', 'update_policy', 'confidence_counts', 'advisory_start_distribution'], 'properties': {'as_of': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'version': {'type': 'string', 'const': 'assetfare-route-economic-guidance-v1'}, 'currency': {'type': 'string', 'const': 'USD'}, 'route_count': {'type': 'number', 'const': 80}, 'update_policy': {'type': 'string', 'const': 'append_daily_observations_then_replace_values_without_schema_change'}, 'confidence_counts': {'type': 'object', 'required': ['measured_two_day', 'measured_route_specific', 'structural_estimate', 'reworked_route_remeasure', 'coverage_only_retest'], 'properties': {'measured_two_day': {'type': 'integer', 'maximum': 80, 'minimum': 0}, 'structural_estimate': {'$ref': '#/properties/economic_guidance/anyOf/0/properties/confidence_counts/properties/measured_two_day'}, 'coverage_only_retest': {'$ref': '#/properties/economic_guidance/anyOf/0/properties/confidence_counts/properties/measured_two_day'}, 'measured_route_specific': {'$ref': '#/properties/economic_guidance/anyOf/0/properties/confidence_counts/properties/measured_two_day'}, 'reworked_route_remeasure': {'$ref': '#/properties/economic_guidance/anyOf/0/properties/confidence_counts/properties/measured_two_day'}}, 'additionalProperties': False}, 'values_change_with_market': {'type': 'boolean', 'const': True}, 'advisory_start_distribution': {'type': 'object', 'required': ['50', '100', '250', '500', '1000', '2500', '5000', '10000'], 'properties': {'50': {'$ref': '#/properties/economic_guidance/anyOf/0/properties/confidence_counts/properties/measured_two_day'}, '100': {'$ref': '#/properties/economic_guidance/anyOf/0/properties/confidence_counts/properties/measured_two_day'}, '250': {'$ref': '#/properties/economic_guidance/anyOf/0/properties/confidence_counts/properties/measured_two_day'}, '500': {'$ref': '#/properties/economic_guidance/anyOf/0/properties/confidence_counts/properties/measured_two_day'}, '1000': {'$ref': '#/properties/economic_guidance/anyOf/0/properties/confidence_counts/properties/measured_two_day'}, '2500': {'$ref': '#/properties/economic_guidance/anyOf/0/properties/confidence_counts/properties/measured_two_day'}, '5000': {'$ref': '#/properties/economic_guidance/anyOf/0/properties/confidence_counts/properties/measured_two_day'}, '10000': {'$ref': '#/properties/economic_guidance/anyOf/0/properties/confidence_counts/properties/measured_two_day'}}, 'additionalProperties': False}, 'technical_quote_minimum_usd': {'type': 'number', 'const': 1}, 'economic_guidance_is_non_enforcing': {'type': 'boolean', 'const': True}, 'fresh_quote_and_caller_decision_control': {'type': 'boolean', 'const': True}, 'amount_is_never_rejected_by_economic_guidance': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, {'type': 'object', 'required': ['version', 'as_of', 'route_count', 'public_active_route_count', 'public_inactive_route_count', 'verified_best_from_route_count', 'availability_only_route_count', 'currency', 'technical_quote_minimum_usd', 'economic_guidance_is_non_enforcing', 'amount_is_never_rejected_by_economic_guidance', 'values_change_with_market', 'fresh_quote_and_caller_decision_control', 'update_policy', 'first_use_zero_allowance_scenario', 'expected_output_ranking', 'incomplete_cost_never_promoted', 'tested_ceiling_usd', 'advisory_start_distribution', 'recommendation_status_counts'], 'properties': {'as_of': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'version': {'type': 'string', 'const': 'assetfare-route-economic-guidance-v3'}, 'currency': {'type': 'string', 'const': 'USD'}, 'route_count': {'type': 'number', 'const': 90}, 'update_policy': {'type': 'string', 'const': 'daily_measurement_with_three_day_activation_hysteresis'}, 'tested_ceiling_usd': {'type': 'number', 'const': 10000}, 'expected_output_ranking': {'type': 'boolean', 'const': True}, 'public_active_route_count': {'type': 'number', 'const': 42}, 'values_change_with_market': {'type': 'boolean', 'const': True}, 'advisory_start_distribution': {'type': 'object', 'required': ['50', '100', '250', '500', '1000', '2500', '5000', '10000'], 'properties': {'50': {'type': 'integer', 'maximum': 90, 'minimum': 0}, '100': {'$ref': '#/properties/economic_guidance/anyOf/1/properties/advisory_start_distribution/properties/50'}, '250': {'$ref': '#/properties/economic_guidance/anyOf/1/properties/advisory_start_distribution/properties/50'}, '500': {'$ref': '#/properties/economic_guidance/anyOf/1/properties/advisory_start_distribution/properties/50'}, '1000': {'$ref': '#/properties/economic_guidance/anyOf/1/properties/advisory_start_distribution/properties/50'}, '2500': {'$ref': '#/properties/economic_guidance/anyOf/1/properties/advisory_start_distribution/properties/50'}, '5000': {'$ref': '#/properties/economic_guidance/anyOf/1/properties/advisory_start_distribution/properties/50'}, '10000': {'$ref': '#/properties/economic_guidance/anyOf/1/properties/advisory_start_distribution/properties/50'}}, 'additionalProperties': False}, 'public_inactive_route_count': {'type': 'number', 'const': 48}, 'technical_quote_minimum_usd': {'type': 'number', 'const': 1}, 'recommendation_status_counts': {'type': 'object', 'required': ['active_price_verified', 'active_unique_availability', 'inactive_economics'], 'properties': {'inactive_economics': {'type': 'number', 'const': 48}, 'active_price_verified': {'type': 'number', 'const': 40}, 'active_unique_availability': {'type': 'number', 'const': 2}}, 'additionalProperties': False}, 'availability_only_route_count': {'type': 'number', 'const': 2}, 'incomplete_cost_never_promoted': {'type': 'boolean', 'const': True}, 'verified_best_from_route_count': {'type': 'number', 'const': 40}, 'first_use_zero_allowance_scenario': {'type': 'boolean', 'const': True}, 'economic_guidance_is_non_enforcing': {'type': 'boolean', 'const': True}, 'fresh_quote_and_caller_decision_control': {'type': 'boolean', 'const': True}, 'amount_is_never_rejected_by_economic_guidance': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}]}, 'server_submission': {'type': 'boolean', 'const': False}, 'public_api_enabled': {'type': 'boolean', 'const': True}, 'source_only_routes': {'type': 'array', 'items': {'enum': ['ethereum:USDC->base:USDC', 'ethereum:USDC->solana:USDC', 'hyperevm:USDC->base:USDC', 'hyperevm:USDC->solana:USDC', 'optimism:USDC->arbitrum:USDC', 'optimism:USDC->base:USDC', 'polygon:USDC->arbitrum:USDC', 'polygon:USDC->base:USDC', 'xlayer:USDC->base:USDC', 'xlayer:USDC->solana:USDC', 'sei:USDC->base:USDC', 'sei:USDC->solana:USDC', 'sonic:USDC->base:USDC', 'sonic:USDC->solana:USDC'], 'type': 'string'}, 'maxItems': 14, 'minItems': 4}, 'direct_route_summary': {'anyOf': [{'type': 'object', 'required': ['version', 'required_on_every_quote', 'route_count', 'step_count', 'ordered_provider_path', 'normalized_chain_asset_endpoints', 'base_unit_amounts_are_decimal_strings', 'assetfare_fee_step_bound', 'classification_values', 'route_aggregator_used_scope', 'external_intent', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-direct-route-summary-v1'}, 'step_count': {'type': 'number', 'const': 172}, 'route_count': {'type': 'number', 'const': 76}, 'server_signing': {'type': 'boolean', 'const': False}, 'external_intent': {'type': 'string', 'const': 'Across only for Robinhood ingress; provider-internal liquidity sourcing or aggregation remains possible'}, 'server_submission': {'type': 'boolean', 'const': False}, 'classification_values': {'type': 'array', 'items': [{'type': 'string', 'const': 'direct_protocol_only'}, {'type': 'string', 'const': 'external_intent'}], 'maxItems': 2, 'minItems': 2}, 'ordered_provider_path': {'type': 'boolean', 'const': True}, 'required_on_every_quote': {'type': 'boolean', 'const': True}, 'assetfare_fee_step_bound': {'type': 'boolean', 'const': True}, 'route_aggregator_used_scope': {'type': 'string', 'const': 'assetfare_engine_only'}, 'normalized_chain_asset_endpoints': {'type': 'boolean', 'const': True}, 'base_unit_amounts_are_decimal_strings': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, {'type': 'object', 'required': ['version', 'required_on_every_quote', 'route_count', 'primary_direct_route_count', 'external_coverage_only_route_count', 'step_count', 'ordered_provider_path', 'normalized_chain_asset_endpoints', 'base_unit_amounts_are_decimal_strings', 'assetfare_fee_step_bound', 'classification_values', 'product_classification_values', 'economic_eligibility_is_route_and_amount_conditioned', 'route_aggregator_used_scope', 'external_intent', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-direct-route-summary-v1'}, 'step_count': {'type': 'number', 'const': 170}, 'route_count': {'type': 'number', 'const': 76}, 'server_signing': {'type': 'boolean', 'const': False}, 'external_intent': {'type': 'string', 'const': 'Across only for nine Robinhood ingress coverage routes; provider-internal liquidity sourcing or aggregation remains possible'}, 'server_submission': {'type': 'boolean', 'const': False}, 'classification_values': {'type': 'array', 'items': [{'type': 'string', 'const': 'direct_protocol_only'}, {'type': 'string', 'const': 'external_intent'}], 'maxItems': 2, 'minItems': 2}, 'ordered_provider_path': {'type': 'boolean', 'const': True}, 'required_on_every_quote': {'type': 'boolean', 'const': True}, 'assetfare_fee_step_bound': {'type': 'boolean', 'const': True}, 'primary_direct_route_count': {'type': 'number', 'const': 67}, 'route_aggregator_used_scope': {'type': 'string', 'const': 'assetfare_engine_only'}, 'product_classification_values': {'type': 'array', 'items': [{'type': 'string', 'const': 'primary_direct'}, {'type': 'string', 'const': 'external_coverage_only'}], 'maxItems': 2, 'minItems': 2}, 'normalized_chain_asset_endpoints': {'type': 'boolean', 'const': True}, 'external_coverage_only_route_count': {'type': 'number', 'const': 9}, 'base_unit_amounts_are_decimal_strings': {'type': 'boolean', 'const': True}, 'economic_eligibility_is_route_and_amount_conditioned': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, {'type': 'object', 'required': ['version', 'required_on_every_quote', 'route_count', 'primary_direct_route_count', 'external_coverage_only_route_count', 'step_count', 'ordered_provider_path', 'normalized_chain_asset_endpoints', 'base_unit_amounts_are_decimal_strings', 'assetfare_fee_step_bound', 'classification_values', 'product_classification_values', 'economic_eligibility_is_route_and_amount_conditioned', 'route_aggregator_used_scope', 'external_intent', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-direct-route-summary-v1'}, 'step_count': {'type': 'number', 'const': 184}, 'route_count': {'type': 'number', 'const': 76}, 'server_signing': {'type': 'boolean', 'const': False}, 'external_intent': {'type': 'string', 'const': 'No public route uses an external intent protocol; provider-internal liquidity sourcing or aggregation remains possible'}, 'server_submission': {'type': 'boolean', 'const': False}, 'classification_values': {'type': 'array', 'items': [{'type': 'string', 'const': 'direct_protocol_only'}, {'type': 'string', 'const': 'external_intent'}], 'maxItems': 2, 'minItems': 2}, 'ordered_provider_path': {'type': 'boolean', 'const': True}, 'required_on_every_quote': {'type': 'boolean', 'const': True}, 'assetfare_fee_step_bound': {'type': 'boolean', 'const': True}, 'primary_direct_route_count': {'type': 'number', 'const': 76}, 'route_aggregator_used_scope': {'type': 'string', 'const': 'assetfare_engine_only'}, 'product_classification_values': {'type': 'array', 'items': [{'type': 'string', 'const': 'primary_direct'}, {'type': 'string', 'const': 'external_coverage_only'}], 'maxItems': 2, 'minItems': 2}, 'normalized_chain_asset_endpoints': {'type': 'boolean', 'const': True}, 'external_coverage_only_route_count': {'type': 'number', 'const': 0}, 'base_unit_amounts_are_decimal_strings': {'type': 'boolean', 'const': True}, 'economic_eligibility_is_route_and_amount_conditioned': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, {'type': 'object', 'required': ['version', 'required_on_every_quote', 'route_count', 'primary_direct_route_count', 'external_coverage_only_route_count', 'step_count', 'ordered_provider_path', 'normalized_chain_asset_endpoints', 'base_unit_amounts_are_decimal_strings', 'assetfare_fee_step_bound', 'classification_values', 'product_classification_values', 'economic_eligibility_is_route_and_amount_conditioned', 'route_aggregator_used_scope', 'external_intent', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-direct-route-summary-v1'}, 'step_count': {'type': 'number', 'const': 188}, 'route_count': {'type': 'number', 'const': 80}, 'server_signing': {'type': 'boolean', 'const': False}, 'external_intent': {'type': 'string', 'const': 'No public route uses an external intent protocol; provider-internal liquidity sourcing or aggregation remains possible'}, 'server_submission': {'type': 'boolean', 'const': False}, 'classification_values': {'type': 'array', 'items': [{'type': 'string', 'const': 'direct_protocol_only'}, {'type': 'string', 'const': 'external_intent'}], 'maxItems': 2, 'minItems': 2}, 'ordered_provider_path': {'type': 'boolean', 'const': True}, 'required_on_every_quote': {'type': 'boolean', 'const': True}, 'assetfare_fee_step_bound': {'type': 'boolean', 'const': True}, 'primary_direct_route_count': {'type': 'number', 'const': 80}, 'route_aggregator_used_scope': {'type': 'string', 'const': 'assetfare_engine_only'}, 'product_classification_values': {'type': 'array', 'items': [{'type': 'string', 'const': 'primary_direct'}, {'type': 'string', 'const': 'external_coverage_only'}], 'maxItems': 2, 'minItems': 2}, 'normalized_chain_asset_endpoints': {'type': 'boolean', 'const': True}, 'external_coverage_only_route_count': {'type': 'number', 'const': 0}, 'base_unit_amounts_are_decimal_strings': {'type': 'boolean', 'const': True}, 'economic_eligibility_is_route_and_amount_conditioned': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, {'type': 'object', 'required': ['version', 'required_on_every_quote', 'route_count', 'primary_direct_route_count', 'external_coverage_only_route_count', 'step_count', 'ordered_provider_path', 'normalized_chain_asset_endpoints', 'base_unit_amounts_are_decimal_strings', 'assetfare_fee_step_bound', 'classification_values', 'product_classification_values', 'economic_eligibility_is_route_and_amount_conditioned', 'route_aggregator_used_scope', 'external_intent', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-direct-route-summary-v1'}, 'step_count': {'type': 'number', 'const': 83}, 'route_count': {'type': 'number', 'const': 42}, 'server_signing': {'type': 'boolean', 'const': False}, 'external_intent': {'type': 'string', 'const': 'No public route uses an external intent protocol; provider-internal liquidity sourcing or aggregation remains possible'}, 'server_submission': {'type': 'boolean', 'const': False}, 'classification_values': {'type': 'array', 'items': [{'type': 'string', 'const': 'direct_protocol_only'}, {'type': 'string', 'const': 'external_intent'}], 'maxItems': 2, 'minItems': 2}, 'ordered_provider_path': {'type': 'boolean', 'const': True}, 'required_on_every_quote': {'type': 'boolean', 'const': True}, 'assetfare_fee_step_bound': {'type': 'boolean', 'const': True}, 'primary_direct_route_count': {'type': 'number', 'const': 42}, 'route_aggregator_used_scope': {'type': 'string', 'const': 'assetfare_engine_only'}, 'product_classification_values': {'type': 'array', 'items': [{'type': 'string', 'const': 'primary_direct'}, {'type': 'string', 'const': 'external_coverage_only'}], 'maxItems': 2, 'minItems': 2}, 'normalized_chain_asset_endpoints': {'type': 'boolean', 'const': True}, 'external_coverage_only_route_count': {'type': 'number', 'const': 0}, 'base_unit_amounts_are_decimal_strings': {'type': 'boolean', 'const': True}, 'economic_eligibility_is_route_and_amount_conditioned': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}]}, 'execution_availability': {'type': 'object', 'required': ['status', 'provider', 'provider_dependent_routes', 'recent_fee_snapshot_usable', 'guarantees_future_availability'], 'properties': {'status': {'enum': ['available', 'degraded', 'unknown'], 'type': 'string'}, 'provider': {'type': 'string', 'const': 'circle_iris'}, 'provider_dependent_routes': {'type': 'integer', 'maximum': 80, 'minimum': 0}, 'recent_fee_snapshot_usable': {'type': 'boolean'}, 'guarantees_future_availability': {'type': 'boolean', 'const': False}}, 'additionalProperties': True}, 'execution_ready_routes': {'enum': [42, 76, 80], 'type': 'number'}, 'phase_b_blocked_routes': {'type': 'number', 'const': 0}, 'blocked_source_only_routes': {'type': 'array', 'items': {'not': {}}, 'maxItems': 0, 'minItems': 0}, 'directed_conversion_routes': {'enum': [42, 76, 80], 'type': 'number'}, 'unsigned_route_plans_ready': {'enum': [42, 76, 80], 'type': 'number'}, 'source_only_asset_endpoints': {'type': 'array', 'items': {'type': 'object', 'required': ['chain', 'token'], 'properties': {'chain': {'enum': ['polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic'], 'type': 'string'}, 'token': {'type': 'string', 'const': 'USDC'}}, 'additionalProperties': False}, 'maxItems': 7, 'minItems': 2}, 'caller_owned_agent_execution': {'anyOf': [{'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'type': 'string', 'const': 'caller_process_only'}, 'command': {'type': 'string', 'const': 'assetfare-agent-runner'}, 'package': {'type': 'string', 'const': 'assetfare-mcp'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v1'}, 'supported': {'type': 'boolean', 'const': True}, 'key_location': {'type': 'string', 'const': 'caller_wallet_adapter_only'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v1.json'}, 'remote_mcp_tool': {'type': 'boolean', 'const': False}, 'a2a_remote_skill': {'type': 'boolean', 'const': False}, 'minimum_package_version': {'type': 'string', 'const': '1.5.0'}, 'assetfare_server_signing': {'type': 'boolean', 'const': False}, 'assetfare_server_key_access': {'type': 'boolean', 'const': False}, 'assetfare_server_submission': {'type': 'boolean', 'const': False}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v1'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.6.0'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.6.1'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.6.2'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.7.0'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.7.1'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.8.0'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.8.1'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.8.2'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.8.3'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.8.4'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.9.0'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.10.0'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.11.0'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.12.0'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.13.0'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.13.1'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.13.2'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.14.0'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.14.1'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.14.2'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.14.3'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.14.4'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['supported', 'scope', 'package', 'command', 'key_location', 'remote_mcp_tool', 'a2a_remote_skill', 'assetfare_server_key_access', 'assetfare_server_signing', 'assetfare_server_submission', 'version', 'minimum_package_version', 'policy_schema', 'wallet_adapter_contract_version'], 'properties': {'scope': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/scope'}, 'command': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/command'}, 'package': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/package'}, 'version': {'type': 'string', 'const': 'assetfare-caller-owned-agent-execution-v2'}, 'supported': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/supported'}, 'key_location': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/key_location'}, 'policy_schema': {'type': 'string', 'const': 'https://assetfare.dev/schemas/caller-owned-execution-policy-v2.json'}, 'remote_mcp_tool': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/remote_mcp_tool'}, 'a2a_remote_skill': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/a2a_remote_skill'}, 'minimum_package_version': {'type': 'string', 'const': '1.14.5'}, 'assetfare_server_signing': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_signing'}, 'assetfare_server_key_access': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_key_access'}, 'assetfare_server_submission': {'$ref': '#/properties/caller_owned_agent_execution/anyOf/0/properties/assetfare_server_submission'}, 'wallet_adapter_contract_version': {'type': 'string', 'const': 'assetfare-caller-wallet-adapter-v2'}}, 'additionalProperties': False}]}, 'execution_implemented_routes': {'enum': [42, 76, 80], 'type': 'number'}, 'currently_prepare_ready_routes': {'type': 'integer', 'maximum': 80, 'minimum': 0}, 'temporarily_unavailable_routes': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'maxItems': 80}, 'temporarily_unavailable_route_count': {'type': 'integer', 'maximum': 80, 'minimum': 0}}, 'additionalProperties': True}
assetfare_v2_prepare
Return one deeply verified first unsigned bundle plus a self-verifying caller-wallet handoff. Callers must explicitly pass caller_approved=true, approval_v3 selected as one_shot, and the hash-bound verification_context copied from the exact quote/public wallets; multi-step quotes reject one_shot. Example: pass the exact context saved during quote selection. Context is validated before the upstream request and never forwarded. caller_approved:true is not human proof; AssetFare never signs or submits.
可访问外部资源
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['caller_approved', 'from_chain', 'from_token', 'to_chain', 'to_token', 'amount_usd', 'wallets', 'approval_v3', 'verification_context'], 'properties': {'wallets': {'type': 'object', 'description': "Map each chain needed by this route to the caller's public wallet address. Include public addresses only; never private keys or seed phrases.", 'propertyNames': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic']}, 'additionalProperties': {'type': 'string', 'description': 'Caller-owned public wallet address: 0x plus 40 hex characters for EVM, or 32-44 base58 characters for Solana. Never provide secret key material.'}}, 'to_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood'], 'type': 'string', 'description': 'Destination chain for the v2 route: Solana, Base, Arbitrum, or Robinhood Chain. Source-only chains are not destinations.'}, 'to_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Output token symbol on to_chain. The chain-token pair must appear in current v2 capabilities.'}, 'amount_usd': {'type': 'number', 'minimum': 1, 'description': 'Requested input value in USD, minimum 1. USD 1 is reachability/schema smoke only. A USD 50 competitive bucket was observed only for dated 2026-09-23 Solana USDC to Base USDC evidence and must not be generalized to another corridor. USD 1,000 is the primary representative amount. SOL input includes a swap. Always quote the actual intended amount.'}, 'from_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic'], 'type': 'string', 'description': 'Source chain for the v2 route. Polygon, Optimism, Ethereum, HyperEVM, X Layer, Sei and Sonic are source-only and cannot be used as to_chain.'}, 'from_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Input token symbol on from_chain. The chain-token pair must appear in current v2 capabilities.'}, 'approval_v3': {'type': 'object', 'required': ['version', 'quote_id', 'quote_fingerprint', 'selection_status', 'selected_mode', 'maximum_input_base', 'minimum_output_base', 'direct_route_summary_sha256', 'idempotency_key'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-quote-bound-approval-v3'}, 'quote_id': {'type': 'string', 'format': 'uuid'}, 'selected_mode': {'type': 'string', 'const': 'one_shot'}, 'idempotency_key': {'type': 'string', 'pattern': '^[A-Za-z0-9._:-]{8,128}$'}, 'selection_status': {'type': 'string', 'const': 'selected'}, 'quote_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, 'maximum_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'minimum_output_base': {'$ref': '#/properties/approval_v3/properties/maximum_input_base'}, 'direct_route_summary_sha256': {'$ref': '#/properties/approval_v3/properties/quote_fingerprint'}}, 'description': 'Strict one-shot approval copied from the exact unexpired selected quote; its bounds may only be strengthened.', 'additionalProperties': False}, 'caller_approved': {'type': 'boolean', 'const': True, 'description': 'Legacy caller assertion that MUST be supplied explicitly. It is not human-proof and is never auto-inserted; approval_v3 adds server-enforced quote binding.'}, 'event_signer_public': {'$ref': '#/properties/wallets/additionalProperties', 'description': 'Solana CCTP only: caller-generated ephemeral public key. Keep the matching private key client-side and use it to co-sign the returned unsigned event-account transaction; never send the private key.'}, 'verification_context': {'type': 'object', 'required': ['version', 'intent', 'wallets', 'event_signer_public', 'approval_v3', 'direct_route_summary', 'verification_context_sha256'], 'properties': {'intent': {'type': 'object', 'required': ['from_chain', 'from_token', 'to_chain', 'to_token', 'amount_usd'], 'properties': {'to_chain': {'$ref': '#/properties/to_chain'}, 'to_token': {'$ref': '#/properties/to_token'}, 'amount_usd': {'$ref': '#/properties/amount_usd'}, 'from_chain': {'$ref': '#/properties/from_chain'}, 'from_token': {'$ref': '#/properties/from_token'}}, 'additionalProperties': False}, 'version': {'type': 'string', 'const': 'assetfare-one-shot-verification-context-v1'}, 'wallets': {'$ref': '#/properties/wallets'}, 'approval_v3': {'type': 'object', 'required': ['version', 'quote_id', 'quote_fingerprint', 'selection_status', 'selected_mode', 'maximum_input_base', 'minimum_output_base', 'direct_route_summary_sha256', 'idempotency_key'], 'properties': {'version': {'$ref': '#/properties/approval_v3/properties/version'}, 'quote_id': {'$ref': '#/properties/approval_v3/properties/quote_id'}, 'selected_mode': {'$ref': '#/properties/approval_v3/properties/selected_mode'}, 'idempotency_key': {'$ref': '#/properties/approval_v3/properties/idempotency_key'}, 'selection_status': {'$ref': '#/properties/approval_v3/properties/selection_status'}, 'quote_fingerprint': {'$ref': '#/properties/approval_v3/properties/quote_fingerprint'}, 'maximum_input_base': {'$ref': '#/properties/approval_v3/properties/maximum_input_base'}, 'minimum_output_base': {'$ref': '#/properties/approval_v3/properties/maximum_input_base'}, 'direct_route_summary_sha256': {'$ref': '#/properties/approval_v3/properties/quote_fingerprint'}}, 'additionalProperties': False}, 'event_signer_public': {'anyOf': [{'$ref': '#/properties/event_signer_public'}, {'type': 'null'}], 'description': 'Solana CCTP only: caller-generated ephemeral public key. Keep the matching private key client-side and use it to co-sign the returned unsigned event-account transaction; never send the private key.'}, 'direct_route_summary': {'type': 'object', 'required': ['version', 'route', 'from', 'to', 'classification', 'mode', 'route_aggregator_used', 'external_intent_protocol_used', 'provider_internal_dex_aggregation_possible', 'assetfare_fee_bps', 'fee_collection_step_index', 'server_signing', 'server_submission', 'step_count', 'steps'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'mode': {'enum': ['cctp_direct_composition', 'optimism_source_cctp', 'polygon_source_cctp', 'robinhood_across_ingress_composition', 'robinhood_paxos_egress_composition', 'robinhood_paxos_ingress_composition', 'same_chain_direct', 'same_chain_direct_composition'], 'type': 'string'}, 'route': {'enum': ['solana:SOL->solana:USDC', 'solana:SOL->solana:USDG', 'solana:SOL->base:ETH', 'solana:SOL->base:USDC', 'solana:SOL->arbitrum:ETH', 'solana:SOL->arbitrum:USDC', 'solana:SOL->robinhood:ETH', 'solana:SOL->robinhood:USDG', 'solana:USDC->solana:SOL', 'solana:USDC->solana:USDG', 'solana:USDC->base:ETH', 'solana:USDC->base:USDC', 'solana:USDC->arbitrum:ETH', 'solana:USDC->arbitrum:USDC', 'solana:USDC->robinhood:ETH', 'solana:USDC->robinhood:USDG', 'solana:USDG->solana:SOL', 'solana:USDG->solana:USDC', 'solana:USDG->base:ETH', 'solana:USDG->base:USDC', 'solana:USDG->arbitrum:ETH', 'solana:USDG->arbitrum:USDC', 'solana:USDG->robinhood:ETH', 'solana:USDG->robinhood:USDG', 'base:ETH->solana:SOL', 'base:ETH->solana:USDC', 'base:ETH->solana:USDG', 'base:ETH->base:USDC', 'base:ETH->arbitrum:ETH', 'base:ETH->arbitrum:USDC', 'base:ETH->robinhood:ETH', 'base:ETH->robinhood:USDG', 'base:USDC->solana:SOL', 'base:USDC->solana:USDC', 'base:USDC->solana:USDG', 'base:USDC->base:ETH', 'base:USDC->arbitrum:ETH', 'base:USDC->arbitrum:USDC', 'base:USDC->robinhood:ETH', 'base:USDC->robinhood:USDG', 'arbitrum:ETH->solana:SOL', 'arbitrum:ETH->solana:USDC', 'arbitrum:ETH->solana:USDG', 'arbitrum:ETH->base:ETH', 'arbitrum:ETH->base:USDC', 'arbitrum:ETH->arbitrum:USDC', 'arbitrum:ETH->robinhood:ETH', 'arbitrum:ETH->robinhood:USDG', 'arbitrum:USDC->solana:SOL', 'arbitrum:USDC->solana:USDC', 'arbitrum:USDC->solana:USDG', 'arbitrum:USDC->base:ETH', 'arbitrum:USDC->base:USDC', 'arbitrum:USDC->arbitrum:ETH', 'arbitrum:USDC->robinhood:ETH', 'arbitrum:USDC->robinhood:USDG', 'robinhood:ETH->solana:SOL', 'robinhood:ETH->solana:USDC', 'robinhood:ETH->solana:USDG', 'robinhood:ETH->base:ETH', 'robinhood:ETH->base:USDC', 'robinhood:ETH->arbitrum:ETH', 'robinhood:ETH->arbitrum:USDC', 'robinhood:ETH->robinhood:USDG', 'robinhood:USDG->solana:SOL', 'robinhood:USDG->solana:USDC', 'robinhood:USDG->solana:USDG', 'robinhood:USDG->base:ETH', 'robinhood:USDG->base:USDC', 'robinhood:USDG->arbitrum:ETH', 'robinhood:USDG->arbitrum:USDC', 'robinhood:USDG->robinhood:ETH', 'polygon:USDC->base:USDC', 'polygon:USDC->arbitrum:USDC', 'optimism:USDC->base:USDC', 'optimism:USDC->arbitrum:USDC', 'ethereum:USDC->solana:USDC', 'ethereum:USDC->base:USDC', 'hyperevm:USDC->solana:USDC', 'hyperevm:USDC->base:USDC', 'xlayer:USDC->solana:USDC', 'xlayer:USDC->base:USDC', 'sei:USDC->solana:USDC', 'sei:USDC->base:USDC', 'sonic:USDC->solana:USDC', 'sonic:USDC->base:USDC'], 'type': 'string'}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['index', 'action', 'provider', 'from', 'to', 'expected_input_base', 'minimum_input_base', 'expected_output_base', 'minimum_output_base', 'assetfare_fee_bps', 'direct_protocol', 'external_intent_protocol', 'aggregator_api_used'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'action': {'enum': ['swap', 'bridge', 'receive'], 'type': 'string'}, 'provider': {'enum': ['raydium_clmm', 'orca_whirlpool', 'uniswap_v3', 'circle_cctp', 'circle_cctp_receive', 'paxos_usdg_layerzero_oft', 'across_intent_bridge'], 'type': 'string'}, 'direct_protocol': {'type': 'boolean'}, 'assetfare_fee_bps': {'enum': [0, 1], 'type': 'number'}, 'minimum_guard_bps': {'type': 'integer', 'maximum': 500, 'minimum': 1}, 'minimum_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'aggregator_api_used': {'type': 'boolean', 'const': False}, 'expected_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'minimum_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'expected_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'external_intent_protocol': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 1}, 'version': {'type': 'string', 'const': 'assetfare-direct-route-summary-v1'}, 'step_count': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'classification': {'enum': ['direct_protocol_only', 'external_intent'], 'type': 'string'}, 'server_signing': {'type': 'boolean', 'const': False}, 'assetfare_fee_bps': {'type': 'number', 'const': 1}, 'server_submission': {'type': 'boolean', 'const': False}, 'economic_eligibility': {'enum': ['not_asserted_by_capability', 'coverage_only_not_primary'], 'type': 'string'}, 'route_aggregator_used': {'type': 'boolean', 'const': False}, 'product_classification': {'enum': ['primary_direct', 'external_coverage_only'], 'type': 'string'}, 'route_minimum_guard_bps': {'anyOf': [{'type': 'integer', 'maximum': 500, 'minimum': 1}, {'type': 'null'}]}, 'fee_collection_step_index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'public_execution_eligible': {'type': 'boolean'}, 'primary_selection_eligible': {'type': 'boolean'}, 'external_intent_protocol_used': {'type': 'boolean'}, 'provider_internal_dex_aggregation_possible': {'type': 'boolean'}}, 'additionalProperties': False}, 'verification_context_sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}}, 'description': 'Strict caller-held one-shot context copied from the selected quote, approval and public wallets. It is verified before prepare and never forwarded upstream.', 'additionalProperties': False}}, 'additionalProperties': False}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['bundle', 'semantic_verification', 'action_verification', 'caller_wallet_handoff'], 'properties': {'bundle': {'type': 'object', 'required': ['version', 'workflow_id', 'action_id', 'step_index', 'expires_at', 'unsigned_action', 'payload_sha256', 'payload_sha256_spec', 'server_signing', 'server_submission', 'signed', 'submitted'], 'properties': {'signed': {'type': 'boolean', 'const': False}, 'version': {'type': 'string', 'const': 'assetfare-direct-multichain-action-v2'}, 'action_id': {'type': 'string', 'format': 'uuid'}, 'submitted': {'type': 'boolean', 'const': False}, 'expires_at': {'type': 'string', 'minLength': 1}, 'step_index': {'type': 'integer', 'minimum': 0}, 'workflow_id': {'type': 'string', 'format': 'uuid'}, 'payload_sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$', 'description': 'sha256(UTF-8 JSON with sorted keys and compact separators, excluding payload_sha256 itself)'}, 'server_signing': {'type': 'boolean', 'const': False}, 'unsigned_action': {'type': 'object', 'additionalProperties': {}}, 'server_submission': {'type': 'boolean', 'const': False}, 'payload_sha256_spec': {'type': 'string', 'const': 'sha256(UTF-8 JSON with sorted keys and compact separators, excluding payload_sha256 itself)'}}, 'description': 'Exact Core bundle whose payload_sha256 remains scoped only to this nested object.', 'additionalProperties': True}, 'action_verification': {'type': 'object', 'description': 'Fail-closed semantic and approval-bound verification result; it never authorizes a signature by itself.', 'additionalProperties': {}}, 'caller_wallet_handoff': {'type': 'object', 'description': 'Fresh self-verifying EIP-1193 or Solana Wallet Standard handoff. The caller still simulates, confirms, signs and submits.', 'additionalProperties': {}}, 'semantic_verification': {'type': 'boolean', 'const': True, 'description': 'True only after full decoded action, intent, receipt, payload and caller-bound verification.'}}, 'additionalProperties': False}
assetfare_v2_quote
Get one fresh AssetFare quote with route-specific economic_guidance, direct_route_summary, and continuation_v3. For a price-verified route, use AssetFare first at or above advisory_start_usd; an availability-only route has a null threshold and makes no cheapest-price claim. Example: quote Solana USDC to Base USDC at the intended amount. Confirm the fresh output. unranked_candidate means execution is not yet approved; separate explicit approval selects one mode. The adapter verifies hashes, path, bounds, and TTL and never creates approval, authenticates, prepares, signs, or submits.
只读 可访问外部资源
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['from_chain', 'from_token', 'to_chain', 'to_token', 'amount_usd'], 'properties': {'to_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood'], 'type': 'string', 'description': 'Destination chain for the v2 route: Solana, Base, Arbitrum, or Robinhood Chain. Source-only chains are not destinations.'}, 'to_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Output token symbol on to_chain. The chain-token pair must appear in current v2 capabilities.'}, 'amount_usd': {'type': 'number', 'minimum': 1, 'description': 'Requested input value in USD, minimum 1. USD 1 is reachability/schema smoke only. A USD 50 competitive bucket was observed only for dated 2026-09-23 Solana USDC to Base USDC evidence and must not be generalized to another corridor. USD 1,000 is the primary representative amount. SOL input includes a swap. Always quote the actual intended amount.'}, 'from_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic'], 'type': 'string', 'description': 'Source chain for the v2 route. Polygon, Optimism, Ethereum, HyperEVM, X Layer, Sei and Sonic are source-only and cannot be used as to_chain.'}, 'from_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Input token symbol on from_chain. The chain-token pair must appear in current v2 capabilities.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['quote_id', 'status', 'as_of', 'ttl_seconds', 'intent', 'offer', 'cost_summary', 'eta', 'economic_guidance', 'route', 'direct_route_summary', 'continuation_v3', 'risk', 'execution', 'caller_action_plan_handoff'], 'properties': {'eta': {'type': 'object', 'required': ['estimated_time_seconds', 'estimated_time_range_seconds', 'complete_route_estimate', 'sources', 'note'], 'properties': {'note': {'type': 'string', 'minLength': 1}, 'sources': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}}, 'estimated_time_seconds': {'anyOf': [{'type': 'integer', 'exclusiveMinimum': 0}, {'type': 'null'}]}, 'complete_route_estimate': {'type': 'boolean'}, 'estimated_time_range_seconds': {'anyOf': [{'type': 'array', 'items': [{'type': 'integer', 'minimum': 0}, {'type': 'integer', 'exclusiveMinimum': 0}], 'maxItems': 2, 'minItems': 2}, {'type': 'null'}]}}, 'additionalProperties': False}, 'risk': {'type': 'object', 'required': ['server_signing', 'server_submission'], 'properties': {'server_signing': {'type': 'boolean', 'const': False}, 'server_submission': {'type': 'boolean', 'const': False}}, 'additionalProperties': True}, 'as_of': {'type': 'string', 'maxLength': 64, 'minLength': 1}, 'offer': {'type': 'object', 'required': ['expected_receive_amount', 'estimated_min_receive_amount', 'expected_receive_usd', 'estimated_min_receive_usd', 'output_symbol', 'estimated_time_seconds', 'assetfare_fee_bps', 'fee_modeled_bps', 'fee_collectible_now', 'fee_collection_steps', 'fee_collection'], 'properties': {'output_symbol': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string'}, 'fee_collection': {'type': 'string', 'const': 'only_on_eligible_successful_executor_step'}, 'fee_modeled_bps': {'type': 'number', 'const': 1}, 'assetfare_fee_bps': {'type': 'number', 'const': 1}, 'fee_collectible_now': {'type': 'boolean', 'const': True}, 'expected_receive_usd': {'type': 'number', 'minimum': 0}, 'fee_collection_steps': {'type': 'array', 'items': {'type': 'integer', 'minimum': 0}, 'maxItems': 1, 'minItems': 1}, 'estimated_time_seconds': {'anyOf': [{'type': 'integer', 'minimum': 0}, {'type': 'null'}]}, 'expected_receive_amount': {'type': 'number', 'exclusiveMinimum': 0}, 'estimated_min_receive_usd': {'type': 'number', 'minimum': 0}, 'estimated_min_receive_amount': {'type': 'number', 'exclusiveMinimum': 0}}, 'additionalProperties': True}, 'route': {'type': 'object', 'required': ['steps', 'server_signing', 'server_submission'], 'properties': {'steps': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}, 'maxItems': 8, 'minItems': 1}, 'server_signing': {'type': 'boolean', 'const': False}, 'server_submission': {'type': 'boolean', 'const': False}}, 'additionalProperties': True}, 'intent': {'type': 'object', 'required': ['from', 'to', 'amount_usd', 'estimated_input_base'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}, 'amount_usd': {'type': 'number'}, 'estimated_input_base': {'type': 'integer', 'exclusiveMinimum': 0}}, 'additionalProperties': True}, 'status': {'type': 'string', 'const': 'capped_public_agent_release'}, 'quote_id': {'type': 'string', 'format': 'uuid'}, 'execution': {'type': 'object', 'required': ['supported', 'first_unsigned_action_supported'], 'properties': {'supported': {'type': 'boolean'}, 'first_unsigned_action_supported': {'type': 'boolean'}}, 'additionalProperties': True}, 'ttl_seconds': {'type': 'integer', 'maximum': 60, 'exclusiveMinimum': 0}, 'cost_summary': {'type': 'object', 'required': ['scope', 'input_value_usd', 'expected_receive_value_usd', 'minimum_receive_value_usd', 'expected_total_cost_usd', 'maximum_total_cost_usd', 'expected_total_cost_percent', 'maximum_total_cost_percent', 'assetfare_service_fee', 'provider_fee_components', 'unpriced_costs', 'rankable_all_in', 'small_amount_warning', 'warning'], 'properties': {'scope': {'type': 'string', 'const': 'token_path_only_network_gas_excluded'}, 'warning': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}]}, 'unpriced_costs': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 1}, 'input_value_usd': {'type': 'number', 'minimum': 0}, 'rankable_all_in': {'type': 'boolean', 'const': False}, 'small_amount_warning': {'type': 'boolean'}, 'assetfare_service_fee': {'type': 'object', 'required': ['bps', 'estimated_usd', 'included_in_receive_amount', 'note'], 'properties': {'bps': {'type': 'number', 'const': 1}, 'note': {'type': 'string', 'minLength': 1}, 'estimated_usd': {'type': 'number', 'minimum': 0}, 'included_in_receive_amount': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, 'maximum_total_cost_usd': {'type': 'number', 'minimum': 0}, 'expected_total_cost_usd': {'type': 'number', 'minimum': 0}, 'provider_fee_components': {'type': 'array', 'items': {'type': 'object', 'required': ['provider', 'kind', 'expected_usd', 'maximum_usd', 'included_in_receive_amount'], 'properties': {'kind': {'type': 'string', 'minLength': 1}, 'provider': {'type': 'string', 'minLength': 1}, 'maximum_usd': {'type': 'number', 'minimum': 0}, 'expected_usd': {'type': 'number', 'minimum': 0}, 'included_in_receive_amount': {'type': 'boolean', 'const': True}}, 'additionalProperties': True}}, 'minimum_receive_value_usd': {'type': 'number', 'minimum': 0}, 'expected_receive_value_usd': {'type': 'number', 'minimum': 0}, 'maximum_total_cost_percent': {'type': 'number', 'minimum': 0}, 'expected_total_cost_percent': {'type': 'number', 'minimum': 0}}, 'additionalProperties': False}, 'continuation_v3': {'type': 'object', 'required': ['version', 'enforcement', 'selection_status', 'automatic_selection_forbidden', 'caller_approved_boolean_is_not_human_proof', 'quote_id', 'quote_fingerprint', 'quote_fingerprint_spec', 'quote_fingerprint_claim', 'issued_at', 'expires_at', 'ttl_seconds', 'intent', 'direct_route_summary_sha256', 'quote_payload_sha256', 'quote_payload_sha256_spec', 'input_base_bounds', 'minimum_output_base', 'required_wallet_chains', 'event_signer_public_required', 'step_count', 'recommended_mode', 'allowed_modes', 'session_header', 'idempotency', 'approval_v3_required_fields', 'legacy_handoff_enforcement', 'server_signing', 'server_submission'], 'properties': {'intent': {'type': 'object', 'required': ['from', 'to', 'amount_usd', 'estimated_input_base'], 'properties': {'to': {'type': 'string', 'minLength': 1}, 'from': {'type': 'string', 'minLength': 1}, 'amount_usd': {'type': 'number'}, 'estimated_input_base': {'type': 'integer', 'exclusiveMinimum': 0}}, 'additionalProperties': True}, 'version': {'type': 'string', 'const': 'assetfare-quote-bound-continuation-v3'}, 'quote_id': {'type': 'string', 'format': 'uuid'}, 'issued_at': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint_claim/properties/issued_at'}, 'expires_at': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint_claim/properties/issued_at'}, 'step_count': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'enforcement': {'type': 'string', 'const': 'server_enforced_quote_binding'}, 'idempotency': {'type': 'object', 'required': ['required', 'field', 'pattern', 'scope'], 'properties': {'field': {'type': 'string', 'const': 'idempotency_key'}, 'scope': {'type': 'string', 'const': 'quote_and_selected_mode'}, 'pattern': {'type': 'string', 'const': '^[A-Za-z0-9._:-]{8,128}$'}, 'required': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, 'ttl_seconds': {'type': 'integer', 'maximum': 60, 'minimum': 1}, 'allowed_modes': {'type': 'array', 'items': {'enum': ['one_shot', 'session'], 'type': 'string'}, 'maxItems': 2, 'minItems': 1}, 'server_signing': {'type': 'boolean', 'const': False}, 'session_header': {'type': 'object', 'required': ['name', 'required_for', 'caller_generated', 'minimum_entropy_bits', 'server_returns_raw_value'], 'properties': {'name': {'type': 'string', 'const': 'X-AssetFare-Session-Token'}, 'required_for': {'type': 'string', 'const': 'session'}, 'caller_generated': {'type': 'boolean', 'const': True}, 'minimum_entropy_bits': {'type': 'number', 'const': 256}, 'server_returns_raw_value': {'type': 'boolean', 'const': False}}, 'additionalProperties': False}, 'recommended_mode': {'enum': ['session', 'one_shot_or_session'], 'type': 'string'}, 'selection_status': {'type': 'string', 'const': 'unranked_candidate'}, 'input_base_bounds': {'type': 'object', 'required': ['minimum', 'maximum'], 'properties': {'maximum': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint_claim/properties/ttl_seconds'}, 'minimum': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint_claim/properties/ttl_seconds'}}, 'additionalProperties': False}, 'quote_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, 'server_submission': {'type': 'boolean', 'const': False}, 'minimum_output_base': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint_claim/properties/ttl_seconds'}, 'quote_payload_sha256': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint'}, 'quote_fingerprint_spec': {'type': 'string', 'const': 'sha256(UTF-8 sorted-key compact JSON of quote_fingerprint_claim; every numeric claim is a non-exponent decimal string)'}, 'required_wallet_chains': {'type': 'array', 'items': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint_claim/properties/required_wallet_chains/items'}, 'maxItems': 11, 'minItems': 1}, 'quote_fingerprint_claim': {'type': 'object', 'required': ['version', 'quote_id', 'issued_at', 'expires_at', 'ttl_seconds', 'intent', 'direct_route_summary_sha256', 'quote_payload_sha256', 'quote_payload_sha256_spec', 'input_base_bounds', 'minimum_output_base', 'required_wallet_chains', 'event_signer_public_required', 'step_count', 'allowed_modes', 'server_signing', 'server_submission'], 'properties': {'intent': {'type': 'object', 'required': ['from', 'to', 'amount_usd_decimal', 'estimated_input_base'], 'properties': {'to': {'type': 'string', 'minLength': 1}, 'from': {'type': 'string', 'minLength': 1}, 'amount_usd_decimal': {'type': 'string', 'pattern': '^(0|[1-9][0-9]*)(\\.[0-9]+)?$'}, 'estimated_input_base': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint_claim/properties/ttl_seconds'}}, 'additionalProperties': False}, 'version': {'type': 'string', 'const': 'assetfare-quote-bound-continuation-v3'}, 'quote_id': {'$ref': '#/properties/continuation_v3/properties/quote_id'}, 'issued_at': {'type': 'string', 'format': 'date-time'}, 'expires_at': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint_claim/properties/issued_at'}, 'step_count': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint_claim/properties/ttl_seconds'}, 'ttl_seconds': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'allowed_modes': {'type': 'array', 'items': {'enum': ['one_shot', 'session'], 'type': 'string'}, 'maxItems': 2, 'minItems': 1}, 'server_signing': {'type': 'boolean', 'const': False}, 'input_base_bounds': {'type': 'object', 'required': ['minimum', 'maximum'], 'properties': {'maximum': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint_claim/properties/ttl_seconds'}, 'minimum': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint_claim/properties/ttl_seconds'}}, 'additionalProperties': False}, 'server_submission': {'type': 'boolean', 'const': False}, 'minimum_output_base': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint_claim/properties/ttl_seconds'}, 'quote_payload_sha256': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint'}, 'required_wallet_chains': {'type': 'array', 'items': {'enum': ['arbitrum', 'base', 'ethereum', 'hyperevm', 'optimism', 'polygon', 'robinhood', 'sei', 'solana', 'sonic', 'xlayer'], 'type': 'string'}, 'maxItems': 11, 'minItems': 1}, 'quote_payload_sha256_spec': {'type': 'string', 'const': 'sha256(AssetFare typed-canonical-v1 bytes of the quote without continuation_v3 after exact base-unit substitution: n=null; t/f=boolean; d=<IEEE-754 binary64 big-endian 16 lowercase hex> for each finite JSON number; s=<UTF-8 byte length>:<Unicode scalar text with lone surrogates forbidden>; a=<count>:[items]; o=<count>:{UTF-8-byte-sorted string-key/value pairs}; every non-substituted integral JSON number must be within +/-9007199254740991; substituted paths are intent.estimated_input_base, route.input_base, route.expected_output_base, route.minimum_output_base, and every route.steps[i].expected_input_base/floor_input_base/expected_output_base/minimum_output_base from direct_route_summary exact decimal strings)'}, 'direct_route_summary_sha256': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint'}, 'event_signer_public_required': {'type': 'boolean'}}, 'additionalProperties': False}, 'quote_payload_sha256_spec': {'type': 'string', 'const': 'sha256(AssetFare typed-canonical-v1 bytes of the quote without continuation_v3 after exact base-unit substitution: n=null; t/f=boolean; d=<IEEE-754 binary64 big-endian 16 lowercase hex> for each finite JSON number; s=<UTF-8 byte length>:<Unicode scalar text with lone surrogates forbidden>; a=<count>:[items]; o=<count>:{UTF-8-byte-sorted string-key/value pairs}; every non-substituted integral JSON number must be within +/-9007199254740991; substituted paths are intent.estimated_input_base, route.input_base, route.expected_output_base, route.minimum_output_base, and every route.steps[i].expected_input_base/floor_input_base/expected_output_base/minimum_output_base from direct_route_summary exact decimal strings)'}, 'legacy_handoff_enforcement': {'type': 'string', 'const': 'legacy_advisory'}, 'approval_v3_required_fields': {'type': 'array', 'items': [{'type': 'string', 'const': 'direct_route_summary_sha256'}, {'type': 'string', 'const': 'idempotency_key'}, {'type': 'string', 'const': 'maximum_input_base'}, {'type': 'string', 'const': 'minimum_output_base'}, {'type': 'string', 'const': 'quote_fingerprint'}, {'type': 'string', 'const': 'quote_id'}, {'type': 'string', 'const': 'selected_mode'}, {'type': 'string', 'const': 'selection_status'}, {'type': 'string', 'const': 'version'}], 'maxItems': 9, 'minItems': 9}, 'direct_route_summary_sha256': {'$ref': '#/properties/continuation_v3/properties/quote_fingerprint'}, 'event_signer_public_required': {'type': 'boolean'}, 'automatic_selection_forbidden': {'type': 'boolean', 'const': True}, 'caller_approved_boolean_is_not_human_proof': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, 'economic_guidance': {'anyOf': [{'type': 'object', 'required': ['advisory_start_usd', 'advisory_role', 'status', 'confidence', 'basis', 'tested_amounts_usd', 'not_an_execution_minimum', 'not_a_best_price_guarantee', 'fresh_quote_required'], 'properties': {'basis': {'type': 'string', 'minLength': 1}, 'status': {'enum': ['observed_near_parity', 'observed_competitive_or_near_parity', 'provisional_evaluation_start', 'reworked_route_remeasure', 'coverage_only_retest'], 'type': 'string'}, 'confidence': {'enum': ['measured_two_day', 'measured_route_specific', 'structural_estimate', 'reworked_route_remeasure', 'coverage_only_retest'], 'type': 'string'}, 'advisory_role': {'enum': ['observed_economic_zone_start', 'structural_evaluation_start_not_observed_eligibility', 'retest_start_not_economic_eligibility'], 'type': 'string'}, 'advisory_start_usd': {'enum': [50, 100, 250, 500, 1000, 2500, 5000, 10000], 'type': 'number'}, 'tested_amounts_usd': {'type': 'array', 'items': {'type': 'integer', 'exclusiveMinimum': 0}, 'maxItems': 8}, 'fresh_quote_required': {'type': 'boolean', 'const': True}, 'not_an_execution_minimum': {'type': 'boolean', 'const': True}, 'not_a_best_price_guarantee': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, {'type': 'object', 'required': ['advisory_start_usd', 'best_from_usd', 'best_from_verified', 'availability_only', 'public_activation_status', 'public_active', 'recommendation_status', 'recommended_action', 'confidence', 'basis', 'tested_amounts_usd', 'tested_ceiling_usd', 'not_an_execution_minimum', 'not_a_best_price_guarantee', 'fresh_quote_required'], 'properties': {'basis': {'type': 'string', 'minLength': 1}, 'confidence': {'type': 'string', 'const': 'paired_all_in_snapshot'}, 'best_from_usd': {'anyOf': [{'type': 'null'}, {'type': 'number', 'const': 50}, {'type': 'number', 'const': 100}, {'type': 'number', 'const': 250}, {'type': 'number', 'const': 500}, {'type': 'number', 'const': 1000}, {'type': 'number', 'const': 2500}, {'type': 'number', 'const': 5000}, {'type': 'number', 'const': 10000}]}, 'public_active': {'type': 'boolean', 'const': True}, 'availability_only': {'type': 'boolean'}, 'advisory_start_usd': {'anyOf': [{'type': 'null'}, {'type': 'number', 'const': 50}, {'type': 'number', 'const': 100}, {'type': 'number', 'const': 250}, {'type': 'number', 'const': 500}, {'type': 'number', 'const': 1000}, {'type': 'number', 'const': 2500}, {'type': 'number', 'const': 5000}, {'type': 'number', 'const': 10000}]}, 'best_from_verified': {'type': 'boolean'}, 'recommended_action': {'enum': ['use_assetfare_first_at_or_above_best_from', 'use_assetfare_when_route_availability_is_required'], 'type': 'string'}, 'tested_amounts_usd': {'type': 'array', 'items': {'type': 'integer', 'exclusiveMinimum': 0}, 'maxItems': 8, 'minItems': 8}, 'tested_ceiling_usd': {'type': 'number', 'const': 10000}, 'fresh_quote_required': {'type': 'boolean', 'const': True}, 'recommendation_status': {'enum': ['active_price_verified', 'active_unique_availability'], 'type': 'string'}, 'not_an_execution_minimum': {'type': 'boolean', 'const': True}, 'public_activation_status': {'enum': ['active_price_verified', 'active_unique_availability'], 'type': 'string'}, 'not_a_best_price_guarantee': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}]}, 'direct_route_summary': {'type': 'object', 'required': ['version', 'route', 'from', 'to', 'classification', 'mode', 'route_aggregator_used', 'external_intent_protocol_used', 'provider_internal_dex_aggregation_possible', 'assetfare_fee_bps', 'fee_collection_step_index', 'server_signing', 'server_submission', 'step_count', 'steps'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'mode': {'enum': ['cctp_direct_composition', 'optimism_source_cctp', 'polygon_source_cctp', 'robinhood_across_ingress_composition', 'robinhood_paxos_egress_composition', 'robinhood_paxos_ingress_composition', 'same_chain_direct', 'same_chain_direct_composition'], 'type': 'string'}, 'route': {'enum': ['solana:SOL->solana:USDC', 'solana:SOL->solana:USDG', 'solana:SOL->base:ETH', 'solana:SOL->base:USDC', 'solana:SOL->arbitrum:ETH', 'solana:SOL->arbitrum:USDC', 'solana:SOL->robinhood:ETH', 'solana:SOL->robinhood:USDG', 'solana:USDC->solana:SOL', 'solana:USDC->solana:USDG', 'solana:USDC->base:ETH', 'solana:USDC->base:USDC', 'solana:USDC->arbitrum:ETH', 'solana:USDC->arbitrum:USDC', 'solana:USDC->robinhood:ETH', 'solana:USDC->robinhood:USDG', 'solana:USDG->solana:SOL', 'solana:USDG->solana:USDC', 'solana:USDG->base:ETH', 'solana:USDG->base:USDC', 'solana:USDG->arbitrum:ETH', 'solana:USDG->arbitrum:USDC', 'solana:USDG->robinhood:ETH', 'solana:USDG->robinhood:USDG', 'base:ETH->solana:SOL', 'base:ETH->solana:USDC', 'base:ETH->solana:USDG', 'base:ETH->base:USDC', 'base:ETH->arbitrum:ETH', 'base:ETH->arbitrum:USDC', 'base:ETH->robinhood:ETH', 'base:ETH->robinhood:USDG', 'base:USDC->solana:SOL', 'base:USDC->solana:USDC', 'base:USDC->solana:USDG', 'base:USDC->base:ETH', 'base:USDC->arbitrum:ETH', 'base:USDC->arbitrum:USDC', 'base:USDC->robinhood:ETH', 'base:USDC->robinhood:USDG', 'arbitrum:ETH->solana:SOL', 'arbitrum:ETH->solana:USDC', 'arbitrum:ETH->solana:USDG', 'arbitrum:ETH->base:ETH', 'arbitrum:ETH->base:USDC', 'arbitrum:ETH->arbitrum:USDC', 'arbitrum:ETH->robinhood:ETH', 'arbitrum:ETH->robinhood:USDG', 'arbitrum:USDC->solana:SOL', 'arbitrum:USDC->solana:USDC', 'arbitrum:USDC->solana:USDG', 'arbitrum:USDC->base:ETH', 'arbitrum:USDC->base:USDC', 'arbitrum:USDC->arbitrum:ETH', 'arbitrum:USDC->robinhood:ETH', 'arbitrum:USDC->robinhood:USDG', 'robinhood:ETH->solana:SOL', 'robinhood:ETH->solana:USDC', 'robinhood:ETH->solana:USDG', 'robinhood:ETH->base:ETH', 'robinhood:ETH->base:USDC', 'robinhood:ETH->arbitrum:ETH', 'robinhood:ETH->arbitrum:USDC', 'robinhood:ETH->robinhood:USDG', 'robinhood:USDG->solana:SOL', 'robinhood:USDG->solana:USDC', 'robinhood:USDG->solana:USDG', 'robinhood:USDG->base:ETH', 'robinhood:USDG->base:USDC', 'robinhood:USDG->arbitrum:ETH', 'robinhood:USDG->arbitrum:USDC', 'robinhood:USDG->robinhood:ETH', 'polygon:USDC->base:USDC', 'polygon:USDC->arbitrum:USDC', 'optimism:USDC->base:USDC', 'optimism:USDC->arbitrum:USDC', 'ethereum:USDC->solana:USDC', 'ethereum:USDC->base:USDC', 'hyperevm:USDC->solana:USDC', 'hyperevm:USDC->base:USDC', 'xlayer:USDC->solana:USDC', 'xlayer:USDC->base:USDC', 'sei:USDC->solana:USDC', 'sei:USDC->base:USDC', 'sonic:USDC->solana:USDC', 'sonic:USDC->base:USDC'], 'type': 'string'}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['index', 'action', 'provider', 'from', 'to', 'expected_input_base', 'minimum_input_base', 'expected_output_base', 'minimum_output_base', 'assetfare_fee_bps', 'direct_protocol', 'external_intent_protocol', 'aggregator_api_used'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'action': {'enum': ['swap', 'bridge', 'receive'], 'type': 'string'}, 'provider': {'enum': ['raydium_clmm', 'orca_whirlpool', 'uniswap_v3', 'circle_cctp', 'circle_cctp_receive', 'paxos_usdg_layerzero_oft', 'across_intent_bridge'], 'type': 'string'}, 'direct_protocol': {'type': 'boolean'}, 'assetfare_fee_bps': {'enum': [0, 1], 'type': 'number'}, 'minimum_guard_bps': {'type': 'integer', 'maximum': 500, 'minimum': 1}, 'minimum_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'aggregator_api_used': {'type': 'boolean', 'const': False}, 'expected_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'minimum_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'expected_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'external_intent_protocol': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 1}, 'version': {'type': 'string', 'const': 'assetfare-direct-route-summary-v1'}, 'step_count': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'classification': {'enum': ['direct_protocol_only', 'external_intent'], 'type': 'string'}, 'server_signing': {'type': 'boolean', 'const': False}, 'assetfare_fee_bps': {'type': 'number', 'const': 1}, 'server_submission': {'type': 'boolean', 'const': False}, 'economic_eligibility': {'enum': ['not_asserted_by_capability', 'coverage_only_not_primary'], 'type': 'string'}, 'route_aggregator_used': {'type': 'boolean', 'const': False}, 'product_classification': {'enum': ['primary_direct', 'external_coverage_only'], 'type': 'string'}, 'route_minimum_guard_bps': {'anyOf': [{'type': 'integer', 'maximum': 500, 'minimum': 1}, {'type': 'null'}]}, 'fee_collection_step_index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'public_execution_eligible': {'type': 'boolean'}, 'primary_selection_eligible': {'type': 'boolean'}, 'external_intent_protocol_used': {'type': 'boolean'}, 'provider_internal_dex_aggregation_possible': {'type': 'boolean'}}, 'additionalProperties': False}, 'caller_action_plan_handoff': {'type': 'object', 'properties': {}, 'additionalProperties': True}}, 'additionalProperties': True}
assetfare_v2_session_create
Create one receipt-driven workflow. Callers must explicitly pass caller_approved=true, the exact approval_v3 selected as session, the same idempotency_key, a caller-local session token, and verification_context copied from the selected quote/public wallets. Example: validate and pass the exact context saved with the selected quote. The adapter validates approval and context before the upstream request. Every returned action is deeply verified and receives a self-verifying wallet handoff. AssetFare never signs or submits.
可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['caller_approved', 'from_chain', 'from_token', 'to_chain', 'to_token', 'amount_usd', 'wallets', 'approval_v3', 'session_token', 'idempotency_key', 'verification_context'], 'properties': {'wallets': {'type': 'object', 'description': "Map each chain needed by this route to the caller's public wallet address. Include public addresses only; never private keys or seed phrases.", 'propertyNames': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic']}, 'additionalProperties': {'type': 'string', 'description': 'Caller-owned public wallet address: 0x plus 40 hex characters for EVM, or 32-44 base58 characters for Solana. Never provide secret key material.'}}, 'to_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood'], 'type': 'string', 'description': 'Destination chain for the v2 route: Solana, Base, Arbitrum, or Robinhood Chain. Source-only chains are not destinations.'}, 'to_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Output token symbol on to_chain. The chain-token pair must appear in current v2 capabilities.'}, 'amount_usd': {'type': 'number', 'minimum': 1, 'description': 'Requested input value in USD, minimum 1. USD 1 is reachability/schema smoke only. A USD 50 competitive bucket was observed only for dated 2026-09-23 Solana USDC to Base USDC evidence and must not be generalized to another corridor. USD 1,000 is the primary representative amount. SOL input includes a swap. Always quote the actual intended amount.'}, 'from_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic'], 'type': 'string', 'description': 'Source chain for the v2 route. Polygon, Optimism, Ethereum, HyperEVM, X Layer, Sei and Sonic are source-only and cannot be used as to_chain.'}, 'from_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Input token symbol on from_chain. The chain-token pair must appear in current v2 capabilities.'}, 'approval_v3': {'type': 'object', 'required': ['version', 'quote_id', 'quote_fingerprint', 'selection_status', 'selected_mode', 'maximum_input_base', 'minimum_output_base', 'direct_route_summary_sha256', 'idempotency_key'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-quote-bound-approval-v3'}, 'quote_id': {'type': 'string', 'format': 'uuid'}, 'selected_mode': {'type': 'string', 'const': 'session'}, 'idempotency_key': {'type': 'string', 'pattern': '^[A-Za-z0-9._:-]{8,128}$'}, 'selection_status': {'type': 'string', 'const': 'selected'}, 'quote_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, 'maximum_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'minimum_output_base': {'$ref': '#/properties/approval_v3/properties/maximum_input_base'}, 'direct_route_summary_sha256': {'$ref': '#/properties/approval_v3/properties/quote_fingerprint'}}, 'description': 'Strict Core 2.4.1 session quote-bound selection from the exact unexpired quote. Required for every remote session flow.', 'additionalProperties': False}, 'session_token': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{43,128}$', 'description': 'Sensitive caller-generated v2 session capability: at least 32 CSPRNG bytes encoded as 43-128 URL-safe base64 characters. Generate it locally; never log it or substitute a private key or legacy access token.'}, 'caller_approved': {'type': 'boolean', 'const': True, 'description': 'Legacy caller assertion that MUST be supplied explicitly. It is not human-proof and is never auto-inserted; approval_v3 adds server-enforced quote binding.'}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'minLength': 8, 'description': 'Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation. Strict approval_v3 requests additionally enforce its ASCII key pattern.'}, 'event_signer_public': {'$ref': '#/properties/wallets/additionalProperties', 'description': 'Solana CCTP only: caller-generated ephemeral public key. Keep the matching private key client-side and use it to co-sign the returned unsigned event-account transaction; never send the private key.'}, 'verification_context': {'type': 'object', 'required': ['version', 'intent', 'wallets', 'event_signer_public', 'approval_v3', 'direct_route_summary', 'verification_context_sha256'], 'properties': {'intent': {'type': 'object', 'required': ['from_chain', 'from_token', 'to_chain', 'to_token', 'amount_usd'], 'properties': {'to_chain': {'$ref': '#/properties/to_chain'}, 'to_token': {'$ref': '#/properties/to_token'}, 'amount_usd': {'$ref': '#/properties/amount_usd'}, 'from_chain': {'$ref': '#/properties/from_chain'}, 'from_token': {'$ref': '#/properties/from_token'}}, 'additionalProperties': False}, 'version': {'type': 'string', 'const': 'assetfare-session-verification-context-v1'}, 'wallets': {'$ref': '#/properties/wallets'}, 'approval_v3': {'type': 'object', 'required': ['version', 'quote_id', 'quote_fingerprint', 'selection_status', 'selected_mode', 'maximum_input_base', 'minimum_output_base', 'direct_route_summary_sha256', 'idempotency_key'], 'properties': {'version': {'$ref': '#/properties/approval_v3/properties/version'}, 'quote_id': {'$ref': '#/properties/approval_v3/properties/quote_id'}, 'selected_mode': {'$ref': '#/properties/approval_v3/properties/selected_mode'}, 'idempotency_key': {'$ref': '#/properties/approval_v3/properties/idempotency_key'}, 'selection_status': {'$ref': '#/properties/approval_v3/properties/selection_status'}, 'quote_fingerprint': {'$ref': '#/properties/approval_v3/properties/quote_fingerprint'}, 'maximum_input_base': {'$ref': '#/properties/approval_v3/properties/maximum_input_base'}, 'minimum_output_base': {'$ref': '#/properties/approval_v3/properties/maximum_input_base'}, 'direct_route_summary_sha256': {'$ref': '#/properties/approval_v3/properties/quote_fingerprint'}}, 'additionalProperties': False}, 'event_signer_public': {'anyOf': [{'$ref': '#/properties/event_signer_public'}, {'type': 'null'}], 'description': 'Solana CCTP only: caller-generated ephemeral public key. Keep the matching private key client-side and use it to co-sign the returned unsigned event-account transaction; never send the private key.'}, 'direct_route_summary': {'type': 'object', 'required': ['version', 'route', 'from', 'to', 'classification', 'mode', 'route_aggregator_used', 'external_intent_protocol_used', 'provider_internal_dex_aggregation_possible', 'assetfare_fee_bps', 'fee_collection_step_index', 'server_signing', 'server_submission', 'step_count', 'steps'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'mode': {'enum': ['cctp_direct_composition', 'optimism_source_cctp', 'polygon_source_cctp', 'robinhood_across_ingress_composition', 'robinhood_paxos_egress_composition', 'robinhood_paxos_ingress_composition', 'same_chain_direct', 'same_chain_direct_composition'], 'type': 'string'}, 'route': {'enum': ['solana:SOL->solana:USDC', 'solana:SOL->solana:USDG', 'solana:SOL->base:ETH', 'solana:SOL->base:USDC', 'solana:SOL->arbitrum:ETH', 'solana:SOL->arbitrum:USDC', 'solana:SOL->robinhood:ETH', 'solana:SOL->robinhood:USDG', 'solana:USDC->solana:SOL', 'solana:USDC->solana:USDG', 'solana:USDC->base:ETH', 'solana:USDC->base:USDC', 'solana:USDC->arbitrum:ETH', 'solana:USDC->arbitrum:USDC', 'solana:USDC->robinhood:ETH', 'solana:USDC->robinhood:USDG', 'solana:USDG->solana:SOL', 'solana:USDG->solana:USDC', 'solana:USDG->base:ETH', 'solana:USDG->base:USDC', 'solana:USDG->arbitrum:ETH', 'solana:USDG->arbitrum:USDC', 'solana:USDG->robinhood:ETH', 'solana:USDG->robinhood:USDG', 'base:ETH->solana:SOL', 'base:ETH->solana:USDC', 'base:ETH->solana:USDG', 'base:ETH->base:USDC', 'base:ETH->arbitrum:ETH', 'base:ETH->arbitrum:USDC', 'base:ETH->robinhood:ETH', 'base:ETH->robinhood:USDG', 'base:USDC->solana:SOL', 'base:USDC->solana:USDC', 'base:USDC->solana:USDG', 'base:USDC->base:ETH', 'base:USDC->arbitrum:ETH', 'base:USDC->arbitrum:USDC', 'base:USDC->robinhood:ETH', 'base:USDC->robinhood:USDG', 'arbitrum:ETH->solana:SOL', 'arbitrum:ETH->solana:USDC', 'arbitrum:ETH->solana:USDG', 'arbitrum:ETH->base:ETH', 'arbitrum:ETH->base:USDC', 'arbitrum:ETH->arbitrum:USDC', 'arbitrum:ETH->robinhood:ETH', 'arbitrum:ETH->robinhood:USDG', 'arbitrum:USDC->solana:SOL', 'arbitrum:USDC->solana:USDC', 'arbitrum:USDC->solana:USDG', 'arbitrum:USDC->base:ETH', 'arbitrum:USDC->base:USDC', 'arbitrum:USDC->arbitrum:ETH', 'arbitrum:USDC->robinhood:ETH', 'arbitrum:USDC->robinhood:USDG', 'robinhood:ETH->solana:SOL', 'robinhood:ETH->solana:USDC', 'robinhood:ETH->solana:USDG', 'robinhood:ETH->base:ETH', 'robinhood:ETH->base:USDC', 'robinhood:ETH->arbitrum:ETH', 'robinhood:ETH->arbitrum:USDC', 'robinhood:ETH->robinhood:USDG', 'robinhood:USDG->solana:SOL', 'robinhood:USDG->solana:USDC', 'robinhood:USDG->solana:USDG', 'robinhood:USDG->base:ETH', 'robinhood:USDG->base:USDC', 'robinhood:USDG->arbitrum:ETH', 'robinhood:USDG->arbitrum:USDC', 'robinhood:USDG->robinhood:ETH', 'polygon:USDC->base:USDC', 'polygon:USDC->arbitrum:USDC', 'optimism:USDC->base:USDC', 'optimism:USDC->arbitrum:USDC', 'ethereum:USDC->solana:USDC', 'ethereum:USDC->base:USDC', 'hyperevm:USDC->solana:USDC', 'hyperevm:USDC->base:USDC', 'xlayer:USDC->solana:USDC', 'xlayer:USDC->base:USDC', 'sei:USDC->solana:USDC', 'sei:USDC->base:USDC', 'sonic:USDC->solana:USDC', 'sonic:USDC->base:USDC'], 'type': 'string'}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['index', 'action', 'provider', 'from', 'to', 'expected_input_base', 'minimum_input_base', 'expected_output_base', 'minimum_output_base', 'assetfare_fee_bps', 'direct_protocol', 'external_intent_protocol', 'aggregator_api_used'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'action': {'enum': ['swap', 'bridge', 'receive'], 'type': 'string'}, 'provider': {'enum': ['raydium_clmm', 'orca_whirlpool', 'uniswap_v3', 'circle_cctp', 'circle_cctp_receive', 'paxos_usdg_layerzero_oft', 'across_intent_bridge'], 'type': 'string'}, 'direct_protocol': {'type': 'boolean'}, 'assetfare_fee_bps': {'enum': [0, 1], 'type': 'number'}, 'minimum_guard_bps': {'type': 'integer', 'maximum': 500, 'minimum': 1}, 'minimum_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'aggregator_api_used': {'type': 'boolean', 'const': False}, 'expected_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'minimum_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'expected_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'external_intent_protocol': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 1}, 'version': {'type': 'string', 'const': 'assetfare-direct-route-summary-v1'}, 'step_count': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'classification': {'enum': ['direct_protocol_only', 'external_intent'], 'type': 'string'}, 'server_signing': {'type': 'boolean', 'const': False}, 'assetfare_fee_bps': {'type': 'number', 'const': 1}, 'server_submission': {'type': 'boolean', 'const': False}, 'economic_eligibility': {'enum': ['not_asserted_by_capability', 'coverage_only_not_primary'], 'type': 'string'}, 'route_aggregator_used': {'type': 'boolean', 'const': False}, 'product_classification': {'enum': ['primary_direct', 'external_coverage_only'], 'type': 'string'}, 'route_minimum_guard_bps': {'anyOf': [{'type': 'integer', 'maximum': 500, 'minimum': 1}, {'type': 'null'}]}, 'fee_collection_step_index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'public_execution_eligible': {'type': 'boolean'}, 'primary_selection_eligible': {'type': 'boolean'}, 'external_intent_protocol_used': {'type': 'boolean'}, 'provider_internal_dex_aggregation_possible': {'type': 'boolean'}}, 'additionalProperties': False}, 'verification_context_sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}}, 'description': 'Strict caller-held context copied from the selected quote and approval. It contains public intent/wallet data only, never the raw session token or a private key, and is required whenever a remote MCP session call can return current_action.', 'additionalProperties': False}}, 'additionalProperties': False}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['session_id', 'status', 'action_available', 'current_action', 'quote_binding', 'server_signing', 'server_submission', 'signed', 'submitted'], 'properties': {'signed': {'type': 'boolean', 'const': False}, 'status': {'type': 'string', 'minLength': 1}, 'submitted': {'type': 'boolean', 'const': False}, 'session_id': {'type': 'string', 'format': 'uuid'}, 'quote_binding': {'anyOf': [{'type': 'object', 'required': ['version', 'quote_id', 'quote_fingerprint', 'selected_mode', 'whole_session_path_and_bounds_enforced', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-quote-bound-session-constraints-v1'}, 'quote_id': {'type': 'string', 'format': 'uuid'}, 'selected_mode': {'type': 'string', 'const': 'session'}, 'server_signing': {'type': 'boolean', 'const': False}, 'quote_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, 'server_submission': {'type': 'boolean', 'const': False}, 'whole_session_path_and_bounds_enforced': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, {'type': 'object', 'required': ['version', 'whole_session_path_and_bounds_enforced', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'legacy_advisory'}, 'server_signing': {'type': 'boolean', 'const': False}, 'server_submission': {'type': 'boolean', 'const': False}, 'whole_session_path_and_bounds_enforced': {'type': 'boolean', 'const': False}}, 'additionalProperties': False}]}, 'current_action': {'anyOf': [{'type': 'object', 'required': ['version', 'workflow_id', 'action_id', 'step_index', 'expires_at', 'unsigned_action', 'payload_sha256', 'payload_sha256_spec', 'server_signing', 'server_submission', 'signed', 'submitted'], 'properties': {'signed': {'type': 'boolean', 'const': False}, 'version': {'type': 'string', 'const': 'assetfare-direct-multichain-action-v2'}, 'action_id': {'type': 'string', 'format': 'uuid'}, 'submitted': {'type': 'boolean', 'const': False}, 'expires_at': {'type': 'string', 'minLength': 1}, 'step_index': {'type': 'integer', 'minimum': 0}, 'workflow_id': {'type': 'string', 'format': 'uuid'}, 'payload_sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$', 'description': 'sha256(UTF-8 JSON with sorted keys and compact separators, excluding payload_sha256 itself)'}, 'server_signing': {'type': 'boolean', 'const': False}, 'unsigned_action': {'type': 'object', 'additionalProperties': {}}, 'server_submission': {'type': 'boolean', 'const': False}, 'payload_sha256_spec': {'type': 'string', 'const': 'sha256(UTF-8 JSON with sorted keys and compact separators, excluding payload_sha256 itself)'}}, 'additionalProperties': True}, {'type': 'null'}]}, 'server_signing': {'type': 'boolean', 'const': False}, 'action_available': {'type': 'boolean'}, 'server_submission': {'type': 'boolean', 'const': False}}, 'additionalProperties': True}
assetfare_v2_session_get
Read an existing v2 workflow without advancing it. Example: pass session_id, session_token, and the original verification_context after restart. The adapter deeply verifies any current_action and emits a self-verifying wallet handoff, or fails closed. Read-only; never signs or submits.
只读 可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['session_token', 'session_id', 'verification_context'], 'properties': {'session_id': {'type': 'string', 'format': 'uuid', 'description': 'V2 workflow session UUID returned by assetfare_v2_session_create. Use only with assetfare_v2_session_* tools; do not pass a legacy session ID.'}, 'session_token': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{43,128}$', 'description': 'Sensitive caller-generated v2 session capability: at least 32 CSPRNG bytes encoded as 43-128 URL-safe base64 characters. Generate it locally; never log it or substitute a private key or legacy access token.'}, 'verification_context': {'type': 'object', 'required': ['version', 'intent', 'wallets', 'event_signer_public', 'approval_v3', 'direct_route_summary', 'verification_context_sha256'], 'properties': {'intent': {'type': 'object', 'required': ['from_chain', 'from_token', 'to_chain', 'to_token', 'amount_usd'], 'properties': {'to_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood'], 'type': 'string', 'description': 'Destination chain for the v2 route: Solana, Base, Arbitrum, or Robinhood Chain. Source-only chains are not destinations.'}, 'to_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Output token symbol on to_chain. The chain-token pair must appear in current v2 capabilities.'}, 'amount_usd': {'type': 'number', 'minimum': 1, 'description': 'Requested input value in USD, minimum 1. USD 1 is reachability/schema smoke only. A USD 50 competitive bucket was observed only for dated 2026-09-23 Solana USDC to Base USDC evidence and must not be generalized to another corridor. USD 1,000 is the primary representative amount. SOL input includes a swap. Always quote the actual intended amount.'}, 'from_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic'], 'type': 'string', 'description': 'Source chain for the v2 route. Polygon, Optimism, Ethereum, HyperEVM, X Layer, Sei and Sonic are source-only and cannot be used as to_chain.'}, 'from_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Input token symbol on from_chain. The chain-token pair must appear in current v2 capabilities.'}}, 'additionalProperties': False}, 'version': {'type': 'string', 'const': 'assetfare-session-verification-context-v1'}, 'wallets': {'type': 'object', 'description': "Map each chain needed by this route to the caller's public wallet address. Include public addresses only; never private keys or seed phrases.", 'propertyNames': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic']}, 'additionalProperties': {'type': 'string', 'description': 'Caller-owned public wallet address: 0x plus 40 hex characters for EVM, or 32-44 base58 characters for Solana. Never provide secret key material.'}}, 'approval_v3': {'type': 'object', 'required': ['version', 'quote_id', 'quote_fingerprint', 'selection_status', 'selected_mode', 'maximum_input_base', 'minimum_output_base', 'direct_route_summary_sha256', 'idempotency_key'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-quote-bound-approval-v3'}, 'quote_id': {'type': 'string', 'format': 'uuid'}, 'selected_mode': {'type': 'string', 'const': 'session'}, 'idempotency_key': {'type': 'string', 'pattern': '^[A-Za-z0-9._:-]{8,128}$'}, 'selection_status': {'type': 'string', 'const': 'selected'}, 'quote_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, 'maximum_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'minimum_output_base': {'$ref': '#/properties/verification_context/properties/approval_v3/properties/maximum_input_base'}, 'direct_route_summary_sha256': {'$ref': '#/properties/verification_context/properties/approval_v3/properties/quote_fingerprint'}}, 'additionalProperties': False}, 'event_signer_public': {'anyOf': [{'$ref': '#/properties/verification_context/properties/wallets/additionalProperties', 'description': 'Solana CCTP only: caller-generated ephemeral public key. Keep the matching private key client-side and use it to co-sign the returned unsigned event-account transaction; never send the private key.'}, {'type': 'null'}], 'description': 'Solana CCTP only: caller-generated ephemeral public key. Keep the matching private key client-side and use it to co-sign the returned unsigned event-account transaction; never send the private key.'}, 'direct_route_summary': {'type': 'object', 'required': ['version', 'route', 'from', 'to', 'classification', 'mode', 'route_aggregator_used', 'external_intent_protocol_used', 'provider_internal_dex_aggregation_possible', 'assetfare_fee_bps', 'fee_collection_step_index', 'server_signing', 'server_submission', 'step_count', 'steps'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'mode': {'enum': ['cctp_direct_composition', 'optimism_source_cctp', 'polygon_source_cctp', 'robinhood_across_ingress_composition', 'robinhood_paxos_egress_composition', 'robinhood_paxos_ingress_composition', 'same_chain_direct', 'same_chain_direct_composition'], 'type': 'string'}, 'route': {'enum': ['solana:SOL->solana:USDC', 'solana:SOL->solana:USDG', 'solana:SOL->base:ETH', 'solana:SOL->base:USDC', 'solana:SOL->arbitrum:ETH', 'solana:SOL->arbitrum:USDC', 'solana:SOL->robinhood:ETH', 'solana:SOL->robinhood:USDG', 'solana:USDC->solana:SOL', 'solana:USDC->solana:USDG', 'solana:USDC->base:ETH', 'solana:USDC->base:USDC', 'solana:USDC->arbitrum:ETH', 'solana:USDC->arbitrum:USDC', 'solana:USDC->robinhood:ETH', 'solana:USDC->robinhood:USDG', 'solana:USDG->solana:SOL', 'solana:USDG->solana:USDC', 'solana:USDG->base:ETH', 'solana:USDG->base:USDC', 'solana:USDG->arbitrum:ETH', 'solana:USDG->arbitrum:USDC', 'solana:USDG->robinhood:ETH', 'solana:USDG->robinhood:USDG', 'base:ETH->solana:SOL', 'base:ETH->solana:USDC', 'base:ETH->solana:USDG', 'base:ETH->base:USDC', 'base:ETH->arbitrum:ETH', 'base:ETH->arbitrum:USDC', 'base:ETH->robinhood:ETH', 'base:ETH->robinhood:USDG', 'base:USDC->solana:SOL', 'base:USDC->solana:USDC', 'base:USDC->solana:USDG', 'base:USDC->base:ETH', 'base:USDC->arbitrum:ETH', 'base:USDC->arbitrum:USDC', 'base:USDC->robinhood:ETH', 'base:USDC->robinhood:USDG', 'arbitrum:ETH->solana:SOL', 'arbitrum:ETH->solana:USDC', 'arbitrum:ETH->solana:USDG', 'arbitrum:ETH->base:ETH', 'arbitrum:ETH->base:USDC', 'arbitrum:ETH->arbitrum:USDC', 'arbitrum:ETH->robinhood:ETH', 'arbitrum:ETH->robinhood:USDG', 'arbitrum:USDC->solana:SOL', 'arbitrum:USDC->solana:USDC', 'arbitrum:USDC->solana:USDG', 'arbitrum:USDC->base:ETH', 'arbitrum:USDC->base:USDC', 'arbitrum:USDC->arbitrum:ETH', 'arbitrum:USDC->robinhood:ETH', 'arbitrum:USDC->robinhood:USDG', 'robinhood:ETH->solana:SOL', 'robinhood:ETH->solana:USDC', 'robinhood:ETH->solana:USDG', 'robinhood:ETH->base:ETH', 'robinhood:ETH->base:USDC', 'robinhood:ETH->arbitrum:ETH', 'robinhood:ETH->arbitrum:USDC', 'robinhood:ETH->robinhood:USDG', 'robinhood:USDG->solana:SOL', 'robinhood:USDG->solana:USDC', 'robinhood:USDG->solana:USDG', 'robinhood:USDG->base:ETH', 'robinhood:USDG->base:USDC', 'robinhood:USDG->arbitrum:ETH', 'robinhood:USDG->arbitrum:USDC', 'robinhood:USDG->robinhood:ETH', 'polygon:USDC->base:USDC', 'polygon:USDC->arbitrum:USDC', 'optimism:USDC->base:USDC', 'optimism:USDC->arbitrum:USDC', 'ethereum:USDC->solana:USDC', 'ethereum:USDC->base:USDC', 'hyperevm:USDC->solana:USDC', 'hyperevm:USDC->base:USDC', 'xlayer:USDC->solana:USDC', 'xlayer:USDC->base:USDC', 'sei:USDC->solana:USDC', 'sei:USDC->base:USDC', 'sonic:USDC->solana:USDC', 'sonic:USDC->base:USDC'], 'type': 'string'}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['index', 'action', 'provider', 'from', 'to', 'expected_input_base', 'minimum_input_base', 'expected_output_base', 'minimum_output_base', 'assetfare_fee_bps', 'direct_protocol', 'external_intent_protocol', 'aggregator_api_used'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'action': {'enum': ['swap', 'bridge', 'receive'], 'type': 'string'}, 'provider': {'enum': ['raydium_clmm', 'orca_whirlpool', 'uniswap_v3', 'circle_cctp', 'circle_cctp_receive', 'paxos_usdg_layerzero_oft', 'across_intent_bridge'], 'type': 'string'}, 'direct_protocol': {'type': 'boolean'}, 'assetfare_fee_bps': {'enum': [0, 1], 'type': 'number'}, 'minimum_guard_bps': {'type': 'integer', 'maximum': 500, 'minimum': 1}, 'minimum_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'aggregator_api_used': {'type': 'boolean', 'const': False}, 'expected_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'minimum_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'expected_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'external_intent_protocol': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 1}, 'version': {'type': 'string', 'const': 'assetfare-direct-route-summary-v1'}, 'step_count': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'classification': {'enum': ['direct_protocol_only', 'external_intent'], 'type': 'string'}, 'server_signing': {'type': 'boolean', 'const': False}, 'assetfare_fee_bps': {'type': 'number', 'const': 1}, 'server_submission': {'type': 'boolean', 'const': False}, 'economic_eligibility': {'enum': ['not_asserted_by_capability', 'coverage_only_not_primary'], 'type': 'string'}, 'route_aggregator_used': {'type': 'boolean', 'const': False}, 'product_classification': {'enum': ['primary_direct', 'external_coverage_only'], 'type': 'string'}, 'route_minimum_guard_bps': {'anyOf': [{'type': 'integer', 'maximum': 500, 'minimum': 1}, {'type': 'null'}]}, 'fee_collection_step_index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'public_execution_eligible': {'type': 'boolean'}, 'primary_selection_eligible': {'type': 'boolean'}, 'external_intent_protocol_used': {'type': 'boolean'}, 'provider_internal_dex_aggregation_possible': {'type': 'boolean'}}, 'additionalProperties': False}, 'verification_context_sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}}, 'description': 'Strict caller-held context copied from the selected quote and approval. It contains public intent/wallet data only, never the raw session token or a private key, and is required whenever a remote MCP session call can return current_action.', 'additionalProperties': False}}, 'additionalProperties': False}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['session_id', 'status', 'action_available', 'current_action', 'quote_binding', 'server_signing', 'server_submission', 'signed', 'submitted'], 'properties': {'signed': {'type': 'boolean', 'const': False}, 'status': {'type': 'string', 'minLength': 1}, 'submitted': {'type': 'boolean', 'const': False}, 'session_id': {'type': 'string', 'format': 'uuid'}, 'quote_binding': {'anyOf': [{'type': 'object', 'required': ['version', 'quote_id', 'quote_fingerprint', 'selected_mode', 'whole_session_path_and_bounds_enforced', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-quote-bound-session-constraints-v1'}, 'quote_id': {'type': 'string', 'format': 'uuid'}, 'selected_mode': {'type': 'string', 'const': 'session'}, 'server_signing': {'type': 'boolean', 'const': False}, 'quote_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, 'server_submission': {'type': 'boolean', 'const': False}, 'whole_session_path_and_bounds_enforced': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, {'type': 'object', 'required': ['version', 'whole_session_path_and_bounds_enforced', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'legacy_advisory'}, 'server_signing': {'type': 'boolean', 'const': False}, 'server_submission': {'type': 'boolean', 'const': False}, 'whole_session_path_and_bounds_enforced': {'type': 'boolean', 'const': False}}, 'additionalProperties': False}]}, 'current_action': {'anyOf': [{'type': 'object', 'required': ['version', 'workflow_id', 'action_id', 'step_index', 'expires_at', 'unsigned_action', 'payload_sha256', 'payload_sha256_spec', 'server_signing', 'server_submission', 'signed', 'submitted'], 'properties': {'signed': {'type': 'boolean', 'const': False}, 'version': {'type': 'string', 'const': 'assetfare-direct-multichain-action-v2'}, 'action_id': {'type': 'string', 'format': 'uuid'}, 'submitted': {'type': 'boolean', 'const': False}, 'expires_at': {'type': 'string', 'minLength': 1}, 'step_index': {'type': 'integer', 'minimum': 0}, 'workflow_id': {'type': 'string', 'format': 'uuid'}, 'payload_sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$', 'description': 'sha256(UTF-8 JSON with sorted keys and compact separators, excluding payload_sha256 itself)'}, 'server_signing': {'type': 'boolean', 'const': False}, 'unsigned_action': {'type': 'object', 'additionalProperties': {}}, 'server_submission': {'type': 'boolean', 'const': False}, 'payload_sha256_spec': {'type': 'string', 'const': 'sha256(UTF-8 JSON with sorted keys and compact separators, excluding payload_sha256 itself)'}}, 'additionalProperties': True}, {'type': 'null'}]}, 'server_signing': {'type': 'boolean', 'const': False}, 'action_available': {'type': 'boolean'}, 'server_submission': {'type': 'boolean', 'const': False}}, 'additionalProperties': True}
assetfare_v2_session_observe_output
Record an already-produced bridge or destination output, then advance the workflow. Example: pass the output hash, a new idempotency key, and the original verification_context. Any next current_action is deeply verified and receives a wallet handoff. AssetFare never signs or submits.
可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['session_token', 'session_id', 'idempotency_key', 'verification_context'], 'properties': {'session_id': {'type': 'string', 'format': 'uuid', 'description': 'V2 workflow session UUID returned by assetfare_v2_session_create. Use only with assetfare_v2_session_* tools; do not pass a legacy session ID.'}, 'session_token': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{43,128}$', 'description': 'Sensitive caller-generated v2 session capability: at least 32 CSPRNG bytes encoded as 43-128 URL-safe base64 characters. Generate it locally; never log it or substitute a private key or legacy access token.'}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'minLength': 8, 'description': 'Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation. Strict approval_v3 requests additionally enforce its ASCII key pattern.'}, 'transaction_hash': {'type': 'string', 'maxLength': 128, 'minLength': 16, 'description': 'Optional bridge or destination transaction hash already produced outside AssetFare. Omit only when the provider output can be observed without a hash.'}, 'verification_context': {'type': 'object', 'required': ['version', 'intent', 'wallets', 'event_signer_public', 'approval_v3', 'direct_route_summary', 'verification_context_sha256'], 'properties': {'intent': {'type': 'object', 'required': ['from_chain', 'from_token', 'to_chain', 'to_token', 'amount_usd'], 'properties': {'to_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood'], 'type': 'string', 'description': 'Destination chain for the v2 route: Solana, Base, Arbitrum, or Robinhood Chain. Source-only chains are not destinations.'}, 'to_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Output token symbol on to_chain. The chain-token pair must appear in current v2 capabilities.'}, 'amount_usd': {'type': 'number', 'minimum': 1, 'description': 'Requested input value in USD, minimum 1. USD 1 is reachability/schema smoke only. A USD 50 competitive bucket was observed only for dated 2026-09-23 Solana USDC to Base USDC evidence and must not be generalized to another corridor. USD 1,000 is the primary representative amount. SOL input includes a swap. Always quote the actual intended amount.'}, 'from_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic'], 'type': 'string', 'description': 'Source chain for the v2 route. Polygon, Optimism, Ethereum, HyperEVM, X Layer, Sei and Sonic are source-only and cannot be used as to_chain.'}, 'from_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Input token symbol on from_chain. The chain-token pair must appear in current v2 capabilities.'}}, 'additionalProperties': False}, 'version': {'type': 'string', 'const': 'assetfare-session-verification-context-v1'}, 'wallets': {'type': 'object', 'description': "Map each chain needed by this route to the caller's public wallet address. Include public addresses only; never private keys or seed phrases.", 'propertyNames': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic']}, 'additionalProperties': {'type': 'string', 'description': 'Caller-owned public wallet address: 0x plus 40 hex characters for EVM, or 32-44 base58 characters for Solana. Never provide secret key material.'}}, 'approval_v3': {'type': 'object', 'required': ['version', 'quote_id', 'quote_fingerprint', 'selection_status', 'selected_mode', 'maximum_input_base', 'minimum_output_base', 'direct_route_summary_sha256', 'idempotency_key'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-quote-bound-approval-v3'}, 'quote_id': {'type': 'string', 'format': 'uuid'}, 'selected_mode': {'type': 'string', 'const': 'session'}, 'idempotency_key': {'type': 'string', 'pattern': '^[A-Za-z0-9._:-]{8,128}$'}, 'selection_status': {'type': 'string', 'const': 'selected'}, 'quote_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, 'maximum_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'minimum_output_base': {'$ref': '#/properties/verification_context/properties/approval_v3/properties/maximum_input_base'}, 'direct_route_summary_sha256': {'$ref': '#/properties/verification_context/properties/approval_v3/properties/quote_fingerprint'}}, 'additionalProperties': False}, 'event_signer_public': {'anyOf': [{'$ref': '#/properties/verification_context/properties/wallets/additionalProperties', 'description': 'Solana CCTP only: caller-generated ephemeral public key. Keep the matching private key client-side and use it to co-sign the returned unsigned event-account transaction; never send the private key.'}, {'type': 'null'}], 'description': 'Solana CCTP only: caller-generated ephemeral public key. Keep the matching private key client-side and use it to co-sign the returned unsigned event-account transaction; never send the private key.'}, 'direct_route_summary': {'type': 'object', 'required': ['version', 'route', 'from', 'to', 'classification', 'mode', 'route_aggregator_used', 'external_intent_protocol_used', 'provider_internal_dex_aggregation_possible', 'assetfare_fee_bps', 'fee_collection_step_index', 'server_signing', 'server_submission', 'step_count', 'steps'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'mode': {'enum': ['cctp_direct_composition', 'optimism_source_cctp', 'polygon_source_cctp', 'robinhood_across_ingress_composition', 'robinhood_paxos_egress_composition', 'robinhood_paxos_ingress_composition', 'same_chain_direct', 'same_chain_direct_composition'], 'type': 'string'}, 'route': {'enum': ['solana:SOL->solana:USDC', 'solana:SOL->solana:USDG', 'solana:SOL->base:ETH', 'solana:SOL->base:USDC', 'solana:SOL->arbitrum:ETH', 'solana:SOL->arbitrum:USDC', 'solana:SOL->robinhood:ETH', 'solana:SOL->robinhood:USDG', 'solana:USDC->solana:SOL', 'solana:USDC->solana:USDG', 'solana:USDC->base:ETH', 'solana:USDC->base:USDC', 'solana:USDC->arbitrum:ETH', 'solana:USDC->arbitrum:USDC', 'solana:USDC->robinhood:ETH', 'solana:USDC->robinhood:USDG', 'solana:USDG->solana:SOL', 'solana:USDG->solana:USDC', 'solana:USDG->base:ETH', 'solana:USDG->base:USDC', 'solana:USDG->arbitrum:ETH', 'solana:USDG->arbitrum:USDC', 'solana:USDG->robinhood:ETH', 'solana:USDG->robinhood:USDG', 'base:ETH->solana:SOL', 'base:ETH->solana:USDC', 'base:ETH->solana:USDG', 'base:ETH->base:USDC', 'base:ETH->arbitrum:ETH', 'base:ETH->arbitrum:USDC', 'base:ETH->robinhood:ETH', 'base:ETH->robinhood:USDG', 'base:USDC->solana:SOL', 'base:USDC->solana:USDC', 'base:USDC->solana:USDG', 'base:USDC->base:ETH', 'base:USDC->arbitrum:ETH', 'base:USDC->arbitrum:USDC', 'base:USDC->robinhood:ETH', 'base:USDC->robinhood:USDG', 'arbitrum:ETH->solana:SOL', 'arbitrum:ETH->solana:USDC', 'arbitrum:ETH->solana:USDG', 'arbitrum:ETH->base:ETH', 'arbitrum:ETH->base:USDC', 'arbitrum:ETH->arbitrum:USDC', 'arbitrum:ETH->robinhood:ETH', 'arbitrum:ETH->robinhood:USDG', 'arbitrum:USDC->solana:SOL', 'arbitrum:USDC->solana:USDC', 'arbitrum:USDC->solana:USDG', 'arbitrum:USDC->base:ETH', 'arbitrum:USDC->base:USDC', 'arbitrum:USDC->arbitrum:ETH', 'arbitrum:USDC->robinhood:ETH', 'arbitrum:USDC->robinhood:USDG', 'robinhood:ETH->solana:SOL', 'robinhood:ETH->solana:USDC', 'robinhood:ETH->solana:USDG', 'robinhood:ETH->base:ETH', 'robinhood:ETH->base:USDC', 'robinhood:ETH->arbitrum:ETH', 'robinhood:ETH->arbitrum:USDC', 'robinhood:ETH->robinhood:USDG', 'robinhood:USDG->solana:SOL', 'robinhood:USDG->solana:USDC', 'robinhood:USDG->solana:USDG', 'robinhood:USDG->base:ETH', 'robinhood:USDG->base:USDC', 'robinhood:USDG->arbitrum:ETH', 'robinhood:USDG->arbitrum:USDC', 'robinhood:USDG->robinhood:ETH', 'polygon:USDC->base:USDC', 'polygon:USDC->arbitrum:USDC', 'optimism:USDC->base:USDC', 'optimism:USDC->arbitrum:USDC', 'ethereum:USDC->solana:USDC', 'ethereum:USDC->base:USDC', 'hyperevm:USDC->solana:USDC', 'hyperevm:USDC->base:USDC', 'xlayer:USDC->solana:USDC', 'xlayer:USDC->base:USDC', 'sei:USDC->solana:USDC', 'sei:USDC->base:USDC', 'sonic:USDC->solana:USDC', 'sonic:USDC->base:USDC'], 'type': 'string'}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['index', 'action', 'provider', 'from', 'to', 'expected_input_base', 'minimum_input_base', 'expected_output_base', 'minimum_output_base', 'assetfare_fee_bps', 'direct_protocol', 'external_intent_protocol', 'aggregator_api_used'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'action': {'enum': ['swap', 'bridge', 'receive'], 'type': 'string'}, 'provider': {'enum': ['raydium_clmm', 'orca_whirlpool', 'uniswap_v3', 'circle_cctp', 'circle_cctp_receive', 'paxos_usdg_layerzero_oft', 'across_intent_bridge'], 'type': 'string'}, 'direct_protocol': {'type': 'boolean'}, 'assetfare_fee_bps': {'enum': [0, 1], 'type': 'number'}, 'minimum_guard_bps': {'type': 'integer', 'maximum': 500, 'minimum': 1}, 'minimum_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'aggregator_api_used': {'type': 'boolean', 'const': False}, 'expected_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'minimum_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'expected_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'external_intent_protocol': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 1}, 'version': {'type': 'string', 'const': 'assetfare-direct-route-summary-v1'}, 'step_count': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'classification': {'enum': ['direct_protocol_only', 'external_intent'], 'type': 'string'}, 'server_signing': {'type': 'boolean', 'const': False}, 'assetfare_fee_bps': {'type': 'number', 'const': 1}, 'server_submission': {'type': 'boolean', 'const': False}, 'economic_eligibility': {'enum': ['not_asserted_by_capability', 'coverage_only_not_primary'], 'type': 'string'}, 'route_aggregator_used': {'type': 'boolean', 'const': False}, 'product_classification': {'enum': ['primary_direct', 'external_coverage_only'], 'type': 'string'}, 'route_minimum_guard_bps': {'anyOf': [{'type': 'integer', 'maximum': 500, 'minimum': 1}, {'type': 'null'}]}, 'fee_collection_step_index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'public_execution_eligible': {'type': 'boolean'}, 'primary_selection_eligible': {'type': 'boolean'}, 'external_intent_protocol_used': {'type': 'boolean'}, 'provider_internal_dex_aggregation_possible': {'type': 'boolean'}}, 'additionalProperties': False}, 'verification_context_sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}}, 'description': 'Strict caller-held context copied from the selected quote and approval. It contains public intent/wallet data only, never the raw session token or a private key, and is required whenever a remote MCP session call can return current_action.', 'additionalProperties': False}}, 'additionalProperties': False}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['session_id', 'status', 'action_available', 'current_action', 'quote_binding', 'server_signing', 'server_submission', 'signed', 'submitted'], 'properties': {'signed': {'type': 'boolean', 'const': False}, 'status': {'type': 'string', 'minLength': 1}, 'submitted': {'type': 'boolean', 'const': False}, 'session_id': {'type': 'string', 'format': 'uuid'}, 'quote_binding': {'anyOf': [{'type': 'object', 'required': ['version', 'quote_id', 'quote_fingerprint', 'selected_mode', 'whole_session_path_and_bounds_enforced', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-quote-bound-session-constraints-v1'}, 'quote_id': {'type': 'string', 'format': 'uuid'}, 'selected_mode': {'type': 'string', 'const': 'session'}, 'server_signing': {'type': 'boolean', 'const': False}, 'quote_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, 'server_submission': {'type': 'boolean', 'const': False}, 'whole_session_path_and_bounds_enforced': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, {'type': 'object', 'required': ['version', 'whole_session_path_and_bounds_enforced', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'legacy_advisory'}, 'server_signing': {'type': 'boolean', 'const': False}, 'server_submission': {'type': 'boolean', 'const': False}, 'whole_session_path_and_bounds_enforced': {'type': 'boolean', 'const': False}}, 'additionalProperties': False}]}, 'current_action': {'anyOf': [{'type': 'object', 'required': ['version', 'workflow_id', 'action_id', 'step_index', 'expires_at', 'unsigned_action', 'payload_sha256', 'payload_sha256_spec', 'server_signing', 'server_submission', 'signed', 'submitted'], 'properties': {'signed': {'type': 'boolean', 'const': False}, 'version': {'type': 'string', 'const': 'assetfare-direct-multichain-action-v2'}, 'action_id': {'type': 'string', 'format': 'uuid'}, 'submitted': {'type': 'boolean', 'const': False}, 'expires_at': {'type': 'string', 'minLength': 1}, 'step_index': {'type': 'integer', 'minimum': 0}, 'workflow_id': {'type': 'string', 'format': 'uuid'}, 'payload_sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$', 'description': 'sha256(UTF-8 JSON with sorted keys and compact separators, excluding payload_sha256 itself)'}, 'server_signing': {'type': 'boolean', 'const': False}, 'unsigned_action': {'type': 'object', 'additionalProperties': {}}, 'server_submission': {'type': 'boolean', 'const': False}, 'payload_sha256_spec': {'type': 'string', 'const': 'sha256(UTF-8 JSON with sorted keys and compact separators, excluding payload_sha256 itself)'}}, 'additionalProperties': True}, {'type': 'null'}]}, 'server_signing': {'type': 'boolean', 'const': False}, 'action_available': {'type': 'boolean'}, 'server_submission': {'type': 'boolean', 'const': False}}, 'additionalProperties': True}
assetfare_v2_session_observe_source
Record source hashes the caller already signed and submitted, then advance the workflow. Example: pass one finalized source hash, a new idempotency key, and the original verification_context. Any next current_action is deeply verified and receives a wallet handoff. AssetFare never signs or submits.
可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['session_token', 'session_id', 'idempotency_key', 'transaction_hashes', 'verification_context'], 'properties': {'session_id': {'type': 'string', 'format': 'uuid', 'description': 'V2 workflow session UUID returned by assetfare_v2_session_create. Use only with assetfare_v2_session_* tools; do not pass a legacy session ID.'}, 'session_token': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{43,128}$', 'description': 'Sensitive caller-generated v2 session capability: at least 32 CSPRNG bytes encoded as 43-128 URL-safe base64 characters. Generate it locally; never log it or substitute a private key or legacy access token.'}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'minLength': 8, 'description': 'Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation. Strict approval_v3 requests additionally enforce its ASCII key pattern.'}, 'transaction_hashes': {'type': 'array', 'items': {'type': 'string', 'maxLength': 128, 'minLength': 16}, 'maxItems': 8, 'minItems': 1, 'description': 'One to eight hashes for source transactions the caller already signed and submitted. Do not provide unsigned payloads or destination hashes.'}, 'verification_context': {'type': 'object', 'required': ['version', 'intent', 'wallets', 'event_signer_public', 'approval_v3', 'direct_route_summary', 'verification_context_sha256'], 'properties': {'intent': {'type': 'object', 'required': ['from_chain', 'from_token', 'to_chain', 'to_token', 'amount_usd'], 'properties': {'to_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood'], 'type': 'string', 'description': 'Destination chain for the v2 route: Solana, Base, Arbitrum, or Robinhood Chain. Source-only chains are not destinations.'}, 'to_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Output token symbol on to_chain. The chain-token pair must appear in current v2 capabilities.'}, 'amount_usd': {'type': 'number', 'minimum': 1, 'description': 'Requested input value in USD, minimum 1. USD 1 is reachability/schema smoke only. A USD 50 competitive bucket was observed only for dated 2026-09-23 Solana USDC to Base USDC evidence and must not be generalized to another corridor. USD 1,000 is the primary representative amount. SOL input includes a swap. Always quote the actual intended amount.'}, 'from_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic'], 'type': 'string', 'description': 'Source chain for the v2 route. Polygon, Optimism, Ethereum, HyperEVM, X Layer, Sei and Sonic are source-only and cannot be used as to_chain.'}, 'from_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Input token symbol on from_chain. The chain-token pair must appear in current v2 capabilities.'}}, 'additionalProperties': False}, 'version': {'type': 'string', 'const': 'assetfare-session-verification-context-v1'}, 'wallets': {'type': 'object', 'description': "Map each chain needed by this route to the caller's public wallet address. Include public addresses only; never private keys or seed phrases.", 'propertyNames': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic']}, 'additionalProperties': {'type': 'string', 'description': 'Caller-owned public wallet address: 0x plus 40 hex characters for EVM, or 32-44 base58 characters for Solana. Never provide secret key material.'}}, 'approval_v3': {'type': 'object', 'required': ['version', 'quote_id', 'quote_fingerprint', 'selection_status', 'selected_mode', 'maximum_input_base', 'minimum_output_base', 'direct_route_summary_sha256', 'idempotency_key'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-quote-bound-approval-v3'}, 'quote_id': {'type': 'string', 'format': 'uuid'}, 'selected_mode': {'type': 'string', 'const': 'session'}, 'idempotency_key': {'type': 'string', 'pattern': '^[A-Za-z0-9._:-]{8,128}$'}, 'selection_status': {'type': 'string', 'const': 'selected'}, 'quote_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, 'maximum_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'minimum_output_base': {'$ref': '#/properties/verification_context/properties/approval_v3/properties/maximum_input_base'}, 'direct_route_summary_sha256': {'$ref': '#/properties/verification_context/properties/approval_v3/properties/quote_fingerprint'}}, 'additionalProperties': False}, 'event_signer_public': {'anyOf': [{'$ref': '#/properties/verification_context/properties/wallets/additionalProperties', 'description': 'Solana CCTP only: caller-generated ephemeral public key. Keep the matching private key client-side and use it to co-sign the returned unsigned event-account transaction; never send the private key.'}, {'type': 'null'}], 'description': 'Solana CCTP only: caller-generated ephemeral public key. Keep the matching private key client-side and use it to co-sign the returned unsigned event-account transaction; never send the private key.'}, 'direct_route_summary': {'type': 'object', 'required': ['version', 'route', 'from', 'to', 'classification', 'mode', 'route_aggregator_used', 'external_intent_protocol_used', 'provider_internal_dex_aggregation_possible', 'assetfare_fee_bps', 'fee_collection_step_index', 'server_signing', 'server_submission', 'step_count', 'steps'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'mode': {'enum': ['cctp_direct_composition', 'optimism_source_cctp', 'polygon_source_cctp', 'robinhood_across_ingress_composition', 'robinhood_paxos_egress_composition', 'robinhood_paxos_ingress_composition', 'same_chain_direct', 'same_chain_direct_composition'], 'type': 'string'}, 'route': {'enum': ['solana:SOL->solana:USDC', 'solana:SOL->solana:USDG', 'solana:SOL->base:ETH', 'solana:SOL->base:USDC', 'solana:SOL->arbitrum:ETH', 'solana:SOL->arbitrum:USDC', 'solana:SOL->robinhood:ETH', 'solana:SOL->robinhood:USDG', 'solana:USDC->solana:SOL', 'solana:USDC->solana:USDG', 'solana:USDC->base:ETH', 'solana:USDC->base:USDC', 'solana:USDC->arbitrum:ETH', 'solana:USDC->arbitrum:USDC', 'solana:USDC->robinhood:ETH', 'solana:USDC->robinhood:USDG', 'solana:USDG->solana:SOL', 'solana:USDG->solana:USDC', 'solana:USDG->base:ETH', 'solana:USDG->base:USDC', 'solana:USDG->arbitrum:ETH', 'solana:USDG->arbitrum:USDC', 'solana:USDG->robinhood:ETH', 'solana:USDG->robinhood:USDG', 'base:ETH->solana:SOL', 'base:ETH->solana:USDC', 'base:ETH->solana:USDG', 'base:ETH->base:USDC', 'base:ETH->arbitrum:ETH', 'base:ETH->arbitrum:USDC', 'base:ETH->robinhood:ETH', 'base:ETH->robinhood:USDG', 'base:USDC->solana:SOL', 'base:USDC->solana:USDC', 'base:USDC->solana:USDG', 'base:USDC->base:ETH', 'base:USDC->arbitrum:ETH', 'base:USDC->arbitrum:USDC', 'base:USDC->robinhood:ETH', 'base:USDC->robinhood:USDG', 'arbitrum:ETH->solana:SOL', 'arbitrum:ETH->solana:USDC', 'arbitrum:ETH->solana:USDG', 'arbitrum:ETH->base:ETH', 'arbitrum:ETH->base:USDC', 'arbitrum:ETH->arbitrum:USDC', 'arbitrum:ETH->robinhood:ETH', 'arbitrum:ETH->robinhood:USDG', 'arbitrum:USDC->solana:SOL', 'arbitrum:USDC->solana:USDC', 'arbitrum:USDC->solana:USDG', 'arbitrum:USDC->base:ETH', 'arbitrum:USDC->base:USDC', 'arbitrum:USDC->arbitrum:ETH', 'arbitrum:USDC->robinhood:ETH', 'arbitrum:USDC->robinhood:USDG', 'robinhood:ETH->solana:SOL', 'robinhood:ETH->solana:USDC', 'robinhood:ETH->solana:USDG', 'robinhood:ETH->base:ETH', 'robinhood:ETH->base:USDC', 'robinhood:ETH->arbitrum:ETH', 'robinhood:ETH->arbitrum:USDC', 'robinhood:ETH->robinhood:USDG', 'robinhood:USDG->solana:SOL', 'robinhood:USDG->solana:USDC', 'robinhood:USDG->solana:USDG', 'robinhood:USDG->base:ETH', 'robinhood:USDG->base:USDC', 'robinhood:USDG->arbitrum:ETH', 'robinhood:USDG->arbitrum:USDC', 'robinhood:USDG->robinhood:ETH', 'polygon:USDC->base:USDC', 'polygon:USDC->arbitrum:USDC', 'optimism:USDC->base:USDC', 'optimism:USDC->arbitrum:USDC', 'ethereum:USDC->solana:USDC', 'ethereum:USDC->base:USDC', 'hyperevm:USDC->solana:USDC', 'hyperevm:USDC->base:USDC', 'xlayer:USDC->solana:USDC', 'xlayer:USDC->base:USDC', 'sei:USDC->solana:USDC', 'sei:USDC->base:USDC', 'sonic:USDC->solana:USDC', 'sonic:USDC->base:USDC'], 'type': 'string'}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['index', 'action', 'provider', 'from', 'to', 'expected_input_base', 'minimum_input_base', 'expected_output_base', 'minimum_output_base', 'assetfare_fee_bps', 'direct_protocol', 'external_intent_protocol', 'aggregator_api_used'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'action': {'enum': ['swap', 'bridge', 'receive'], 'type': 'string'}, 'provider': {'enum': ['raydium_clmm', 'orca_whirlpool', 'uniswap_v3', 'circle_cctp', 'circle_cctp_receive', 'paxos_usdg_layerzero_oft', 'across_intent_bridge'], 'type': 'string'}, 'direct_protocol': {'type': 'boolean'}, 'assetfare_fee_bps': {'enum': [0, 1], 'type': 'number'}, 'minimum_guard_bps': {'type': 'integer', 'maximum': 500, 'minimum': 1}, 'minimum_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'aggregator_api_used': {'type': 'boolean', 'const': False}, 'expected_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'minimum_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'expected_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'external_intent_protocol': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 1}, 'version': {'type': 'string', 'const': 'assetfare-direct-route-summary-v1'}, 'step_count': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'classification': {'enum': ['direct_protocol_only', 'external_intent'], 'type': 'string'}, 'server_signing': {'type': 'boolean', 'const': False}, 'assetfare_fee_bps': {'type': 'number', 'const': 1}, 'server_submission': {'type': 'boolean', 'const': False}, 'economic_eligibility': {'enum': ['not_asserted_by_capability', 'coverage_only_not_primary'], 'type': 'string'}, 'route_aggregator_used': {'type': 'boolean', 'const': False}, 'product_classification': {'enum': ['primary_direct', 'external_coverage_only'], 'type': 'string'}, 'route_minimum_guard_bps': {'anyOf': [{'type': 'integer', 'maximum': 500, 'minimum': 1}, {'type': 'null'}]}, 'fee_collection_step_index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'public_execution_eligible': {'type': 'boolean'}, 'primary_selection_eligible': {'type': 'boolean'}, 'external_intent_protocol_used': {'type': 'boolean'}, 'provider_internal_dex_aggregation_possible': {'type': 'boolean'}}, 'additionalProperties': False}, 'verification_context_sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}}, 'description': 'Strict caller-held context copied from the selected quote and approval. It contains public intent/wallet data only, never the raw session token or a private key, and is required whenever a remote MCP session call can return current_action.', 'additionalProperties': False}}, 'additionalProperties': False}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['session_id', 'status', 'action_available', 'current_action', 'quote_binding', 'server_signing', 'server_submission', 'signed', 'submitted'], 'properties': {'signed': {'type': 'boolean', 'const': False}, 'status': {'type': 'string', 'minLength': 1}, 'submitted': {'type': 'boolean', 'const': False}, 'session_id': {'type': 'string', 'format': 'uuid'}, 'quote_binding': {'anyOf': [{'type': 'object', 'required': ['version', 'quote_id', 'quote_fingerprint', 'selected_mode', 'whole_session_path_and_bounds_enforced', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-quote-bound-session-constraints-v1'}, 'quote_id': {'type': 'string', 'format': 'uuid'}, 'selected_mode': {'type': 'string', 'const': 'session'}, 'server_signing': {'type': 'boolean', 'const': False}, 'quote_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, 'server_submission': {'type': 'boolean', 'const': False}, 'whole_session_path_and_bounds_enforced': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, {'type': 'object', 'required': ['version', 'whole_session_path_and_bounds_enforced', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'legacy_advisory'}, 'server_signing': {'type': 'boolean', 'const': False}, 'server_submission': {'type': 'boolean', 'const': False}, 'whole_session_path_and_bounds_enforced': {'type': 'boolean', 'const': False}}, 'additionalProperties': False}]}, 'current_action': {'anyOf': [{'type': 'object', 'required': ['version', 'workflow_id', 'action_id', 'step_index', 'expires_at', 'unsigned_action', 'payload_sha256', 'payload_sha256_spec', 'server_signing', 'server_submission', 'signed', 'submitted'], 'properties': {'signed': {'type': 'boolean', 'const': False}, 'version': {'type': 'string', 'const': 'assetfare-direct-multichain-action-v2'}, 'action_id': {'type': 'string', 'format': 'uuid'}, 'submitted': {'type': 'boolean', 'const': False}, 'expires_at': {'type': 'string', 'minLength': 1}, 'step_index': {'type': 'integer', 'minimum': 0}, 'workflow_id': {'type': 'string', 'format': 'uuid'}, 'payload_sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$', 'description': 'sha256(UTF-8 JSON with sorted keys and compact separators, excluding payload_sha256 itself)'}, 'server_signing': {'type': 'boolean', 'const': False}, 'unsigned_action': {'type': 'object', 'additionalProperties': {}}, 'server_submission': {'type': 'boolean', 'const': False}, 'payload_sha256_spec': {'type': 'string', 'const': 'sha256(UTF-8 JSON with sorted keys and compact separators, excluding payload_sha256 itself)'}}, 'additionalProperties': True}, {'type': 'null'}]}, 'server_signing': {'type': 'boolean', 'const': False}, 'action_available': {'type': 'boolean'}, 'server_submission': {'type': 'boolean', 'const': False}}, 'additionalProperties': True}
assetfare_v2_session_refresh_action
Refresh an expired action only while it remains unsubmitted. Example: pass the existing session, a new idempotency key, and the original verification_context. The refreshed action is deeply verified and receives a wallet handoff. Never refresh a submitted step; AssetFare never signs or submits.
可访问外部资源 幂等
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['session_token', 'session_id', 'idempotency_key', 'verification_context'], 'properties': {'session_id': {'type': 'string', 'format': 'uuid', 'description': 'V2 workflow session UUID returned by assetfare_v2_session_create. Use only with assetfare_v2_session_* tools; do not pass a legacy session ID.'}, 'session_token': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{43,128}$', 'description': 'Sensitive caller-generated v2 session capability: at least 32 CSPRNG bytes encoded as 43-128 URL-safe base64 characters. Generate it locally; never log it or substitute a private key or legacy access token.'}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'minLength': 8, 'description': 'Caller-generated retry key, 8-128 characters. Reuse it only when retrying the same logical mutation; choose a new key for a new operation. Strict approval_v3 requests additionally enforce its ASCII key pattern.'}, 'verification_context': {'type': 'object', 'required': ['version', 'intent', 'wallets', 'event_signer_public', 'approval_v3', 'direct_route_summary', 'verification_context_sha256'], 'properties': {'intent': {'type': 'object', 'required': ['from_chain', 'from_token', 'to_chain', 'to_token', 'amount_usd'], 'properties': {'to_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood'], 'type': 'string', 'description': 'Destination chain for the v2 route: Solana, Base, Arbitrum, or Robinhood Chain. Source-only chains are not destinations.'}, 'to_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Output token symbol on to_chain. The chain-token pair must appear in current v2 capabilities.'}, 'amount_usd': {'type': 'number', 'minimum': 1, 'description': 'Requested input value in USD, minimum 1. USD 1 is reachability/schema smoke only. A USD 50 competitive bucket was observed only for dated 2026-09-23 Solana USDC to Base USDC evidence and must not be generalized to another corridor. USD 1,000 is the primary representative amount. SOL input includes a swap. Always quote the actual intended amount.'}, 'from_chain': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic'], 'type': 'string', 'description': 'Source chain for the v2 route. Polygon, Optimism, Ethereum, HyperEVM, X Layer, Sei and Sonic are source-only and cannot be used as to_chain.'}, 'from_token': {'enum': ['SOL', 'ETH', 'USDC', 'USDG'], 'type': 'string', 'description': 'Input token symbol on from_chain. The chain-token pair must appear in current v2 capabilities.'}}, 'additionalProperties': False}, 'version': {'type': 'string', 'const': 'assetfare-session-verification-context-v1'}, 'wallets': {'type': 'object', 'description': "Map each chain needed by this route to the caller's public wallet address. Include public addresses only; never private keys or seed phrases.", 'propertyNames': {'enum': ['solana', 'base', 'arbitrum', 'robinhood', 'polygon', 'optimism', 'ethereum', 'hyperevm', 'xlayer', 'sei', 'sonic']}, 'additionalProperties': {'type': 'string', 'description': 'Caller-owned public wallet address: 0x plus 40 hex characters for EVM, or 32-44 base58 characters for Solana. Never provide secret key material.'}}, 'approval_v3': {'type': 'object', 'required': ['version', 'quote_id', 'quote_fingerprint', 'selection_status', 'selected_mode', 'maximum_input_base', 'minimum_output_base', 'direct_route_summary_sha256', 'idempotency_key'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-quote-bound-approval-v3'}, 'quote_id': {'type': 'string', 'format': 'uuid'}, 'selected_mode': {'type': 'string', 'const': 'session'}, 'idempotency_key': {'type': 'string', 'pattern': '^[A-Za-z0-9._:-]{8,128}$'}, 'selection_status': {'type': 'string', 'const': 'selected'}, 'quote_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, 'maximum_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'minimum_output_base': {'$ref': '#/properties/verification_context/properties/approval_v3/properties/maximum_input_base'}, 'direct_route_summary_sha256': {'$ref': '#/properties/verification_context/properties/approval_v3/properties/quote_fingerprint'}}, 'additionalProperties': False}, 'event_signer_public': {'anyOf': [{'$ref': '#/properties/verification_context/properties/wallets/additionalProperties', 'description': 'Solana CCTP only: caller-generated ephemeral public key. Keep the matching private key client-side and use it to co-sign the returned unsigned event-account transaction; never send the private key.'}, {'type': 'null'}], 'description': 'Solana CCTP only: caller-generated ephemeral public key. Keep the matching private key client-side and use it to co-sign the returned unsigned event-account transaction; never send the private key.'}, 'direct_route_summary': {'type': 'object', 'required': ['version', 'route', 'from', 'to', 'classification', 'mode', 'route_aggregator_used', 'external_intent_protocol_used', 'provider_internal_dex_aggregation_possible', 'assetfare_fee_bps', 'fee_collection_step_index', 'server_signing', 'server_submission', 'step_count', 'steps'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'mode': {'enum': ['cctp_direct_composition', 'optimism_source_cctp', 'polygon_source_cctp', 'robinhood_across_ingress_composition', 'robinhood_paxos_egress_composition', 'robinhood_paxos_ingress_composition', 'same_chain_direct', 'same_chain_direct_composition'], 'type': 'string'}, 'route': {'enum': ['solana:SOL->solana:USDC', 'solana:SOL->solana:USDG', 'solana:SOL->base:ETH', 'solana:SOL->base:USDC', 'solana:SOL->arbitrum:ETH', 'solana:SOL->arbitrum:USDC', 'solana:SOL->robinhood:ETH', 'solana:SOL->robinhood:USDG', 'solana:USDC->solana:SOL', 'solana:USDC->solana:USDG', 'solana:USDC->base:ETH', 'solana:USDC->base:USDC', 'solana:USDC->arbitrum:ETH', 'solana:USDC->arbitrum:USDC', 'solana:USDC->robinhood:ETH', 'solana:USDC->robinhood:USDG', 'solana:USDG->solana:SOL', 'solana:USDG->solana:USDC', 'solana:USDG->base:ETH', 'solana:USDG->base:USDC', 'solana:USDG->arbitrum:ETH', 'solana:USDG->arbitrum:USDC', 'solana:USDG->robinhood:ETH', 'solana:USDG->robinhood:USDG', 'base:ETH->solana:SOL', 'base:ETH->solana:USDC', 'base:ETH->solana:USDG', 'base:ETH->base:USDC', 'base:ETH->arbitrum:ETH', 'base:ETH->arbitrum:USDC', 'base:ETH->robinhood:ETH', 'base:ETH->robinhood:USDG', 'base:USDC->solana:SOL', 'base:USDC->solana:USDC', 'base:USDC->solana:USDG', 'base:USDC->base:ETH', 'base:USDC->arbitrum:ETH', 'base:USDC->arbitrum:USDC', 'base:USDC->robinhood:ETH', 'base:USDC->robinhood:USDG', 'arbitrum:ETH->solana:SOL', 'arbitrum:ETH->solana:USDC', 'arbitrum:ETH->solana:USDG', 'arbitrum:ETH->base:ETH', 'arbitrum:ETH->base:USDC', 'arbitrum:ETH->arbitrum:USDC', 'arbitrum:ETH->robinhood:ETH', 'arbitrum:ETH->robinhood:USDG', 'arbitrum:USDC->solana:SOL', 'arbitrum:USDC->solana:USDC', 'arbitrum:USDC->solana:USDG', 'arbitrum:USDC->base:ETH', 'arbitrum:USDC->base:USDC', 'arbitrum:USDC->arbitrum:ETH', 'arbitrum:USDC->robinhood:ETH', 'arbitrum:USDC->robinhood:USDG', 'robinhood:ETH->solana:SOL', 'robinhood:ETH->solana:USDC', 'robinhood:ETH->solana:USDG', 'robinhood:ETH->base:ETH', 'robinhood:ETH->base:USDC', 'robinhood:ETH->arbitrum:ETH', 'robinhood:ETH->arbitrum:USDC', 'robinhood:ETH->robinhood:USDG', 'robinhood:USDG->solana:SOL', 'robinhood:USDG->solana:USDC', 'robinhood:USDG->solana:USDG', 'robinhood:USDG->base:ETH', 'robinhood:USDG->base:USDC', 'robinhood:USDG->arbitrum:ETH', 'robinhood:USDG->arbitrum:USDC', 'robinhood:USDG->robinhood:ETH', 'polygon:USDC->base:USDC', 'polygon:USDC->arbitrum:USDC', 'optimism:USDC->base:USDC', 'optimism:USDC->arbitrum:USDC', 'ethereum:USDC->solana:USDC', 'ethereum:USDC->base:USDC', 'hyperevm:USDC->solana:USDC', 'hyperevm:USDC->base:USDC', 'xlayer:USDC->solana:USDC', 'xlayer:USDC->base:USDC', 'sei:USDC->solana:USDC', 'sei:USDC->base:USDC', 'sonic:USDC->solana:USDC', 'sonic:USDC->base:USDC'], 'type': 'string'}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['index', 'action', 'provider', 'from', 'to', 'expected_input_base', 'minimum_input_base', 'expected_output_base', 'minimum_output_base', 'assetfare_fee_bps', 'direct_protocol', 'external_intent_protocol', 'aggregator_api_used'], 'properties': {'to': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG'], 'type': 'string'}, 'from': {'enum': ['solana:SOL', 'solana:USDC', 'solana:USDG', 'base:ETH', 'base:USDC', 'arbitrum:ETH', 'arbitrum:USDC', 'robinhood:ETH', 'robinhood:USDG', 'polygon:USDC', 'optimism:USDC', 'ethereum:USDC', 'hyperevm:USDC', 'xlayer:USDC', 'sei:USDC', 'sonic:USDC'], 'type': 'string'}, 'index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'action': {'enum': ['swap', 'bridge', 'receive'], 'type': 'string'}, 'provider': {'enum': ['raydium_clmm', 'orca_whirlpool', 'uniswap_v3', 'circle_cctp', 'circle_cctp_receive', 'paxos_usdg_layerzero_oft', 'across_intent_bridge'], 'type': 'string'}, 'direct_protocol': {'type': 'boolean'}, 'assetfare_fee_bps': {'enum': [0, 1], 'type': 'number'}, 'minimum_guard_bps': {'type': 'integer', 'maximum': 500, 'minimum': 1}, 'minimum_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'aggregator_api_used': {'type': 'boolean', 'const': False}, 'expected_input_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'minimum_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'expected_output_base': {'type': 'string', 'pattern': '^[1-9][0-9]*$'}, 'external_intent_protocol': {'type': 'boolean'}}, 'additionalProperties': False}, 'maxItems': 8, 'minItems': 1}, 'version': {'type': 'string', 'const': 'assetfare-direct-route-summary-v1'}, 'step_count': {'type': 'integer', 'maximum': 8, 'minimum': 1}, 'classification': {'enum': ['direct_protocol_only', 'external_intent'], 'type': 'string'}, 'server_signing': {'type': 'boolean', 'const': False}, 'assetfare_fee_bps': {'type': 'number', 'const': 1}, 'server_submission': {'type': 'boolean', 'const': False}, 'economic_eligibility': {'enum': ['not_asserted_by_capability', 'coverage_only_not_primary'], 'type': 'string'}, 'route_aggregator_used': {'type': 'boolean', 'const': False}, 'product_classification': {'enum': ['primary_direct', 'external_coverage_only'], 'type': 'string'}, 'route_minimum_guard_bps': {'anyOf': [{'type': 'integer', 'maximum': 500, 'minimum': 1}, {'type': 'null'}]}, 'fee_collection_step_index': {'type': 'integer', 'maximum': 7, 'minimum': 0}, 'public_execution_eligible': {'type': 'boolean'}, 'primary_selection_eligible': {'type': 'boolean'}, 'external_intent_protocol_used': {'type': 'boolean'}, 'provider_internal_dex_aggregation_possible': {'type': 'boolean'}}, 'additionalProperties': False}, 'verification_context_sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}}, 'description': 'Strict caller-held context copied from the selected quote and approval. It contains public intent/wallet data only, never the raw session token or a private key, and is required whenever a remote MCP session call can return current_action.', 'additionalProperties': False}}, 'additionalProperties': False}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['session_id', 'status', 'action_available', 'current_action', 'quote_binding', 'server_signing', 'server_submission', 'signed', 'submitted'], 'properties': {'signed': {'type': 'boolean', 'const': False}, 'status': {'type': 'string', 'minLength': 1}, 'submitted': {'type': 'boolean', 'const': False}, 'session_id': {'type': 'string', 'format': 'uuid'}, 'quote_binding': {'anyOf': [{'type': 'object', 'required': ['version', 'quote_id', 'quote_fingerprint', 'selected_mode', 'whole_session_path_and_bounds_enforced', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'assetfare-quote-bound-session-constraints-v1'}, 'quote_id': {'type': 'string', 'format': 'uuid'}, 'selected_mode': {'type': 'string', 'const': 'session'}, 'server_signing': {'type': 'boolean', 'const': False}, 'quote_fingerprint': {'type': 'string', 'pattern': '^[0-9a-f]{64}$'}, 'server_submission': {'type': 'boolean', 'const': False}, 'whole_session_path_and_bounds_enforced': {'type': 'boolean', 'const': True}}, 'additionalProperties': False}, {'type': 'object', 'required': ['version', 'whole_session_path_and_bounds_enforced', 'server_signing', 'server_submission'], 'properties': {'version': {'type': 'string', 'const': 'legacy_advisory'}, 'server_signing': {'type': 'boolean', 'const': False}, 'server_submission': {'type': 'boolean', 'const': False}, 'whole_session_path_and_bounds_enforced': {'type': 'boolean', 'const': False}}, 'additionalProperties': False}]}, 'current_action': {'anyOf': [{'type': 'object', 'required': ['version', 'workflow_id', 'action_id', 'step_index', 'expires_at', 'unsigned_action', 'payload_sha256', 'payload_sha256_spec', 'server_signing', 'server_submission', 'signed', 'submitted'], 'properties': {'signed': {'type': 'boolean', 'const': False}, 'version': {'type': 'string', 'const': 'assetfare-direct-multichain-action-v2'}, 'action_id': {'type': 'string', 'format': 'uuid'}, 'submitted': {'type': 'boolean', 'const': False}, 'expires_at': {'type': 'string', 'minLength': 1}, 'step_index': {'type': 'integer', 'minimum': 0}, 'workflow_id': {'type': 'string', 'format': 'uuid'}, 'payload_sha256': {'type': 'string', 'pattern': '^[0-9a-f]{64}$', 'description': 'sha256(UTF-8 JSON with sorted keys and compact separators, excluding payload_sha256 itself)'}, 'server_signing': {'type': 'boolean', 'const': False}, 'unsigned_action': {'type': 'object', 'additionalProperties': {}}, 'server_submission': {'type': 'boolean', 'const': False}, 'payload_sha256_spec': {'type': 'string', 'const': 'sha256(UTF-8 JSON with sorted keys and compact separators, excluding payload_sha256 itself)'}}, 'additionalProperties': True}, {'type': 'null'}]}, 'server_signing': {'type': 'boolean', 'const': False}, 'action_available': {'type': 'boolean'}, 'server_submission': {'type': 'boolean', 'const': False}}, 'additionalProperties': True}
已更改
assetfare_v2_session_refresh_action
2026年10月1日 02:47
已更改
assetfare_v2_session_observe_output
2026年10月1日 02:47
已更改
assetfare_v2_session_observe_source
2026年10月1日 02:47
已更改
assetfare_v2_session_get
2026年10月1日 02:47
已更改
assetfare_v2_session_create
2026年10月1日 02:47
已更改
assetfare_v2_prepare
2026年10月1日 02:47
已更改
assetfare_v2_quote
2026年10月1日 02:47
已更改
assetfare_v2_capabilities
2026年10月1日 02:47
已更改
assetfare_v2_session_refresh_action
2026年9月29日 02:56
已更改
assetfare_v2_session_observe_output
2026年9月29日 02:56
已更改
assetfare_v2_session_observe_source
2026年9月29日 02:56
已更改
assetfare_v2_session_get
2026年9月29日 02:56
已更改
assetfare_v2_session_create
2026年9月29日 02:56
已更改
assetfare_v2_prepare
2026年9月29日 02:56
已更改
assetfare_v2_quote
2026年9月29日 02:56
已更改
assetfare_v2_capabilities
2026年9月29日 02:56
已更改
assetfare_v2_session_refresh_action
2026年9月27日 02:47
已更改
assetfare_v2_session_observe_output
2026年9月27日 02:47
已更改
assetfare_v2_session_observe_source
2026年9月27日 02:47
已更改
assetfare_v2_session_get
2026年9月27日 02:47
已更改
assetfare_v2_session_create
2026年9月27日 02:47
已更改
assetfare_v2_prepare
2026年9月27日 02:47
已更改
assetfare_v2_quote
2026年9月27日 02:47
已更改
assetfare_v2_capabilities
2026年9月27日 02:47
已移除
assetfare_verify_source_receipt
2026年9月25日 02:54
已移除
assetfare_v2_new_session_capability
2026年9月25日 02:54
已移除
assetfare_status
2026年9月25日 02:54
已移除
assetfare_start_wallet_auth
2026年9月25日 02:54
已移除
assetfare_read_session
2026年9月25日 02:54
已移除
assetfare_quote
2026年9月25日 02:54

SAP MCP Server

ai.oobeprotocol.sap.mcp/sap-mcp

Provides an MCP gateway connecting SAP-related tools with Solana, DeFi, decentralized identity, and x402 payments.

FortFi Treasury MCP

io.github.rebelArtists/fortfi-treasury-mcp

Provides policy-controlled crypto treasury operations across chains, including wallets, payments, token discovery, swaps, bridges…

DPX — Institutional Cross-Border Settlement

io.github.untitledfinancial/dpx

Provides compliance-gated cross-border crypto settlement, agent registration and spending mandates, stablecoin routing, ESG and s…

Peer

io.github.zkp2p/peer

Reads Peer protocol, checkout, deposit, wallet, Peer Cash, cross-chain routing, payout, and IntentGuardian data on Base and relat…

Robyn — Gasless Cross-Chain for AI Agents

io.github.ox31461/robyn

Supports gasless cross-chain transfers, wallet and transaction checks, spending mandates, privacy-preserving messaging, and signe…

MERX - TRON Resource Exchange

exchange.merx/mcp

Manages TRON energy and bandwidth purchasing, resource monitoring, transaction cost estimation, wallet operations, token transfer…

Wisely x402 Agent-Payment Infrastructure

com.wiselyenterprisesllc/x402-agent-payment-infrastructure

Provides agent payment workflows for x402 endpoints, wallet handoffs, receipts, creator catalogs, local commerce bridges, endpoin…

AgentTools Hub

io.github.Thyphex/agenttools-hub

Offers calculators, unit and data converters, reference lookups, live crypto data, wallet utilities, and paid x402 access.