Skip to main content
Glama

get_new_pools

Retrieve recently created Uniswap V3 liquidity pools across multiple blockchain networks within a specified time range, sorted by timestamp, transaction count, TVL, or volume.

Instructions

Returns a list of trading pools created in the specified time range on Uniswap V3.

Parameters: chain (str): The blockchain on which Uniswap is deployed. Default is 'ethereum'. Supported options include: 'ethereum', 'base', 'optimism', 'arbitrum', 'polygon', 'bsc', 'avalanche', 'celo' and 'blast'. order_by (str): The field to sort data in descending order before returning to the user. Default is 'timestamp'. Supported options include: - timestamp: Sort by Timestamp - txcount: Sort by Transaction Count - tvl: Sort by Total Value Locked - volume: Sort by Volume time_range_seconds (int): The time range in seconds to look back for new pools. Default is 300 seconds (5 minutes). limit (int): The maximum number of pools to return. Default is 100 pools.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
chainNoethereum
limitNo
order_byNotimestamp
time_range_secondsNo

Implementation Reference

  • main.py:88-130 (handler)
    The primary handler for the 'get_new_pools' tool. Decorated with @mcp.tool() for automatic registration in FastMCP. Includes input validation, calls helper functions to query TheGraph subgraph, formats results into a readable string.
    async def get_new_pools(chain: str = "ethereum", order_by: str = "timestamp", time_range_seconds: int = 300, limit: int = 100) -> str:
        """
        Returns a list of trading pools created in the specified time range on Uniswap V3.
    
        Parameters:
            chain (str): The blockchain on which Uniswap is deployed. Default is 'ethereum'. Supported options include: 'ethereum', 'base', 'optimism', 'arbitrum', 'polygon', 'bsc', 'avalanche', 'celo' and 'blast'.
            order_by (str): The field to sort data in descending order before returning to the user. Default is 'timestamp'. Supported options include: 
              - timestamp: Sort by Timestamp
              - txcount: Sort by Transaction Count
              - tvl: Sort by Total Value Locked
              - volume: Sort by Volume 
            time_range_seconds (int): The time range in seconds to look back for new pools.
                                      Default is 300 seconds (5 minutes).
            limit (int): The maximum number of pools to return.
                         Default is 100 pools.
        """        
        try:
            chain = chain.lower()
            if chain not in SUBGRAPH_URLS:
                raise ValueError(f"Chain must be one of {list(SUBGRAPH_URLS.keys())}")
            order_by = order_by.lower()
            if order_by not in ORDER_BY_OPTIONS:
                raise ValueError(f"Order_by must be one of {list(ORDER_BY_OPTIONS.keys())}")
            
            pools = await fetch_recent_pools(chain, order_by, time_range_seconds=time_range_seconds, limit=limit)
            time_range_minutes = time_range_seconds // 60  # Convert to minutes for display
            output = f"Newly Created Trading Pools (Last {time_range_minutes} Minutes, Limit: {limit}):\n"
            for pool in pools:
                timestamp = datetime.fromtimestamp(int(pool["createdAtTimestamp"])).strftime('%Y-%m-%d %H:%M:%S')
                volume_usd = float(pool["volumeUSD"])  # Ensure float for formatting
                tvl_usd = float(pool["totalValueLockedUSD"])  # Ensure float for formatting
                output += (
                    f"Pool Address: {pool['id']}\n"
                    f"Tokens: {pool['token0']['symbol']}/{pool['token1']['symbol']}\n"
                    f"Created At: {timestamp}\n"
                    f"Block Number: {pool['createdAtBlockNumber']}\n"
                    f"Transaction Count: {pool['txCount']}\n"
                    f"Volume (USD): {volume_usd:.2f}\n"
                    f"Total Value Locked (USD): {tvl_usd:.2f}\n\n"
                )
            return output if pools else f"No pools created in the last {time_range_minutes} minutes."
        except Exception as e:
            return f"Error fetching new pools: {str(e)}"
  • main.py:53-84 (helper)
    Helper function that constructs and executes the GraphQL query to fetch recent Uniswap V3 pools from the chain's subgraph.
    async def fetch_recent_pools(chain: str, order_by:str, time_range_seconds: int, limit: int) -> list[dict]:
        time_ago = int((datetime.utcnow() - timedelta(seconds=time_range_seconds)).timestamp())
        order_by = ORDER_BY_OPTIONS[order_by]
        query = f"""
        query RecentPools($timestamp: BigInt!, $limit: Int!) {{
            pools(
                where: {{ createdAtTimestamp_gt: $timestamp }}
                orderBy: {order_by}
                orderDirection: desc
                first: $limit
            ) {{
                id
                token0 {{ symbol }}
                token1 {{ symbol }}
                createdAtTimestamp
                createdAtBlockNumber
                txCount
                volumeUSD
                totalValueLockedUSD
            }}
        }}
        """
        variables = {"timestamp": str(time_ago), "limit": limit}  # Convert timestamp to string for BigInt
        try:
            result = await query_subgraph(chain, query, variables)
            pools = result.get("data", {}).get("pools", [])
            if not pools:
                print(f"No pools found for timestamp > {time_ago}. Response: {json.dumps(result, indent=2)}")
            return pools
        except Exception as e:
            print(f"Error in fetch_recent_pools: {str(e)}")
            raise
  • main.py:39-50 (helper)
    Low-level helper for making asynchronous HTTP POST requests to TheGraph subgraph APIs, handling errors.
    async def query_subgraph(chain: str, query: str, variables: dict = None) -> dict:
        async with httpx.AsyncClient(timeout=10.0) as client:
            payload = {"query": query}
            if variables:
                payload["variables"] = variables
            response = await client.post(SUBGRAPH_URLS[chain], json=payload)
            if response.status_code != 200:
                raise Exception(f"Subgraph query failed with status {response.status_code}: {response.text}")
            result = response.json()
            if "errors" in result:
                raise Exception(f"GraphQL errors: {json.dumps(result['errors'], indent=2)}")
            return result
  • main.py:28-33 (helper)
    Constant mapping user-provided order_by strings to corresponding GraphQL schema field names for sorting pools.
    ORDER_BY_OPTIONS = {
      "timestamp": "createdAtTimestamp",
      "txcount": "txCount",
      "volume": "volumeUSD",
      "tvl": "totalValueLockedUSD"
    }
  • main.py:16-26 (helper)
    Constant dictionary providing TheGraph subgraph URLs for Uniswap V3 on various supported chains.
    SUBGRAPH_URLS = {
        "ethereum": f"https://gateway.thegraph.com/api/{API_KEY}/subgraphs/id/5zvR82QoaXYFyDEKLZ9t6v9adgnptxYpKpSbxtgVENFV",
        "base": f"https://gateway.thegraph.com/api/{API_KEY}/subgraphs/id/GqzP4Xaehti8KSfQmv3ZctFSjnSUYZ4En5NRsiTbvZpz",
        "optimism": f"https://gateway.thegraph.com/api/{API_KEY}/subgraphs/id/Cghf4LfVqPiFw6fp6Y5X5Ubc8UpmUhSfJL82zwiBFLaj",
        "arbitrum": f"https://gateway.thegraph.com/api/{API_KEY}/subgraphs/id/FbCGRftH4a3yZugY7TnbYgPJVEv2LvMT6oF1fxPe9aJM",
        "polygon": f"https://gateway.thegraph.com/api/{API_KEY}/subgraphs/id/3hCPRGf4z88VC5rsBKU5AA9FBBq5nF3jbKJG7VZCbhjm",
        "bsc": f"https://gateway.thegraph.com/api/{API_KEY}/subgraphs/id/A1fvJWQLBeUAggX2WQTMm3FKjXTekNXo77ZySun4YN2m",
        "avalanche": f"https://gateway.thegraph.com/api/{API_KEY}/subgraphs/id/GVH9h9KZ9CqheUEL93qMbq7QwgoBu32QXQDPR6bev4Eo",
        "celo": f"https://gateway.thegraph.com/api/{API_KEY}/subgraphs/id/ESdrTJ3twMwWVoQ1hUE2u7PugEHX3QkenudD6aXCkDQ4",
        "blast": f"https://gateway.thegraph.com/api/{API_KEY}/subgraphs/id/2LHovKznvo8YmKC9ZprPjsYAZDCc4K5q4AYz8s3cnQn1",
    }

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kukapay/uniswap-poolspy-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server