mint_loyalty_tokens
Mint loyalty tokens on Base L2 by providing token address, recipient wallet, and amount to generate smart contract call parameters for on-chain loyalty programs.
Instructions
Record mint intent and get smart contract call params
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| token_address | Yes | Token contract address | |
| recipient | Yes | Recipient wallet (0x...) | |
| amount | Yes | Tokens to mint |
Implementation Reference
- Handler function for mint_loyalty_tokens tool.
handler: async ({ token_address, recipient, amount }: any) => { const err = authGuard(["mint"]); if (err) return T(err); if (!/^0x[a-fA-F0-9]{40}$/.test(recipient)) return T('{"error":"Invalid recipient address"}'); const d = db(); const { data: prog } = await d.from("loyalty_programs").select("id,name,symbol,status").eq("token_address", token_address.toLowerCase()).eq("merchant_address", agent.ownerAddress).single(); if (!prog) return T('{"error":"Program not found"}'); if (prog.status !== "active") return T(JSON.stringify({ error: `Program is ${prog.status}` })); const { data: mint, error } = await d.from("token_mint_history").insert({ merchant_address: agent.ownerAddress.toLowerCase(), recipient_address: recipient.toLowerCase(), amount, token_address: token_address.toLowerCase(), token_name: prog.name, token_symbol: prog.symbol }).select("id,amount,recipient_address,token_address,created_at").single(); if (error) return T(JSON.stringify({ error: error.message })); return T(JSON.stringify({ mint, contract_call: { to: token_address, function: "mint(address,uint256)", args: [recipient, amount], calldata: encodeMintCalldata(recipient, amount), chain: "Base (8453)", builder_code: BUILDER_CODE } })); }, - supabase/functions/loyalty-mcp/index.ts:144-159 (registration)Registration of the mint_loyalty_tokens tool using mcpServer.tool.
mcpServer.tool("mint_loyalty_tokens", { description: "Record mint intent and get smart contract call params", inputSchema: { type: "object" as const, properties: { token_address: { type: "string", description: "Token contract address" }, recipient: { type: "string", description: "Recipient wallet (0x...)" }, amount: { type: "number", description: "Tokens to mint" } }, required: ["token_address", "recipient", "amount"] }, handler: async ({ token_address, recipient, amount }: any) => { const err = authGuard(["mint"]); if (err) return T(err); if (!/^0x[a-fA-F0-9]{40}$/.test(recipient)) return T('{"error":"Invalid recipient address"}'); const d = db(); const { data: prog } = await d.from("loyalty_programs").select("id,name,symbol,status").eq("token_address", token_address.toLowerCase()).eq("merchant_address", agent.ownerAddress).single(); if (!prog) return T('{"error":"Program not found"}'); if (prog.status !== "active") return T(JSON.stringify({ error: `Program is ${prog.status}` })); const { data: mint, error } = await d.from("token_mint_history").insert({ merchant_address: agent.ownerAddress.toLowerCase(), recipient_address: recipient.toLowerCase(), amount, token_address: token_address.toLowerCase(), token_name: prog.name, token_symbol: prog.symbol }).select("id,amount,recipient_address,token_address,created_at").single(); if (error) return T(JSON.stringify({ error: error.message })); return T(JSON.stringify({ mint, contract_call: { to: token_address, function: "mint(address,uint256)", args: [recipient, amount], calldata: encodeMintCalldata(recipient, amount), chain: "Base (8453)", builder_code: BUILDER_CODE } })); }, });