Skip to main content
Glama

obtener_assets_transaccion

Fetch assets from a transaction on the MIST.cash privacy-preserving payment protocol. Shows assets even if already spent; use verificar_existencia_transaccion for accurate verification.

Instructions

Fetch assets from a transaction. WARNING: This shows assets even if already spent. Use verificar_existencia_transaccion for accurate verification.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
transaction_keyYesTransaction key to query
recipient_addressYesStarknet address of the recipient
provider_rpc_urlNoOptional custom Starknet RPC URL

Implementation Reference

  • The main handler function that executes the tool logic: validates input, creates Starknet provider and Chamber contract instance, fetches transaction assets using Mistcash SDK's fetchTxAssets with retry and 30s timeout, returns assets with warning.
    export async function obtenerAssetsTransaccion(params: unknown) { // Validate parameters const validated = ObtenerAssetsTransaccionSchema.parse(params); try { // Create provider const provider = createProvider( validated.provider_rpc_url ? { nodeUrl: validated.provider_rpc_url } : undefined ); // Get contract address (supports custom Madara address) const network = (process.env.STARKNET_NETWORK || 'mainnet') as 'mainnet' | 'sepolia'; const contractAddress = getContractAddress(network); // Get contract instance const contract = await getChamberContract(provider, contractAddress, CHAMBER_ABI); // Fetch transaction assets with retry logic and 30s timeout const assetsPromise = retryWithBackoff( () => fetchTxAssets(contract, validated.transaction_key, validated.recipient_address) ); const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Request timeout after 30s')), 30000) ); const assets = await Promise.race([assetsPromise, timeoutPromise]) as TransactionAssets; return { success: true, assets, warning: '⚠️ This function shows assets even if they have already been spent. Use verificar_existencia_transaccion for accurate verification.', transaction_key: validated.transaction_key, recipient_address: validated.recipient_address }; } catch (error) { throw new Error(`Failed to fetch transaction assets: ${(error as Error).message}`); } }
  • Zod schema defining and validating the tool's input parameters: transaction_key (required string), recipient_address (Starknet address), provider_rpc_url (optional URL).
    export const ObtenerAssetsTransaccionSchema = z.object({ transaction_key: z.string().min(1, 'Transaction key is required'), recipient_address: StarknetAddressSchema, provider_rpc_url: z.string().url().optional() });
  • src/index.ts:63-84 (registration)
    Tool registration in MCP server's listTools handler, defining name, description, and input schema.
    { name: 'obtener_assets_transaccion', description: 'Fetch assets from a transaction. WARNING: This shows assets even if already spent. Use verificar_existencia_transaccion for accurate verification.', inputSchema: { type: 'object', properties: { transaction_key: { type: 'string', description: 'Transaction key to query', }, recipient_address: { type: 'string', description: 'Starknet address of the recipient', }, provider_rpc_url: { type: 'string', description: 'Optional custom Starknet RPC URL', }, }, required: ['transaction_key', 'recipient_address'], }, },
  • src/index.ts:176-184 (registration)
    Tool call handler in MCP server's CallToolRequestSchema switch, invoking the obtenerAssetsTransaccion function.
    case 'obtener_assets_transaccion': return { content: [ { type: 'text', text: JSON.stringify(await obtenerAssetsTransaccion(args), null, 2), }, ], };
  • JavaScript version of the handler function, similar logic without TypeScript types.
    export async function obtenerAssetsTransaccion(params) { // Validate parameters const validated = ObtenerAssetsTransaccionSchema.parse(params); try { // Create provider const provider = createProvider(validated.provider_rpc_url ? { nodeUrl: validated.provider_rpc_url } : undefined); // Get contract address based on network const network = (process.env.STARKNET_NETWORK || 'mainnet'); const contractAddress = network === 'mainnet' ? CHAMBER_ADDR_MAINNET : CHAMBER_ADDR_SEPOLIA; // Get contract instance const contract = await getChamberContract(provider, contractAddress, CHAMBER_ABI); // Fetch transaction assets with retry logic and 30s timeout const assetsPromise = retryWithBackoff(() => fetchTxAssets(contract, validated.transaction_key, validated.recipient_address)); const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Request timeout after 30s')), 30000)); const assets = await Promise.race([assetsPromise, timeoutPromise]); return { success: true, assets, warning: '⚠️ This function shows assets even if they have already been spent. Use verificar_existencia_transaccion for accurate verification.', transaction_key: validated.transaction_key, recipient_address: validated.recipient_address }; } catch (error) { throw new Error(`Failed to fetch transaction assets: ${error.message}`); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/joadataarg/Mcp-mistcash'

If you have feedback or need assistance with the MCP directory API, please join our Discord server