Skip to main content
Glama

get_trending_tokens_on_raydium

Identify trending tokens on Raydium based on trading volume within 5h, 12h, or 24h. Returns a formatted table with token details for strategic decision-making in Solana memecoin markets.

Instructions

Retrieve tokens with the highest trading volume on Raydium within a specified time span.

Args:
    time_span (str): Time period for the query. Must be one of: '5h', '12h', '24h'.
        Defaults to '5h'.
    limit (int): Maximum number of tokens to return. Defaults to 100.

Returns:
    str: A formatted table of trending tokens on Raydium including token name,
        mint address, and trading volume, or an error message if the query fails.

Raises:
    ValueError: If an invalid time_span value is provided.
    httpx.HTTPStatusError: If the Dune API request fails.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNo
time_spanNo5h

Implementation Reference

  • main.py:254-292 (handler)
    The handler function for the get_trending_tokens_on_raydium tool. It is registered via the @mcp.tool() decorator. Fetches trending token data from Dune Analytics queries based on the specified time_span, processes the results using helper functions like get_latest_result and strip_a_tag, formats them into a table using tabulate, and returns the markdown table or an error message.
    @mcp.tool()
    def get_trending_tokens_on_raydium(time_span: str = "5h", limit: int = 100) -> str:
        """Retrieve tokens with the highest trading volume on Raydium within a specified time span.
    
        Args:
            time_span (str): Time period for the query. Must be one of: '5h', '12h', '24h'.
                Defaults to '5h'.
            limit (int): Maximum number of tokens to return. Defaults to 100.
    
        Returns:
            str: A formatted table of trending tokens on Raydium including token name,
                mint address, and trading volume, or an error message if the query fails.
    
        Raises:
            ValueError: If an invalid time_span value is provided.
            httpx.HTTPStatusError: If the Dune API request fails.
        """
        query_ids = {
            "5h": 4840714,
            "12h": 4840651, 
            "24h": 4840709,
        }
        try:
            query_id = query_ids.get(time_span)
            if query_id is None:
                raise ValueError("Invalid time_span value. Allowed: 5h | 12h | 24h")
            data = get_latest_result(query_id, limit=limit)
            rows = [
                [
                    strip_a_tag(row["asset_with_chart"]),
                    row["token_address"],
                    f'${row.get(f"total_volume_{time_span}", 0):.2f}'
                ]
                for row in data
            ]
            headers = ["Token", "Mint Address", "Volume"]
            return f"# Top {limit} Trending Tokens on Raydium - Last {time_span}\n\n" + tabulate(rows, headers=headers) 
        except Exception as e:
            return str(e)
  • main.py:23-46 (helper)
    Shared helper function used by the tool to retrieve the latest execution results from a specified Dune Analytics query ID.
    def get_latest_result(query_id: int, limit: int = 1000):
        """
        Fetch the latest results from a Dune Analytics query.
    
        Args:
            query_id (int): The ID of the Dune query to fetch results from.
            limit (int, optional): Maximum number of rows to return. Defaults to 1000.
    
        Returns:
            list: A list of dictionaries containing the query results, or an empty list if the request fails.
    
        Raises:
            httpx.HTTPStatusError: If the API request fails due to a client or server error.
        """
        url = f"{BASE_URL}/query/{query_id}/results"
        params = {"limit": limit}
        with httpx.Client() as client:
            response = client.get(url, params=params, headers=HEADERS, timeout=300)
            response.raise_for_status()
            data = response.json()
            
        result_data = data.get("result", {}).get("rows", [])
        return result_data
  • main.py:47-49 (helper)
    Helper function to extract text content from HTML anchor tags, used to clean token names in the results.
    def strip_a_tag(html):
        match = re.search(r'>(.*?)</a>', html)
        return match.group(1) if match else html
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by disclosing: the tool queries an external API (Dune), returns formatted table data or error messages, and raises specific exceptions for invalid inputs or API failures. It doesn't mention rate limits or authentication needs, but covers key behavioral aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with a clear purpose statement followed by well-organized sections (Args, Returns, Raises). Every sentence adds value—no redundancy or fluff. It's appropriately sized for a tool with two parameters and no annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 2 parameters, 0% schema coverage, no annotations, and no output schema, the description is largely complete: it explains purpose, parameters, return format, and errors. It could slightly improve by mentioning sibling tools for context, but covers essential aspects well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate fully. It provides detailed semantics for both parameters: time_span with allowed values ('5h', '12h', '24h') and defaults, and limit with purpose and default. This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Retrieve tokens with the highest trading volume'), target resource ('on Raydium'), and scope ('within a specified time span'). It distinguishes from siblings by specifying the Raydium platform, unlike tools for Pumpfun or Pumpswap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (tokens with high trading volume on Raydium) but doesn't explicitly state when to use this tool versus alternatives like 'get_trending_tokens_on_pumpswap' or volume-based tools for other platforms. No explicit when-not-to-use guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Related 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/memecoin-radar-mcp'

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