Cookbook

Build a crypto research agent

Let the data choose the subject. Read what is trending, then pull every feed that mentions it into one brief — the loop that finds stories nobody told you to look for.

~30 min Python, stdlib onlyNo API key, no signup
/keywords/trending//items/news//items/blogs//items/podcasts//items/dao/
01

Start from trending, not from a watchlist

A watchlist can only return what you already track. /keywords/trending/ returns what the corpus is actually talking about, each entry carrying a trendiness figure, a sentiment_score and — the part that makes this composable — the tag slug every other feed accepts.

import json, urllib.request from urllib.parse import urlencode BASE = "https://api.alphaday.com" def get(path, **p): with urllib.request.urlopen(f"{BASE}{path}?{urlencode(p)}") as r: return json.load(r) top = get("/keywords/trending/", limit=3)["results"] for k in top: tag = k["keyword"]["tag"]["slug"] name = k["keyword"]["name"] print(f"\n{'='*64}\n{name} (trendiness {k['trendiness']}, sentiment {k['sentiment_score']})") for feed, path in (("news", "/items/news/"), ("blogs", "/items/blogs/"), ("podcasts", "/items/podcasts/"), ("governance", "/items/dao/")): d = get(path, tags=tag, period=1, limit=2) titles = [r["title"][:52] for r in d["results"]] print(f" {feed:11} {d['total']:>6} items {titles[0] if titles else '—'}")
02

Hand the assembled context to a model

Everything above is retrieval, and it is deliberately the whole program: the agent's judgement is worth having only once the context is real. Pass the assembled rows to your model of choice, or skip the plumbing entirely and connect the MCP server so the model runs these calls itself.

claude mcp add --transport http alphaday https://api.alphaday.com/mcp

What it prints

Produced by running the code above against the live API, not written by hand.

================================================================ Ethereum (trendiness 0.63, sentiment 0.04) news 221 items Ethereum and Base abandon joint account abstraction blogs 1 items Join Us: EF Protocol Reddit AMA - September 16th, 20 podcasts 20 items THE CLARITY ACT IS IN TROUBLE! DEMOCRATS REJECT NEW governance 4727 items [AIP-125] Launch on Base ================================================================ Balancer (trendiness 0.59, sentiment -0.18) news 6 items Balancer wind-down proposed as post-exploit revenue blogs 0 items — podcasts 1 items Ethereum And Base Split On Account Abstaction governance 1184 items [BIP-926] Treasury Council Resignation: Xeonus, Succ ================================================================ Bitcoin (trendiness 0.59, sentiment 0.11) news 750 items A Fake Tesco Casino Is Still Live and Ranking First blogs 31 items Swiss Bitcoin Pay Shuts Down Servers After Data Brea podcasts 31 items Trustless Swaps Across Bitcoin Layers | Walter Maffi governance 171 items [1IP-105] Aqua LP Incentive Program

Actual output, 15 Sep 2026 — and a demonstration of why the loop is worth running. Nobody asked about Balancer. It surfaced on its own at -0.18 sentiment, with six news items about a post-exploit wind-down and a governance proposal titled "Treasury Council Resignation". That is a story assembled from three feeds by a program that had no watchlist.

Variations

The same shape, pointed somewhere else. Every figure below came back from the live API.

Widen the window

period takes 0 for the last 24 hours, 1 for a week, 2 for a month, 3 for a quarter. A month of Ethereum news is 1,024 articles — enough to ask what changed rather than what happened.

get("/items/news/", tags="ethereum", period=2, limit=50)

Search instead of tagging

search runs over the text rather than the tag graph, which catches narratives that have no tag yet. "restaking" returns 547 articles and is not a project.

get("/items/news/", search="restaking", period=1, limit=20)

Pin the agent to security

Swap the trending seed for the exploit feed and the same loop becomes an incident monitor — 180+ written incident records, each with its own detail endpoint.

get("/items/security-exploits/", limit=5)

Before you build on this

Ecosystem tags are broader than they look

tags=ethereum on governance returns 4,727 proposals because Alchemix, 1inch and Lido are all Ethereum DAOs. That is correct behaviour, not a bug, but it means a per-project digest reads wider than a reader expects. Filter by sources when you want one DAO.

Some tags return zero for a project that clearly has coverage

tags=lido returns 0 governance items. A tag only matches content through its keywords, and a tag filed with none never matches anything. Check a tag returns results before building a scheduled job on it.

period does not apply to governance

Proposals carry starts_at and ends_at rather than published_at, so a period filter passes through without narrowing anything. Window governance on its own dates.