dune_query_info
Fetch Dune query metadata including name, parameters, tags, and SQL to understand and manage blockchain data queries.
Instructions
Fetch Dune query metadata (name, parameters, tags, SQL).
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Implementation Reference
- src/spice_mcp/mcp/server.py:173-178 (registration)Registration of the 'dune_query_info' tool using FastMCP's @app.tool decorator, specifying name, title, description, and tags.@app.tool( name="dune_query_info", title="Query Info", description="Fetch Dune query metadata (name, parameters, tags, SQL).", tags={"dune", "query"}, )
- src/spice_mcp/mcp/server.py:179-211 (handler)The handler function for 'dune_query_info' that extracts query ID/URL, fetches metadata from Dune API using HTTP GET, extracts relevant fields like name, description, tags, parameters, SQL, and returns them in a structured dict. Handles errors gracefully.def dune_query_info(query: str) -> dict[str, Any]: _ensure_initialized() try: qid = dune_urls.get_query_id(query) url = dune_urls.url_templates["query"].format(query_id=qid) from ..adapters.dune.user_agent import get_user_agent as get_dune_user_agent headers = { "X-Dune-API-Key": dune_urls.get_api_key(), "User-Agent": get_dune_user_agent(), } client = HTTP_CLIENT or HttpClient(Config.from_env().http) resp = client.request("GET", url, headers=headers, timeout=10.0) data = resp.json() if resp.headers.get("content-type", "").startswith("application/json") else {} # Select useful fields; fall back gracefully if missing payload = { "ok": resp.ok, "status": resp.status_code, "query_id": qid, "name": data.get("name"), "description": data.get("description"), "tags": data.get("tags"), "parameters": data.get("parameters"), "version": data.get("version"), "query_sql": data.get("query_sql"), "query_url": f"https://dune.com/queries/{qid}", } return payload except Exception as e: return error_response(e, context={ "tool": "dune_query_info", "query": query, })