Skip to main content
Glama
Jake-loranger

Algorand MCP Server

create_asset

Create new Algorand Standard Assets (ASAs) on the blockchain by specifying asset name, supply, and creator credentials to issue tokens or digital assets.

Instructions

Create a new Algorand Standard Asset (ASA)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
creatorMnemonicYesCreator account mnemonic phrase (25 words)
assetNameYesName of the asset
unitNameYesUnit name/symbol of the asset
totalSupplyYesTotal supply of the asset
decimalsNoNumber of decimal places (default: 0)
defaultFrozenNoWhether asset starts frozen (default: false)
urlNoOptional URL for asset metadata
metadataHashNoOptional metadata hash

Implementation Reference

  • Core implementation of the create_asset tool in AlgorandService class. Handles asset creation transaction using algosdk, including signing and confirmation.
    async createAsset(
        creatorMnemonic: string,
        assetName: string,
        unitName: string,
        totalSupply: number,
        decimals: number = 0,
        defaultFrozen: boolean = false,
        url?: string,
        metadataHash?: string
    ) {
        try {
            const creatorAccount = this.importAccountFromMnemonic(creatorMnemonic);
            const suggestedParams = await this.algodClient.getTransactionParams().do();
    
            const assetParams: any = {
                sender: creatorAccount.addr,
                assetName,
                unitName,
                total: totalSupply,
                decimals,
                defaultFrozen,
                manager: creatorAccount.addr,
                reserve: creatorAccount.addr,
                freeze: creatorAccount.addr,
                clawback: creatorAccount.addr,
                suggestedParams,
            };
    
            if (url) {
                assetParams.assetURL = url;
            }
    
            if (metadataHash) {
                assetParams.assetMetadataHash = new TextEncoder().encode(metadataHash);
            }
    
            const txn = algosdk.makeAssetCreateTxnWithSuggestedParamsFromObject(assetParams);
    
            const signedTxn = txn.signTxn(creatorAccount.sk);
            const response = await this.algodClient.sendRawTransaction(signedTxn).do();
            const txId = response.txid || txn.txID();
    
            // Wait for confirmation
            const result = await algosdk.waitForConfirmation(this.algodClient, txId, 4);
    
            return {
                txId,
                confirmedRound: result.confirmedRound,
                assetId: result.assetIndex,
            };
        } catch (error) {
            throw new Error(`Asset creation failed: ${error}`);
        }
    }
  • Zod schema for validating input arguments to the create_asset tool.
    const CreateAssetArgsSchema = z.object({
        creatorMnemonic: z.string(),
        assetName: z.string(),
        unitName: z.string(),
        totalSupply: z.number(),
        decimals: z.number().optional(),
        defaultFrozen: z.boolean().optional(),
        url: z.string().optional(),
        metadataHash: z.string().optional(),
    });
  • src/index.ts:205-246 (registration)
    Tool registration in the TOOLS array, defining name, description, and input schema for MCP server.
    {
        name: 'create_asset',
        description: 'Create a new Algorand Standard Asset (ASA)',
        inputSchema: {
            type: 'object',
            properties: {
                creatorMnemonic: {
                    type: 'string',
                    description: 'Creator account mnemonic phrase (25 words)',
                },
                assetName: {
                    type: 'string',
                    description: 'Name of the asset',
                },
                unitName: {
                    type: 'string',
                    description: 'Unit name/symbol of the asset',
                },
                totalSupply: {
                    type: 'number',
                    description: 'Total supply of the asset',
                },
                decimals: {
                    type: 'number',
                    description: 'Number of decimal places (default: 0)',
                },
                defaultFrozen: {
                    type: 'boolean',
                    description: 'Whether asset starts frozen (default: false)',
                },
                url: {
                    type: 'string',
                    description: 'Optional URL for asset metadata',
                },
                metadataHash: {
                    type: 'string',
                    description: 'Optional metadata hash',
                },
            },
            required: ['creatorMnemonic', 'assetName', 'unitName', 'totalSupply'],
        },
    },
  • MCP server handler for create_asset tool call, parses args with schema and delegates to AlgorandService.createAsset, formats response.
    case 'create_asset': {
        const parsed = CreateAssetArgsSchema.parse(args);
        try {
            const result = await algorandService.createAsset(
                parsed.creatorMnemonic,
                parsed.assetName,
                parsed.unitName,
                parsed.totalSupply,
                parsed.decimals,
                parsed.defaultFrozen,
                parsed.url,
                parsed.metadataHash
            );
            return {
                content: [
                    {
                        type: 'text',
                        text: `Asset Created Successfully!\nAsset ID: ${result.assetId}\nTransaction ID: ${result.txId}\nConfirmed in Round: ${result.confirmedRound}\nAsset Name: ${parsed.assetName}\nTotal Supply: ${parsed.totalSupply}`,
                    },
                ],
            };
        } catch (error) {
            return {
                content: [
                    {
                        type: 'text',
                        text: `Asset creation failed: ${error}`,
                    },
                ],
                isError: true,
            };
        }
    }

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/Jake-loranger/algorand-mcp-server'

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