Skip to main content
Glama

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
NameRequiredDescriptionDefault
token_addressYesToken contract address
recipientYesRecipient wallet (0x...)
amountYesTokens 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 } }));
    },
  • 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 } }));
      },
    });

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/aspekt19/unboxed-loyalty-spark'

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