Track MCP LogoTrack MCP
Track MCP LogoTrack MCP

The world's largest repository of Model Context Protocol servers. Discover, explore, and submit MCP tools.

Product

  • Categories
  • Top MCP
  • New & Updated
  • Submit MCP

Company

  • About

Legal

  • Privacy Policy
  • Terms of Service
  • Cookie Policy

© 2026 TrackMCP. All rights reserved.

Built with ❤️ by Krishna Goyal

    Algorand Mcp

    Algorand Model Context Protocol (Server & Client)

    39 stars
    TypeScript
    Updated Oct 19, 2025
    algorand
    mcp
    mcp-client
    mcp-server
    model-context-protocol

    Table of Contents

    • What is MCP?
    • Features
    • Requirements
    • Installation
    • From npm
    • From source
    • MCP Configuration
    • OpenClaw
    • Claude Desktop
    • Claude Code
    • Cursor
    • Windsurf
    • VS Code / GitHub Copilot
    • Cline
    • OpenAI Codex CLI
    • Open Code
    • Any MCP-compatible client
    • Network Selection
    • Pagination
    • Secure Wallet
    • Architecture
    • How it works
    • Spending limits
    • Platform keychain support
    • Optional Environment Variables
    • Example: localnet (AlgoKit)
    • Available Tools
    • Wallet Tools (10 tools)
    • Account Management (8 tools)
    • Utility Tools (13 tools)
    • Transaction Tools (18 tools)
    • Algod Tools (5 tools)
    • Algod API Tools (13 tools)
    • Indexer API Tools (17 tools)
    • NFDomains Tools (6 tools)
    • Tinyman AMM Tools (9 tools)
    • Haystack Router Tools (3 tools)
    • Pera Wallet Tools (3 tools)
    • Alpha Arcade Tools (14 tools)
    • ARC-26 URI Tools (1 tool)
    • Knowledge Tools (1 tool)
    • Resources
    • Knowledge Resources
    • Project Structure
    • Response Format
    • Development
    • Testing
    • Quick start
    • Unit tests
    • How mocking works
    • E2E tests
    • Category activation
    • Enable specific categories
    • Available category flags
    • Enable specific tools
    • Test file structure
    • Jest configuration
    • Writing new tests
    • Dependencies
    • License

    Table of Contents

    • What is MCP?
    • Features
    • Requirements
    • Installation
    • From npm
    • From source
    • MCP Configuration
    • OpenClaw
    • Claude Desktop
    • Claude Code
    • Cursor
    • Windsurf
    • VS Code / GitHub Copilot
    • Cline
    • OpenAI Codex CLI
    • Open Code
    • Any MCP-compatible client
    • Network Selection
    • Pagination
    • Secure Wallet
    • Architecture
    • How it works
    • Spending limits
    • Platform keychain support
    • Optional Environment Variables
    • Example: localnet (AlgoKit)
    • Available Tools
    • Wallet Tools (10 tools)
    • Account Management (8 tools)
    • Utility Tools (13 tools)
    • Transaction Tools (18 tools)
    • Algod Tools (5 tools)
    • Algod API Tools (13 tools)
    • Indexer API Tools (17 tools)
    • NFDomains Tools (6 tools)
    • Tinyman AMM Tools (9 tools)
    • Haystack Router Tools (3 tools)
    • Pera Wallet Tools (3 tools)
    • Alpha Arcade Tools (14 tools)
    • ARC-26 URI Tools (1 tool)
    • Knowledge Tools (1 tool)
    • Resources
    • Knowledge Resources
    • Project Structure
    • Response Format
    • Development
    • Testing
    • Quick start
    • Unit tests
    • How mocking works
    • E2E tests
    • Category activation
    • Enable specific categories
    • Available category flags
    • Enable specific tools
    • Test file structure
    • Jest configuration
    • Writing new tests
    • Dependencies
    • License

    Documentation

    Algorand MCP Server

    npm version

    npm downloads

    License: MIT

    A comprehensive Model Context Protocol (MCP) server that gives AI agents and LLMs full access to the Algorand blockchain. Built by GoPlausible.

    Algorand is a carbon-negative, pure proof-of-stake Layer 1 blockchain with instant finality, low fees, and built-in support for smart contracts (AVM), standard assets (ASAs), and atomic transactions.

    What is MCP?

    Model Context Protocol is an open standard that lets AI applications connect to external tools and data sources. This server exposes Algorand blockchain operations as MCP tools that any compatible AI client can use — Claude Desktop, Claude Code, Cursor, Windsurf, and others.

    Features

    • Secure wallet management via OS keychain — private keys never exposed to agents or LLMs
    • Wallet accounts nicknames, allowances, and daily limits for safe spending control
    • Account creation, key management, and rekeying
    • Transaction building, signing, and submission (payments, assets, applications, key registration)
    • Atomic transaction groups
    • TEAL compilation and disassembly
    • Full Algod and Indexer API access
    • NFDomains (NFD) name service integration
    • x402 and AP2 toolins for Algorand
    • Tinyman AMM integration (pools, swaps, liquidity)
    • Haystack Router DEX aggregation (best-price swaps across Tinyman, Pact, Folks)
    • Alpha Arcade prediction market trading (browse markets, orderbooks, limit/market orders, positions, claims)
    • ARC-26 URI and QR code generation
    • Algorand knowledge base with full developer documentation taxonomy
    • Per-tool-call network selection (mainnet, testnet, localnet) and pagination

    Requirements

    • Node.js v20 or later
    • npm, pnpm, or yarn

    Installation

    From npm

    bash
    npm install -g @goplausible/algorand-mcp

    From source

    bash
    git clone https://github.com/GoPlausible/algorand-mcp.git
    cd algorand-mcp
    npm install
    npm run build

    MCP Configuration

    The server runs over stdio. There are three ways to invoke it — pick whichever suits your setup:

    MethodCommandWhen to use
    npx (recommended)npx @goplausible/algorand-mcpNo install needed, always latest version
    Global installalgorand-mcpAfter npm install -g @goplausible/algorand-mcp
    Absolute pathnode /path/to/dist/index.jsBuilt from source or local clone

    No environment variables are required for standard use. Network selection, pagination, and node URLs are all handled dynamically per tool call.

    ---

    OpenClaw

    No manual configuration needed — install the [@goplausible/openclaw-algorand-plugin](https://www.npmjs.com/package/@goplausible/openclaw-algorand-plugin) npm package and the Algorand MCP server is configured automatically:

    bash
    npm install -g @goplausible/openclaw-algorand-plugin

    ---

    Claude Desktop

    Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

    Using npx:

    json
    {
      "mcpServers": {
        "algorand-mcp": {
          "command": "npx",
          "args": ["@goplausible/algorand-mcp"]
        }
      }
    }

    Using global install:

    json
    {
      "mcpServers": {
        "algorand-mcp": {
          "command": "algorand-mcp"
        }
      }
    }

    Using absolute path:

    json
    {
      "mcpServers": {
        "algorand-mcp": {
          "command": "node",
          "args": ["/absolute/path/to/algorand-mcp/dist/index.js"]
        }
      }
    }

    ---

    Claude Code

    Create .mcp.json in your project root (project scope) or ~/.claude.json (user scope):

    json
    {
      "mcpServers": {
        "algorand-mcp": {
          "type": "stdio",
          "command": "npx",
          "args": ["@goplausible/algorand-mcp"]
        }
      }
    }

    Or add interactively:

    bash
    claude mcp add algorand-mcp -- npx @goplausible/algorand-mcp

    ---

    Cursor

    Add via Settings > MCP Servers, or edit .cursor/mcp.json in your project root:

    json
    {
      "mcpServers": {
        "algorand-mcp": {
          "command": "npx",
          "args": ["@goplausible/algorand-mcp"]
        }
      }
    }

    ---

    Windsurf

    Add via Settings > MCP, or edit ~/.codeium/windsurf/mcp_config.json:

    json
    {
      "mcpServers": {
        "algorand-mcp": {
          "command": "npx",
          "args": ["@goplausible/algorand-mcp"]
        }
      }
    }

    ---

    VS Code / GitHub Copilot

    Edit .vscode/mcp.json in your workspace root, or open Settings > MCP Servers:

    json
    {
      "servers": {
        "algorand-mcp": {
          "type": "stdio",
          "command": "npx",
          "args": ["@goplausible/algorand-mcp"]
        }
      }
    }

    ---

    Cline

    Add via the MCP Servers panel in the Cline sidebar, or edit ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json (macOS):

    json
    {
      "mcpServers": {
        "algorand-mcp": {
          "command": "npx",
          "args": ["@goplausible/algorand-mcp"],
          "disabled": false
        }
      }
    }

    ---

    OpenAI Codex CLI

    Create .codex/mcp.json in your project root or ~/.codex/mcp.json for global scope:

    json
    {
      "mcpServers": {
        "algorand-mcp": {
          "command": "npx",
          "args": ["@goplausible/algorand-mcp"]
        }
      }
    }

    ---

    Open Code

    Edit ~/.config/opencode/config.json:

    json
    {
      "mcp": {
        "algorand-mcp": {
          "type": "stdio",
          "command": "npx",
          "args": ["@goplausible/algorand-mcp"]
        }
      }
    }

    ---

    Any MCP-compatible client

    The server speaks the standard MCP stdio protocol. For any client not listed above, configure it with:

    • Command: npx (or algorand-mcp if globally installed, or node /path/to/dist/index.js)
    • Args: ["@goplausible/algorand-mcp"] (for npx)
    • Transport: stdio

    Network Selection

    Every tool accepts an optional network parameter: "mainnet" (default), "testnet", or "localnet". Algod and Indexer URLs are built-in for mainnet and testnet via AlgoNode.

    Example tool call:

    json
    { "name": "api_algod_get_account_info", "arguments": { "address": "ABC...", "network": "testnet" } }

    If no network is provided, tools default to mainnet.

    Pagination

    API responses are automatically paginated. Every tool accepts an optional itemsPerPage parameter (default: 10). Pass the pageToken from a previous response to fetch the next page.

    Secure Wallet

    Architecture

    The wallet system has two layers of storage, each with a distinct security role:

    LayerWhat it storesWhereEncryption
    OS KeychainMnemonics (secret keys)macOS Keychain / Linux libsecret / Windows Credential ManagerOS-managed, hardware-backed where available
    Embedded SQLiteAccount metadata (nicknames, allowances, spend tracking)~/.algorand-mcp/wallet.dbPlaintext (no secrets)

    Private key material never appears in tool responses, MCP config files, environment variables, or logs. The agent only sees addresses, public keys, and signed transaction blobs.

    How it works

    code
    Agent (LLM)                    MCP Server                     Storage
      ──────────                     ──────────                     ───────
           │                              │                              │
           │  wallet_add_account          │                              │
           │  { nickname: "main" }        │                              │
           │ ──────────────────────────►  │  generate keypair            │
           │                              │  store mnemonic ──────────►  │  OS Keychain (encrypted)
           │                              │  store metadata ──────────►  │  SQLite (nickname, limits)
           │  ◄─ { address, publicKey }   │                              │
           │                              │                              │
           │  wallet_sign_transaction     │                              │
           │  { transaction: {...} }      │                              │
           │ ──────────────────────────►  │  check spending limits       │
           │                              │  retrieve mnemonic ◄──────  │  OS Keychain
           │                              │  sign in memory              │
           │  ◄─ { txID, blob }          │  (key discarded)             │
           │                              │                              │

    1. Account creation (wallet_add_account) — Generates a keypair, stores the mnemonic in the OS keychain, and stores metadata (nickname, spending limits) in SQLite. Returns only address and public key.

    2. Active account — One account is active at a time. wallet_switch_account changes it by nickname or index. All signing and query tools operate on the active account.

    3. Transaction signing (wallet_sign_transaction) — Checks per-transaction and daily spending limits, retrieves the key from the keychain, signs in memory, discards the key. Returns only the signed blob.

    4. Data signing (wallet_sign_data) — Signs arbitrary hex data using raw Ed25519 via the [@noble/curves](https://github.com/paulmillr/noble-curves) library (no Algorand SDK prefix). Useful for off-chain authentication.

    5. Asset opt-in (wallet_optin_asset) — Creates, signs, and submits an opt-in transaction for the active account in one step.

    Spending limits

    Each account has two configurable limits (in microAlgos, 0 = unlimited):

    • **allowance** — Maximum amount per single transaction. Rejects any transaction exceeding this.
    • **dailyAllowance** — Maximum total spend per calendar day across all transactions. Automatically resets at midnight. Tracked in SQLite.

    Platform keychain support

    The keychain backend is provided by [@napi-rs/keyring](https://github.com/nicolo-ribaudo/napi-keyring) (Rust-based, prebuilt binaries):

    PlatformBackend
    macOSKeychain Services (the system Keychain app)
    Linuxlibsecret (GNOME Keyring) or KWallet
    WindowsWindows Credential Manager

    All credentials are stored under the service name algorand-mcp. You can inspect them with your OS keychain app (e.g. Keychain Access on macOS).

    Optional Environment Variables

    Environment variables are only needed for special setups. Pass them via the env block in your MCP config.

    VariableDescriptionDefaultWhen needed
    ALGORAND_TOKENAPI token for private/authenticated nodes""Connecting to a private Algod/Indexer node
    ALGORAND_LOCALNET_URLLocalnet base URL""Using network: "localnet" (e.g. http://localhost:4001)
    ALPHA_API_KEYAlpha Arcade API key""Accessing reward market data

    Example: localnet (AlgoKit)

    json
    {
      "mcpServers": {
        "algorand-mcp": {
          "command": "node",
          "args": ["/path/to/algorand-mcp/dist/index.js"],
          "env": {
            "ALGORAND_LOCALNET_URL": "http://localhost:4001",
            "ALGORAND_TOKEN": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
          }
        }
      }
    }

    Then use "network": "localnet" in your tool calls.

    Available Tools

    Wallet Tools (10 tools)

    See Secure Wallet for full architecture details.

    ToolDescription
    wallet_add_accountCreate a new Algorand account with nickname and spending limits (returns address + public key only)
    wallet_remove_accountRemove an account from the wallet by nickname or index
    wallet_list_accountsList all accounts with nicknames, addresses, and limits
    wallet_switch_accountSwitch the active account by nickname or index
    wallet_get_infoGet active account info: address, public key, balance, and spending limits
    wallet_get_assetsGet all asset holdings for the active account
    wallet_sign_transactionSign a single transaction with the active account (enforces spending limits)
    wallet_sign_transaction_groupSign a group of transactions with the active account (auto-assigns group ID)
    wallet_sign_dataSign arbitrary hex data with raw Ed25519 (noble, no SDK prefix)
    wallet_optin_assetOpt the active account into an asset (creates, signs, and submits)

    Account Management (8 tools)

    ToolDescription
    create_accountCreate a new Algorand account (returns address + mnemonic in the clear)
    rekey_accountRekey an account to a new address
    mnemonic_to_mdkConvert mnemonic to master derivation key
    mdk_to_mnemonicConvert master derivation key to mnemonic
    secret_key_to_mnemonicConvert secret key to mnemonic
    mnemonic_to_secret_keyConvert mnemonic to secret key
    seed_from_mnemonicGenerate seed from mnemonic
    mnemonic_from_seedGenerate mnemonic from seed

    Utility Tools (13 tools)

    ToolDescription
    pingServer connectivity check and info
    validate_addressCheck if an Algorand address is valid
    encode_addressEncode a public key to an Algorand address
    decode_addressDecode an Algorand address to a public key
    get_application_addressGet address for a given application ID
    bytes_to_bigintConvert bytes to BigInt
    bigint_to_bytesConvert BigInt to bytes
    encode_uint64Encode uint64 to bytes
    decode_uint64Decode bytes to uint64
    verify_bytesVerify signature against bytes
    sign_bytesSign bytes with a secret key
    encode_objEncode object to msgpack
    decode_objDecode msgpack to object

    Transaction Tools (18 tools)

    ToolDescription
    make_payment_txnCreate a payment transaction
    make_keyreg_txnCreate a key registration transaction
    make_asset_create_txnCreate an asset creation transaction
    make_asset_config_txnCreate an asset configuration transaction
    make_asset_destroy_txnCreate an asset destroy transaction
    make_asset_freeze_txnCreate an asset freeze transaction
    make_asset_transfer_txnCreate an asset transfer transaction
    make_app_create_txnCreate an application creation transaction
    make_app_update_txnCreate an application update transaction
    make_app_delete_txnCreate an application delete transaction
    make_app_optin_txnCreate an application opt-in transaction
    make_app_closeout_txnCreate an application close-out transaction
    make_app_clear_txnCreate an application clear state transaction
    make_app_call_txnCreate an application call transaction
    assign_group_idAssign group ID for atomic transactions
    sign_transactionSign a transaction with a secret key
    encode_unsigned_transactionEncode an unsigned transaction to base64 msgpack bytes
    decode_signed_transactionDecode a signed transaction blob back to JSON with signature details

    Algod Tools (5 tools)

    ToolDescription
    compile_tealCompile TEAL source code
    disassemble_tealDisassemble TEAL bytecode to source
    send_raw_transactionSubmit signed transactions to the network
    simulate_raw_transactionsSimulate raw transactions
    simulate_transactionsSimulate transactions with detailed config

    Algod API Tools (13 tools)

    ToolDescription
    api_algod_get_account_infoGet account balance, assets, and auth address
    api_algod_get_account_application_infoGet account-specific application info
    api_algod_get_account_asset_infoGet account-specific asset info
    api_algod_get_application_by_idGet application information
    api_algod_get_application_boxGet application box by name
    api_algod_get_application_boxesGet all application boxes
    api_algod_get_asset_by_idGet asset information
    api_algod_get_pending_transactionGet pending transaction info
    api_algod_get_pending_transactions_by_addressGet pending transactions for an address
    api_algod_get_pending_transactionsGet all pending transactions
    api_algod_get_transaction_paramsGet suggested transaction parameters
    api_algod_get_node_statusGet current node status
    api_algod_get_node_status_after_blockGet node status after a specific round

    Indexer API Tools (17 tools)

    ToolDescription
    api_indexer_lookup_account_by_idGet account information
    api_indexer_lookup_account_assetsGet account assets
    api_indexer_lookup_account_app_local_statesGet account app local states
    api_indexer_lookup_account_created_applicationsGet apps created by account
    api_indexer_search_for_accountsSearch accounts with filters
    api_indexer_lookup_applicationsGet application information
    api_indexer_lookup_application_logsGet application log messages
    api_indexer_search_for_applicationsSearch applications
    api_indexer_lookup_application_boxGet application box by name
    api_indexer_lookup_application_boxesGet all application boxes
    api_indexer_lookup_asset_by_idGet asset info and configuration
    api_indexer_lookup_asset_balancesGet asset holders and balances
    api_indexer_lookup_asset_transactionsGet transactions for an asset
    api_indexer_search_for_assetsSearch assets
    api_indexer_lookup_transaction_by_idGet transaction by ID
    api_indexer_lookup_account_transactionsGet account transaction history
    api_indexer_search_for_transactionsSearch transactions

    NFDomains Tools (6 tools)

    ToolDescription
    api_nfd_get_nfdGet NFD by name or application ID
    api_nfd_get_nfds_for_addressesGet NFDs for specific addresses
    api_nfd_get_nfd_activityGet activity/changes for NFDs
    api_nfd_get_nfd_analyticsGet NFD analytics data
    api_nfd_browse_nfdsBrowse NFDs with filters
    api_nfd_search_nfdsSearch NFDs

    Tinyman AMM Tools (9 tools)

    ToolDescription
    api_tinyman_get_poolGet pool info by asset pair
    api_tinyman_get_pool_analyticsGet pool analytics
    api_tinyman_get_pool_creation_quoteGet quote for creating a pool
    api_tinyman_get_liquidity_quoteGet quote for adding liquidity
    api_tinyman_get_remove_liquidity_quoteGet quote for removing liquidity
    api_tinyman_get_swap_quoteGet quote for swapping assets
    api_tinyman_get_asset_optin_quoteGet quote for asset opt-in
    api_tinyman_get_validator_optin_quoteGet quote for validator opt-in
    api_tinyman_get_validator_optout_quoteGet quote for validator opt-out

    Haystack Router Tools (3 tools)

    ToolDescription
    api_haystack_get_swap_quoteGet optimized swap quote with routing across Tinyman V2, Pact, Folks, and LST protocols
    api_haystack_execute_swapAll-in-one swap: quote → sign (via wallet) → submit → confirm
    api_haystack_needs_optinCheck if address needs asset opt-in before swapping

    Pera Wallet Tools (3 tools)

    ToolDescription
    api_pera_asset_verification_statusGet verification status of a mainnet asset (verified, trusted, suspicious, unknown)
    api_pera_verified_asset_detailsGet detailed asset info from Pera (name, unit, logo, decimals, verification)
    api_pera_verified_asset_searchSearch Pera verified assets by name, unit name, or keyword

    Pera Wallet tools are mainnet only — the Pera public API does not support testnet or localnet.

    Alpha Arcade Tools (14 tools)

    Trade on-chain prediction markets (YES/NO outcomes) denominated in USDC. All prices and quantities use microunits (1,000,000 = $1.00 or 1 share). Read-only tools work without a wallet; trading tools require an active wallet account.

    ToolDescription
    alpha_get_live_marketsFetch all live prediction markets with prices, volume, and categories
    alpha_get_reward_marketsFetch markets with liquidity rewards (requires ALPHA_API_KEY env var)
    alpha_get_marketFetch full details for a single market by app ID
    alpha_get_orderbookUnified YES-perspective orderbook with spread calculation
    alpha_get_open_ordersOpen orders for a wallet on a specific market
    alpha_get_positionsYES/NO token positions across all markets
    alpha_create_limit_orderPlace a limit order at a specific price (locks ~0.957 ALGO collateral)
    alpha_create_market_orderPlace a market order with auto-matching and slippage tolerance
    alpha_cancel_orderCancel an open order (refunds USDC/tokens and ALGO collateral)
    alpha_amend_orderEdit an existing unfilled order in-place (price, quantity, slippage)
    alpha_propose_matchPropose a match between an existing maker order and your wallet
    alpha_split_sharesSplit USDC into equal YES + NO outcome tokens
    alpha_merge_sharesMerge equal YES + NO tokens back into USDC
    alpha_claimClaim USDC from a resolved market by redeeming winning tokens

    Optional env var: ALPHA_API_KEY — needed for reward market data. ALPHA_API_BASE_URL — custom API endpoint (default: https://platform.alphaarcade.com/api).

    ARC-26 URI Tools (1 tool)

    ToolDescription
    generate_algorand_qrcodeGenerate Algorand URI and QR code per ARC-26 spec

    Knowledge Tools (1 tool)

    ToolDescription
    get_knowledge_docGet markdown content for Algorand knowledge documents

    Resources

    The server exposes MCP resources for direct data access. Wallet resources are described in the Secure Wallet section above.

    Knowledge Resources

    URIDescription
    algorand://knowledge/taxonomyFull Algorand knowledge taxonomy
    algorand://knowledge/taxonomy/arcsAlgorand Request for Comments
    algorand://knowledge/taxonomy/sdksSDK documentation
    algorand://knowledge/taxonomy/algokitAlgoKit documentation
    algorand://knowledge/taxonomy/algokit-utilsAlgoKit Utils documentation
    algorand://knowledge/taxonomy/tealscriptTEALScript documentation
    algorand://knowledge/taxonomy/puyaPuya documentation
    algorand://knowledge/taxonomy/liquid-authLiquid Auth documentation
    algorand://knowledge/taxonomy/pythonPython SDK documentation
    algorand://knowledge/taxonomy/developersDeveloper documentation
    algorand://knowledge/taxonomy/clisCLI tools documentation
    algorand://knowledge/taxonomy/nodesNode management documentation
    algorand://knowledge/taxonomy/detailsTechnical details documentation

    Project Structure

    code
    algorand-mcp/
    ├── src/                         # TypeScript source
    │   ├── index.ts                 # Server entry point
    │   ├── networkConfig.ts         # Hardcoded network URLs and client factories
    │   ├── algorand-client.ts       # Re-exports from networkConfig
    │   ├── env.ts                   # Legacy env shim (unused)
    │   ├── types.ts                 # Shared types (Zod schemas)
    │   ├── resources/               # MCP Resources
    │   │   ├── knowledge/           # Documentation taxonomy
    │   │   └── wallet/              # Wallet resources
    │   ├── tools/                   # MCP Tools
    │   │   ├── commonParams.ts      # Network + pagination schema fragments
    │   │   ├── walletManager.ts     # Secure wallet (keychain + SQLite)
    │   │   ├── accountManager.ts    # Account operations
    │   │   ├── utilityManager.ts    # Utility functions
    │   │   ├── algodManager.ts      # TEAL compile, simulate, submit
    │   │   ├── arc26Manager.ts      # ARC-26 URI generation
    │   │   ├── knowledgeManager.ts  # Knowledge document access
    │   │   ├── transactionManager/  # Transaction building
    │   │   │   ├── accountTransactions.ts
    │   │   │   ├── assetTransactions.ts
    │   │   │   ├── appTransactions/
    │   │   │   └── generalTransaction.ts
    │   │   └── apiManager/          # API integrations
    │   │       ├── algod/           # Algod API
    │   │       ├── indexer/         # Indexer API
    │   │       ├── nfd/             # NFDomains
    │   │       ├── tinyman/         # Tinyman AMM
    │   │       ├── hayrouter/       # Haystack Router DEX aggregator
    │   │       ├── pera/            # Pera Wallet verified assets
    │   │       └── alpha/           # Alpha Arcade prediction markets
    │   └── utils/
    │       └── responseProcessor.ts # Pagination and formatting
    ├── tests/                       # Test suite
    │   ├── helpers/                 # Shared test utilities
    │   │   ├── mockFactories.ts     # Mock algod/indexer/keychain factories
    │   │   ├── testConfig.ts        # Category enable/disable logic
    │   │   ├── e2eSetup.ts          # E2E account provisioning + invokeTool()
    │   │   └── testConstants.ts     # Well-known testnet addresses and asset IDs
    │   ├── unit/                    # 11 unit test suites (mocked, fast)
    │   ├── e2e/                     # 11 E2E test suites (live testnet)
    │   │   ├── globalSetup.ts       # Account provisioning + fund-check
    │   │   └── globalTeardown.ts    # Cleanup
    │   └── jest.config.e2e.js       # E2E-specific Jest config
    ├── dist/                        # Compiled output
    ├── jest.config.js               # Unit test Jest config
    ├── tsconfig.json                # Production TypeScript config
    ├── tsconfig.test.json           # Test TypeScript config
    └── package.json

    Response Format

    All tool responses follow the MCP content format. API responses include automatic pagination when datasets exceed itemsPerPage (default 10):

    json
    {
      "data": { ... },
      "metadata": {
        "totalItems": 100,
        "itemsPerPage": 10,
        "currentPage": 1,
        "totalPages": 10,
        "hasNextPage": true,
        "pageToken": "eyJ..."
      }
    }

    Pass pageToken from a previous response to fetch the next page. Set itemsPerPage on any tool call to control page size.

    Development

    bash
    # Install dependencies
    npm install
    
    # Type-check
    npm run typecheck
    
    # Build
    npm run build
    
    # Clean build output
    npm run clean

    Testing

    The project has a comprehensive dual-layer test suite: fast unit tests (mocked, no network) and real E2E tests (live testnet). Both use Jest 29 with ts-jest and ESM support.

    Quick start

    bash
    npm test                    # Unit tests (fast, no network)
    npm run test:e2e            # E2E tests (testnet, generates account + fund link)
    npm run test:all            # Both

    Unit tests

    Unit tests cover all 11 tool categories with fully mocked network dependencies. They run in parallel and finish in ~5 seconds. No environment variables or funded accounts are needed.

    bash
    npm test

    Coverage: 11 suites, 75+ tests covering success paths, error handling, and edge cases for every tool category.

    SuiteWhat it tests
    accountManagerAccount creation, mnemonic round-trips, rekey parameter validation
    utilityManagerPing, address validation, encode/decode, sign/verify bytes, encode/decode objects
    walletManagerFull lifecycle: add → list → switch → get info → sign data → remove (mocked keychain + SQLite)
    transactionManagerPayment, asset, app transaction building; sign_transaction; assign_group_id
    algodManagerTEAL compile/disassemble, send raw, simulate
    apiAlgodAll 13 algod API tools with correct mock routing
    apiIndexerAll 17 indexer API tools with fluent builder mocks
    apiNfdNFD get/search/browse with mocked fetch
    apiTinymanTinyman pool/swap with error handling
    arc26ManagerARC-26 URI generation and QR code SVG output
    knowledgeManagerKnowledge document retrieval and missing-doc error handling

    How mocking works

    Unit tests use jest.unstable_mockModule() (ESM-compatible) to intercept imports before they load. The shared tests/helpers/mockFactories.ts provides:

    • **setupNetworkMocks()** — Replaces algorand-client.ts with mock algod/indexer clients that return deterministic responses without any network calls.
    • **createKeychainMock()** — Replaces @napi-rs/keyring with an in-memory Map, so wallet tests work without an OS keychain.
    • Fluent Proxy mocks — Algorand's Indexer SDK uses a builder pattern (.searchForAssets().limit(5).do()). The mock factory uses ES Proxy objects that return themselves for any chained method and resolve when .do() is called.

    E2E tests

    E2E tests call tool handlers directly against Algorand testnet (via AlgoNode public nodes). They run serially to avoid rate-limiting.

    bash
    npm run test:e2e

    On first run (no mnemonic provided), the test setup:

    1. Generates a new Algorand account

    2. Prints the address and mnemonic

    3. Prints a fund link: https://lora.algokit.io/testnet/fund

    4. Runs all tests (unfunded tests still pass)

    To run with a funded account:

    bash
    E2E_MNEMONIC="word1 word2 ... word25" npm run test:e2e

    Coverage: 11 suites, 35+ tests covering real network interactions.

    SuiteWhat it tests
    accountAccount creation, mnemonic-to-key round-trip chain
    utilityPing, address validation, encode/decode, sign/verify bytes, encode/decode objects
    walletFull wallet lifecycle: add → list → switch → get info → get assets → sign data → remove
    transactionBuild payment → sign → verify txID; build asset opt-in; build group with assign_group_id
    algodCompile + disassemble TEAL round-trip
    algodApiAccount info, suggested params, node status, asset info via algod
    indexerApiAccount lookup, asset/transaction/account search via indexer
    nfdLook up "algo.algo", search NFDs, browse NFDs
    tinymanGet ALGO/USDC pool
    arc26Generate ARC-26 URI, verify format + QR SVG
    knowledgeRetrieve known knowledge doc content

    Category activation

    E2E tests can be selectively enabled by category or individual tool via environment variables. By default all categories are enabled.

    Enable specific categories

    bash
    E2E_WALLET=1 npm run test:e2e            # Only wallet tests
    E2E_ALGOD=1 E2E_UTILITY=1 npm run test:e2e  # Algod + utility tests

    Available category flags

    Env varCategory
    E2E_ALL=1All categories (explicit)
    E2E_WALLET=1Wallet tools
    E2E_ACCOUNT=1Account tools
    E2E_UTILITY=1Utility tools
    E2E_TRANSACTION=1Transaction tools
    E2E_ALGOD=1Algod tools
    E2E_ALGOD_API=1Algod API tools
    E2E_INDEXER_API=1Indexer API tools
    E2E_NFD=1NFDomains tools
    E2E_TINYMAN=1Tinyman tools
    E2E_ARC26=1ARC-26 tools
    E2E_KNOWLEDGE=1Knowledge tools

    Important: Setting any individual flag (e.g. E2E_WALLET=1) disables all other categories unless E2E_ALL=1 is also set.

    Enable specific tools

    bash
    E2E_TOOLS=ping,validate_address npm run test:e2e

    The E2E_TOOLS variable accepts a comma-separated list of tool names. Only tests for those specific tools will run.

    Test file structure

    code
    tests/
    ├── helpers/
    │   ├── mockFactories.ts       # Mock algod/indexer/keychain factories
    │   ├── testConfig.ts          # Category enable/disable logic
    │   ├── e2eSetup.ts            # E2E account provisioning + invokeTool()
    │   └── testConstants.ts       # Well-known testnet addresses and asset IDs
    ├── unit/                      # 11 unit test files (*.test.ts)
    │   ├── accountManager.test.ts
    │   ├── utilityManager.test.ts
    │   ├── walletManager.test.ts
    │   ├── transactionManager.test.ts
    │   ├── algodManager.test.ts
    │   ├── apiAlgod.test.ts
    │   ├── apiIndexer.test.ts
    │   ├── apiNfd.test.ts
    │   ├── apiTinyman.test.ts
    │   ├── arc26Manager.test.ts
    │   └── knowledgeManager.test.ts
    ├── e2e/                       # 11 E2E test files (*.e2e.test.ts)
    │   ├── globalSetup.ts         # Account provisioning + fund-check
    │   ├── globalTeardown.ts      # Cleanup
    │   ├── account.e2e.test.ts
    │   ├── utility.e2e.test.ts
    │   ├── wallet.e2e.test.ts
    │   ├── transaction.e2e.test.ts
    │   ├── algod.e2e.test.ts
    │   ├── algodApi.e2e.test.ts
    │   ├── indexerApi.e2e.test.ts
    │   ├── nfd.e2e.test.ts
    │   ├── tinyman.e2e.test.ts
    │   ├── arc26.e2e.test.ts
    │   └── knowledge.e2e.test.ts
    └── jest.config.e2e.js         # E2E-specific Jest config

    Jest configuration

    ConfigPurposeKey settings
    jest.config.js (root)Unit teststestTimeout: 10s, parallel workers, testMatch: tests/unit/**
    tests/jest.config.e2e.jsE2E teststestTimeout: 60s, maxWorkers: 1 (serial), globalSetup/globalTeardown
    tsconfig.test.jsonTypeScript for testsrootDir: ".", includes both src/ and tests/

    Writing new tests

    Unit test template:

    typescript
    import { jest } from '@jest/globals';
    import { setupNetworkMocks } from '../helpers/mockFactories.js';
    
    jest.unstable_mockModule('../../src/algorand-client.js', () => setupNetworkMocks());
    
    const { YourManager } = await import('../../src/tools/yourManager.js');
    
    describe('YourManager', () => {
      it('does something', async () => {
        const result = await YourManager.handleTool('tool_name', { arg: 'value' });
        const data = JSON.parse(result.content[0].text);
        expect(data.field).toBeDefined();
      });
    });

    E2E test template:

    typescript
    import { describeIf, testConfig } from '../helpers/testConfig.js';
    import { invokeTool, parseToolResponse } from '../helpers/e2eSetup.js';
    
    describeIf(testConfig.isCategoryEnabled('your-category'))('Your Tools (E2E)', () => {
      it('does something on testnet', async () => {
        const data = parseToolResponse(
          await invokeTool('tool_name', { arg: 'value', network: 'testnet' }),
        );
        expect(data.field).toBeDefined();
      });
    });

    Dependencies

    • algosdk v3 — Algorand JavaScript SDK
    • @modelcontextprotocol/sdk — MCP TypeScript SDK
    • @napi-rs/keyring — Native OS keychain access (macOS Keychain, Linux libsecret, Windows Credential Manager)
    • sql.js — Embedded SQLite (WASM) for wallet metadata persistence
    • @noble/curves — Pure JS Ed25519 for raw data signing (wallet_sign_data)
    • @tinymanorg/tinyman-js-sdk — Tinyman AMM SDK
    • @alpha-arcade/sdk — Alpha Arcade prediction market SDK
    • zod — Runtime type validation
    • qrcode — QR code generation for ARC-26

    License

    MIT

    Similar MCP

    Based on tags & features

    • MC

      Mcp Aoai Web Browsing

      Python·
      30
    • MC

      Mcp Ipfs

      TypeScript·
      11
    • MC

      Mcp Open Library

      TypeScript·
      42
    • AN

      Anilist Mcp

      TypeScript·
      57

    Trending MCP

    Most active this week

    • PL

      Playwright Mcp

      TypeScript·
      22.1k
    • SE

      Serena

      Python·
      14.5k
    • MC

      Mcp Playwright

      TypeScript·
      4.9k
    • MC

      Mcp Server Cloudflare

      TypeScript·
      3.0k
    View All MCP Servers

    Similar MCP

    Based on tags & features

    • MC

      Mcp Aoai Web Browsing

      Python·
      30
    • MC

      Mcp Ipfs

      TypeScript·
      11
    • MC

      Mcp Open Library

      TypeScript·
      42
    • AN

      Anilist Mcp

      TypeScript·
      57

    Trending MCP

    Most active this week

    • PL

      Playwright Mcp

      TypeScript·
      22.1k
    • SE

      Serena

      Python·
      14.5k
    • MC

      Mcp Playwright

      TypeScript·
      4.9k
    • MC

      Mcp Server Cloudflare

      TypeScript·
      3.0k