Skip to main content
Glama
Jake-loranger

Algorand MCP Server

send_payment

Send Algo cryptocurrency payments on the Algorand blockchain by specifying recipient address, amount, and sender mnemonic phrase.

Instructions

Send Algo payment transaction (WARNING: Requires mnemonic phrase)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
mnemonicYesSender account mnemonic phrase (25 words)
toAddressYesRecipient address
amountYesAmount in microAlgos (1 Algo = 1,000,000 microAlgos)
noteNoOptional transaction note

Implementation Reference

  • Core handler implementing the send_payment tool logic: imports account from mnemonic, builds payment transaction parameters, signs and sends the transaction using algosdk, waits for confirmation.
    async sendPayment(
        fromMnemonic: string,
        toAddress: string,
        amount: number,
        note?: string
    ) {
        try {
            const fromAccount = this.importAccountFromMnemonic(fromMnemonic);
            const suggestedParams = await this.algodClient.getTransactionParams().do();
    
            const txnParams: any = {
                sender: fromAccount.addr,
                receiver: toAddress,
                amount: amount,
                suggestedParams,
            };
    
            if (note) {
                txnParams.note = new TextEncoder().encode(note);
            }
    
            const txn = algosdk.makePaymentTxnWithSuggestedParamsFromObject(txnParams);
    
            const signedTxn = txn.signTxn(fromAccount.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,
            };
        } catch (error) {
            throw new Error(`Payment failed: ${error}`);
        }
    }
  • MCP server request handler for 'send_payment': parses input arguments using Zod schema and delegates execution to AlgorandService.sendPayment, formats success/error response.
    case 'send_payment': {
        const parsed = SendPaymentArgsSchema.parse(args);
        try {
            const result = await algorandService.sendPayment(
                parsed.mnemonic,
                parsed.toAddress,
                parsed.amount,
                parsed.note
            );
            return {
                content: [
                    {
                        type: 'text',
                        text: `Payment Successful!\nTransaction ID: ${result.txId}\nConfirmed in Round: ${result.confirmedRound}\nAmount: ${parsed.amount / 1000000} ALGO`,
                    },
                ],
            };
        } catch (error) {
            return {
                content: [
                    {
                        type: 'text',
                        text: `Payment failed: ${error}`,
                    },
                ],
                isError: true,
            };
        }
    }
  • Zod schema defining input validation for send_payment tool arguments.
    const SendPaymentArgsSchema = z.object({
        mnemonic: z.string(),
        toAddress: z.string(),
        amount: z.number(),
        note: z.string().optional(),
    });
  • src/index.ts:179-204 (registration)
    Tool registration in the TOOLS array, defining name, description, and JSON input schema for the MCP server.
    {
        name: 'send_payment',
        description: 'Send Algo payment transaction (WARNING: Requires mnemonic phrase)',
        inputSchema: {
            type: 'object',
            properties: {
                mnemonic: {
                    type: 'string',
                    description: 'Sender account mnemonic phrase (25 words)',
                },
                toAddress: {
                    type: 'string',
                    description: 'Recipient address',
                },
                amount: {
                    type: 'number',
                    description: 'Amount in microAlgos (1 Algo = 1,000,000 microAlgos)',
                },
                note: {
                    type: 'string',
                    description: 'Optional transaction note',
                },
            },
            required: ['mnemonic', 'toAddress', 'amount'],
        },
    },
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds value by warning about the mnemonic requirement, implying security and authentication needs, but lacks details on critical behaviors like transaction finality, error handling, rate limits, or what happens upon success/failure. This is a moderate disclosure for a high-stakes tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—a single sentence with a parenthetical warning—and front-loaded with the core purpose. Every word earns its place, making it efficient and easy to parse without unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a payment tool with no annotations and no output schema, the description is insufficient. It lacks information on return values, error conditions, transaction lifecycle, and how it differs from sibling tools. For a high-risk operation, more context is needed to ensure safe and correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents all parameters. The description doesn't add any semantic details beyond what's in the schema (e.g., it doesn't explain parameter interactions or provide examples). This meets the baseline for high schema coverage but offers no extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Send Algo payment transaction') and the resource ('Algo payment'), making the purpose evident. However, it doesn't explicitly differentiate from sibling tools like 'transfer_asset' or 'fund_testnet', which also involve value transfers, so it misses full sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a warning about requiring a mnemonic phrase, which hints at a prerequisite, but provides no guidance on when to use this tool versus alternatives like 'transfer_asset' or 'fund_testnet'. There's no explicit context for usage or exclusions, leaving the agent with minimal direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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