Algorand
About
A comprehensive MCP server for tooling interactions(40+) and resource accessibility(60+) plus many useful prompts to interact with Algorand Blockchain.
Details
- License
- MIT
Explore
- Agent wallet with mnemonic storage in local SQLite
- Transaction building, signing, and atomic groups
- Full Algod and Indexer API access
- DEX integration with Tinyman and Haystack Router
- Per-tool-call network selection and pagination
- NFDomains and x402 micropayments support
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
AlgorandCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
Install globally with npm install -g @goplausible/algorand-mcp or run via npx @goplausible/algorand-mcp. Configure it as an MCP server in any compatible client using stdio transport with the command npx @goplausible/algorand-mcp. No environment variables are required; network selection (mainnet, testnet, localnet) and pagination are handled per tool call.
create_account
Create a new Algorand account
rekey_account
Rekey an Algorand account to a new address
mnemonic_to_mdk
Convert a mnemonic to a master derivation key
mdk_to_mnemonic
Convert a master derivation key to a mnemonic
secret_key_to_mnemonic
Convert a secret key to a mnemonic
mnemonic_to_secret_key
Convert a mnemonic to a secret key
seed_from_mnemonic
Generate a seed from a mnemonic
mnemonic_from_seed
Generate a mnemonic from a seed
wallet_add_account
Create a new Algorand account, store it in the agent-wallet database with a nickname, and auto-switch to it if it is the first account. Returns address, public key, nickname, and index. The mnemonic is held internally by the MCP server and never returned to the agent.
wallet_remove_account
Remove an Algorand account from the wallet by nickname or index.
wallet_list_accounts
List wallet accounts with their nicknames and addresses. By default returns only ACTIVE accounts (signable). Pass { archived: true } to return ARCHIVED accounts instead — these are accounts whose mnemonic could not be recovered from the OS keychain at startup (e.g., wallet.db moved to a new machine without keychain, or fresh Docker install over an existing DB). Archived rows stay in the DB for forensics but cannot sign; their nicknames are freed for reuse by new active accounts.
wallet_switch_account
Switch the active wallet account by nickname or index. The active account is used for signing and balance queries.
wallet_get_info
Get info for the ACTIVE wallet account (an account whose private key this MCP server owns in the OS keychain). Returns nickname, address, public key, network, on-chain balance, min-balance, opted-in apps/assets counts. Use this when you want to know the state of "the wallet you control." For an arbitrary on-chain account that this wallet does NOT own, use api_algod_get_account_info instead.
wallet_get_assets
Get all ASA holdings for the ACTIVE wallet account (an account whose private key this MCP server owns). Returns the wallet nickname, address, network, and the assets array. Use this when listing holdings of "the wallet you control." For asset holdings of an arbitrary on-chain account, use api_algod_get_account_info (returns full account including assets) or api_algod_get_account_asset_info (single asset).
wallet_sign_transaction
Sign a single transaction with the active wallet account.
wallet_sign_transaction_group
Sign a group of transactions with the active wallet account. Assigns group ID automatically.
wallet_sign_data
Sign arbitrary data with the active wallet account using raw Ed25519 (noble library, no Algorand SDK prefix). Returns hex signature.
wallet_optin_asset
Opt the active wallet account into an asset by ID. Creates, signs, and submits the opt-in transaction.
x402_discover_payment_requirements
Probe an x402-protected HTTP endpoint and return its payment requirements (the `accepts` array from the 402 response) without paying. Use this to inspect cost and supported networks/assets before calling `make_http_request_with_x402`.
make_http_request_with_x402
Call an x402-protected HTTP endpoint with automatic USDC/ALGO payment from the active wallet. If `paymentRequirements` is not supplied, this tool runs discovery internally (one extra request). Builds an atomic 2-transaction group (facilitator fee-payer + wallet payment), signs the payment leg with the wallet, and resends with the `PAYMENT-SIGNATURE` header.
bazaar_list
Browse paid API resources cataloged in the Bazaar (the discovery directory hosted by the configured facilitator). Returns a compact summary per resource by default; pass `full: true` for the verbatim facilitator response. Supports filtering by `network`, `method`, `merchantId`, plus standard `limit`/`offset` pagination.
bazaar_search
Search Bazaar paid API resources by keyword. Hits the same /discovery/resources endpoint as bazaar_list but with the `search` query forwarded to the facilitator. Additional filters (`scheme`, `maxUsdPrice`, `asset`, `payTo`, `extensions`, `includeTestnets`) are applied client-side after the response. Defaults to mainnet-only.
bazaar_get_resource_details
Fetch full details for a single Bazaar resource by its exact `resource` URL. Internally calls /discovery/resources?search=<url> and exact-matches against resourceUrl. Returns the verbatim resource record (accepts[], discoveryInfo / extensions, popularity counters) or an error if no match is found.
ping
Basic protocol utility to verify server connectivity
validate_address
Check if an Algorand address is valid
encode_address
Encode a public key to an Algorand address
decode_address
Decode an Algorand address to a public key
get_application_address
Get the address for a given application ID
bytes_to_bigint
Convert bytes to a BigInt
bigint_to_bytes
Convert a BigInt to bytes
encode_uint64
Encode a uint64 to bytes
decode_uint64
Decode bytes to a uint64
verify_bytes
Verify a signature against bytes with an Algorand address
sign_bytes
Sign bytes with a secret key
encode_obj
Encode an object to msgpack format
decode_obj
Decode msgpack bytes to an object
compile_teal
Compile TEAL source code
disassemble_teal
Disassemble TEAL bytecode back to source
send_raw_transaction
Submit signed transactions to the Algorand network
simulate_raw_transactions
Simulate already-encoded, optionally-signed transactions (base64 bytes). Use this when you have raw txn bytes ready and only need a pass/fail + log/cost result — no execution tracing, no extra opcode budget, no unnamed-resource handling. For a richer simulation (trace, extra budget, unsigned txns, multiple groups), use simulate_transactions.
simulate_transactions
Simulate one or more transaction groups built from decoded transaction objects, with a full SimulateRequest config (allowEmptySignatures, allowMoreLogging, allowUnnamedResources, execTraceConfig, extraOpcodeBudget, round). Use this when you need execution traces, extra opcode budget, to simulate unsigned txns, or to opt into Algorand v9+ simulate features. For a quick pass/fail check on pre-encoded bytes, use simulate_raw_transactions instead.
make_payment_txn
Create a payment transaction
make_keyreg_txn
Create a key registration transaction
make_asset_create_txn
Create an asset creation transaction
make_asset_config_txn
Create an asset configuration transaction
make_asset_destroy_txn
Create an asset destroy transaction
make_asset_freeze_txn
Create an asset freeze transaction
make_asset_transfer_txn
Create an asset transfer transaction
make_app_create_txn
Create an application creation transaction
make_app_update_txn
Create an application update transaction
make_app_delete_txn
Create an application delete transaction
make_app_optin_txn
Create an application opt-in transaction
make_app_closeout_txn
Create an application close out transaction
make_app_clear_txn
Create an application clear state transaction
make_app_call_txn
Create an application call transaction
assign_group_id
Assign a group ID to a list of transactions
sign_transaction
Sign a transaction with a secret key
encode_unsigned_transaction
Encode a transaction object into base64 unsigned transaction bytes (msgpack). Accepts output from make_*_txn or assign_group_id.
decode_signed_transaction
Decode base64 signed transaction bytes back into a transaction object with signature details. Accepts the blob from sign_transaction or wallet_sign_transaction.
api_algod_get_account_info
Get current account balance, assets, and auth address from algod
api_algod_get_account_application_info
Get account-specific application information from algod
api_algod_get_account_asset_info
Get account-specific asset information from algod
api_algod_get_application_by_id
Get application information
api_algod_get_application_box
Get application box by name
api_algod_get_application_boxes
Get all application boxes
api_algod_get_asset_by_id
Get current asset information from algod
api_algod_get_pending_transaction
Get pending transaction information
api_algod_get_pending_transactions_by_address
Get pending transactions for an address
api_algod_get_pending_transactions
Get all pending transactions
api_algod_get_transaction_params
Get suggested transaction parameters
api_algod_get_node_status
Get current node status
api_algod_get_node_status_after_block
Get node status after a specific round
api_indexer_lookup_account_created_applications
Get applications created by this account
api_indexer_search_for_accounts
Search for accounts with various criteria
api_indexer_lookup_application_logs
Get application log messages
api_indexer_search_for_applications
Search for applications with various criteria
api_indexer_lookup_asset_balances
Get accounts holding this asset and their balances
api_indexer_lookup_asset_transactions
Get transactions involving this asset
api_indexer_search_for_assets
Search for assets with various criteria
api_indexer_lookup_transaction_by_id
Get transaction information by ID
api_indexer_lookup_account_transactions
Get account transaction history
api_indexer_search_for_transactions
Search for transactions with various criteria
api_nfd_get_nfd
Get a specific NFD by name or by its application ID
api_nfd_get_nfds_for_addresses
Get NFDs for specific addresses
api_nfd_get_nfd_activity
Get activity/changes for NFDs
api_nfd_get_nfd_analytics
Get analytics data for NFDs
api_nfd_browse_nfds
Browse NFDs with various filters
api_nfd_search_nfds
Search NFDs with various filters
api_tinyman_get_pool
Get Tinyman pool information by asset pair
api_tinyman_get_liquidity_quote
Get quote for adding liquidity to a pool
api_tinyman_get_swap_quote
Get quote for swapping assets
api_tinyman_get_pool_analytics
Get analytics for a Tinyman pool
api_tinyman_get_pool_creation_quote
Get quote for creating a new Tinyman pool
api_tinyman_get_remove_liquidity_quote
Get quote for removing liquidity from a pool
api_tinyman_get_asset_optin_quote
Get quote for opting into a Tinyman pool token
api_tinyman_get_validator_optin_quote
Get quote for opting into Tinyman validator app
api_tinyman_get_validator_optout_quote
Get quote for opting out of Tinyman validator app
api_haystack_get_swap_quote
Get an optimized swap quote from Haystack Router — a DEX aggregator that finds the best swap route across multiple Algorand DEXes (Tinyman V2, Pact, Folks) and LST protocols (tALGO, xALGO). Returns the best-price quote with route details, USD values, and price impact. Use this to preview a swap before executing. All amounts are in base units (e.g., 1000000 = 1 ALGO).
api_haystack_execute_swap
Execute an optimized token swap via Haystack Router — gets the best route across multiple DEXes (Tinyman V2, Pact, Folks) and LST protocols, then signs and submits the atomic transaction group using the active wallet account. This is an all-in-one tool: quote → sign → submit → confirm. All amounts are in base units (e.g., 1000000 = 1 ALGO).
api_haystack_needs_optin
Check if an Algorand address needs to opt into an asset before swapping. Returns true if opt-in is needed, false otherwise. Always returns false for ALGO (ASA 0). Use before executing a swap to determine if wallet_optin_asset should be called first.
api_pera_asset_verification_status
Get the verification status of an Algorand mainnet asset from Pera Wallet. Returns verification tier (verified, trusted, suspicious, unverified) and explorer URL.
api_pera_verified_asset_details
Get detailed information about an Algorand mainnet asset from Pera Wallet, including name, unit name, decimals, total supply, USD value, logo, verification tier, and collectible status.
api_pera_verified_asset_search
Search Pera Wallet verified Algorand mainnet assets by name, unit name, or keyword. Returns matching assets with verification status, USD value, and logo.
alpha_get_live_markets
Fetch all live Alpha Arcade prediction markets. Returns summary: id, title, marketAppId, prices, volume. Multi-choice markets have an options[] array — use options[].marketAppId for trading.
alpha_get_reward_markets
Fetch Alpha Arcade markets with liquidity rewards (totalRewards, rewardsPaidOut, etc.). Same shape as alpha_get_live_markets but includes reward info. Requires ALPHA_API_KEY.
alpha_get_market
Fetch full details for a single Alpha Arcade prediction market. Pass marketAppId (numeric, always required) and optionally marketId (UUID) for richer API data.
alpha_get_orderbook
Fetch the on-chain orderbook as a unified YES-perspective view. Merges all 4 sides (YES bids/asks + NO bids/asks). Includes spread calculation.
alpha_get_open_orders
Fetch all open orders for a wallet on a specific Alpha Arcade market. Uses your active MCP wallet if walletAddress is not provided.
alpha_get_positions
Fetch all YES/NO token positions for a wallet across all Alpha Arcade markets. Uses your active MCP wallet if walletAddress is not provided.
alpha_create_limit_order
Place a limit order on an Alpha Arcade prediction market. Price and quantity in microunits (500000 = $0.50, 1000000 = 1 share). Locks ~0.957 ALGO collateral. Returns escrowAppId — save it for cancel_order.
alpha_create_market_order
Place a market order with auto-matching on Alpha Arcade. Price, quantity, and slippage in microunits. Returns escrowAppId, matched quantity, and actual fill price.
alpha_cancel_order
Cancel an open Alpha Arcade order. Requires escrowAppId and orderOwner. Refunds USDC/tokens and ~0.957 ALGO collateral.
alpha_amend_order
Edit an existing unfilled Alpha Arcade order in-place (change price, quantity, or slippage). Faster than cancel + recreate.
alpha_propose_match
Propose a match between an existing maker order and your wallet as taker on Alpha Arcade.
alpha_split_shares
Split USDC into equal YES and NO outcome tokens on Alpha Arcade. 1 USDC (1000000 microunits) = 1 YES + 1 NO.
alpha_merge_shares
Merge equal YES and NO outcome tokens back into USDC on Alpha Arcade. 1 YES + 1 NO = 1 USDC.
alpha_claim
Claim USDC from a resolved Alpha Arcade market by redeeming outcome tokens. Winning = 1:1 USDC.
generate_algorand_qrcode
Generate an Algorand URI and QR code according to ARC-26 specification
get_knowledge_doc
Get markdown content for specified knowledge documents
- create_account: Create a new Algorand account
- rekey_account: Rekey an Algorand account to a new address
- mnemonic_to_mdk: Convert a mnemonic to a master derivation key
- mdk_to_mnemonic: Convert a master derivation key to a mnemonic
- secret_key_to_mnemonic: Convert a secret key to a mnemonic
- mnemonic_to_secret_key: Convert a mnemonic to a secret key
- seed_from_mnemonic: Generate a seed from a mnemonic
- mnemonic_from_seed: Generate a mnemonic from a seed
- wallet_add_account: Create a new Algorand account, store it in the agent-wallet database with a nickname, and auto-switch to it if it is the first account. Returns address, public key, nickname, and index. The mnemonic is held internally by the MCP server and never returned to the agent.
- wallet_remove_account: Remove an Algorand account from the wallet by nickname or index.
- wallet_list_accounts: List wallet accounts with their nicknames and addresses. By default returns only ACTIVE accounts (signable). Pass { archived: true } to return ARCHIVED accounts instead — these are accounts whose mnemonic could not be recovered from the OS keychain at startup (e.g., wallet.db moved to a new machine without keychain, or fresh Docker install over an existing DB). Archived rows stay in the DB for forensics but cannot sign; their nicknames are freed for reuse by new active accounts.
- wallet_switch_account: Switch the active wallet account by nickname or index. The active account is used for signing and balance queries.
- wallet_get_info: Get info for the ACTIVE wallet account (an account whose private key this MCP server owns in the OS keychain). Returns nickname, address, public key, network, on-chain balance, min-balance, opted-in apps/assets counts. Use this when you want to know the state of "the wallet you control." For an arbitrary on-chain account that this wallet does NOT own, use api_algod_get_account_info instead.
- wallet_get_assets: Get all ASA holdings for the ACTIVE wallet account (an account whose private key this MCP server owns). Returns the wallet nickname, address, network, and the assets array. Use this when listing holdings of "the wallet you control." For asset holdings of an arbitrary on-chain account, use api_algod_get_account_info (returns full account including assets) or api_algod_get_account_asset_info (single asset).
- wallet_sign_transaction: Sign a single transaction with the active wallet account.
- wallet_sign_transaction_group: Sign a group of transactions with the active wallet account. Assigns group ID automatically.
- wallet_sign_data: Sign arbitrary data with the active wallet account using raw Ed25519 (noble library, no Algorand SDK prefix). Returns hex signature.
- wallet_optin_asset: Opt the active wallet account into an asset by ID. Creates, signs, and submits the opt-in transaction.
- x402_discover_payment_requirements: Probe an x402-protected HTTP endpoint and return its payment requirements (the accepts array from the 402 response) without paying. Use this to inspect cost and supported networks/assets before calling make_http_request_with_x402.
- make_http_request_with_x402: Call an x402-protected HTTP endpoint with automatic USDC/ALGO payment from the active wallet. If paymentRequirements is not supplied, this tool runs discovery internally (one extra request). Builds an atomic 2-transaction group (facilitator fee-payer + wallet payment), signs the payment leg with the wallet, and resends with the PAYMENT-SIGNATURE header.
- bazaar_list: Browse paid API resources cataloged in the Bazaar (the discovery directory hosted by the configured facilitator). Returns a compact summary per resource by default; pass full: true for the verbatim facilitator response. Supports filtering by network, method, merchantId, plus standard limit/offset pagination.
- bazaar_search: Search Bazaar paid API resources by keyword. Hits the same /discovery/resources endpoint as bazaar_list but with the search query forwarded to the facilitator. Additional filters (scheme, maxUsdPrice, asset, payTo, extensions, includeTestnets) are applied client-side after the response. Defaults to mainnet-only.
- bazaar_get_resource_details: Fetch full details for a single Bazaar resource by its exact resource URL. Internally calls /discovery/resources?search=<url> and exact-matches against resourceUrl. Returns the verbatim resource record (accepts[], discoveryInfo / extensions, popularity counters) or an error if no match is found.
- ping: Basic protocol utility to verify server connectivity
- validate_address: Check if an Algorand address is valid
- encode_address: Encode a public key to an Algorand address
- decode_address: Decode an Algorand address to a public key
- get_application_address: Get the address for a given application ID
- bytes_to_bigint: Convert bytes to a BigInt
- bigint_to_bytes: Convert a BigInt to bytes
- encode_uint64: Encode a uint64 to bytes
- decode_uint64: Decode bytes to a uint64
- verify_bytes: Verify a signature against bytes with an Algorand address
- sign_bytes: Sign bytes with a secret key
- encode_obj: Encode an object to msgpack format
- decode_obj: Decode msgpack bytes to an object
- compile_teal: Compile TEAL source code
- disassemble_teal: Disassemble TEAL bytecode back to source
- send_raw_transaction: Submit signed transactions to the Algorand network
- simulate_raw_transactions: Simulate already-encoded, optionally-signed transactions (base64 bytes). Use this when you have raw txn bytes ready and only need a pass/fail + log/cost result — no execution tracing, no extra opcode budget, no unnamed-resource handling. For a richer simulation (trace, extra budget, unsigned txns, multiple groups), use simulate_transactions.
- simulate_transactions: Simulate one or more transaction groups built from decoded transaction objects, with a full SimulateRequest config (allowEmptySignatures, allowMoreLogging, allowUnnamedResources, execTraceConfig, extraOpcodeBudget, round). Use this when you need execution traces, extra opcode budget, to simulate unsigned txns, or to opt into Algorand v9+ simulate features. For a quick pass/fail check on pre-encoded bytes, use simulate_raw_transactions instead.
- make_payment_txn: Create a payment transaction
- make_keyreg_txn: Create a key registration transaction
- make_asset_create_txn: Create an asset creation transaction
- make_asset_config_txn: Create an asset configuration transaction
- make_asset_destroy_txn: Create an asset destroy transaction
- make_asset_freeze_txn: Create an asset freeze transaction
- make_asset_transfer_txn: Create an asset transfer transaction
- make_app_create_txn: Create an application creation transaction
- make_app_update_txn: Create an application update transaction
- make_app_delete_txn: Create an application delete transaction
- make_app_optin_txn: Create an application opt-in transaction
- make_app_closeout_txn: Create an application close out transaction
- make_app_clear_txn: Create an application clear state transaction
- make_app_call_txn: Create an application call transaction
- assign_group_id: Assign a group ID to a list of transactions
- sign_transaction: Sign a transaction with a secret key
- encode_unsigned_transaction: Encode a transaction object into base64 unsigned transaction bytes (msgpack). Accepts output from make_*_txn or assign_group_id.
- decode_signed_transaction: Decode base64 signed transaction bytes back into a transaction object with signature details. Accepts the blob from sign_transaction or wallet_sign_transaction.
- api_algod_get_account_info: Get current account balance, assets, and auth address from algod
- api_algod_get_account_application_info: Get account-specific application information from algod
- api_algod_get_account_asset_info: Get account-specific asset information from algod
- api_algod_get_application_by_id: Get application information
- api_algod_get_application_box: Get application box by name
- api_algod_get_application_boxes: Get all application boxes
- api_algod_get_asset_by_id: Get current asset information from algod
- api_algod_get_pending_transaction: Get pending transaction information
- api_algod_get_pending_transactions_by_address: Get pending transactions for an address
- api_algod_get_pending_transactions: Get all pending transactions
- api_algod_get_transaction_params: Get suggested transaction parameters
- api_algod_get_node_status: Get current node status
- api_algod_get_node_status_after_block: Get node status after a specific round
- api_indexer_lookup_account_created_applications: Get applications created by this account
- api_indexer_search_for_accounts: Search for accounts with various criteria
- api_indexer_lookup_application_logs: Get application log messages
- api_indexer_search_for_applications: Search for applications with various criteria
- api_indexer_lookup_asset_balances: Get accounts holding this asset and their balances
- api_indexer_lookup_asset_transactions: Get transactions involving this asset
- api_indexer_search_for_assets: Search for assets with various criteria
- api_indexer_lookup_transaction_by_id: Get transaction information by ID
- api_indexer_lookup_account_transactions: Get account transaction history
- api_indexer_search_for_transactions: Search for transactions with various criteria
- api_nfd_get_nfd: Get a specific NFD by name or by its application ID
- api_nfd_get_nfds_for_addresses: Get NFDs for specific addresses
- api_nfd_get_nfd_activity: Get activity/changes for NFDs
- api_nfd_get_nfd_analytics: Get analytics data for NFDs
- api_nfd_browse_nfds: Browse NFDs with various filters
- api_nfd_search_nfds: Search NFDs with various filters
- api_tinyman_get_pool: Get Tinyman pool information by asset pair
- api_tinyman_get_liquidity_quote: Get quote for adding liquidity to a pool
- api_tinyman_get_swap_quote: Get quote for swapping assets
- api_tinyman_get_pool_analytics: Get analytics for a Tinyman pool
- api_tinyman_get_pool_creation_quote: Get quote for creating a new Tinyman pool
- api_tinyman_get_remove_liquidity_quote: Get quote for removing liquidity from a pool
- api_tinyman_get_asset_optin_quote: Get quote for opting into a Tinyman pool token
- api_tinyman_get_validator_optin_quote: Get quote for opting into Tinyman validator app
- api_tinyman_get_validator_optout_quote: Get quote for opting out of Tinyman validator app
- api_haystack_get_swap_quote: Get an optimized swap quote from Haystack Router — a DEX aggregator that finds the best swap route across multiple Algorand DEXes (Tinyman V2, Pact, Folks) and LST protocols (tALGO, xALGO). Returns the best-price quote with route details, USD values, and price impact. Use this to preview a swap before executing. All amounts are in base units (e.g., 1000000 = 1 ALGO).
- api_haystack_execute_swap: Execute an optimized token swap via Haystack Router — gets the best route across multiple DEXes (Tinyman V2, Pact, Folks) and LST protocols, then signs and submits the atomic transaction group using the active wallet account. This is an all-in-one tool: quote → sign → submit → confirm. All amounts are in base units (e.g., 1000000 = 1 ALGO).
- api_haystack_needs_optin: Check if an Algorand address needs to opt into an asset before swapping. Returns true if opt-in is needed, false otherwise. Always returns false for ALGO (ASA 0). Use before executing a swap to determine if wallet_optin_asset should be called first.
- api_pera_asset_verification_status: Get the verification status of an Algorand mainnet asset from Pera Wallet. Returns verification tier (verified, trusted, suspicious, unverified) and explorer URL.
- api_pera_verified_asset_details: Get detailed information about an Algorand mainnet asset from Pera Wallet, including name, unit name, decimals, total supply, USD value, logo, verification tier, and collectible status.
- api_pera_verified_asset_search: Search Pera Wallet verified Algorand mainnet assets by name, unit name, or keyword. Returns matching assets with verification status, USD value, and logo.
- alpha_get_live_markets: Fetch all live Alpha Arcade prediction markets. Returns summary: id, title, marketAppId, prices, volume. Multi-choice markets have an options[] array — use options[].marketAppId for trading.
- alpha_get_reward_markets: Fetch Alpha Arcade markets with liquidity rewards (totalRewards, rewardsPaidOut, etc.). Same shape as alpha_get_live_markets but includes reward info. Requires ALPHA_API_KEY.
- alpha_get_market: Fetch full details for a single Alpha Arcade prediction market. Pass marketAppId (numeric, always required) and optionally marketId (UUID) for richer API data.
- alpha_get_orderbook: Fetch the on-chain orderbook as a unified YES-perspective view. Merges all 4 sides (YES bids/asks + NO bids/asks). Includes spread calculation.
- alpha_get_open_orders: Fetch all open orders for a wallet on a specific Alpha Arcade market. Uses your active MCP wallet if walletAddress is not provided.
- alpha_get_positions: Fetch all YES/NO token positions for a wallet across all Alpha Arcade markets. Uses your active MCP wallet if walletAddress is not provided.
- alpha_create_limit_order: Place a limit order on an Alpha Arcade prediction market. Price and quantity in microunits (500000 = $0.50, 1000000 = 1 share). Locks ~0.957 ALGO collateral. Returns escrowAppId — save it for cancel_order.
- alpha_create_market_order: Place a market order with auto-matching on Alpha Arcade. Price, quantity, and slippage in microunits. Returns escrowAppId, matched quantity, and actual fill price.
- alpha_cancel_order: Cancel an open Alpha Arcade order. Requires escrowAppId and orderOwner. Refunds USDC/tokens and ~0.957 ALGO collateral.
- alpha_amend_order: Edit an existing unfilled Alpha Arcade order in-place (change price, quantity, or slippage). Faster than cancel + recreate.
- alpha_propose_match: Propose a match between an existing maker order and your wallet as taker on Alpha Arcade.
- alpha_split_shares: Split USDC into equal YES and NO outcome tokens on Alpha Arcade. 1 USDC (1000000 microunits) = 1 YES + 1 NO.
- alpha_merge_shares: Merge equal YES and NO outcome tokens back into USDC on Alpha Arcade. 1 YES + 1 NO = 1 USDC.
- alpha_claim: Claim USDC from a resolved Alpha Arcade market by redeeming outcome tokens. Winning = 1:1 USDC.
- generate_algorand_qrcode: Generate an Algorand URI and QR code according to ARC-26 specification
- get_knowledge_doc: Get markdown content for specified knowledge documents
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"algorand": {
"algorand-mcp": {
"command": "npx",
"args": [
"@goplausible/algorand-mcp"
]
}
}
}
}
McpServers
{
"algorand-mcp": {
"command": "npx",
"args": [
"@goplausible/algorand-mcp"
]
}
}
A comprehensiveModel Context Protocol (MCP)server that gives AI agents and LLMs full access to the Algorand blockchain. Built byGoPlausible.
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.
- Agent wallet — mnemonics stored in a local SQLite database, used by the MCP server to sign on the agent's behalf (mnemonics never returned in tool responses)
- Wallet accounts with human-readable nicknames
- 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 HTTP micropayments — automatic discovery and one-call paid requests using the active wallet (USDC/ALGO)
- AP2 tooling 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
npm install -g @goplausible/algorand-mcp
git clone https://github.com/GoPlausible/algorand-mcp.git cd algorand-mcp npm install npm run build
The server runs overstdio. There are three ways to invoke it — pick whichever suits your setup:
No environment variables are requiredfor standard use. Network selection, pagination, and node URLs are all handled dynamically per tool call.
No manual configuration needed — install the@goplausible/openclaw-algorand-pluginnpm package and the Algorand MCP server is configured automatically:
npm install -g @goplausible/openclaw-algorand-plugin
Edit~/Library/Application Support/Claude/claude_desktop_config.json(macOS) or%APPDATA%\Claude\claude_desktop_config.json(Windows):
{ "mcpServers": { "algorand-mcp": { "command": "npx", "args": ["@goplausible/algorand-mcp"] } } }
{ "mcpServers": { "algorand-mcp": { "command": "algorand-mcp" } } }
{ "mcpServers": { "algorand-mcp": { "command": "node", "args": ["/absolute/path/to/algorand-mcp/dist/index.js"] } } }
Create.mcp.jsonin your project root (project scope) or~/.claude.json(user scope):
{ "mcpServers": { "algorand-mcp": { "type": "stdio", "command": "npx", "args": ["@goplausible/algorand-mcp"] } } }
claude mcp add algorand-mcp -- npx @goplausible/algorand-mcp
Add viaSettings > MCP Servers, or edit.cursor/mcp.jsonin your project root:
{ "mcpServers": { "algorand-mcp": { "command": "npx", "args": ["@goplausible/algorand-mcp"] } } }
Add viaSettings > MCP, or edit~/.codeium/windsurf/mcp_config.json:
{ "mcpServers": { "algorand-mcp": { "command": "npx", "args": ["@goplausible/algorand-mcp"] } } }
Edit.vscode/mcp.jsonin your workspace root, or openSettings > MCP Servers:
{ "servers": { "algorand-mcp": { "type": "stdio", "command": "npx", "args": ["@goplausible/algorand-mcp"] } } }
Add via theMCP Serverspanel in the Cline sidebar, or edit~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json(macOS):
{ "mcpServers": { "algorand-mcp": { "command": "npx", "args": ["@goplausible/algorand-mcp"], "disabled": false } } }
Create.codex/mcp.jsonin your project root or~/.codex/mcp.jsonfor global scope:
{ "mcpServers": { "algorand-mcp": { "command": "npx", "args": ["@goplausible/algorand-mcp"] } } }
{ "mcp": { "algorand-mcp": { "type": "stdio", "command": "npx", "args": ["@goplausible/algorand-mcp"] } } }
The server speaks the standard MCP stdio protocol. For any client not listed above, configure it with:
- Command:npx(oralgorand-mcpif globally installed, ornode /path/to/dist/index.js)
- Args:["@goplausible/algorand-mcp"](for npx)
- Transport:stdio
Every tool accepts an optionalnetworkparameter:"mainnet"(default),"testnet", or"localnet". Algod and Indexer URLs are built-in for mainnet and testnet viaAlgoNode.
{ "name": "api_algod_get_account_info", "arguments": { "address": "ABC...", "network": "testnet" } }
If nonetworkis provided, tools default tomainnet.
API responses are automatically paginated. Every tool accepts an optionalitemsPerPageparameter (default: 10). Pass thepageTokenfrom a previous response to fetch the next page.
The agent wallet is a local SQLite database that the MCP server controls on the agent's behalf. The server holds the mnemonics and signs transactions for the agent — the agent never sees the mnemonics in any tool response.
Threat model.The wallet.db file is the secret. Anyone with read access to it can recover every mnemonic stored in the wallet. The mitigations are filesystem permissions (0600, owner-only), keeping the data directory off shared/world-readable volumes, and treating the data directory like any other secret store (snapshot it carefully, restrict backups, encrypt the host disk for at-rest protection). For Docker deployments, mount~/.algorand-mcpas a named volume and restrict access to it like you would any secret material.
- Account creation(wallet_add_account) — Generates a keypair and inserts a row containing the mnemonic intoaccounts. Returns address, public key, nickname, and index. The mnemonic is never returned.
- Active account— One account is active at a time.wallet_switch_accountchanges it by nickname or index. All signing and query tools operate on the active account.
- Transaction signing(wallet_sign_transaction) — Reads the mnemonic from the DB, signs in memory, returns only the signed blob.
- Data signing(wallet_sign_data) — Signs arbitrary hex data using raw Ed25519 via the@noble/curveslibrary (no Algorand SDK prefix). Useful for off-chain authentication.
- Asset opt-in(wallet_optin_asset) — Creates, signs, and submits an opt-in transaction for the active account in one step.
Backward compatibility (silent migration from OS keychain)
Older installs of this MCP stored mnemonics in the OS keychain (@napi-rs/keyring). On first startup after upgrading, the server runs a one-shot, silent migration:
- For everyaccountsrow whosemnemoniccolumn isNULLor empty, it attempts to read the mnemonic from the OS keychain under the service namealgorand-mcpkeyed by the address.
- If found, the mnemonic is copied into the DB column.
- The original keychain entry is left in place as a redundant backup; nothing is deleted.
After this completes, the DB is the sole source of truth. The keychain is consulted only as a fallback if the DB still has aNULLmnemonic for an address (e.g., the keychain was unavailable during startup and became available later). All new accounts created after the upgrade are written directly to the DB and never touch the keychain.
Orphan handling (archive, not delete).If anaccountsrow exists but its mnemonic isn't in the keychainandisn't already in the DB (e.g., the user copiedwallet.dbto a new machine without also moving the keychain entries, restored from a partial backup, or installed in Docker where the keychain never existed), that row is unusable for signing. Rather than delete it, the server marks the row asarchived(UPDATE accounts SET archived = 1 WHERE mnemonic IS NULL OR mnemonic = ''). Archived rows:
- arehidden from the defaultwallet_list_accountsresponse
- never become the active account(the active-account index is clamped to the end of the remaining active list, or reset to0if no active accounts remain)
- keep theiroriginal nickname(a partial unique indexidx_active_nicknameenforces nickname uniqueness only among active rows, so a newwallet_add_accountcan reuse the same nickname for a fresh keypair)
- aresurfaced viawallet_list_accounts { archived: true }for forensics or future recovery
Archiving is silent at the MCP tool layer. The only diagnostic is a one-line stderr log per failed keychain read ([algorand-mcp] keychain read failed for <addr>…: <msg>), so if a user investigates a false archive they can see whether the keychain threw "no entry" vs "access denied" vs "no DBus" etc.
No user action is required for any of this. No prompts, no env vars, no migration tools.
The DB schema evolves additively via an idempotent migration that runs at startup:
The v2→v3 step recreates theaccountstable (SQLite cannot drop a column-level UNIQUE constraint via ALTER) and copies data forward witharchived = 0. Existing wallets keep working unchanged.
This MCP implements the Algorand flavor of x402, where payments are USDC (or native ALGO) transfers on Algorand. It exposes two tools that collapse the seven-step manual flow (probe → parse → opt-in check → build fee payer → build payment → group → sign → encode → header → retry) into a single tool call.
Agent (LLM) algorand-mcp Endpoint Facilitator ────────── ──────────── ──────── ─────────── │ │ │ │ │ make_http_request_ │ │ │ │ with_x402 { url, ... } │ │ │ │ ────────────────────────► │ HTTP request │ │ │ │ ─────────────────────────► │ │ │ │ 402 PaymentRequired │ │ │ │ ◄───────────────────────── │ │ │ │ pick accepts[i] for │ │ │ │ Algorand network │ │ │ │ build fee-payer + payment │ │ │ │ (atomic group of 2) │ │ │ │ sign payment leg │ │ │ │ via agent wallet DB │ │ │ │ encode unsigned fee-payer │ │ │ │ base64 PAYMENT-SIGNATURE │ │ │ │ ─────────────────────────► │ │ │ │ HTTP request + │ forward + settle │ │ │ PAYMENT-SIGNATURE │ ───────────────────────► │ │ │ │ sign fee-payer, │ │ │ │ submit atomic group │ │ │ 200 + resource │ ◄─────────────────────── │ │ │ ◄───────────────────────── │ │ │ ◄─ { result, paid: {...}}│ │ │ │ │ │ │
What's different from the Coinbase/EVM version
- Header name isPAYMENT-SIGNATURE, notX-PAYMENT. The header body is base64-encoded JSON withx402Version,scheme,network(a CAIP-2 identifier likealgorand:wGHE2Pw…for mainnet), apayload, and a verbatim copy of theaccepts[]entry the client chose.
- Payment is an atomic 2-transaction group.Index 0 is a fee-payer transaction (sender = facilitator, amount = 0, fee = 2000 µAlgo for the whole group); index 1 is the actual USDC ASA transfer (sender = wallet, fee = 0). The wallet signs only index 1 — the facilitator signs index 0 server-side at settlement. The user's wallet pays only the USDC, not even network fees.
- Network strings are Algorand CAIP-2.This MCP recognizes mainnet (wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=) and testnet (SGO1GKSzyE7IEPItTxCByw9x8FmnrCDexi9/cOUJOiI=). Endpoints that only accept Base, Solana, or other non-Algorand networks are not satisfiable here and the tool returns a clear error.
Coinbase Wallet MCP compatibility (x402 surface)
The x402 tools —make_http_request_with_x402andx402_discover_payment_requirements— are intentionally name- and shape-compatible with the Coinbase Wallet MCP's x402 tools. The input parameters (baseURL,path,method,queryParams,body,headers,correlationId,maxAmountPerRequest,paymentRequirements,preferredNetwork,extensions) are the same. The output envelope (result,_atomicUnitsNote) is the same.
- Drop-in for Algorand x402.Agents and MCP apps written against the Coinbase Wallet MCP's x402 tools work against this server without any prompt changes — they just hit Algorand x402 endpoints instead of Base/Solana ones.
- Same agent reflexes.Models trained on tool-call traces from the Coinbase ecosystem use these tools correctly on first call. Nothing to relearn.
- Compatibility is scoped to the x402 surface only.The wallet, account, transaction-building, and DEX tools in this MCP are Algorand-specific and do not mirror Coinbase's wallet API. Onlymake_http_request_with_x402andx402_discover_payment_requirementsare drop-in compatible.
The one parameter that necessarily differs:preferredNetworkacceptsmainnet | testnet | localnetonly (Algorand networks), because the wallet only signs Algorand transactions. Coinbase's enum listsbase | base-sepolia | solana | solana-devnet. Agents that pass one of those values get a clear error indicating no Algorand-payable accepts entry exists.
# Step 1 (optional): peek at the cost x402_discover_payment_requirements { "baseURL": "https://example.x402.goplausible.xyz", "path": "/weather", "method": "GET" } # returns: { result: { accepts: [{ scheme: "exact", network: "algorand:SGO1...", # maxAmountRequired: "100", asset: "10458941", # payTo: "AAAA...", extra: { feePayer: "BBBB..." } }] } } # Step 2: pay and fetch in one call make_http_request_with_x402 { "baseURL": "https://example.x402.goplausible.xyz", "path": "/weather", "method": "GET", "maxAmountPerRequest": 10000, "preferredNetwork": "testnet" } # returns: { result: <weather payload>, paid: { network: "testnet", # asset: "10458941", # amount: "100", payTo: "AAAA..." }, # paymentResponse: <decoded X-PAYMENT-RESPONSE> }
The active wallet account must be opted into the target ASA (e.g. USDC) and hold enough balance to covermaxAmountRequired. If it isn't opted in, the payment fails at settlement — opt in first withwallet_optin_asset.
- An active wallet account exists (wallet_get_infoto verify)
- That account is opted into the payment asset (USDC mainnet ASA31566704, testnet ASA10458941)
- The account has enough of the payment asset formaxAmountRequired
- The endpoint'saccepts[]includes at least one entry with an Algorand network the MCP recognizes
Environment variables are only needed for special setups. Pass them via theenvblock in your MCP config.
{ "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.
SeeSecure Walletfor full architecture details.
Seex402 HTTP Paymentsfor the full protocol explanation.
Live, current-state reads against an Algod node.Default choice for account/application/asset lookups— the matching indexer endpoints were intentionally disabled to keep the tool surface lean (see.notes/redundant-tools-report.md). Use the indexer family below only when you need historical or filtered queries that algod cannot serve.
Historical / filtered queries against an Algorand Indexer instance. Use these for time-range scans, paginated searches, log retrieval, and creator/holder discovery — anything algod's current-state endpoints cannot answer.
Seven indexer endpoints that duplicated algod equivalents (account-by-id, account assets, account app local states, application by id, application box, application boxes, asset by id) were intentionally disabled. They live commented-out insrc/tools/apiManager/indexer/and can be re-enabled in one place if needed.
Pera Wallet tools aremainnet only— the Pera public API does not support testnet or localnet.
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.
Optional env var:ALPHA_API_KEY— needed for reward market data.ALPHA_API_BASE_URL— custom API endpoint (default:https://platform.alphaarcade.com/api).
The server exposes MCP resources for direct data access. Wallet resources are described in theSecure Walletsection above.
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 # Agent wallet (SQLite-backed) │ │ ├── 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
All tool responses follow the MCP content format. API responses include automatic pagination when datasets exceeditemsPerPage(default 10):
{ "data": { ... }, "metadata": { "totalItems": 100, "itemsPerPage": 10, "currentPage": 1, "totalPages": 10, "hasNextPage": true, "pageToken": "eyJ..." } }
PasspageTokenfrom a previous response to fetch the next page. SetitemsPerPageon any tool call to control page size.
# Install dependencies npm install # Type-check npm run typecheck # Build npm run build # Clean build output npm run clean
The project has a comprehensive dual-layer test suite: fastunit tests(mocked, no network) and realE2E tests(live testnet). Both useJest 29withts-jestand ESM support.
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 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.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



