Skip to main content
Glama
Moralis MCP Server

Moralis MCP Server

Official
by MoralisWeb3

🧠 Overview

The Moralis MCP Server is a local or cloud-deployable engine that connects natural language prompts to real blockchain insights — allowing AI models to query wallet activity, token metrics, dapp usage, and more without custom code or SQL.

Built on top of the Model Context Protocol, this server makes it easy for LLMs to talk to Moralis APIs in a consistent, explainable, and extensible way.

  • 🔗 Fully pluggable: swap LLMs, customize retrieval logic, or extend with your own tools

  • 🧱 Works with OpenAI, Claude, and open-source models

  • 🧠 Powers agents, devtools, bots, dashboards, and beyond

Related MCP server: Trello MCP Server

⚙️ Common Use Cases

  • 🤖 AI agents & assistants: “What’s this wallet’s trading history?”

  • 📈 Devtools: on-chain QA, testing, CLI integrations

  • 📊 Dashboards: natural language to charts/data

  • 📉 Monitoring: alerting & summarization for tokens/dapps

  • 🧠 Trading bots: LLM-driven strategies with real blockchain grounding

🔐 Getting an API Key

To use this MCP server with Moralis APIs, you'll need an API key:

  1. Go to Moralis developer portal

  2. Sign up and log in

  3. Navigate to your API Keys page from the main menu

  4. Copy your key and configure it in your config file (see next section), or set it in your environment:

export MORALIS_API_KEY=<your_api_key>

⚠️ Note: Some features and endpoints require a Moralis paid plan. For full access and production-grade performance, we recommend signing up for a paid tier.

🚀 Usage with a Client

To connect the MCP server to a compatible client (e.g. Claude Desktop, OpenAI-compatible agents, VS Code extensions, etc.), configure the client to launch the server as a subprocess.

Most clients support a simple config file - for example, you might create a file like mcp.json in the client’s configuration directory with the following:

{
  "mcpServers": {
    "serverName": {
      "command": "npx @moralisweb3/api-mcp-server",
      "args": [],
      "env": {
        "MORALIS_API_KEY": "<YOUR_API_KEY>"
      }
    }
  }
}

This setup can be adapted for any client that supports MCP servers. Replace the example values with those specific to your use case.

Installing via Smithery

To install Moralis API Server for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install @MoralisWeb3/moralis-mcp-server --client claude

🖥️ Using as a Server

The server accepts an optional --transport argument to specify the transport type. The available transport types are:

  • stdio: Communicates over standard input/output (default).

  • web: Starts a HTTP server for communication.

  • streamable-http: Starts an HTTP server with streamable endpoints.

Examples

  1. Using the default stdio transport:

moralis-api-mcp --transport stdio
  1. Using the web transport:

moralis-api-mcp --transport web

This will start a HTTP server. You can send requests to the server using tools like curl or Postman.

  1. Using the streamable-http transport:

moralis-api-mcp --transport streamable-http

This will start an HTTP server. You can send requests to the server using tools like curl or Postman.

Notes

  • Ensure that the required environment variables (e.g., MORALIS_API_KEY) are set before starting the server.

  • For custom configurations, you can pass additional arguments or environment variables as needed.

  • Refer to the documentation for more details on each transport type.

🛠 Development

Install dependencies:

npm install

Build the server:

npm run build

For development with auto-rebuild:

npm run watch

🐞 Debugging

Since MCP servers communicate over stdio, debugging can be challenging. We recommend using the MCP Inspector, which is available as a package script:

npm run inspector

The Inspector will provide a URL to access debugging tools in your browser.

💬 Example Prompts

Here are some example prompts you can use with your AI agent through the MCP server:

- What’s the current price of PEPE and Ethereum?

- What is the current trading sentiment for TOSHI on Base — bullish or bearish?

- Show me the NFTs owned by `vitalik.eth` on Base.

- What tokens does wallet `0xab71...4321` hold?

- When was wallet 0xabc...123 first and last seen active on Ethereum, Base, and Polygon?

- Show me the complete transaction history for 0xabc...123 across Ethereum, Base, and BNB Chain.

- What is the current net worth in USD of wallet 0xabc...123?

- Find wallet addresses that are likely associated with Coinbase.

- Analyze the current holder distribution of SPX6900 — include whales, small holders, and recent growth trends.

- Show me PEPE’s daily OHLC data for the past 30 days and provide a summary of the trend — is it bullish or bearish?

These prompts are parsed and mapped to structured Moralis API calls using the MCP method registry.

💡 You can also build custom prompts based on any supported method.

📚 API Reference

The Moralis MCP Server wraps and translates prompts into Moralis REST API calls. You can explore the underlying API surface here:

🔗 Moralis Swagger Docs (v2.2)

This documentation covers endpoints for:

  • Token pricing

  • Wallet activity

  • NFT metadata and ownership

  • Transfers and transactions

  • And more

Available Tools

94 tools
evm_getblockC

Get the contents of a block given the block hash.

Inputs: block_number_or_hash (required), chain, include.

evm_getdatetoblockC

Find the closest block to a specific date on a blockchain.

Inputs: chain, date.

evm_getdefipositionsbyprotocolC

Fetch detailed DeFi positions for a given wallet and protocol.

Inputs: address (required), protocol (required), chain.

evm_getdefipositionssummaryB

Get a concise overview of a wallet’s DeFi positions across all protocols.

Inputs: address (required), chain.

evm_getdefisummaryC

Summarize a wallet’s DeFi activity, including total USD value, unclaimed rewards and active protocols.

Inputs: address (required), chain.

evm_getdiscoverytokenA

Retrieve comprehensive details for a specific token, including metadata and stats. For more detailed tokens stats we recommended to use getTokenAnalytics or getMultipleTokenAnalytics. For pair stats, we recommend to use getPairStats.

Inputs: chain (required), token_address (required).

evm_getentitiesbycategoryC

Fetch entities belonging to a specific category. Each entity returns name, logo, description, external links, total addresses and more.

Inputs: categoryId (required), limit.

evm_getentityB

Retrieve details for a specific entity using its unique ID. Returns name, logo, description, external links and related addresses.

Inputs: entityId (required).

evm_getentitycategoriesB

List available categories for blockchain entities.

Inputs: limit.

evm_getfilteredtokensA

Fetch a list of tokens across multiple chains, filtered and ranked by dynamic on-chain metrics like volume, price change, liquidity, holder composition, and more. Supports advanced filters (e.g. “top 10 whales hold <40%”), category-based inclusion/exclusion (e.g. “exclude stablecoins”), and time-based analytics. Ideal for token discovery, investor research, risk analysis, and portfolio tools. Each token returned includes detailed trading metrics as well as on-chain and off-chain metadata.

Inputs: requestBody (required).

evm_gethistoricaltokenholdersB

Track changes in the holder base of an ERC20 token over time. Supports timeseries data for total holders as well as change metrics such as holder distribution and holder acquisition.

Inputs: tokenAddress (required), fromDate (required), toDate (required), timeFrame (required), +3 more.

evm_gethottestnftcollectionsbytradingvolumeB

Get NFT collections by their 24 hour trading volume. Currently only supports Ethereum.

Inputs: no named parameters.

evm_getlatestblocknumberB

Get the most recent block number for a specified blockchain.

Inputs: chain (required).

evm_getmultiplenftsC

Get NFT metadata for one or many NFTs. Accepts an array of up to 25 tokens, each requiring token_address and token_id. Each NFT returned includes on-chain metadata as well as off-chain metadata, floor prices, rarity and more where available.

Inputs: requestBody (required), chain.

evm_getmultipletokenanalyticsB

Fetch analytics for multiple tokens, including buy volume, sell volume, buyers, sellers, transactions, liquidity and FDV trends over time. Accepts an array of up to 200 tokens, each requiring chain and tokenAddress.

Inputs: requestBody (required).

evm_getmultipletokenpricesB

Retrieve the current or historical prices for multiple ERC20 tokens in the blockchain’s native currency and USD. Accepts an array of up to 100 tokens, each requiring token_address and optional fields such as to_block or exchange. Each token returned includes on-chain metadata, as well as off-chain metadata, logos, spam status and more. Additional options to exclude low-liquidity tokens and inactive tokens.

Inputs: requestBody (required), chain, include, max_token_inactivity, +1 more.

evm_getnativebalancesforaddressesA

Retrieve native token balances (e.g. ETH) for one or many wallet addresses in single request.

Inputs: wallet_addresses (required), chain, to_block.

evm_getnftbulkcontractmetadataA

Retrieve metadata (name, symbol) for up to 25 NFT contracts in one call. Also returns off-chain metadata, floor prices and more where available.

Inputs: requestBody (required), chain, include_prices.

evm_getnftbycontracttraitsC

Find NFTs in a contract matching specific traits, perfect for attribute-based searches.

Inputs: address (required), requestBody (required), chain, limit, +4 more.

evm_getnftcollectionstatsB

Get summary stats by NFT collection including total NFT transfers, total tokens and total owners.

Inputs: address (required), chain.

evm_getnftcontractsalepricesB

Fetch sale prices for NFTs in a contract over a specified number of days. Returns the last sale, lowest sale, highest sale, average sale and total trades within the specified period.

Inputs: address (required), chain, days.

evm_getnftcontracttransfersB

Get NFT transfers for a contract, with options to filter by date, token, or other parameters.

Inputs: address (required), chain, from_block, to_block, +7 more.

evm_getnftfloorpricebycontractB

Get floor price for a given collection. Refreshes every 30 minutes.

Inputs: address (required), chain.

evm_getnfthistoricalfloorpricebycontractC

Get timeseries historical floor prices for a given NFT collection. Refreshes every 30 minutes.

Inputs: interval (required), address (required), chain, cursor.

evm_getnftmetadataC

Fetch metadata for a specific NFT. Includes on-chain metadata as well as off-chain metadata, floor prices, rarity and more where available.

Inputs: address (required), token_id (required), chain, format, +3 more.

evm_getnftsalepricesB

Fetch sale prices for a specific NFT over a specified number of days. Returns the last sale, lowest sale, highest sale, average sale and total trades within the specified period.

Inputs: address (required), token_id (required), chain, days.

evm_getnfttradesC

Get NFT trades for a given contract with the ability to filter by marketplace.

Inputs: address (required), chain, from_block, to_block, +6 more.

evm_getnfttradesbywalletC

Get NFT trades for a specific wallet address.

Inputs: address (required), chain, from_block, to_block, +5 more.

evm_getnfttraitsbycollectionC

Explore the distinct traits of NFTs in a contract, showcasing their unique attributes.

Inputs: address (required), chain.

evm_getpaircandlesticksC

Retrieve OHLCV (Open, High, Low, Close, Volume) candlestick data for a token pair.

Inputs: address (required), timeframe (required), currency (required), fromDate (required), +4 more.

evm_getpairstatsB

Access key statistics for a token pair, such as price, buyers, sellers, liquidity, volume and more.

Inputs: address (required), chain.

evm_getsnipersbypairaddressC

Identify sniper wallets that bought a token within a specified timeframe (blocksAfterCreation). Each wallet returned includes detailed information about how much was bought, sold as well as PnL stats and more.

Inputs: address (required), chain, blocksAfterCreation.

evm_getswapsbypairaddressC

Fetch swap transactions (buy, sell, add/remove liquidity) for a specific token pair.

Inputs: address (required), chain, cursor, limit, +6 more.

evm_getswapsbytokenaddressC

Get all swap transactions (buy/sell) for a specific ERC20 token.

Inputs: address (required), chain, cursor, limit, +6 more.

evm_getswapsbywalletaddressB

List all swap transactions (buy/sell) for a specific wallet. Optionally filter by tokenAddress for specific token swaps.

Inputs: address (required), chain, tokenAddress, cursor, +7 more.

evm_gettimeseriestokenanalyticsB

Fetch timeseries buy volume, sell volume, liquidity and FDV for multiple tokens. Accepts an array of up to 200 tokens, each requiring chain and tokenAddress.

Inputs: timeframe (required), requestBody (required).

evm_gettimeseriesvolumeC

Fetch timeseries volume, liquidity and FDV for a specific blockchain.

Inputs: timeframe (required), chain.

evm_gettimeseriesvolumebycategoryB

Fetch timeseries buy volume, sell volume, liquidity and FDV for a specific category. Optionally filter by chain.

Inputs: timeframe (required), categoryId (required), chain.

evm_gettokenholdersC

Returns total holders for a given token, as well as aggregated stats holder supply, holder trends, holder distribution and holder acquisition metrics.

Inputs: tokenAddress (required), chain.

evm_gettokenmetadataC

Retrieve metadata (name, symbol, decimals, logo) for an ERC20 token contract, as well as off-chain metadata, total supply, categories, logos, spam status and more.

Inputs: addresses (required), chain.

evm_gettokenownersC

Identify the major holders of an ERC20 token and understand their ownership percentages. Includes known entities, exchanges and wallet labels.

Inputs: token_address (required), chain, limit, cursor, +1 more.

evm_gettokenpairsC

List supported trading pairs for a specific ERC20 token. Each pair returned includes price, liquidity, volume and more.

Inputs: token_address (required), chain (required), limit, cursor.

evm_gettokenscoreC

Retrieve a score for a specific token along with detailed metrics including price, volume, liquidity, transaction counts, and supply information.

Inputs: tokenAddress (required), chain.

evm_gettokentransfersC

Get all ERC20 token transfers for a contract, ordered by block number (newest first).

Inputs: address (required), chain, from_block, to_block, +5 more.

evm_gettopcryptocurrenciesbymarketcapC

Get cryptocurrencies by their market cap.

Inputs: no named parameters.

evm_gettopcryptocurrenciesbytradingvolumeB

Get cryptocurrencies with the highest 24 hour trading volume.

Inputs: no named parameters.

evm_gettoperc20tokensbymarketcapA

List the top ERC20 tokens ranked by market cap. Currently only supports Ethereum. For more flexibility, we recommend to use getFilteredTokens.

Inputs: no named parameters.

evm_gettoperc20tokensbypricemoversA

Get top ERC20 tokens by price movements (winners and losers). Currently only supports Ethereum. For more flexibility, we recommend to use getFilteredTokens or getTopGainersTokens and getTopLosersTokens.

Inputs: no named parameters.

evm_gettopgainerstokensC

Identify tokens with the highest price increases over a period.

Inputs: chain, min_market_cap, security_score, time_frame.

evm_gettoploserstokensC

List tokens with the largest price decreases over a period.

Inputs: chain, min_market_cap, security_score, time_frame.

evm_gettopnftcollectionsbymarketcapB

Get top NFT collections by their current market cap. Currently only supports Ethereum.

Inputs: no named parameters.

evm_gettopprofitablewalletpertokenC

List the most profitable wallets that have traded a specific ERC20 token.

Inputs: address (required), days, chain.

evm_gettransactionverboseB

Get the ABI-decoded contents of a transaction by the given transaction hash.

Inputs: transaction_hash (required), chain, include.

evm_gettrendingtokensv2A

List top tokens trending based on trading activity, volume, liquidity and more. By default this returns cross-chain results, including Solana. Optionally filter by chain for single chain results.

Inputs: chain, limit.

evm_getuniqueownersbycollectionC

Get unique wallet addresses owning NFTs from a contract.

Inputs: address (required), chain, limit, cursor.

evm_getvolumestatsbycategoryC

Access volume, buyers, sellers and transaction stats for a blockchain, grouped by category. Filter by chain.

Inputs: chain.

evm_getvolumestatsbychainB

Retrieve volume, active wallets and transaction stats for a blockchain over various time periods. Returns data for all chains in a single request.

Inputs: no named parameters.

evm_getwalletactivechainsB

List the blockchain networks a wallet is active on, including their first and last seen timestamps. Options to query cross-chain using the chains parameter.

Inputs: address (required), chains.

evm_getwalletapprovalsC

List active ERC20 token approvals for a wallet, showing which contracts have access.

Inputs: address (required), chain, limit, cursor.

evm_getwallethistoryB

Get the complete decoded transaction history for a given wallet. All transactions are parsed, decoded, categorized and summarized into human-readable records.

Inputs: address (required), chain, from_block, to_block, +7 more.

evm_getwalletnetworthA

Calculate the total net worth of a wallet in USD, with options to exclude spam tokens for accuracy. Options to query cross-chain using the chains parameter, as well as additional options to exclude spam tokens, low-liquidity tokens and inactive tokens.

Inputs: address (required), chains, exclude_spam, exclude_unverified_contracts, +2 more.

evm_getwalletnftcollectionsB

Fetch all NFT Collections held by a specified wallet address. Each Collection returned includes on-chain metadata as well as off-chain metadata, floor prices and more where available.

Inputs: address (required), chain, include_prices, limit, +3 more.

evm_getwalletnftsA

Fetch all NFTs held by a specified wallet address. Use token_addresses to filter by one or many specific contract(s). Each NFT returned includes on-chain metadata as well as off-chain metadata, floor prices, rarity and more where available.

Inputs: address (required), chain, format, limit, +6 more.

evm_getwalletprofitabilityB

Get a detailed profit and loss breakdown by token for a given wallet, over a specified timeframe (days). Optionally filter by token_addresses for specific tokens.

Inputs: address (required), days, chain, token_addresses.

evm_getwalletprofitabilitysummaryC

Get a profit and loss summary for a given wallet, over a specified timeframe (days).

Inputs: address (required), days, chain.

evm_getwalletstatsC

Retrieve key statistics for a wallet, such as total transaction count and activity.

Inputs: address (required), chain.

evm_getwallettokenbalancespriceA

Fetch ERC20 and native token balances for a given wallet address, including their USD prices. Each token returned includes on-chain metadata, as well as off-chain metadata, logos, spam status and more. Additional options to exclude spam tokens, low-liquidity tokens and inactive tokens.

Inputs: address (required), chain, to_block, token_addresses, +7 more.

evm_resolveaddressA

Convert an Ethereum address to its associated ENS domain, if registered.

Inputs: address (required).

evm_resolveensdomainC

Resolve an ENS domain to its associated Ethereum address.

Inputs: domain (required).

evm_searchentitiesC

Find entities, organizations, addresses or wallets linked to blockchain addresses. Results are categorised into 3 arrays: entities, addresses, categories.

Inputs: query (required), limit.

evm_searchtokensB

Search for tokens using their contract address, pair address, name, or symbol. Cross-chain by default with support to filter by chains. Additional options to sortBy various metrics, such as market cap, liquidity or volume.

Inputs: query (required), chains, limit, isVerifiedContract, +2 more.

solana_balanceC

Gets native balance owned by the given address

Inputs: network (required), address (required).

solana_getaggregatedtokenpairstatsC

Get aggregated statistics across supported pairs of a token.

Inputs: network (required), address (required).

solana_getbondingtokensbyexchangeC

Get the list of bonding tokens by given exchange.

Inputs: network (required), exchange (required), cursor, limit.

solana_getcandlesticksC

Gets the candlesticks for a specific pair address

Inputs: network (required), address (required), fromDate (required), toDate (required), +4 more.

solana_getgraduatedtokensbyexchangeC

Get the list of graduated tokens by given exchange.

Inputs: network (required), exchange (required), cursor, limit.

solana_gethistoricaltokenholdersC

Get token holders overtime for a given tokens

Inputs: network (required), address (required), timeFrame (required), fromDate (required), +3 more.

solana_getmultipletokenpricesB

Gets the token price (usd and native) for a given contract address and network.

Inputs: network (required), requestBody (required).

solana_getnewtokensbyexchangeC

Get the list of new tokens by given exchange.

Inputs: network (required), exchange (required), cursor, limit.

solana_getnftmetadataB

Gets the contract level metadata (mint, standard, name, symbol, metaplex) for the given contract

Inputs: network (required), address (required), mediaItems.

solana_getnftsC

Gets NFTs owned by the given address

Inputs: network (required), address (required), nftMetadata, mediaItems, +2 more.

solana_getpairstatsC

Gets the stats for a specific pair address

Inputs: network (required), pairAddress (required).

solana_getportfolioC

Gets all the native and token balances of the given address

Inputs: network (required), address (required), nftMetadata, mediaItems, +1 more.

solana_getsnipersbypairaddressC

Get all snipers.

Inputs: network (required), pairAddress (required), blocksAfterCreation.

solana_getsplC

Gets token balances owned by the given address

Inputs: network (required), address (required), excludeSpam.

solana_getswapsbypairaddressB

Get all swap related transactions (buy, sell, add liquidity & remove liquidity) for a specific pair address.

Inputs: network (required), pairAddress (required), limit, cursor, +4 more.

solana_getswapsbytokenaddressC

Get all swap related transactions (buy, sell) for a specific token address.

Inputs: network (required), address (required), limit, cursor, +4 more.

solana_getswapsbywalletaddressC

Get all swap related transactions (buy, sell) for a specific wallet address.

Inputs: network (required), address (required), limit, cursor, +5 more.

solana_gettokenbondingstatusC

Get the token bonding status for a given network and contract (if relevant).

Inputs: network (required), address (required).

solana_gettokenholdersC

Get the summary of holders for a given token token.

Inputs: network (required), address (required).

solana_gettokenmetadataB

Get the global token metadata for a given network and contract (mint, standard, name, symbol, metaplex).

Inputs: network (required), address (required).

solana_gettokenpairsC

Get the supported pairs for a specific token address.

Inputs: network (required), address (required), cursor, limit.

solana_gettokenpriceC

Gets the token price (usd and native) for a given contract address and network.

Inputs: network (required), address (required).

solana_gettopholdersC

Get paginated top holders for a given token.

Inputs: network (required), address (required), cursor, limit.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3/5.0

    Scored across 94 tools

    Disambiguation3/5

    The tools are organized into clear categories (EVM and Solana) with distinct purposes within each, such as block data, token analytics, NFT operations, and wallet queries. However, there is significant overlap in functionality, especially between similar tools like evm_getmultipletokenanalytics and evm_gettimeseriestokenanalytics, or multiple NFT-related tools that could cause confusion in selection without careful reading of descriptions.

    Naming Consistency5/5

    The naming follows a highly consistent pattern throughout, using a clear prefix (evm_ or solana_) followed by a descriptive verb_noun format (e.g., evm_getblock, solana_getportfolio). This consistency makes it easy to predict tool purposes and navigate the large set without ambiguity in naming conventions.

    Tool Count2/5

    With 94 tools, the count is excessive for a single server, making it overwhelming and difficult for agents to manage effectively. While the tools cover a broad blockchain domain, the sheer volume suggests poor scoping, as many tools could be consolidated or split into more focused servers to improve usability.

    Completeness5/5

    The tool set provides comprehensive coverage for blockchain data, including blocks, tokens, NFTs, wallets, swaps, and analytics across EVM and Solana chains. It supports full CRUD-like operations for querying, analyzing, and monitoring, with no apparent gaps that would hinder agent workflows in this domain.

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      A Model Context Protocol server that converts Solidity bytecode into functional server implementations, allowing interaction with blockchain contracts through a RESTful API.
      3
      -
    • A
      license
      C
      quality
      D
      maintenance
      A TypeScript implementation of a Model Context Protocol server providing read-only access to Lithic banking and card services API.
      2
      2
      ISC