Skip to main content
Glama
README.md
# NFT Analytics MCP

An MCP server that delivers NFT collection analytics powered by data from Dune Analytics.

![GitHub License](https://img.shields.io/github/license/kukapay/nft-analytics-mcp) 
![Python Version](https://img.shields.io/badge/python-3.10%2B-blue)
![Status](https://img.shields.io/badge/status-active-brightgreen.svg)

## Features

- Analytics:
  - Daily trading volume for top 5 Ethereum NFT collections
  - Number of daily sales by collection
  - Average selling prices per collection
  - Unique buyers and sellers by collection
  - New NFT owner counts
- Returns results in formatted markdown tables for easy reading

## Prerequisites

- Python 3.10+
- [uv](https://github.com/astral-sh/uv) (recommended package manager)
- A valid Dune Analytics API key

## Installation

1. **Clone the Repository**

   ```bash
   git clone https://github.com/kukapay/nft-analytics-mcp.git
   cd nft-analytics-mcp
   ```

2. **Install Dependencies**

   ```bash
   uv sync
   ```
   
3. **Installing to Claude Desktop**:

    Install the server as a Claude Desktop application:
    ```bash
    uv run mcp install main.py --name "NFT Analytics"
    ```

    Configuration file as a reference:

    ```json
    {
       "mcpServers": {
           "NFT Analytics": {
               "command": "uv",
               "args": [ "--directory", "/path/to/nft-analytics-mcp", "run", "main.py" ],
               "env": { "DUNE_API_KEY": "dune_api_key"}               
           }
       }
    }
    ```
    Replace `/path/to/nft-analytics-mcp` with your actual installation path, and `dune_api_key` with your API key from Dune Analytics.


## Usage

The server provides the following tools, accessible via the MCP interface:

- `get_daily_trading_volume_by_collection(limit: int = 1000)`: Retrieves daily trading volume for top 5 Ethereum NFT collections.
- `get_daily_sales_by_collection(limit: int = 1000)`: Fetches the number of daily sales per collection.
- `get_average_price_by_collection(limit: int = 1000)`: Gets the average selling price for each collection.
- `get_unique_traders_by_collection(limit: int = 1000)`: Tracks unique buyers and sellers by collection.
- `get_new_owners()`: Returns the count of new NFT wallet owners.

All tools return data in markdown table format (except `get_new_owners`, which returns a string).

### get_daily_trading_volume_by_collection

**Prompt**:
```
Show me the daily trading volume for the top 5 Ethereum NFT collections over the last 500 records.
```

**Output**:
```
| day        |   Bored Ape Yacht Club |   Doodles |   Good Vibes Club |    PudgyPenguins |
|:-----------|-----------------------:|----------:|------------------:|-----------------:|
| 2025-06-12 |               344501   |   35871.7 |           21391.8 | 179928           |
| 2025-06-11 |               156750   |  119613   |           62610.2 | 262158           |
| 2025-06-10 |               243575   |  108845   |          124961   | 290297           |
| 2025-06-09 |                31536.8 |  226234   |          101207   | 163011           |
| 2025-06-08 |               117099   |  137788   |           83116.6 | 136718           |
| 2025-06-07 |               180229   |   52635.8 |          110748   | 140412           |
| 2025-06-06 |               309650   |   57154   |           33671.2 | 425785           |
| 2025-06-05 |               258358   |   93874.1 |           79988   | 330515           |
| 2025-06-04 |               208540   |  110977   |          118858   | 309126           |
| 2025-06-03 |               321258   |   80658.5 |           77724.4 | 217688           |
| 2025-06-02 |               215127   |  198097   |          153964   | 120258           |
| 2025-06-01 |                77824.4 |  157749   |          141651   | 185943           |
| 2025-05-31 |               155234   |  133476   |          210537   | 118505           |
```

### get_daily_sales_by_collection

**Prompt**:
```
Get the number of daily sales for NFT collections, limited to 500 records.
```

**Output**:
```
| day        |   Bored Ape Yacht Club |   Doodles |   Good Vibes Club |   PudgyPenguins |
|:-----------|-----------------------:|----------:|------------------:|----------------:|
| 2025-06-12 |                     10 |        13 |                 9 |               7 |
| 2025-06-11 |                      4 |        43 |                24 |              10 |
| 2025-06-10 |                      7 |        35 |                31 |              11 |
| 2025-06-09 |                      1 |        86 |                40 |               7 |
| 2025-06-08 |                      3 |        49 |                35 |               6 |
| 2025-06-07 |                      5 |        20 |                40 |               6 |
| 2025-06-06 |                      9 |        22 |                14 |              19 |
| 2025-06-05 |                      8 |        33 |                31 |              15 |
| 2025-06-04 |                      7 |        39 |                28 |              13 |
| 2025-06-03 |                      9 |        29 |                27 |               9 |
| 2025-06-02 |                      8 |        63 |                51 |               5 |
| 2025-06-01 |                      2 |        55 |                38 |               7 |
| 2025-05-31 |                      6 |        49 |                74 |               5 |
```

### get_average_price_by_collection

**Prompt**:
```
What are the average selling prices for NFT collections? Limit to 500 records.
```

**Output**:
```
|    |   average_price_usd | collection           |
|---:|--------------------:|:---------------------|
|  0 |            35340.6  | Bored Ape Yacht Club |
|  1 |            25076.2  | PudgyPenguins        |
|  2 |             6912.56 | Milady               |
|  3 |             6530.12 | Azuki                |
|  4 |             5796.55 | MutantApeYachtClub   |
|  5 |             3122.59 | LilPudgys            |
|  6 |             3056.9  | Doodles              |
|  7 |             2778.29 | Good Vibes Club      |
|  8 |             1815.92 | Moonbirds            |
```

### get_unique_traders_by_collection

**Prompt**:
```
List the unique buyers and sellers for NFT collections, up to 500 records.
```

**Output**:

```
|    | collection           |   unique_buyers |   unique_sellers |
|---:|:---------------------|----------------:|-----------------:|
|  0 | Doodles              |             518 |              511 |
|  1 | PudgyPenguins        |             170 |              201 |
|  2 | Good Vibes Club      |             492 |              670 |
|  3 | Bored Ape Yacht Club |             134 |              151 |
```

### get_new_owners

**Prompt**:
```
How many new wallets have acquired NFTs recently?`
```

**Output**:
```
63302
```

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.

TDQS

A3.5/5.0

Scored across 5 tools

Disambiguation4/5

Most tools have distinct purposes focused on different NFT analytics metrics (average price, daily sales, trading volume, new owners, unique traders), but get_daily_sales_by_collection and get_daily_trading_volume_by_collection could potentially be confused as both relate to daily collection-level activity. The descriptions help clarify, but there's some overlap in their temporal and collection focus.

Naming Consistency5/5

All tools follow a consistent verb_noun_by_collection pattern (get_average_price_by_collection, get_daily_sales_by_collection, etc.), with the exception of get_new_owners which omits 'by_collection' but maintains the same verb_noun structure. This minor deviation doesn't break the overall consistency, making the naming highly predictable and readable.

Tool Count4/5

With 5 tools, the count is reasonable for an NFT analytics server, covering key metrics without being overwhelming. However, it feels slightly thin for a comprehensive analytics suite, as it lacks tools for broader analysis like trends over time or cross-collection comparisons, but it's well within an appropriate range for its focused scope.

Completeness3/5

The toolset covers several important NFT analytics metrics (price, sales, volume, owners, traders), but there are notable gaps. It lacks tools for updating or managing data, historical trend analysis, or filtering by specific parameters beyond collections, which limits the depth of analysis an agent can perform. The surface is functional but incomplete for advanced analytics workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues