trend-pulse
Fetches trending research papers from arXiv.
Fetches trending topics and posts from Bluesky.
Provides browser rendering capability to fetch JavaScript-heavy web pages for trend data extraction.
Fetches trending cryptocurrencies from CoinMarketCap.
Fetches trending articles from the developer community dev.to.
Fetches popular container images from Docker Hub.
Fetches trending repositories from GitHub.
Fetches top news stories from Google News.
Fetches trending posts from Indie Hackers community.
Fetches trending posts from Lemmy federated social network.
Fetches trending news from LINE Today Taiwan.
Fetches trending tech news from Lobste.rs.
Fetches trending hashtags and links from Mastodon.
Fetches JavaScript package download trends from npm.
Fetches trending pins from Pinterest.
Fetches trending product launches from Product Hunt.
Fetches Python package download trends from PyPI.
Fetches popular posts from Reddit.
Fetches hot questions from Stack Overflow.
Fetches trending posts from Threads.
Fetches trending videos from TikTok.
Fetches most viewed pages from Wikipedia.
Fetches trending content from Xiaohongshu (Little Red Book).
Fetches trending videos from YouTube.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@trend-pulsewhat's trending on Hacker News today?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
trend-pulse
Agentic Trend Intelligence Platform — 37 sources, plugin system, vector search, lifecycle prediction, 6-agent content factory, web dashboard, and 29-tool MCP server.
Use as a Python library, CLI tool, MCP server for Claude Code / AI agents, or a standalone web dashboard.
One-line MCP setup (zero install):
{ "mcpServers": { "trend-pulse": { "command": "uvx", "args": ["--from", "trend-pulse[mcp]", "trend-pulse-server"], "type": "stdio" } } }Paste into
.mcp.jsonand you're done. Requires uv (brew install uvorcurl -LsSf https://astral.sh/uv/install.sh | sh).
Sources
Built-in Sources (20)
All built-in sources are free and require zero authentication:
Source | Data | Freshness | What you get |
Google Trends | RSS feed | Real-time | Trending searches by country + related news |
Hacker News | Firebase + Algolia | Real-time | Top stories with points, comments, search |
Mastodon | Public API | Real-time | Trending hashtags + trending links |
Bluesky | AT Protocol | Real-time | Trending topics + post search |
Wikipedia | Pageviews API | Daily | Most viewed pages by language/country |
GitHub | Trending page | Daily | Trending repos with stars, language |
PyPI | pypistats.org | Daily | Package download trends + growth signals |
Google News | RSS feed | Real-time | Top news stories by country |
Lobste.rs | JSON API | Real-time | Community-driven tech news |
dev.to | Public API | Daily | Developer community articles |
npm | Downloads API | Daily | JavaScript package download trends |
Public JSON | Real-time | Popular posts across all subreddits | |
CoinGecko | Public API | Real-time | Trending cryptocurrencies |
Docker Hub | Public API | Daily | Popular container images |
Stack Overflow | Public API | Real-time | Hot questions |
ArXiv | RSS/API | Daily | Trending research papers |
Product Hunt | Public API | Daily | Product launches and upvotes |
Lemmy | Public API | Real-time | Federated community posts (lemmy.world) |
Dcard | Public API | Real-time | Taiwan social platform trending posts |
PTT | Web scrape | Real-time | Taiwan BBS hot articles (Gossiping, Tech_Job, etc.) |
Plugin Sources (17)
Plugin sources live in src/trend_pulse/plugins/sources/ and are auto-discovered at startup:
Source | ID | Category | What you get |
| tw | China hot search list | |
YouTube Trending |
| global | Trending videos with view counts |
Threads |
| social | Trending Threads posts |
X/Twitter |
| social | Trending topics (optional bearer token) |
TikTok Trending |
| social | TikTok trending videos |
LINE Today TW |
| tw | Taiwan LINE Today news |
Mobile01 |
| tw | Taiwan tech community |
Bahamut |
| tw | Taiwan gaming community |
ETtoday |
| tw | Taiwan news |
Yahoo TW |
| tw | Yahoo Taiwan trending |
UDN |
| tw | Taiwan UDN news |
CoinMarketCap |
| crypto | Trending cryptocurrencies |
DexScreener |
| crypto | DeFi/DEX trending tokens |
| social | Trending pins | |
LinkedIn Trending |
| professional | LinkedIn trending topics |
Indie Hackers |
| dev | Indie maker community |
Xiaohongshu |
| social | Chinese lifestyle platform |
Install
Zero-install with uvx (recommended)
uvx runs Python packages directly — no install, no venv, no setup:
# Run the CLI instantly
uvx trend-pulse trending
# Run the MCP server
uvx --from "trend-pulse[mcp]" trend-pulse-server
uvxis the Python equivalent ofnpx. It comes with uv — install uv withcurl -LsSf https://astral.sh/uv/install.sh | sh
pip install
pip install trend-pulse # core (httpx + aiosqlite)
pip install "trend-pulse[mcp]" # MCP server
pip install "trend-pulse[dashboard]" # Streamlit + FastAPI
pip install "trend-pulse[llm]" # Claude API for hybrid scoring
pip install "trend-pulse[all]" # everythingQuick Start
CLI
# What's trending right now? (all 37 sources, merged ranking)
trend-pulse trending
# Taiwan trends from Google + Hacker News
trend-pulse trending --sources google_trends,hackernews --geo TW
# Fetch + save snapshot to history DB
trend-pulse trending --save --count 10
# Take a full snapshot (all sources, auto-saves)
trend-pulse snapshot
# Query historical trends for a keyword
trend-pulse history "Claude" --days 7
# Search across sources
trend-pulse search "AI agent"
# List available sources (built-in + plugins)
trend-pulse sourcesPython
import asyncio
from trend_pulse.aggregator import TrendAggregator
async def main():
agg = TrendAggregator()
# All sources, merged ranking
result = await agg.trending(geo="TW", count=10)
for item in result["merged_top"]:
print(f"[{item['source']}] {item['keyword']} ({item.get('traffic', '')})")
# With snapshot saving + velocity enrichment
result = await agg.trending(count=5, save=True)
for item in result["merged_top"]:
print(f"{item['keyword']} — {item['direction']} (velocity: {item['velocity']})")
# Query history
history = await agg.history("Claude", days=7)
for record in history["records"]:
print(f" {record['timestamp']}: score={record['score']}")
# Search
result = await agg.search("Claude AI")
for item in result["merged_top"][:5]:
print(f"{item['keyword']} - {item['score']:.0f}")
asyncio.run(main())Single Source
import asyncio
from trend_pulse.sources import HackerNewsSource
async def main():
hn = HackerNewsSource()
items = await hn.fetch_trending(count=5)
for item in items:
print(f"{item.keyword} ({item.traffic})")
# HN also supports search
results = await hn.search("Python")
for item in results[:3]:
print(f" {item.keyword}")
asyncio.run(main())Phase 1–3 Intelligence APIs
# Lifecycle prediction
from trend_pulse.core.intelligence.lifecycle import predict_lifecycle, LifecycleStage
stage = predict_lifecycle(current_score=75, history=[{"score": s} for s in [20, 35, 50, 65]])
# -> LifecycleStage.EMERGING
# Trend clustering
from trend_pulse.core.intelligence.clusters import cluster_trends
clusters = await cluster_trends(items, threshold=0.25)
# 6-agent content workflow
from trend_pulse.core.agents.workflow import run_content_workflow
state = await run_content_workflow(
trends=items,
platforms=["threads", "x"],
brand_voice="casual",
topic="AI tools",
)
content = state["final_content"] # {"threads": "...", "x": "..."}
# Hybrid scoring (heuristic + optional Claude API)
from trend_pulse.core.scoring.hybrid import score_content
result = await score_content("Your post content", "threads")
print(result.total, result.grade, result.mode) # 78.5, B+, heuristic
# Vector similarity search
from trend_pulse.core.vector.simple import SimpleVectorStore
store = SimpleVectorStore()
await store.upsert(items)
similar = await store.search_similar("artificial intelligence", k=5)MCP Server (for Claude Code / AI agents)
Step 1: Install uv (if you don't have it)
# macOS
brew install uv
# Linux / WSL
curl -LsSf https://astral.sh/uv/install.sh | shStep 2: Add to .mcp.json
Create or edit .mcp.json in your project root (or ~/.claude/.mcp.json for global):
{
"mcpServers": {
"trend-pulse": {
"command": "uvx",
"args": ["--from", "trend-pulse[mcp]", "trend-pulse-server"],
"type": "stdio"
}
}
}That's it. No pip install, no venv, no Python version management. uvx downloads and caches the package automatically on first run.
Step 3 (optional): Enable browser rendering
The render_page tool uses Cloudflare Browser Rendering to fetch JS-heavy pages. If you want this feature, add your Cloudflare credentials:
{
"mcpServers": {
"trend-pulse": {
"command": "uvx",
"args": ["--from", "trend-pulse[mcp]", "trend-pulse-server"],
"type": "stdio",
"env": {
"CF_ACCOUNT_ID": "your-cloudflare-account-id",
"CF_API_TOKEN": "your-cloudflare-api-token"
}
}
}
}Get these from Cloudflare Dashboard → Workers & Pages → Overview. Skip this step if you don't need it — all other 28 tools work without any credentials.
Alternative: pip install
If you prefer a traditional install instead of uvx:
pip install "trend-pulse[mcp]"{
"mcpServers": {
"trend-pulse": {
"command": "trend-pulse-server",
"type": "stdio"
}
}
}Available tools (29)
Trend Data (5):
Tool | Description |
| Fetch trending topics (all or selected sources, with optional |
| Search across sources by keyword |
| List built-in sources and their properties |
| Query historical trend data for a keyword |
| Fetch + save snapshot to history DB |
Intelligence (5):
Tool | Description |
| Vector similarity search across indexed trends |
| Cluster related trends by semantic similarity |
| Predict lifecycle stage for a trend (EMERGING / PEAK / DECLINING / FADING) |
| List all sources including plugins, with category and frequency metadata |
| Get velocity and direction signals for a keyword |
Content Guides (5):
All content guide tools return structured guides — the LLM does all judgment and creative work.
Tool | Description |
| Writing brief: hook examples, patent strategies, scoring dimensions, CTA examples |
| 5-dimension scoring framework + 4 Threads algorithm penalty pre-checks |
| Platform specs: char limits, Threads creator insights, algo priority, best times |
| 15-item review checklist (7 critical / 5 warning / 3 info) with severity and fix methods |
| Reel/Short video guide: scene structure, timing, visual guidance, editing tips |
Agentic Content (8):
Tool | Description |
| Run the 6-agent content factory end-to-end for one or more platforms |
| Generate A/B variants of a post for testing |
| Build a content calendar from a list of trends |
| Score content using heuristic + optional Claude API judge |
| Adapt a post from one platform's format to another |
| Generate platform-optimized hashtag sets for a topic |
| Analyze a post for viral potential signals |
| Score multiple posts in a single call |
Operations (5):
Tool | Description |
| Generate a formatted trend report for a time window |
| Compare two or more keywords across sources and time |
| Health-check all sources and return availability status |
| Send a trend alert via configured notification channel |
| Export trend history to CSV or JSON |
Browser (1, optional — requires Cloudflare credentials):
Tool | Description |
| Render JS-heavy pages via Cloudflare Browser Rendering (SSRF-guarded) |
Dashboard & REST API
# Start Streamlit dashboard
streamlit run src/trend_pulse/dashboard/app.py
# Start FastAPI REST API
uvicorn trend_pulse.dashboard.api:app --port 8000
# Docker Compose (all services)
docker compose upDocker Compose services:
Service | Description | Port |
| FastAPI + MCP server | 8000 |
| Background trend fetcher | — |
| Streamlit UI | 8501 |
Notifications
from trend_pulse.notifications.channels import DiscordWebhook
notifier = DiscordWebhook(webhook_url="https://discord.com/api/webhooks/...")
await notifier.send("Trending now", {"keyword": "Claude AI", "score": 95})CLI Reference
trend-pulse trending [--sources SRC] [--geo CODE] [--count N] [--save]
trend-pulse search QUERY [--sources SRC] [--geo CODE]
trend-pulse history KEYWORD [--days N] [--source SRC]
trend-pulse snapshot [--sources SRC] [--geo CODE] [--count N]
trend-pulse sources--sources: Comma-separated source IDs.
Built-in:
google_trends, hackernews, mastodon, bluesky, wikipedia, github, pypi,
google_news, lobsters, devto, npm, reddit, coingecko, dockerhub, stackoverflow,
arxiv, producthunt, lemmy, dcard, ptt
Plugins:
weibo, youtube_trending, threads, x_trending, tiktok_trending, line_today,
mobile01, bahamut, ettoday, yahoo_tw, udn, coinmarketcap, dexscreener,
pinterest, linkedin_trending, indie_hackers, xiaohongshu
--geo: ISO country code (e.g., TW, US, JP, DE).
Google Trends / Google News: filters by country
Wikipedia: selects language edition
GitHub: treated as language filter (e.g.,
python)Other sources: ignored (global data)
--save: Save results to local SQLite DB (~/.trend-pulse/history.db) for velocity tracking.
Plugin System
Drop a file into src/trend_pulse/plugins/sources/ — no registration needed. The PluginRegistry auto-discovers all modules that export a register() function.
from trend_pulse.plugins.base import PluginSource
from trend_pulse.sources.base import TrendItem
class MyPluginSource(PluginSource):
name = "my_plugin"
description = "My custom plugin source"
category = "global" # global, tw, dev, crypto, social, professional
frequency = "daily"
async def fetch_trending(self, geo="", count=20) -> list[TrendItem]:
return [TrendItem(keyword="...", score=80.0, source=self.name)]
def register():
return MyPluginSource()Plugin categories: global, tw, dev, crypto, social, professional
For the legacy TrendSource interface (built-in sources), see docs/custom-sources.md and examples/custom_rss_source.py.
Velocity & Direction
When history data is available, each trend item includes:
{
"keyword": "Claude AI",
"score": 92,
"direction": "rising",
"velocity": 15.3,
"previous_score": 45.0,
"source": "hackernews"
}Direction | Meaning |
| Velocity > 10 (score increasing rapidly) |
| Velocity between -10 and 10 |
| Velocity < -10 (score decreasing rapidly) |
| No previous data in history |
Velocity = (current_score - previous_score) / hours_elapsed
Lifecycle Prediction
Each trend is assigned one of four lifecycle stages based on score trajectory:
Stage | Signal |
| Score rising from a low baseline |
| Score at or near its historical high |
| Score falling from a recent peak |
| Score low and continuing to fall |
Access via the get_lifecycle_prediction MCP tool or the Python API:
from trend_pulse.core.intelligence.lifecycle import predict_lifecycle, LifecycleStage
stage = predict_lifecycle(current_score=75, history=[{"score": s} for s in [20, 35, 50, 65]])
# -> LifecycleStage.EMERGINGHistory Database
Snapshots are stored in SQLite at ~/.trend-pulse/history.db (override with TREND_PULSE_DB env var).
# Save snapshots over time
trend-pulse trending --save --count 5
# ... wait some time ...
trend-pulse trending --save --count 5
# Query history
trend-pulse history "Claude" --days 7
trend-pulse history "React" --days 30 --source npmOutput Format
All commands return JSON with a unified structure:
{
"timestamp": "2026-03-12T05:04:12Z",
"geo": "TW",
"sources_ok": ["google_trends", "hackernews", "reddit"],
"sources_error": {"wikipedia": "429 rate limited"},
"merged_top": [
{
"keyword": "Temporal: fixing time in JavaScript",
"score": 100,
"source": "hackernews",
"url": "https://...",
"traffic": "579 points",
"category": "tech",
"direction": "rising",
"velocity": 12.5,
"previous_score": 60.0,
"metadata": {}
}
],
"by_source": {}
}Each item has a normalized score (0–100) for cross-source comparison.
Rate Limits
Source | Limit | Notes |
Google Trends RSS | Unlimited | RSS feed, no rate limit |
Hacker News | Unlimited | Firebase + Algolia, very generous |
Mastodon | 300 req / 5 min | Per instance |
Bluesky | 3000 req / 5 min | Public API |
Wikipedia | 100 req / s | Very generous |
GitHub | Reasonable | HTML scrape, don't abuse |
PyPI Stats | 1 req / day / endpoint | Data updates daily |
Google News | Unlimited | RSS feed |
Lobste.rs | Unlimited | JSON API |
dev.to | Unlimited | Public API |
npm | Unlimited | Public API |
60 req / min | Requires User-Agent header | |
CoinGecko | 10–30 req / min | Public API |
Docker Hub | 100 req / 5 min | Public API |
Stack Overflow | 300 req / day | Without API key |
ArXiv | Unlimited | RSS/API |
Product Hunt | Reasonable | Public API |
Lemmy | Unlimited | Public API (lemmy.world) |
Dcard | Reasonable | Public API |
PTT | Reasonable | Web scrape, don't abuse |
Reasonable | Web scrape | |
YouTube Trending | Reasonable | Public RSS/scrape |
Threads | Reasonable | Web scrape |
X/Twitter | Reasonable | Optional bearer token improves limits |
TikTok Trending | Reasonable | Web scrape |
LINE Today TW | Reasonable | Web scrape |
Mobile01 | Reasonable | Web scrape |
Bahamut | Reasonable | Web scrape |
ETtoday | Reasonable | Web scrape |
Yahoo TW | Reasonable | Web scrape |
UDN | Reasonable | Web scrape |
CoinMarketCap | Reasonable | Public page scrape |
DexScreener | Unlimited | Public API |
Reasonable | Web scrape | |
LinkedIn Trending | Reasonable | Web scrape |
Indie Hackers | Reasonable | Web scrape |
Xiaohongshu | Reasonable | Web scrape |
Content Guide Tools
MCP tools provide structured guides for creating viral content optimized against Meta's 7 ranking patents. The LLM does all judgment and creative work — tools only provide frameworks and criteria.
Threads Algorithm Penalty Pre-Checks
Before scoring, content is checked against 4 officially penalized patterns from the Threads Creator Page. Any violation blocks publishing:
Penalty | What Threads Penalizes | Action |
| Hook promises something the body doesn't deliver | Align hook with content |
| Explicitly asks for likes/reposts/follows | Replace with natural CTA |
| Contest/giveaway requires engagement to enter | Remove or decouple |
| Cross-posted from IG/FB without original angle | Rewrite with original perspective |
Patent-Based Scoring (5 Dimensions)
Dimension | Weight | Based On |
Hook Power | 25% | EdgeRank Weight + Andromeda |
Engagement Trigger | 25% | Story-Viewer Tuple + Dear Algo |
Conversation Durability | 20% | Threads 72hr window |
Velocity Potential | 15% | Andromeda Real-time |
Format Score | 15% | Multi-modal Indexing |
Grades: S (90+), A (80+), B (70+), C (55+), D (<55)
Quality gate: overall >= 70, conversation durability >= 55.
Hybrid Scoring
score_content_hybrid (MCP) and score_content (Python API) run heuristic scoring by default. If ANTHROPIC_API_KEY is set and pip install "trend-pulse[llm]" is installed, a Claude API judge layer supplements the heuristic score. The mode field in the result indicates which path ran (heuristic or llm).
Review Checklist (15 Items)
Severity | Count | Examples |
critical | 7 | char limit, overall score, conversation durability, 4 algorithm penalties |
warning | 5 | hook effectiveness, CTA presence, media enhancement, tone authenticity, topic tag |
info | 3 | question presence, format readability, reply strategy |
Verdict: pass = all critical checks pass, fail = any critical check fails.
Threads Creator Insights
Key signals from the official Threads Creator Page:
Posting frequency: 2–5 times per week (higher = more views per post)
Replies: Account for ~50% of Threads views — actively reply to comments
Media: Text + media significantly outperforms text-only
Humor: Officially documented as performing well on Threads
Topic tags: Multi-word tags with emojis increase reach
15 content types: TEXT, IMAGE, VIDEO, CAROUSEL, POLL, GIF, LINK_ATTACHMENT, TEXT_ATTACHMENT, SPOILER_MEDIA, SPOILER_TEXT, GHOST_POST, QUOTE_POST, REPLY_CONTROL, TOPIC_TAG, ALT_TEXT
Workflow: MCP Guides LLM
1. get_content_brief() → LLM gets writing guide with hook examples & strategies
2. LLM creates content → Original text based on brief
3. get_scoring_guide() → LLM runs penalty pre-checks, then self-scores 5 dimensions
4. LLM revises → Iterate until score >= 70
5. get_review_checklist() → LLM checks 15 items (7 critical / 5 warning / 3 info)
6. get_platform_specs() → LLM adapts for each platform
— or —
run_content_workflow() → 6-agent factory runs steps 1–6 autonomouslyPython (Content Guide Tools)
from trend_pulse.content.briefing import (
get_content_brief,
get_scoring_guide,
get_review_checklist,
get_reel_guide,
)
from trend_pulse.content.adapter import get_platform_specs
# Get writing brief — hook examples, patent strategies, scoring dimensions
brief = get_content_brief("AI tools", "debate", "threads", lang="en")
print(f"Topic: {brief['topic']}, Char limit: {brief['char_limit']}")
print(f"Hook examples: {len(brief['hook_examples'])}")
print(f"Patent strategies: {len(brief['patent_strategies'])}")
# Get scoring guide — penalty pre-checks + 5-dimension evaluation framework
guide = get_scoring_guide("en")
print(f"Penalty pre-checks: {len(guide['penalty_precheck']['penalties'])}")
for name, dim in guide["dimensions"].items():
print(f"{name}: weight={dim['weight']}, {dim['description']}")
print(f"Grades: {list(guide['grade_thresholds'].keys())}")
# Get review checklist — 15 structured quality checks (7 critical)
checklist = get_review_checklist("threads", "en")
for item in checklist["checklist"]:
print(f"[{item['severity']}] {item['check']}")
print(f"Quality gate: overall >= {checklist['quality_gate']['min_overall']}")
# Get platform specs — char limits, algo priority, best times
specs = get_platform_specs("", "en") # all platforms
for name, spec in specs.items():
print(f"{name}: {spec['max_chars']} chars, best at {spec['best_times']}")
# Get reel guide — scene structure for video scripts
guide = get_reel_guide("educational", 30, "en")
for scene in guide["scene_structure"]:
print(f"[{scene['type']}] {scene['duration_seconds']}s — {scene['purpose']}")Content Types
opinion, story, debate, howto, list, question, news, meme
Platform Limits
Platform | Char Limit |
Threads | 500 |
2200 | |
63,206 | |
X (Twitter) | 280 |
TikTok | 2200 |
3000 | |
YouTube Shorts | 5000 |
Xiaohongshu | 1000 |
Security
render_pageincludes an SSRF guard: scheme whitelist + private IP block. Requests tofile://,127.x,10.x,192.168.x, and similar ranges are rejected.Hybrid scoring's LLM judge uses prompt injection isolation to prevent trend content from influencing scoring instructions.
Requirements
Python 3.10+
httpx(HTTP client)aiosqlite(history storage)Optional:
mcp[cli]for MCP server (pip install "trend-pulse[mcp]")Optional:
streamlit,fastapi,uvicornfor dashboard (pip install "trend-pulse[dashboard]")Optional:
anthropicfor hybrid LLM scoring (pip install "trend-pulse[llm]")Optional:
trendspyg,pytrendsfor enhanced Google Trends
License
MIT
Credits
Built by Claude World — the Claude Code community for developers.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/claude-world/trend-pulse'
If you have feedback or need assistance with the MCP directory API, please join our Discord server