Model or dataset
sansan0/TrendRadar avatar
sansan0/TrendRadar

TrendRadar: ten exact dependency pins, two entry points, no releases

AI-driven public opinion & trend monitor with multi-platform aggregation, RSS, and smart alerts. 告别信息过载,你的 AI 舆情监控助手与热点筛选工具!聚合多平台热点 + RSS 订阅,支持关键词精准筛选。AI 智能筛选新闻 + AI 翻译 + AI 分析简报直推手机,也支持接入 MCP 架构,赋能 AI 自然语言对话分析、情感洞察与趋势预测等。支持 Docker ,数据本地/云端自持。集成微信/飞书/钉钉/Telegram/邮件/ntfy/bark/slack 等渠道智能推送。.

63,622 stars24,915 forksPythonGPL-3.0

At a glance

What is it?
TrendRadar aggregates multi-platform hot lists through the newsnow API, filters them by keyword, and pushes the survivors to WeChat, Feishu, DingTalk, Telegram, email, ntfy, Bark and Slack, with an MCP server packaged in the same wheel. Every runtime dependency is pinned with an equality operator, so upgrades are a rebuild rather than a resolve.
Who is it for?
Adopt TrendRadar if you want one cron job that turns a keyword list into a phone notification across several chat services, and run it in the wantcat/trendradar container so the exact pins never collide with your own environment. Skip it if you need retention, a queryable history or alerts on metrics, because nothing in the manifest names a database.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 9 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • sansan0/TrendRadar63,622 ★ · +2,651
Star history
Repository2026-07-282026-11-13
sansan0/TrendRadar61k63.6k

2,651 Stars in the last 108 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

Every dependency is pinned with an equality operator

pyproject.toml names ten runtime dependencies and pins every one to an exact version: requests==2.33.0, pytz==2026.1, PyYAML==6.0.3, fastmcp==2.12.5, websockets==13.1, feedparser==6.0.12, boto3==1.42.76, litellm==1.82.6, json-repair==0.58.6 and tenacity==8.5.0. The effect of the == operator is that your installer has no room to move: if another package in the same environment wants a different litellm or a different boto3, resolution fails outright instead of settling on a version that satisfies both. For a tool most people run in a container or on a spare machine, exact pins are a fair way to make a run repeatable. The consequence is that this is a poor neighbour in a shared virtualenv, and the two most likely to collide are litellm==1.82.6 and boto3==1.42.76, each of which carries its own large transitive set. There is no lighter install to fall back on either: the dependency-groups table declares dev with an empty list and declares no optional extras.

One wheel ships the crawler and the MCP server together

The build is hatchling with build-backend hatchling.build, and the wheel target sets packages to trendradar and mcp_server. Two console scripts come out of that single wheel: trendradar maps to trendradar.__main__:main, and trendradar-mcp maps to mcp_server.server:run_server. So the MCP surface is not a separate distribution you can decline, and fastmcp==2.12.5 is paid for on every install whether or not you start that process. For a project whose stated scope includes MCP access for natural language conversation over trends, bundling is a reasonable call. It also means the size of your install and the surface you are responsible for are decided by the half of the system you may never launch. What the layout does give you is a clean split on disk: mcp_server/ and trendradar/ are separate top-level directories, and the tree keeps version, version_configs and version_mcp as distinct files.

No GitHub releases, so the version lives in a file and an image tag

The repository has no GitHub releases, and the last push to master was on 2026-10-29. There is no release page to pin a deployment against and no tag list to diff, so the version of what you are running is a file rather than a published artifact. pyproject.toml declares version = 6.11.0, and the top-level tree carries version, version_configs and version_mcp as separate entries. The published handles are the two Docker Hub images, wantcat/trendradar and wantcat/trendradar-mcp. The consequence for an operator is plain: to find out what is running you read the tree you deployed or you inspect the image, and the record of changes lives in a changelog section of the README.

Aggregation depends on the newsnow API, and the author asks you to throttle

The hot lists are not gathered here. The README credits the newsnow project for the API that supplies multi-platform data, records that the author has said there is no need to worry about server pressure, and still asks Docker users to control push frequency reasonably and to go star newsnow. Read that as a dependency you do not control sitting in the path of every run, plus an explicit request not to lean on it. The project does offer the other side of that trade: the official site links a page on AI self-hosted hot-list data sources, which is the route for anyone unwilling to have their headlines depend on somebody else's endpoint. Two things are worth checking before you point this at anything important. And frequency is a shared resource with a third party, so a cron interval tuned for your own inbox is a decision that reaches outside your machine.

The AI features ride on litellm, feedparser and json-repair

The dependency set explains the feature list better than the feature list explains itself. feedparser==6.0.12 is the RSS reader behind subscription source support, and litellm==1.82.6 sits under the AI steps: translation, analysis briefs and keyword-driven news filtering, which the README marks as arriving across v4.5.0, v5.0.0, v5.2.0 and v6.5.0. json-repair==0.58.6 is the giveaway, because it exists only because model output comes back malformed often enough to be worth repairing before it is parsed. Any code path that calls a model is handling text that was not quite JSON. tenacity==8.5.0 is the retry layer those calls need. The practical consequence: switching off the AI features does not remove the AI dependencies, and a version number such as 6.11.0 tells you which features exist only if you read the changelog section of the README.

Per platform start scripts, and Python 3.12 is the real prerequisite

requires-python is set to >=3.12, and that one line decides how you deploy. macOS users have setup-mac.sh, Windows users get setup-windows.bat and setup-windows-en.bat, and there are start-http.sh and start-http.bat for the HTTP entry point plus an index.html in the tree. uv.lock is committed, so the intended resolution path is uv against that lockfile rather than an improvised pip run. The consequence for anyone on an older system Python, which is still what several distributions ship by default, is that there is no supported path through the shell scripts and the container becomes the practical option. The images cover that case, and the README also lists a Cloudflare deployment route. Notice how responsibility splits: the scripts build an environment, the images package one, and neither one tells you what belongs in config/.

Eight push channels, and each one brings its own credentials

The project names a long channel list: WeChat, Feishu, DingTalk, Telegram, email, ntfy, Bark and Slack, with logos in the README linking work.weixin.qq.com, weixin.qq.com, telegram.org, feishu.cn, ntfy, Bark and Slack. The README lists the channels together in its badge row. What the channels share sits upstream: keyword selection decides what reaches any of them, which is the point of the project. For a reader weighing adoption, the honest description is a personal-scale notifier with a wide surface, not a monitoring platform. The manifest names no database and no query layer.

Editorial conclusion

Adopt TrendRadar if you want one cron job that turns a keyword list into a phone notification across several chat services, and run it in the wantcat/trendradar container so the exact pins never collide with your own environment. Skip it if you need retention, a queryable history or alerts on metrics, because nothing in the manifest names a database. Verify three things first: that the newsnow API still returns what you expect, since your headlines depend on an endpoint this repository does not host, that a self-hosted source page is a route you are willing to run, and that Python 3.12 or newer is what is actually installed, since requires-python says >=3.12. Then read the README changelog section, because the repository has no GitHub releases to check the version against.

Frequently asked questions

What is TrendRadar?

It is a Python tool that aggregates multi-platform hot lists and RSS subscriptions, filters them by keyword, and pushes the result to chat services. An AI step can translate, analyse and select items, and an MCP server lets an assistant query the data in natural language.

Which Python version does TrendRadar require?

Python 3.12 or newer. pyproject.toml sets requires-python to >=3.12 and declares version 6.11.0.

Do I need Docker to run TrendRadar?

No. There are setup-mac.sh and setup-windows.bat for local runs, and Docker images wantcat/trendradar and wantcat/trendradar-mcp for the container route. A Cloudflare deployment path is also listed.

Where does TrendRadar get its news data?

From the API of the newsnow project, whose author the README credits for providing the service. The official site also links a page about self-hosted hot-list data sources as an alternative.

How is the TrendRadar MCP server started?

The console script trendradar-mcp maps to mcp_server.server:run_server, and the wheel packages both trendradar and mcp_server, so it installs together with the main tool. The MCP dependency is fastmcp==2.12.5.

What licence is TrendRadar released under?

GPL-3.0, with a LICENSE file at the repository root.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/sansan0-trendradar.svg)](https://hysenlabs.com/projects/sansan0-trendradar)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/sansan0-trendradar.svg)](https://hysenlabs.com/projects/sansan0-trendradar)

Was this useful?