TrendRadar MCP Server
最速30秒でデプロイできるホットトピックアシスタント —— 無駄な情報に振り回されず、本当に気になるニュースだけを
🌐 公式サイト · 📖 公式ドキュメント
日本語 | English
本プロジェクトは軽量・簡単デプロイを目指しています
📑 クイックナビゲーション
💡 下のリンクをクリックすると対応するセクションにジャンプできます。デプロイは「クイックスタート」から始めるのがおすすめです。詳細なカスタマイズが必要な場合は「設定の詳細」をご覧ください
プロジェクトにスターを付けてくださった皆様に感謝します。fork も star も、両方いただけるのが😍オープンソース精神への最高の支援です
初期サポーターへの謝辞
💡 特別な説明:
リストについて:下の表はプロジェクト立ち上げ段階(エンジェルラウンド)のサポーターを記録したものです。初期の手動集計は煩雑なため、漏れや記録不足が生じる可能性があります。もし漏れがあっても、意図したものではありませんので、ご容赦ください。
今後の計画:限られた労力をコードと機能開発に集中させるため、本日よりこのリストの手動メンテナンスを終了します。
名前がリストに載っているかどうかに関わらず、皆様のサポートの一つ一つが TrendRadar が今日まで続けてこれた基盤です。🙏
インフラストラクチャサポート
GitHub が無料で提供するインフラに感謝します。これは本プロジェクトがワンクリック fork で簡単に実行できる最大の前提です。
データサポート
本プロジェクトは newsnow プロジェクトの API を使用してマルチプラットフォームのデータを取得しています。作者に感謝します。
連絡したところ、作者はサーバー負荷を心配する必要はないとのことですが、これは彼の善意と信頼に基づくものです。皆様にお願い:
newsnow プロジェクト にスターを付けて支援
Docker デプロイ時は、プッシュ頻度を適切に制御し、過度な利用は控えてください
プロモーション支援
以下のプラットフォームと個人の推薦に感謝します(時系列順)
小众软件 - オープンソースソフトウェア推薦プラットフォーム
LinuxDo 社区 - 技術愛好家の集いの場
阮一峰周刊 - 技術コミュニティで影響力のある週刊誌
視聴者サポート
資金支援をいただいた皆様に感謝します。皆様の寛大さはキーボードのそばのお菓子や飲み物となり、プロジェクトの毎回のイテレーションに寄り添っています。
「1元いいね」の復活について: v5.0.0 のリリースに伴い、プロジェクトは新たな段階に入りました。増え続ける API コストとカフェイン消費を支えるため、「1元いいね」チャンネルを再開しました。皆様の気持ちは、コードの世界の Token と原動力に変わります。🚀 支援する
いいねした人 | 金額 | 日付 | 備考 |
D*5 | 1.8 * 3 | 2025.11.24 | |
*鬼 | 1 | 2025.11.17 | |
*超 | 10 | 2025.11.17 | |
R*w | 10 | 2025.11.17 | この agent すごいですね、兄弟 |
J*o | 1 | 2025.11.17 | オープンソースに感謝、成功をお祈りします |
*晨 | 8.88 | 2025.11.16 | 良いプロジェクトですね、研究中です |
*海 | 1 | 2025.11.15 | |
*德 | 1.99 | 2025.11.15 | |
*疏 | 8.8 | 2025.11.14 | オープンソースに感謝、素晴らしいプロジェクト、応援します |
M*e | 10 | 2025.11.14 | オープンソースは大変です、お疲れ様です |
**柯 | 1 | 2025.11.14 | |
*云 | 88 | 2025.11.13 | 良いプロジェクト、オープンソースに感謝 |
*W | 6 | 2025.11.13 | |
*凯 | 1 | 2025.11.13 | |
对*. | 1 | 2025.11.13 | Thanks for your TrendRadar |
s*y | 1 | 2025.11.13 | |
**翔 | 10 | 2025.11.13 | 良いプロジェクト、もっと早く出会いたかった、オープンソースに感謝! |
*韦 | 9.9 | 2025.11.13 | TrendRadar 最高、先生にコーヒーをおごります〜 |
h*p | 5 | 2025.11.12 | 中国のオープンソースを応援、頑張って! |
c*r | 6 | 2025.11.12 | |
a*n | 5 | 2025.11.12 | |
。*c | 1 | 2025.11.12 | オープンソースの共有に感謝 |
*记 | 1 | 2025.11.11 | |
*主 | 1 | 2025.11.10 | |
*了 | 10 | 2025.11.09 | |
*杰 | 5 | 2025.11.08 | |
*点 | 8.80 | 2025.11.07 | 開発は大変です、応援します。 |
Q*Q | 6.66 | 2025.11.07 | オープンソースに感謝! |
C*e | 1 | 2025.11.05 | |
Peter Fan | 20 | 2025.10.29 | |
M*n | 1 | 2025.10.27 | オープンソースに感謝 |
*许 | 8.88 | 2025.10.23 | 先生、初心者です。数日触ってみましたがまだ動かせていません。教えてください |
Eason | 1 | 2025.10.22 | まだよくわかっていませんが、良いことをしていますね |
P*n | 1 | 2025.10.20 | |
*杰 | 1 | 2025.10.19 | |
*徐 | 1 | 2025.10.18 | |
*志 | 1 | 2025.10.17 | |
*😀 | 10 | 2025.10.16 | いいね |
**杰 | 10 | 2025.10.16 | |
*啸 | 10 | 2025.10.16 | |
*纪 | 5 | 2025.10.14 | TrendRadar |
J*d | 1 | 2025.10.14 | ツールありがとうございます、とても面白いです... |
*H | 1 | 2025.10.14 | |
那*O | 10 | 2025.10.13 | |
*圆 | 1 | 2025.10.13 | |
P*g | 6 | 2025.10.13 | |
Ocean | 20 | 2025.10.12 | ...本当に素晴らしい!!!初心者レベルでもそのまま使えます... |
**培 | 5.2 | 2025.10.2 | github-yzyf1312:オープンソース万歳 |
*椿 | 3 | 2025.9.23 | 頑張って、とても良いです |
*🍍 | 10 | 2025.9.21 | |
E*f | 1 | 2025.9.20 | |
*记 | 1 | 2025.9.20 | |
z*u | 2 | 2025.9.19 | |
**昊 | 5 | 2025.9.17 | |
*号 | 1 | 2025.9.15 | |
T*T | 2 | 2025.9.15 | いいね |
*家 | 10 | 2025.9.10 | |
*X | 1.11 | 2025.9.3 | |
*飙 | 20 | 2025.8.31 | 老童より、ありがとう |
*下 | 1 | 2025.8.30 | |
2*D | 88 | 2025.8.13 下午 | |
2*D | 1 | 2025.8.13 上午 | |
S*o | 1 | 2025.8.05 | 応援します |
*侠 | 10 | 2025.8.04 | |
x*x | 2 | 2025.8.03 | trendRadar 良いプロジェクト、いいね |
*远 | 1 | 2025.8.01 | |
*邪 | 5 | 2025.8.01 | |
*梦 | 0.1 | 2025.7.30 | |
**龙 | 10 | 2025.7.29 | 応援します |
Related MCP server: TrendRadar
🪄 スポンサー
バイトダンス自社開発の豆包大規模言語モデルと主要なオープンソース SOTA モデルのフルバージョンを一か所で利用可能。テキスト、視覚理解(VLM)、画像生成などのマルチモーダル機能を完全カバー。Seed-2.1、Seedream 5.0、GLM-5.2、DeepSeek などの人気モデルを一か所で揃え、効率的なプログラミングだけでなく、複雑な長期的 Agent タスクにも対応します。
❤️ 気に入った?応援する
TrendRadar があなたに価値を提供したなら、ぜひ力を注いで、進化を続けるのを助けてください
金額は任意です。1元でもオープンソースへの励みになります。応援の際にコメントを残していただけると嬉しいです (´▽`ʃ♡ƪ)
微信サポート | 支付宝サポート |
🤝 二次開発と引用
もしあなたのプロジェクトで本プロジェクトのアイデアや核心コードを利用・参照した場合は、大歓迎です。README やドキュメントの中で出典を明記し、本リポジトリへのリンクを添えてください。
これはプロジェクトの継続的なメンテナンスとコミュニティの発展につながります。あなたの尊重とサポートに感謝します!❤️
💬 交流とフィードバック
GitHub Issues:具体的な技術的な質問に適しています。質問の際は、スクリーンショットやエラーログなどの完全な情報を提供してください。迅速な問題特定に役立ちます。
公式アカウントでの交流:関連記事のコメント欄での交流を優先することをおすすめします。管理側に質問したい場合は、まず記事に「いいね」/「おすすめ」を押すのが一番の「ちょっとした工夫」です。管理側でもその気持ちはちゃんと伝わっていますよ (´▽`ʃ♡ƪ)。
QQグループ交流:公式アカウントをフォローし、「交流群」と返信すると参加できます。AI 初心者でもハードコアな開発者でも、技術的な質問をしたい方でも、日々の試行錯誤の気づきを共有したい方でも、誰でも歓迎です。グループは互助・交流とアイデアの遠超に重点を置いています。入群後はまずグループのお知らせをご確認ください。質問するときは問題を明確に説明し、スクリーンショットを添えれば、空き時間にグループメンバーが助けてくれます。皆さんの実体験は、私一人で対応するよりも速く、より総合的であることがよくあります。🤝
お知らせ: 本プロジェクトはオープンソース共有であり、商用製品ではありません。作者をカスタマーサポートではなく友達として接することで、コミュニケーションがより円滑になります!
公式アカウントのフォロー |
📝 更新履歴
📌 最新の更新を見る:**[元リポジトリの更新履歴](https://github.com/sansan0/TrendRadar?
独立した MCP サービスイメージ
wantcat/trendradar-mcpを新規追加Docker デプロイで AI 分析機能をサポートし、HTTP インターフェース(ポート 3333)でサービスを提供
デュアルコンテナ構成:ニュース配信サービスと MCP サービスが独立して動作し、それぞれ個別にスケール・再起動が可能
詳細は Docker デプロイ - MCP サービス を参照
🌐 Web サーバーサポート
生成されたレポートをブラウザで閲覧できる内蔵 Web サーバーを新規追加
manage.pyコマンドで起動・停止を制御:docker exec -it trendradar python manage.py start_webserverアクセスアドレス:
http://localhost:8080(ポートは設定可能)セキュリティ機能:静的ファイルサービス、ディレクトリ制限、ローカルアクセス
自動起動と手動制御の2つのモードをサポート
📖 ドキュメント最適化
プッシュ内容はどう表示される? の章を新規追加:プッシュのスタイルと内容をカスタマイズ
いつプッシュされる? の章を新規追加:プッシュ時間帯の設定
どのくらいの頻度で実行される? の章を新規追加:自動実行頻度の設定
複数のグループ・デバイスにプッシュ の章を新規追加:複数の受信者に同時プッシュ
各設定章を最適化:「設定場所」の説明を統一追加
クイックスタートの設定説明を簡素化:3つのコアファイルが一目で分かるように
Docker デプロイ の章を最適化:イメージ説明を追加、git clone デプロイを推奨、デプロイ方法を再構成
🔧 アップグレード説明:
GitHub Fork ユーザー:
main.py、config/config.yamlを更新(複数アカウントプッシュ対応を追加、既存設定の変更は不要)複数アカウントプッシュ:新機能、デフォルトでは無効、既存の単一アカウント設定には影響なし
2025/11/26 - mcp-v1.0.3
MCP モジュール更新:
AI モデルの日付計算の不一致問題を解決する日付解析ツール resolve_date_range を新規追加
自然言語による日付表現の解析をサポート(今週、直近7日間、先月など)
ツール総数が 13 個から 14 個に増加
2025/11/28 - v3.4.1
🔧 フォーマット最適化
Bark プッシュ強化
Bark が Markdown レンダリングをサポート
ネイティブ Markdown フォーマットを有効化:太字、リンク、リスト、コードブロックなど
プレーンテキスト変換を廃止し、Bark のネイティブレンダリング機能を最大限活用
Slack フォーマットの精密化
専用の mrkdwn フォーマットで分割コンテンツを処理
バイトサイズ見積もりの精度を向上(メッセージ上限超過を回避)
リンク形式
<url|text>と太字構文*text*を最適化
パフォーマンス向上
フォーマット変換を分割処理中に完了させ、2次処理を回避
メッセージサイズを正確に見積もり、送信失敗率を低減
🔧 アップグレード説明:
GitHub Fork ユーザー:
main.py、config.yamlを更新
2025/11/25 - v3.4.0
🎉 Slack プッシュサポートを新規追加
チームコラボレーションプッシュチャネル
Slack Incoming Webhooks をサポート(世界的に人気のチームコラボレーションツール)
メッセージを一元管理し、チームでのホットニュース共有に最適
mrkdwn フォーマットをサポート(太字、リンクなど)
複数のデプロイ方法
GitHub Actions:
SLACK_WEBHOOK_URLSecret を設定Docker:環境変数
SLACK_WEBHOOK_URLローカル実行:
config/config.yaml設定ファイル
📖 詳細設定チュートリアル:クイックスタート - Slack プッシュ
setup-windows.bat と setup-windows-en.bat の MCP ワンクリックインストール体験を最適化
🔧 アップグレード説明:
GitHub Fork ユーザー:
main.py、config/config.yaml、.github/workflows/crawler.ymlを更新
2025/11/24 - v3.3.0
🎉 Bark プッシュサポートを新規追加
iOS 専用プッシュチャネル
Bark プッシュをサポート(APNs ベース、iOS プラットフォーム)
無料・オープンソース・シンプルで効率的、広告なし
公式サーバーと自前サーバーの両方をサポート
複数のデプロイ方法
GitHub Actions:
BARK_URLSecret を設定Docker:環境変数
BARK_URLローカル実行:
config/config.yaml設定ファイル
📖 詳細設定チュートリアル:クイックスタート - Bark プッシュ
🐛 バグ修正
config.yamlのntfy_server_url設定が反映されない問題を修正 (#345)
🔧 アップグレード説明:
GitHub Fork ユーザー:
main.py、config/config.yaml、.github/workflows/crawler.ymlを更新
2025/11/23 - v3.2.0
🎯 高度なカスタマイズ機能を新規追加
キーワード並び順の優先度設定
2つの並び順戦略をサポート:人気度優先 vs 設定順優先
さまざまな利用シーンに対応:ホットトピック追跡 or パーソナライズ注目
表示数の精密な制御
グローバル設定:全キーワードの表示数を一括制限
個別設定:
@数字構文で特定キーワードの制限を設定プッシュ長を効果的に制御し、重要な内容を強調
📖 詳細設定チュートリアル:キーワード設定 - 詳細設定
🔧 アップグレード説明:
GitHub Fork ユーザー:
main.py、config/config.yamlを更新
2025/11/18 - mcp-v1.0.2
MCP モジュール更新:
今日のニュースを照会した際に誤って過去の日付が返される可能性がある問題を最適化
2025/11/22 - v3.1.1
データ異常によるクラッシュ問題を修正:一部のユーザーが GitHub Actions 環境で遭遇した
'float' object has no attribute 'lower'エラーを解決二重防御メカニズムを新規追加:データ取得段階で無効なタイトル(None、float、空文字列)をフィルタリングし、関数呼び出し箇所にも型チェックを追加
システムの安定性を向上させ、データソースが異常な形式を返した場合でも正常に動作
アップグレード説明(GitHub Fork ユーザー):
必須更新:
main.pyマイナーバージョンアップグレード方式を推奨:上記ファイルをコピーして置換
2025/11/20 - v3.1.0
個人微信プッシュサポートを新規追加:企業微信アプリで個人微信にプッシュ可能、企業微信 APP のインストール不要
2つのメッセージ形式をサポート:
markdown(企業微信グループロボット)とtext(個人微信アプリ)新規
WEWORK_MSG_TYPE環境変数設定を追加し、GitHub Actions、Docker、docker compose など複数のデプロイ方法をサポートtextモードは Markdown 構文を自動的に除去し、プレーンテキストのプッシュ効果を提供詳細はクイックスタートの「個人微信プッシュ」設定説明を参照
アップグレード説明(GitHub Fork ユーザー):
必須更新:
main.py、config/config.yaml任意更新:
.github/workflows/crawler.yml(GitHub Actions でデプロイする場合)マイナーバージョンアップグレード方式を推奨:上記ファイルをコピーして置換
2025/11/12 - v3.0.5
メール送信の SSL/TLS ポート設定ロジックエラーを修正
メールサービスプロバイダー(QQ/163/126)のデフォルトを 465 ポート(SSL)に最適化
Docker 環境変数サポートを新規追加:主要な設定項目(
enable_crawler、report_mode、push_windowなど)が環境変数による上書きをサポートし、NAS ユーザーの設定ファイル変更が反映されない問題を解決(詳細は 🐳 Docker デプロイ の章を参照)
2025/10/26 - mcp-v1.0.1
MCP モジュール更新:
日付クエリパラメータの受け渡しエラーを修正
全ツールの時間パラメータ形式を統一
2025/10/31 - v3.0.4
飛書(Feishu)のプッシュ内容が長すぎるために発生するエラーを解決し、分割プッシュを実装
2025/10/23 - v3.0.3
ntfy エラー情報の表示範囲を拡大
2025/10/21 - v3.0.2
ntfy プッシュのエンコーディング問題を修正
2025/10/20 - v3.0.0
メジャーアップデート - AI 分析機能が登場 ✨
コア機能:
MCP (Model Context Protocol) ベースの AI 分析サーバーを新規追加
17種類のスマート分析ツールをサポート:基本クエリ、スマート検索、高度な分析、RSS クエリ、システム管理
自然言語インタラクション:会話形式でニュースデータを照会・分析
複数クライアントをサポート:Claude Desktop、Cherry Studio、Cursor、Cline など
分析機能:
トピックトレンド分析(人気度追跡、ライフサイクル、バズ検出、トレンド予測)
データインサイト(プラットフォーム比較、アクティビティ統計、キーワード共起)
感情分析、類似ニュース検索、スマート要約生成
過去の関連ニュース検索、マルチモード検索
更新情報:
これは独立した AI 分析機能であり、既存のプッシュ機能には影響しません
選択的に使用可能で、既存のデプロイをアップグレードする必要はありません
2025/10/15 - v2.4.4
更新内容:
ntfy プッシュのエンコーディング問題を修正 + 1
プッシュ時間ウィンドウの判定問題を修正
更新情報:
【マイナーバージョンアップグレード】を推奨
2025/10/10 - v2.4.3
nidaye996 さんが発見した体験問題に感謝
更新内容:
「サイレントプッシュモード」を「プッシュ時間ウィンドウ制御」にリネームし、機能の理解度を向上
プッシュ時間ウィンドウをオプションの追加機能として明確化し、3つのプッシュモードと組み合わせて使用可能
コメントとドキュメントの説明を改善し、機能の位置づけをより明確に
更新情報:
これはリファクタリングのみで、アップグレードは不要
2025/10/8 - v2.4.2
更新内容:
ntfy プッシュのエンコーディング問題を修正
設定ファイル欠落の問題を修正
ntfy プッシュ効果を最適化
github page の画像分割エクスポート機能を追加
更新情報:
【メジャーバージョンアップデート】を推奨
2025/10/2 - v2.4.0
ntfy プッシュ通知を新規追加
コア機能:
ntfy.sh パブリックサービスとセルフホストサーバーをサポート
利用シーン:
プライバシーを重視するユーザーに最適(セルフホスト対応)
クロスプラットフォームプッシュ(iOS、Android、Desktop、Web)
アカウント登録不要(パブリックサーバー)
オープンソース・無料(MIT ライセンス)
更新情報:
【メジャーバージョンアップデート】を推奨
2025/09/26 - v2.3.2
メール通知設定チェックが漏れていた問題を修正(#88)
修正説明:
メール通知を正しく設定していても「webhook が設定されていません」と表示される問題を解決
2025/09/22 - v2.3.1
メールプッシュ機能を新規追加、ホットニュースレポートをメールで送信可能
スマート SMTP 認識:Gmail、QQメール、Outlook、网易メールなど 10+ 種類のメールサービスプロバイダー設定を自動認識
HTML 高品質フォーマット:メール内容は Web 版と同じ HTML フォーマットで、美しいレイアウト、モバイル対応
一括送信サポート:複数の受信者をカンマ区切りで指定し、同時に複数人へ送信可能
カスタム SMTP:SMTP サーバーとポートをカスタマイズ可能
Docker ビルドのネットワーク接続問題を修正
使用方法:
適用シーン:メールアーカイブ、チーム共有、定期レポートが必要なユーザーに最適
対応メール:Gmail、QQメール、Outlook/Hotmail、163/126メール、新浪メール、搜狐メールなど
更新情報:
今回の更新内容は多いため、アップグレードする場合は【メジャーバージョンアップグレード】を推奨
2025/09/17 - v2.2.0
ニュース画像をワンクリック保存する機能を新規追加。注目のホットトピックを簡単に共有可能
使用方法:
適用シーン:チュートリアルに従って Web 版機能(GitHub Pages)を有効にした場合
使用方法:スマートフォンまたは PC でその Web リンクを開き、ページ上部の「画像として保存」ボタンをクリック
実際の効果:システムが現在のニュースレポートを自動的に美しい画像に変換し、スマートフォンのアルバムまたは PC のデスクトップに保存
共有の便利さ:その画像を直接友人に送信したり、WeChat モーメンツに投稿したり、仕事のグループで共有して、自分が見つけた重要な情報を他の人にも見せることが可能
2025/09/13 - v2.1.2
钉钉(DingTalk)のプッシュ容量制限によるニュースプッシュ失敗問題を解決(分割プッシュを採用)
2025/09/04 - v2.1.1
docker が一部のアーキテクチャで正常に動作しない問題を修正
公式 Docker イメージ wantcat/trendradar を正式リリース、マルチアーキテクチャ対応
Docker デプロイプロセスを最適化し、ローカルビルドなしで迅速に使用可能
2025/08/30 - v2.1.0
コア改善:
プッシュロジックの最適化:「実行ごとにプッシュ」から「時間ウィンドウ内で制御可能なプッシュ」に変更
時間ウィンドウ制御:プッシュ時間範囲を設定可能、非勤務時間の妨害を回避
プッシュ頻度の選択肢:時間帯内で単回プッシュまたは複数回プッシュをサポート
更新情報:
本機能はデフォルトで無効。config.yaml でプッシュ時間ウィンドウ制御を手動で有効にする必要あり
アップグレードには main.py と config.yaml の両ファイルを同時に更新する必要あり
2025/08/27 - v2.0.4
今回のバージョンは機能修正ではなく、重要な注意喚起です
webhooks は厳重に保管してください。公開しないでください。公開しないでください。公開しないでください
このプロジェクトを fork 方式で GitHub にデプロイしている場合は、webhooks を GitHub Secret に入力してください。config.yaml には入力しないでください
すでに webhooks を公開した場合や config.yaml に入力した場合は、削除して再生成することを推奨します
2025/08/06 - v2.0.3
github page の Web 版表示効果を最適化し、モバイルでの利用を容易に
2025/07/28 - v2.0.2
コードをリファクタリング
バージョン番号の更新漏れが発生しやすい問題を解決
2025/07/27 - v2.0.1
修正された問題:
docker のシェルスクリプトの改行コードが CRLF であるために発生する実行異常問題
frequency_words.txt が空の場合、ニュース送信も空になるロジック問題
修正後、frequency_words.txt を空に選択した場合、すべてのニュースがプッシュされますが、メッセージプッシュサイズ制限のため、以下の調整を行ってください
方法1:スマートフォンプッシュをオフにし、Github Pages のみを選択(最も完全な情報を得られる方法で、全プラットフォームのホットトピックをカスタムのホット検索アルゴリズムに従って再ソート)
方法2:プッシュプラットフォームを減らし、企業微信またはTelegramを優先的に選択。この2つのプッシュには分割プッシュ機能を実装(分割プッシュはプッシュ体験に影響し、この2つのプラットフォームのみプッシュ容量がわずかなため、やむを得ず分割プッシュ機能を実装しましたが、少なくとも情報の完全性は保証されます)
方法3:方法2と組み合わせて、モードを current または incremental に選択すると、一度にプッシュされる内容を効果的に削減可能
2025/07/17 - v2.0.0
メジャーリファクタリング:
設定管理のリファクタリング:すべての設定を
config/config.yamlファイルで管理(main.py は引き続き分割せず、コピーアップグレードを容易に)実行モードのアップグレード:3つのモードをサポート -
daily(当日集計)、current(現在のランキング)、incremental(増分モニタリング)Docker サポート:完全な Docker デプロイソリューション、コンテナ化実行をサポート
設定ファイルの説明:
config/config.yaml- メイン設定ファイル(アプリ設定、クローラー設定、通知設定、プラットフォーム設定など)config/frequency_words.txt- キーワード設定(監視語彙の設定)
2025/07/09 - v1.4.1
新機能:増分プッシュを追加(main.py の先頭で FOCUS_NEW_ONLY を設定)。このスイッチは継続的な人気ではなく新しいトピックのみに注目し、新しい内容がある場合のみ通知を送信します。
修正された問題: 特定の状況下で、ニュース自体に特殊記号が含まれることによる偶発的なレイアウト異常。
2025/06/23 - v1.3.0
企業微信 と Telegram のプッシュメッセージには長さ制限があるため、メッセージを分割してプッシュする方式を採用しました。開発ドキュメントは企業微信 と Telegram を参照
2025/06/21 - v1.2.1
このバージョンより前の旧バージョンでは、main.py のコピー置換だけでなく、crawler.yml もコピー置換する必要があります https://github.com/sansan0/TrendRadar/blob/master/.github/workflows/crawler.yml
2025/06/19 - v1.2.0
claude research が整理した各プラットフォームの API に感謝。各プラットフォームへの対応を迅速に完了できました(コードはより冗長になりましたが〜)
telegram、企業微信、钉钉のプッシュチャネルをサポート。マルチチャネル設定と同時プッシュをサポート
2025/06/18 - v1.1.0
200 star⭐ 達成!引き続き皆さんに楽しんでいただけるよう頑張ります〜最近、私の「そそのかし」で、多くの方が私の公式アカウントでいいね・シェア・推薦をして応援してくださいました。バックエンドで具体的なアカウントの応援データをすべて確認しています。多くがエンジェルラウンドの古参ファンになりました(私が公式アカウントを始めてまだ1ヶ月ちょっとですが、登録は7〜8年前のことです。早く乗って遅く出発した感じですね)。ただし、コメントやダイレクトメッセージをいただけなかったため、個別に応答して感謝をお伝えすることができません。この場を借りてお礼申し上げます!
重要な更新:重み付けを追加しました。今見ているニュースは、最もホットで注目度の高いものが一番上に表示されます
ドキュメントの使用方法を更新。最近多くの機能を更新したため、以前の使用ドキュメントは手抜きで簡単に書いていました(下記の ⚙️ frequency_words.txt 設定完全チュートリアルを参照)
2025/06/16 - v1.0.0
プロジェクトの新バージョン更新通知を追加。デフォルトでオン。オフにする場合は、main.py の "FEISHU_SHOW_VERSION_UPDATE": True の True を False に変更
2025/06/13+14
互換コードを削除。以前 fork した方は、コードを直接コピーすると当日表示が異常になります(翌日には正常に戻ります)
feishu と html の下部に新着ニュース表示を追加
2025/06/09
100 star⭐ 達成!小さな機能を追加して皆さんに楽しんでいただきます frequency_words.txt ファイルに【必須語】機能を追加。+ 記号を使用
必須語の構文は以下の通り:
唐僧(三蔵法師)または猪八戒がタイトルに同時に出現する必要があり、その場合のみプッシュニュースに収録されます
+唐僧
+猪八戒フィルター語の優先度が高い:
タイトルでフィルター語が唐僧念経(三蔵法師のお経唱え)にマッチした場合、必須語に唐僧があっても表示されません
+唐僧
!唐僧念经2025/06/02
Web と飛書メッセージでスマートフォンから詳細ニュースへ直接ジャンプ可能
表示効果を最適化 + 1
2025/05/26
飛書メッセージの表示効果を最適化
✨ コア機能
全ネットワークホットトピック集約
知乎
抖音
bilibili ホット検索
ウォールストリートジャーナル(华尔街见闻)
貼吧
百度ホット検索
財聯社ホット
澎湃新聞
鳳凰網
今日頭条
微博
デフォルトで 11 の主要プラットフォームを監視。追加のプラットフォームも自由に追加可能
💡 詳細設定チュートリアルは 設定詳細 - プラットフォーム設定 を参照
RSS 購読ソースサポート(v4.5.0 で新規追加)
RSS/Atom 購読ソースの取得をサポートし、キーワードごとにグループ化して統計(ホットランキングと同じ形式):
統一フォーマット:RSS とホットランキングは同じキーワードマッチングと表示形式を使用
簡単設定:
config.yamlに直接 RSS ソースを追加統合プッシュ:ホットランキングと RSS を1つのメッセージに統合してプッシュ
鮮度フィルタリング:指定日数を超えた古い記事を自動的にフィルタリングし、重複プッシュを回避。グローバルデフォルト日数とソースごとの個別設定をサポート
💡 RSS はホットランキングと同じ
frequency_words.txtを使用してキーワードフィルタリングを行います
ビジュアル設定エディター
Web ベースのグラフィカル設定インターフェースを提供。YAML ファイルを手動編集する必要がなく、フォームで全設定項目の変更とエクスポートが可能。
👉 オンライン体験:https://sansan0.github.io/TrendRadar/
スマートプッシュ戦略
3つのプッシュモード:
モード | 適用シーン | プッシュ特徴 |
当日集計 (daily) | 企業管理者/一般ユーザー | 定時に当日の全マッチングニュースをプッシュ(以前にプッシュしたものを含む) |
現在のランキング (current) | 自媒体人/コンテンツクリエイター | 定時に現在のランキングのマッチングニュースをプッシュ(ランキングに残っているものは毎回表示) |
増分モニタリング (incremental) | 投資家/トレーダー | 新規コンテンツのみプッシュ、重複ゼロ |
💡 クイック選択ガイド:
重複ニュースを見たくない →
incremental(増分モニタリング)を使用完全なランキングトレンドを見たい →
current(現在のランキング)を使用毎日の集計レポートが必要 →
daily(当日集計)を使用詳細な比較と設定チュートリアルは 設定詳細 - プッシュモード詳細 を参照
追加機能(オプション):
機能 | 説明 | デフォルト |
スケジュールシステム | 月曜から日曜まで日ごとに編成:各日に異なる時間帯、プッシュモード、AI 分析戦略を割り当て。各時間帯でフィルタリング方法(キーワード/AI)と注目方向を個別に設定可能。異なる時間に異なるタイプのニュースを閲覧可能。内蔵 5 つのプリセット(always_on / morning_evening / office_hours / night_owl / custom)、カスタムも可能。平日/週末の差別化、深夜をまたぐ時間帯、per-period 重複排除、時間帯競合検出をサポート(v6.0.0 + v6.5.0) | morning_evening |
コンテンツ順序設定 |
| 設定ファイルを参照 |
表示モード切り替え |
| keyword |
💡 詳細設定チュートリアルは プッシュ内容はどう表示される? と いつプッシュされる? を参照
精密なコンテンツフィルタリング
個人キーワード(例:AI、BYD、教育政策)を設定し、関連するホットトピックのみをプッシュ、無関係な情報をフィルタリング
💡 基本設定チュートリアル:キーワード設定 - 基本構文
💡 詳細設定チュートリアル:キーワード設定 - 詳細設定
💡 フィルタリングなしで全ホットトピックを完全プッシュすることも可能(frequency_words.txt を空にする)
AI スマートニュースフィルタリング(v6.5.0 で新規追加)
自然言語で興味を記述すると、AI がニュースを自動分類し、従来のキーワードマッチングに代わります
自然言語による興味記述:
ai_interests.txtに日常言語で関心分野を記述するだけで、キーワードの文法を学ぶ必要はありません2段階スマート処理:AI がまず興味記述から構造化タグを抽出し、次にニュースをタグ別に一括分類・スコアリングします
スコア閾値制御:
ai_filter.min_scoreで配信品質を精密に制御し、関連性の高いニュースのみを配信します自動フォールバック保証:AI フィルタリング失敗時は自動的にキーワードマッチングへ切り替わり、配信の中断を防ぎます
スマートタグ更新:興味が変更された際、AI が変更の規模を自動評価し、増分更新か全量再分類かを決定します
柔軟な切り替え:
filter.methodはkeyword(デフォルト)とaiの2モードをサポートし、Timeline では時間帯ごとに上書き可能です時間帯別パーソナライズ:時間帯ごとに異なるキーワードファイルや AI 興味記述を使用できます。例えば朝は「テック辞書」で高速フィルタリング、夜は「金融興味」に切り替えて AI による深いフィルタリングが可能です
# config.yaml 快速启用示例
filter:
method: ai # keyword(默认)| ai
ai_filter:
min_score: 6 # 推送最低分数阈值(1-10)💡 AI フィルタリングは AI 分析・翻訳とモデル設定を共有するため、
ai.api_keyは一度設定するだけで済みます
ホットトレンド分析
ニュースの熱度変化をリアルタイムで追跡し、「何がホット検索されているか」だけでなく「ホットトピックがどのように進化するか」も把握できます
タイムライン追跡:各ニュースの初出から最終出現までの完全な時間スパンを記録
熱度変化:異なる時間帯におけるニュースのランキング変動と出現頻度を統計
新規検出:新たに出現したホットトピックをリアルタイムで識別し、🆕マークで即座に通知
持続性分析:一過性のホットトピックと継続的に発展する深層ニュースを区別
クロスプラットフォーム比較:同一ニュースのプラットフォーム別ランキングを比較し、メディアの注目度の違いを把握
💡 配信メッセージの形式説明は メッセージの見た目 を参照
パーソナライズホットトピックアルゴリズム
各プラットフォームのアルゴリズムに振り回されることなく、TrendRadar が全ネットのホット検索を再整理します
💡 3つの比率は調整可能です。詳細は 設定詳細 - ホットトピック重み調整 を参照
マルチチャネル・マルチアカウント配信
企業微信(+ 個人微信配信ソリューション)、飛書(Feishu)、钉钉(DingTalk)、Telegram、メール、ntfy、Bark、Slack、汎用 Webhook(Discord、IFTTT など任意のプラットフォームに接続可能)をサポートし、メッセージをスマホとメールに直接配信します
💡 詳細な設定チュートリアルは 複数のグループ・デバイスへの配信 を参照
AI 多言語翻訳(v5.2.0 新機能)
配信コンテンツを任意の言語に翻訳し、言語の壁を打破します。国内のホットトピックを読む場合も、RSS で海外情報を購読する場合も、母語で簡単に取得できます
ワンクリック翻訳:
config.yamlでai_translation.enabled: trueと対象言語を設定するだけ多言語サポート:English、Korean、Japanese、French など任意の言語に対応
スマート一括処理:自動でバッチ翻訳し、API 呼び出し回数を削減してコストを節約
カスタムスタイル:
ai_translation_prompt.txtで翻訳スタイルと用語をカスタマイズモデル設定共有:AI 分析機能と
ai設定セクションのモデル設定を共用
# config.yaml 快速启用示例
ai_translation:
enabled: true
language: "English" # 翻译目标语言💡 翻訳機能は AI 分析機能とモデル設定を共有するため、
ai.api_keyを一度設定するだけで両方の機能を使用できます
RSS ソース参考:以下は RSS 購読ソースのコレクションです。必要に応じて選択してください
awesome-tech-rss - テクノロジー、スタートアップ、プログラミング分野のブログとメディア
awesome-rss-feeds - 世界各国の主要ニュースメディア RSS コレクション
⚠️ 一部の海外メディアのコンテンツはデリケートな話題を含む場合があり、AI モデルが翻訳を拒否する可能性があります。実際のニーズに応じて購読ソースを選別することをお勧めします
HTML レポートブラウザ拡張(v6.6.0 新機能)
ブラウザで配信された HTML レポートを開くと、拡張エクスペリエンスが自動的に有効になります(メールクライアントには影響しません):
ワイドスクリーンモード:デスクトップでは自動的に 1200px のワイドレイアウトに切り替わり、画面スペースを最大限に活用
タブクイック切り替え:キーワードグループと独立展示エリアの両方でタブナビゲーションをサポートし、長いページのスクロールを解消
ダークモード:ワンクリックでダークテーマに切り替え、設定を自動的に記憶
リアルタイム検索:
/キーで検索ボックスを呼び出し、ニュースタイトルを即時フィルタリングワンクリックコピー:ニュースの番号にホバーするとタイトルとリンクをコピー
ショートカットキー:
Wワイドスクリーン、Dダークモード、/検索、?すべてのショートカットキーを表示
💡 すべての拡張機能はプログレッシブエンハンスメントに基づいており、メールクライアントでは元の 600px レイアウトが表示され、回帰はゼロです
柔軟なストレージアーキテクチャ(v4.0.0 メジャーアップデート)
マルチストレージバックエンド対応:
リモートクラウドストレージ:GitHub Actions 環境のデフォルト。S3 互換プロトコル(R2/OSS/COS など)をサポートし、データはクラウドに保存されるためリポジトリを汚染しません
ローカル SQLite データベース:Docker/ローカル環境のデフォルト。データを完全に制御可能
自動バックエンド選択:実行環境に応じてストレージ方式をスマートに切り替え
💡 詳細は データはどこに保存されますか? を参照
マルチ環境デプロイ
GitHub Actions:定期自動クロール + リモートクラウドストレージ(定期サインイン更新が必要)
Docker デプロイ:マルチアーキテクチャのコンテナ実行をサポートし、データはローカルに保存
ローカル実行:Windows/Mac/Linux で直接実行
AI 分析配信(v5.0.0 新機能)
AI 大規模言語モデルを使用して配信コンテンツを深く分析し、ホットトピックのインサイトレポートを自動生成します
スマート分析:ホットトレンド、キーワード熱度、クロスプラットフォーム関連性、潜在的な影響を自動分析
マルチプロバイダー:LiteLLM 統一インターフェースに基づき、100以上の AI プロバイダー(DeepSeek、OpenAI、Gemini、Anthropic、ローカル Ollama など)をサポート。バックアップモデルへの自動切り替えにも対応
分析モード独立:AI の分析範囲は配信と異なる場合があります——配信は新規メッセージのみ送信(通知過多を防止)しつつ、AI は当日の全ニュースを分析(全体トレンドを把握)できます
柔軟な配信:元のコンテンツのみ、AI 分析のみ、または両方の配信を選択可能
カスタムプロンプト:
config/ai_analysis_prompt.txtで分析の視点をカスタマイズ
💡 詳細な設定チュートリアルは AI にホットトピックを分析してもらう を参照
独立展示エリア(v5.0.0 新機能)
指定プラットフォームに完全なホットランキングを提供し、キーワードフィルタリングの影響を受けません
完全なホットランキング:指定プラットフォームのホットランキングを完全表示。完全なランキングを見たいユーザー向け
RSS 独立展示:RSS ソースのコンテンツを完全表示でき、キーワード制限の影響を受けません
AI 深層分析:完全なホットランキングに対する AI トレンド分析を独立して有効化でき、配信に表示する必要はありません
柔軟な設定:表示プラットフォーム、RSS ソース、最大件数を設定可能
💡 詳細な設定チュートリアルは 配信コンテンツの表示方法 - 独立展示エリア を参照
AI スマート分析(v3.0.0 新機能)
MCP (Model Context Protocol) プロトコルに基づく AI 対話分析システムで、自然言語でニュースデータを深く掘り下げることができます
💡 使用ヒント:AI 機能にはローカルニュースデータが必要です
プロジェクトにはテストデータが同梱されており、すぐに機能を体験できます
よりリアルタイムなデータを取得するには、プロジェクトを自分でデプロイして実行することをお勧めします
詳細は AI スマート分析 を参照
Web デプロイ
実行後、ルートディレクトリに index.html が生成されます。これが完全なニュースレポートページです。
デプロイ方法:Use this template ボタンをクリックしてリポジトリを作成し、Cloudflare Pages や GitHub Pages などの静的ホスティングプラットフォームにデプロイできます。
💡 ヒント:GitHub Pages を有効にするとオンラインアクセス URL が取得できます。リポジトリの Settings → Pages で有効化してください。プレビュー
⚠️ 旧 GitHub Actions 自動ストレージ機能は廃止されました(この方式は GitHub サーバーに過大な負荷をかけ、プラットフォームの安定性に影響を与えたため)。
☁️ Cloudflare Pages への自動デプロイ(オプション・国内アクセス高速化)
GitHub Pages は国内からのアクセスが遅いため、Cloudflare Pages の方がアクセス速度が良好です。設定完了後、GitHub Actions が実行されるたびに最新の index.html が自動的に Cloudflare Pages へプッシュされ、手動操作は一切不要です。
前提条件:GitHub Actions デプロイ が完了し、Web レポートが正常に生成されていること。
① Cloudflare Pages プロジェクトの作成
Cloudflare Dashboard にログイン → Workers & Pages → Create → Pages → Upload assets(直接アップロード) を選択し、プロジェクト名(例:trendradar、覚えておいてください)を入力し、適当なファイルをアップロードして初回作成を完了します(以降は Actions が自動的に上書きします)。
② API Token と Account ID の取得
API Token:右上のアバター → My Profile → API Tokens → Create Token → Create Custom Token で、権限として
Account→Cloudflare Pages→Editを選択し、作成後に Token をコピーします(一度しか表示されません)。Account ID:Workers & Pages ページの右側バーに表示されます(または任意のドメインの Overview ページ右下)。
③ GitHub リポジトリに 3 つの Secrets を追加
リポジトリの Settings → Secrets and variables → Actions → New repository secret に移動し、順番に追加します:
Name(名前) | Secret(値) |
| 前の手順で作成した API Token |
| あなたの Cloudflare Account ID |
| Cloudflare Pages プロジェクト名(例: |
設定完了後、次回の GitHub Actions 実行時に自動デプロイされ、アクセス URL は https://<プロジェクト名>.pages.dev になります。
💡 説明:3つの Secret のうち1つでも欠けていると Cloudflare デプロイは自動的にスキップされますが、ニュース配信などの他の機能には影響しません。カスタムドメインをバインドする場合は、Pages プロジェクトの Custom domains で設定できます。
APP 依存の軽減
「アルゴリズムによるレコメンドに支配される」状態から「自分が欲しい情報を能動的に取得する」状態へ
対象ユーザー: 投資家、自メディア運営者、企業広報、時事に関心のある一般ユーザー
典型的なシナリオ: 株式投資モニタリング、ブランド風評追跡、業界動向の把握、生活情報の取得
ウェブ効果(メール配信効果) | 飛書配信効果 | AI 分析配信効果 |
|
|
|
🚀 クイックスタート
注意:最新の公式ドキュメント を先に確認し、設定手順が最新であることを確認することをお勧めします。
あなたに合ったデプロイ方法を選択してください
Ⓐ 方法1:Docker デプロイ(推奨 🔥)
特徴:GitHub Actions より安定しており、データはローカルに保存(クラウドストレージの設定不要)
対象:自前のサーバー、NAS、または長期稼働するコンピューターをお持ちの方
注意:以下の基本設定フローを理解した上で、Docker チュートリアルに進んでデプロイしてください。
Ⓑ 方法2:GitHub Actions デプロイ(本章の内容 ⬇️)
特徴:サーバーレス。データは リモートクラウドストレージ に保存(推奨設定)
対象:サーバーを持たないユーザー。GitHub の無料リソースを活用
注意:完全な体験にはクラウドストレージの設定が必要で、定期的なサインイン更新も必要です
Ⓒ 方法3:ローカルデプロイ(uv)
特徴:Docker なしで本機で直接実行可能。開発デバッグや Docker 環境のないユーザーに適しています
対象:Windows / Mac / Linux ユーザー(Python の事前インストール不要。uv が自動管理)
手順:
1. uv のインストール(インストール済みの場合はスキップ可。Python の事前インストールは不要)
# macOS / Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows (PowerShell) powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"2. クローンして実行
git clone https://github.com/sansan0/TrendRadar.git cd TrendRadar uv sync # 自动安装 Python 和项目依赖 uv run python -m trendradar💡 ヒント:
uv が Python バージョンを自動管理するため、Python を手動インストールする必要はありません
Windows ユーザーは
setup-windows.batをダブルクリックするだけで依存関係をインストールできますMac ユーザーは
bash setup-mac.shを使用できます実行前に
config/config.yamlを編集して配信チャネルなどの設定を記入してください。以下の基本設定フローを参照
1️⃣ ステップ1:プロジェクトコードの取得
このリポジトリページ右上の緑色の [Use this template] ボタンをクリック → 「Create a new repository」を選択します。
⚠️ 注意:
以降のドキュメントで言及される「Fork」はすべて「Use this template」と理解してください
Fork を使用すると実行エラーが発生する可能性があります。詳細は Issue #606 を参照
2️⃣ ステップ2:GitHub Secrets の設定
Fork したリポジトリで、Settings > Secrets and variables > Actions > New repository secret に移動します
📌 重要な説明(必ずよくお読みください):
1つの Name に1つの Secret:設定項目ごとに「New repository secret」ボタンをクリックし、「Name」と「Secret」のペアを1組入力します
保存後に値が見えないのは正常です:セキュリティ上の理由から、保存後に再編集しても Name(名前)しか見えず、Secret(値)の内容は見えません
名前の自作は厳禁:Secret の Name(名前)は下記に記載された名前を厳密に使用してください(例:
WEWORK_WEBHOOK_URL、FEISHU_WEBHOOK_URLなど)。勝手に変更したり新しい名前を作成したりすると、システムが認識できません複数プラットフォームの同時設定が可能:設定されたすべてのプラットフォームに通知が送信されます
設定例:
上の図のように、各行が1つの設定項目です:
Name(名前):下記の展開コンテンツに記載されている固定名を使用する必要があります(例:
WEWORK_WEBHOOK_URL)Secret(値):各プラットフォームから取得した実際の内容(Webhook アドレス、Token など)を入力します
GitHub Secret 設定(⚠️ Name は厳密に一致させること):
Name(名前):
WEWORK_WEBHOOK_URL(この名前をコピー&ペーストしてください。手入力は誤字の原因になるため避けてください)Secret(値):あなたの企業微信ボットの Webhook アドレス
ボット設定手順:
スマホでの設定:
企業微信 App を開く → 対象の内部グループチャットに入る
右上の「…」ボタンをクリック → 「メッセージ配信」を選択
「追加」をクリック → 名前に「TrendRadar」と入力
Webhook アドレスをコピーし、保存をクリック。コピーした内容を上記の GitHub Secret に設定
PC での設定手順も同様
この方法は企業微信のプラグイン機構に基づくため、配信スタイルはプレーンテキスト(markdown 形式なし)ですが、企業微信 App をインストールせずに個人微信へ直接配信できます。
GitHub Secret 設定(⚠️ Name は厳密に一致させること):
Name(名前):
WEWORK_WEBHOOK_URL(この名前をコピー&ペーストしてください。手入力は避けてください)Secret(値):あなたの企業微信アプリの Webhook アドレス
Name(名前):
WEWORK_MSG_TYPE(この名前をコピー&ペーストしてください。手入力は避けてください)Secret(値):
text
設定手順:
上記の企業微信ボット Webhook 設定を完了する
WEWORK_MSG_TYPESecret を追加し、値をtextに設定下の画像の手順に従って、個人微信を連携する
設定完了後、スマホの企業微信 App は削除して構いません
説明:
企業微信ボットと同じ Webhook アドレスを使用
違いはメッセージ形式:
textはプレーンテキスト、markdownはリッチテキスト(デフォルト)プレーンテキスト形式では、すべての markdown 構文(太字、リンクなど)が自動的に除去されます
注意:旧「飛書ボットアシスタント (BotBuilder)」は 2026 年 6 月 30 日に廃止予定です。下記のグループカスタムボット方式で設定してください。既存の BotBuilder webhook アドレスは無効になるため、再設定が必要です。
AI 分析を有効にすると、飛書配信で偶発的(約 5% の確率)に数分の遅延が発生する場合があります(AI 生成コンテンツに対するプラットフォームのコンプライアンス審査が原因と推測されます)。
GitHub Secret 設定(⚠️ Name は厳密に一致させること):
Name(名前):
FEISHU_WEBHOOK_URL(この名前をコピー&ペーストしてください。手入力は避けてください)Secret(値):あなたの飛書カスタムボットの Webhook アドレス(形式:
https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxx)
設定手順:
対象グループに入り、グループ右上の その他 ボタンをクリックし、設定 をクリックします。

右側の 設定 画面で、グループボット をクリックします。

グループボット 画面で ボットを追加 をクリックします。
ボットを追加 ダイアログで、カスタムボット を見つけてクリックします。

カスタムボットのアバター、名前(例:「TrendRadar ホットトピック監視」)、説明を設定し、追加 をクリックします。

カスタムボットの webhook アドレス を取得し、完了 をクリックします。
⚠️ この webhook アドレスは大切に保管し、GitHub やブログなど公開閲覧可能なサイトに公開しないでください。アドレスが漏洩すると悪意のあるスパムメッセージ送信に利用される可能性があります。

コピーした Webhook アドレスを GitHub Secrets の
FEISHU_WEBHOOK_URLに設定します。
💡 設定完了後、グループ名の右側にあるボット画像をクリックすると、カスタムボットの詳細ページで設定情報を管理できます。
📖 公式ドキュメント:カスタムボット使用ガイド
GitHub Secret 設定(⚠️ Name は厳密に一致させること):
Name(名前):
DINGTALK_WEBHOOK_URL(この名前をコピー&ペーストしてください。手入力は避けてください)Secret(値):あなたの钉钉ボットの Webhook アドレス
ボット設定手順:
ボットの作成(PC 版のみ対応):
钉钉 PC クライアントを開き、対象のグループチャットに入る
グループ設定アイコン(⚙️)をクリック → 下にスクロールして「ボット」を開く
「ボットを追加」→「カスタム」を選択
ボットの設定:
ボット名を設定
セキュリティ設定:
カスタムキーワード:「热点」を設定
設定の完了:
サービス利用規約にチェック → 「完了」をクリック
取得した Webhook URL をコピー
URL を GitHub Secrets の
DINGTALK_WEBHOOK_URLに設定
注意:モバイル版ではメッセージの受信のみ可能で、新しいボットの作成はできません。
GitHub Secret 設定(⚠️ Name は厳密に一致させること):
Name(名前):
TELEGRAM_BOT_TOKEN(この名前をコピー&ペーストしてください。手入力は避けてください)Secret(値):あなたの Telegram Bot Token
Name(名前):
TELEGRAM_CHAT_ID(この名前をコピー&ペーストしてください。手入力は避けてください)Secret(値):あなたの Telegram Chat ID
説明:Telegram は2つの Secret を設定する必要があります。「New repository secret」ボタンをそれぞれ2回クリックして追加してください
ボット設定手順:
ボットの作成:
Telegram で
@BotFatherを検索(大文字小文字に注意。青いバッジのチェックマークがあり、類似の 37849827 monthly users と表示されるものが公式です。公式に似せた偽アカウントに注意)/newbotコマンドを送信して新しいボットを作成ボット名を設定(「bot」で終わる必要があります。重複名が非常に多いため、ユニークな名前を考える必要があります)
Bot Token を取得(形式:
123456789:AAHfiqksKZ8WmR2zSjiQ7_v4TMAKdiHm9T0)
Chat ID の取得:
方法1:公式 API で取得
先にボットにメッセージを送信
https://api.telegram.org/bot<あなたのBot Token>/getUpdatesにアクセス返ってきた JSON の
"chat":{"id":数字}の数字を確認
方法2:サードパーティツールを使用
@userinfobotを検索して/startを送信取得したユーザー ID を Chat ID として使用
GitHub に設定:
TELEGRAM_BOT_TOKEN:手順1で取得した Bot Token を入力TELEGRAM_CHAT_ID:手順2で取得した Chat ID を入力
注意事項:メールの一括送信機能の悪用を防ぐため、現在の一括送信では全受信者がお互いのメールアドレスを確認できます。
下記のようなメール送信の設定経験がない場合は、試さないことをお勧めします
⚠️ 重要な設定依存:メール配信には HTML レポートファイルが必要です。
config/config.yamlのstorage.formats.htmlがtrueに設定されていることを確認してください:storage: formats: sqlite: true txt: false html: true # 必须启用,否则邮件推送会失败
falseに設定すると、メール配信時にエラーが発生します:错误:HTML文件不存在或未提供: None
GitHub Secret 設定(⚠️ Name は厳密に一致させること):
Name(名前):
EMAIL_FROM(この名前をコピー&ペーストしてください。手入力は避けてください)Secret(値):送信元メールアドレス
Name(名前):
EMAIL_PASSWORD(この名前をコピー&ペーストしてください。手入力は避けてください)Secret(値):メールパスワードまたは認証コード
Name(名前):
EMAIL_TO(この名前をコピー&ペーストしてください。手入力は避けてください)Secret(値):受信者メールアドレス(複数の受信者は英語のカンマで区切ります。EMAIL_FROM と同じにして自分宛に送信することもできます)
Name(名前):
EMAIL_SMTP_SERVER(オプション設定。この名前をコピー&ペーストしてください)Secret(値):SMTP サーバーアドレス(空欄可。システムが自動認識します)
Name(名前):
EMAIL_SMTP_PORT(オプション設定。この名前をコピー&ペーストしてください)Secret(値):SMTP ポート(空欄可。システムが自動認識します)
説明:メール配信には少なくとも3つの必須 Secret(EMAIL_FROM、EMAIL_PASSWORD、EMAIL_TO)の設定が必要で、残り2つはオプション設定です
対応メールサービスプロバイダー(SMTP 設定を自動認識):
邮件服务商 | 域名 | SMTP 服务器 | 端口 | 加密方式 |
Gmail | gmail.com | smtp.gmail.com | 587 | TLS |
QQメール | qq.com | smtp.qq.com | 465 | SSL |
Outlook | outlook.com | smtp-mail.outlook.com | 587 | TLS |
Hotmail | hotmail.com | smtp-mail.outlook.com | 587 | TLS |
Live | live.com | smtp-mail.outlook.com | 587 | TLS |
163メール | 163.com | smtp.163.com | 465 | SSL |
126メール | 126.com | smtp.126.com | 465 | SSL |
Sinaメール | sina.com | smtp.sina.com | 465 | SSL |
Sohuメール | sohu.com | smtp.sohu.com | 465 | SSL |
天翼メール | 189.cn | smtp.189.cn | 465 | SSL |
阿里云メール | aliyun.com | smtp.aliyun.com | 465 | TLS |
Yandexメール | yandex.com | smtp.yandex.com | 465 | TLS |
iCloudメール | icloud.com | smtp.mail.me.com | 587 | SSL |
自動認識:上記のメールサービスを利用する場合、
EMAIL_SMTP_SERVERとEMAIL_SMTP_PORTを手動で設定する必要はなく、システムが自動的に認識します。フィードバックのお願い:
上記以外のメールサービスで動作確認が取れた方は、ぜひ Issues でお知らせください。サポートリストに追加します
上記のメール設定に誤りがある場合や利用できない場合も、Issues でフィードバックをお願いします。プロジェクトの改善に役立ちます
特別な感謝:
@longzhenren さん、阿里云メール(aliyun.com)の設定を提供し、テストを完了していただきました (#344)
@ACANX さん、Yandex メール(yandex.com)の設定を提供し、テストを完了していただきました (#663)
@Sleepy-Tianhao さん、iCloud メール(icloud.com)の設定を提供し、テストを完了していただきました (#728)
よく使うメールの設定:
QQメール:
QQメールのWeb版にログイン → 設定 → アカウント
POP3/SMTPサービスを有効にする
認証コード(16桁の英字)を生成
EMAIL_PASSWORDにはQQパスワードではなく、認証コードを入力
Gmail:
2段階認証を有効にする
アプリ用パスワードを生成
EMAIL_PASSWORDにはアプリ用パスワードを入力
163/126メール:
Web版にログイン → 設定 → POP3/SMTP/IMAP
SMTPサービスを有効にする
クライアント認証コードを設定
EMAIL_PASSWORDには認証コードを入力
詳細設定: 自動認識に失敗した場合は、SMTP を手動で設定できます:
EMAIL_SMTP_SERVER:例 smtp.gmail.comEMAIL_SMTP_PORT:例 587(TLS)または 465(SSL)
受信者が複数いる場合(区切りは英数カンマであることに注意):
EMAIL_TO="user1@example.com,user2@example.com,user3@example.com"
2つの利用方法:
方法1:無料で利用(初心者におすすめ) 🆓
特徴:
✅ アカウント登録不要ですぐに利用可能
✅ 1日250件のメッセージ(90%のユーザーに十分)
✅ Topic名がそのまま「パスワード」(推測されにくい名前を選ぶ必要あり)
⚠️ メッセージは暗号化されていないため機密情報には不向きですが、このプロジェクトのような非機密情報には適しています
クイックスタート:
ntfyアプリをダウンロード:
Android:Google Play / F-Droid
iOS:App Store
デスクトップ:ntfy.sh にアクセス
トピックを購読(推測されにくい名前を選ぶ):
建议格式:trendradar-{你的名字缩写}-{随机数字} 不能使用中文 ✅ 好例子:trendradar-zs-8492 ❌ 坏例子:news、alerts(太容易被猜到)GitHub Secret を設定(⚠️ Name は厳密に一致させる必要があります):
Name(名前):
NTFY_TOPIC(この名前はコピー&ペーストしてください。手入力は避けてください)Secret(値):先ほど購読したトピック名を入力
Name(名前):
NTFY_SERVER_URL(オプション設定。この名前はコピー&ペーストしてください)Secret(値):空欄のまま(デフォルトで ntfy.sh を使用)
Name(名前):
NTFY_TOKEN(オプション設定。この名前はコピー&ペーストしてください)Secret(値):空欄のまま
説明:ntfy は最低1つの必須 Secret (NTFY_TOPIC) の設定が必要で、残り2つはオプション設定です
テスト:
curl -d "测试消息" ntfy.sh/你的主题名称
方法2:セルフホスト(完全なプライバシー管理) 🔒
こんな人におすすめ:サーバーを持っている、完全なプライバシーを求める、技術力が高い
メリット:
✅ 完全オープンソース(Apache 2.0 + GPLv2)
✅ データを完全に自社管理
✅ 制限なし
✅ 費用ゼロ
Docker ワンクリックデプロイ:
docker run -d \
--name ntfy \
-p 80:80 \
-v /var/cache/ntfy:/var/cache/ntfy \
binwiederhier/ntfy \
serve --cache-file /var/cache/ntfy/cache.dbTrendRadar の設定:
NTFY_SERVER_URL: https://ntfy.yourdomain.com
NTFY_TOPIC: trendradar-alerts # 自托管可用简单名称
NTFY_TOKEN: tk_your_token # 可选:启用访问控制アプリで購読:
「Use another server」をクリック
サーバーアドレスを入力
トピック名を入力
(オプション)ログイン認証情報を入力
よくある質問:
1日250件のメッセージはほとんどのユーザーにとって十分です。30分ごとに1回の取得として計算すると、1日約48回のプッシュで完全に足りています。
ランダムで十分に長い名前(例 trendradar-zs-8492-news)を選べば、ブルートフォース攻撃はほぼ不可能です:
ntfy には厳格なレート制限があります(1秒間に1リクエスト)
64文字の選択肢(A-Z、a-z、0-9、_, -)
10桁のランダム文字列には64^10通りの可能性があります(解読に数年かかります)
おすすめの選択:
ユーザータイプ | おすすめの方法 | 理由 |
一般ユーザー | 方法1(無料) | 簡単・速い・十分 |
技術系ユーザー | 方法2(セルフホスト) | 完全な管理、制限なし |
高頻度ユーザー | 方法3(有料) | これは自分で公式サイトを確認してください |
関連リンク:
GitHub Secret 設定(⚠️ Name は厳密に一致させる必要があります):
Name(名前):
BARK_URL(この名前はコピー&ペーストしてください。手入力は避けてください)Secret(値):あなたの Bark プッシュ通知 URL
Bark について:
Bark は iOS プラットフォーム向けの無料オープンソースのプッシュ通知ツールで、シンプル・高速・広告なしが特徴です。
利用方法:
方法1:公式サーバーを利用(初心者におすすめ) 🆓
Bark App をダウンロード:
iOS:App Store
プッシュ通知 URL を取得:
Bark App を開く
ホーム画面に表示されているプッシュ通知 URL(形式例:
https://api.day.app/your_device_key)をコピーURL を GitHub Secrets の
BARK_URLに設定
方法2:サーバーを自建(完全なプライバシー管理) 🔒
こんな人におすすめ:サーバーを持っている、完全なプライバシーを求める、技術力が高い
Docker ワンクリックデプロイ:
docker run -d \
--name bark-server \
-p 8080:8080 \
finab/bark-serverTrendRadar の設定:
BARK_URL: http://your-server-ip:8080/your_device_key注意事項:
✅ Bark は APNs プッシュ通知を使用し、メッセージ1件あたり最大 4KB
✅ 自動で分割プッシュに対応しており、メッセージが長すぎる心配はありません
✅ プッシュ形式はプレーンテキスト(Markdown 構文は自動的に削除されます)
⚠️ iOS プラットフォームのみ対応
関連リンク:
GitHub Secret 設定(⚠️ Name は厳密に一致させる必要があります):
Name(名前):
SLACK_WEBHOOK_URL(この名前はコピー&ペーストしてください。手入力は避けてください)Secret(値):あなたの Slack Incoming Webhook URL
Slack について:
Slack はチームコラボレーションツールで、Incoming Webhooks を使用するとメッセージを Slack チャンネルにプッシュできます。
設定手順:
ステップ 1:Slack App を作成
Slack API ページにアクセス:
未ログインの場合は、先に Slack ワークスペースにログイン
作成方法を選択:
「From scratch」(ゼロから作成)をクリック
App 情報を入力:
App Name:アプリ名を入力(例
TrendRadarまたは热点新闻监控)Workspace:ドロップダウンリストからワークスペースを選択
「Create App」 ボタンをクリック
ステップ 2:Incoming Webhooks を有効化
Incoming Webhooks に移動:
左側のメニューで 「Incoming Webhooks」 を見つけてクリック
機能を有効化:
「Activate Incoming Webhooks」 スイッチを見つける
スイッチを
OFFからONに切り替えページが自動的に更新され、新しい設定オプションが表示されます
ステップ 3:Webhook URL を生成
新しい Webhook を追加:
ページ下部までスクロール
「Add New Webhook to Workspace」 ボタンをクリック
対象チャンネルを選択:
認証ページが表示されます
ドロップダウンリストからメッセージを受信するチャンネルを選択(例
#热点新闻)⚠️ プライベートチャンネルを選択する場合は、事前にそのチャンネルに参加している必要があります
アプリを認証:
「Allow」 ボタンをクリックして認証を完了
設定ページに自動的に戻ります
ステップ 4:Webhook URL をコピーして保存
生成された URL を確認:
「Webhook URLs for Your Workspace」エリア
作成したばかりの Webhook URL が表示されます
形式例:
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
URL をコピー:
URL 右側の 「Copy」 ボタンをクリック
または URL を手動で選択してコピー
TrendRadar に設定:
GitHub Actions:URL を GitHub Secrets の
SLACK_WEBHOOK_URLに追加ローカルテスト:URL を
config/config.yamlのslack_webhook_urlフィールドに入力Docker デプロイ:URL を
docker/.envファイルのSLACK_WEBHOOK_URL変数に追加
注意事項:
✅ Markdown 形式に対応(Slack mrkdwn に自動変換)
✅ 自動分割プッシュに対応(1バッチ 4KB)
✅ チームコラボレーションに最適で、メッセージを一元管理
⚠️ Webhook URL にはシークレットキーが含まれているため、公開しないでください
メッセージ形式プレビュー:
*[第 1/2 批次]*
📊 *热点词汇统计*
🔥 *[1/3] AI ChatGPT* : 2 条
1. [百度热搜] 🆕 ChatGPT-5正式发布 *[1]* - 09时15分 (1次)
2. [今日头条] AI芯片概念股暴涨 *[3]* - [08时30分 ~ 10时45分] (3次)関連リンク:
GitHub Secret 設定(⚠️ Name は厳密に一致させる必要があります):
Name(名前):
GENERIC_WEBHOOK_URL(この名前はコピー&ペーストしてください。手入力は避けてください)Secret(値):あなたの Webhook URL
Name(名前):
GENERIC_WEBHOOK_TEMPLATE(オプション設定。この名前はコピー&ペーストしてください)Secret(値):JSON テンプレート文字列。
{title}と{content}のプレースホルダーに対応
汎用 Webhook について:
汎用 Webhook は HTTP POST リクエストを受け付ける任意のプラットフォームに対応しており、以下を含みます:
Discord:Webhook でチャンネルにプッシュ
Matrix:Webhook ブリッジでプッシュ
IFTTT:自動化フローのトリガー
自建サービス:Webhook に対応した任意のカスタムサービス
設定例:
Discord 設定
Webhook URL を取得:
Discord サーバー設定 → 連携サービス → Webhooks に移動
新しい Webhook を作成し、URL をコピー
テンプレートを設定:
{"content": "{content}"}GitHub Secret 設定:
GENERIC_WEBHOOK_URL:Discord Webhook URLGENERIC_WEBHOOK_TEMPLATE:{"content": "{content}"}
カスタムテンプレート
テンプレートは2つのプレースホルダーに対応:
{title}- メッセージタイトル{content}- メッセージ内容
テンプレート例:
# 默认格式(留空时使用)
{"title": "{title}", "content": "{content}"}
# Discord 格式
{"content": "{content}"}
# 自定义格式
{"text": "{content}", "username": "TrendRadar"}注意事項:
✅ Markdown 形式に対応(企业微信の形式と同一)
✅ 自動分割プッシュに対応
✅ 複数アカウント設定に対応(
;で区切る)⚠️ テンプレートは有効な JSON 形式である必要があります
⚠️ プラットフォームによってメッセージ形式の要件が異なるため、対象プラットフォームのドキュメントを参照してください
3️⃣ ステップ3:ニュースプッシュ通知を手動テスト
⚠️ 注意:
ステップ1〜2が完了したら、すぐにテストしてください!テストが成功してから必要に応じて設定を調整してください(ステップ4)
自分のプロジェクトに移動してください。このプロジェクトではありません!
自分の Actions ページの見つけ方:
方法1:フォークしたプロジェクトのホームページを開き、上部の Actions タブをクリック
方法2:
https://github.com/あなたのユーザー名/TrendRadar/actionsに直接アクセス
比較例:
❌ 作者のプロジェクト:
https://github.com/sansan0/TrendRadar/actions✅ あなたのプロジェクト:
https://github.com/あなたのユーザー名/TrendRadar/actions
テスト手順:
自分のプロジェクトの Actions ページに移動
「Get Hot News」(この表記である必要があります)を見つけてクリックし、右側の 「Run workflow」 ボタンをクリックして実行
この表記が表示されない場合は、#109 を参照して解決してください
約3分で、設定したプラットフォームにメッセージがプッシュされます
⚠️ 注意:
手動テストを頻繁に行いすぎると、GitHub Actions の制限が発生する可能性があります
Run workflow をクリックした後、ブラウザページを更新しないと新しい実行記録が表示されません
4️⃣ ステップ4:設定説明(オプション)
デフォルト設定で正常に使用できますが、個別に調整したい場合は、以下のファイルを理解してください:
ファイル | 役割 |
| メイン設定ファイル:プッシュモード、時間枠、プラットフォームリスト、ホットワードの重みなど |
| キーワードファイル:関心のある語彙を設定し、プッシュ内容をフィルタリング |
| AI プロンプトテンプレート:AIアナリストの役割と分析軸をカスタマイズ |
| 実行頻度:実行間隔を制御(⚠️ 慎重に変更して) |
👉 詳細設定チュートリアル:設定の詳細
5️⃣ ステップ5:リモートクラウドストレージ & チェックイン設定
v4.0.0 の重要な変更点:「アクティビティ検出」メカニズムを導入しました。GitHub Actions は実行を維持するために定期的なチェックインが必要です。
実行周期:有効期限は 7日間 で、カウントダウンが終了するとサービスは自動的に一時停止します。
更新方法:Actions ページで手動で「Check In」ワークフローをトリガーすると、7日間の有効期限がリセットされます。
操作手順:
Actions→Check In→Run workflow設計コンセプト:
7日間チェックインを忘れてしまうようであれば、おそらくこの情報は必須ではないでしょう。適切な一時停止は、情報の流れから離れて、脳に休息のスペースを与えるのに役立ちます。
GitHub Actions は貴重な公共の計算リソースです。チェックイン機構の導入は、計算能力の無駄な空回りを避け、リソースを実際にアクティブで必要なユーザーに確実に割り当てることを目的としています。ご理解とご支援に感謝します。
リモートクラウドストレージ設定について(デプロイ方法に応じて選択してください):
GitHub Actions ユーザー:
現状:Actions は実行のたびに新しい環境で、ファイルは保存されません。クラウドストレージを設定しない場合、プロジェクトはライトモード(差分プッシュなし、履歴追跡なし)で実行されます。
推奨:完全な体験を得るためにリモートクラウドストレージを設定してください。
Docker / ローカルユーザー:
現状:データはデフォルトでローカルディスクに保存されます。
推奨:クラウドストレージはオプションで、リモートバックアップとして利用できます。
⚠️ 前提条件(重要):
Cloudflare のプラットフォーム規則により、R2 を開通するには支払い方法の登録が必要です。
目的:本人確認のみ(Verify Only)、課金は発生しません。
支払い:デュアルカレンシークレジットカードまたは中国国内の PayPal に対応。
使用量:R2 の無料枠(10GBストレージ/月)でこのプロジェクトの日常運用を十分にカバーでき、有料の心配はありません。
GitHub Secret 設定(4項目を追加する必要があります):
Name(名前) | Secret(値)の説明 |
| バケット名(例 |
| アクセスキー ID(Access Key ID) |
| シークレットアクセスキー(Secret Access Key) |
| S3 API エンドポイント(例 R2: |
オプション設定:
Name(名前) | Secret(値)の説明 |
| リージョン(デフォルト |
💡 その他のストレージ設定オプション:データはどこに保存されますか? を参照
詳細な操作手順(認証情報の取得):
R2 の概要ページへ:
Cloudflare Dashboard にログイン。
左側のサイドバーで
R2对象存储を見つけてクリック。
バケットを作成:
概述をクリック右上の
创建存储桶(Create bucket) をクリック。名前を入力し(例
trendradar-data)、创建存储桶をクリック。
API トークンを作成:
概述ページに戻る。
右下の
Account Detailsをクリックし、Manage(Manage R2 API Tokens) を見つけてクリック。同時に
S3 API:https://<account-id>.r2.cloudflarestorage.comが表示されます(これが S3_ENDPOINT_URL です)创建 Account APl 令牌をクリック。⚠️ 重要な設定:
トークン名:任意(例
github-action-write)。権限:
管理员读和写を選択。ストレージバケット指定:セキュリティのため、
仅适用于指定存储桶を選択し、自分のバケット(例trendradar-data)を選択することをお勧めします。
创建 API 令牌をクリックし、表示されるAccess Key IDとSecret Access Keyをすぐにコピーしてください(一度しか表示されません!)。
6️⃣ ステップ6:AI 分析プッシュ通知を有効化
これは v5.0.0 のコア機能で、AI がニュースを要約・分析してくれます。ぜひお試しください。
設定方法:
GitHub Secrets(または .env / config.yaml)に以下を追加:
AI_API_KEY: あなたの API キー(DeepSeek、OpenAI などに対応)AI_PROVIDER: サービスプロバイダー名(例deepseek,openai)
これだけです。複雑なデプロイは不要で、次回のプッシュ時にスマート分析レポートが表示されます。
7️⃣ ステップ7:🎉 デプロイ成功!
おめでとうございます!これで TrendRadar がもたらす効率的な情報フローを楽しめるようになりました。
💬 コミュニティに参加:公式アカウント「硅基茶水间」をフォローして、使用感や高度な活用法を共有しましょう。
8️⃣ ステップ8:発展編:AI アシスタントを選択
TrendRadar は2つの AI 利用方法を提供しており、さまざまなニーズに対応します:
特徴 | ✨ AI 分析プッシュ | 🧠 AI スマート分析 |
モード | パッシブ受信 (毎日レポート) | アクティブ対話 (深層調査) |
シーン | 「今日は何か大きな出来事がある?」 | 「過去1週間の AI 業界の変化を分析して」 |
デプロイ | 極簡 (Key を入力するだけ) | 上級 (ローカル実行/Docker が必要) |
クライアント | スマホ | パソコン |
👉 結論:まずは AI 分析プッシュ で日常のニーズを満たしましょう。データアナリストの方や深い分析が必要な方は、AI スマート分析 をお試しください。
⚙️ 設定の詳細
📖 リマインド:この章では詳細な設定方法を説明します。まず クイックスタート の基本設定を完了してから、必要に応じて詳細オプションを確認することをお勧めします。
1. どのプラットフォームを監視する?
設定場所: config/config.yaml の platforms セクション
このプロジェクトのニュースデータは newsnow から取得しています。ウェブサイト をクリックし、[もっと見る] をクリックすると、希望のプラットフォームがあるか確認できます。
具体的な追加方法は プロジェクトソースコード を参照し、ファイル名に応じて config/config.yaml ファイルの platforms 設定を変更してください:
platforms:
enabled: true # 是否启用热榜平台抓取
sources:
- id: "toutiao"
name: "今日头条"
- id: "baidu"
name: "百度热搜"
- id: "wallstreetcn-hot"
name: "华尔街见闻"
# 添加更多平台...💡 ショートカット:ソースコードが読めない場合は、他の人が整理した プラットフォーム設定まとめ をコピーできます。
⚠️ 注意:プラットフォームは多ければ多いほど良いわけではありません。コアとなる10〜15個のプラットフォームを選ぶことをお勧めします。多すぎると情報過多になり、かえって使用体験が低下します。
2. どんな内容に関心がある?
frequency_words.txt ファイルでボットに監視してほしい内容を伝えると、見張ってくれます。通常語、必須語、フィルター語など、さまざまな使い方に対応しています。
構文タイプ | 記号 | 機能 | 例 | マッチングロジック |
通常語 | なし | 基本マッチング |
| いずれか1つを含めばOK |
必須語 |
| 範囲限定 |
| すべて同時に含む必要あり |
フィルター語 |
| ノイズ排除 |
| 含む場合は直接除外 |
件数制限 |
| 表示件数の制御 |
| 最大10件のニュースを表示(v3.2.0 新機能) |
グローバルフィルター |
| 指定内容をグローバルに除外 | 下記の例を参照 | どのような場合でもフィルター(v3.5.0 新機能) |
正規表現 |
| パターンの正確なマッチング |
| 正規表現でマッチング(v4.7.0 新機能) |
表示名 |
| カスタム表示テキスト |
| プッシュとHTMLに備考名を表示(v4.7.0 新機能) |
2.1 基本構文
設定場所: config/frequency_words.txt
1. 通常キーワード - 基本マッチング
华为
OPPO
苹果機能: ニュースタイトルにいずれかの語が含まれていればキャプチャされます
2. 必須語 +語彙 - 範囲限定
华为
OPPO
+手机機能: 通常語と必須語の両方を同時に含む場合のみキャプチャされます
3. フィルター語 !語彙 - ノイズ排除
苹果
华为
!水果
!价格機能: フィルター語を含むニュースは、キーワードを含んでいても直接除外されます
4. 件数制限 @数字 - 表示件数の制御(v3.2.0 新機能)
特斯拉
马斯克
@5機能: そのキーワードグループが表示するニュースの最大件数を制限します
設定優先順位: @数字 > グローバル設定 > 制限なし
5. グローバルフィルター [GLOBAL_FILTER] - 指定内容をグローバルに除外(v3.5.0 新機能)
[GLOBAL_FILTER]
广告
推广
营销
震惊
标题党
[WORD_GROUPS]
科技
AI
华为
鸿蒙
!车機能: どのような場合でも指定語を含むニュースをフィルターします。最優先です
使用シーン:
低品質コンテンツのフィルター:衝撃的、釣りタイトル、暴露など
マーケティングコンテンツのフィルター:広告、プロモーション、スポンサーなど
特定テーマのフィルター:エンタメ、ゴシップ(ニーズに応じて)
フィルター優先順位: グローバルフィルター > グループ内フィルター(!) > グループマッチング
セクション説明:
[GLOBAL_FILTER]:グローバルフィルターエリア。含まれる語はどのような場合でもフィルターされます[WORD_GROUPS]:語グループエリア。既存の構文(!、+、@)を維持セクション記号を使用しない場合、デフォルトですべて語グループとして処理されます(後方互換)
マッチング例:
[GLOBAL_FILTER]
广告
[WORD_GROUPS]
科技
AI❌ 「広告:最新テクノロジー製品発表」 ← グローバルフィルター語「広告」を含むため、直接拒否
✅ 「テクノロジー企業がAI新製品を発表」 ← グローバルフィルター語を含まず、「テクノロジー」グループにマッチ
✅ 「AI技術の突破が注目を集める」 ← グローバルフィルター語を含まず、「テクノロジー」グループの「AI」にマッチ
注意事項:
グローバルフィルター語は慎重に使用し、過度なフィルターによる価値あるコンテンツの見落としを避けてください
グローバルフィルター語は5〜15個以内に抑えることをお勧めします
特定のグループのフィルターには、グループ内フィルター語(
!プレフィックス)を優先的に使用してください
6. 正規表現 /pattern/ - パターンの正確なマッチング(v4.7.0 新機能)
通常キーワードは部分文字列マッチングを使用します。これは中国語環境では便利ですが、英語環境では誤マッチングが発生する可能性があります。例えば ai は training の中の ai にもマッチしてしまいます。
正規表現構文 /pattern/ を使用すると、正確なマッチングが可能です:
/(?<![a-z])ai(?![a-z])/
人工智能機能: 正規表現でマッチングします。Python のすべての正規表現構文に対応
よく使う正規表現パターン:
ニーズ | 正規表現の書き方 | 説明 |
英単語の境界 |
| 独立した単語にマッチ。例: |
前後が非英字 |
| より緩やかな境界。中英混合シーンに適する |
先頭マッチ |
| "breaking" で始まるタイトルのみにマッチ |
末尾マッチ |
| "发布" で終わるタイトルのみにマッチ |
複数から1つ |
| いずれか1つにマッチ( |
マッチング例:
# 配置
/(?<![a-z])ai(?![a-z])/
人工智能✅ "AI is the future" ← 独立した "AI" にマッチ
✅ "你好ai这里" ← 前後が中国語なので、"ai" にマッチ
✅ "人工智能发展迅速" ← "人工智能" にマッチ
❌ "Resistance training is important" ← "training" の中の "ai" にはマッチしない
❌ "The maid cleaned the room" ← "maid" の中の "ai" にはマッチしない
組み合わせ使用:
# 正则 + 普通词 + 过滤词
/\bai\b/
人工智能
机器学习
!广告注意事項:
正規表現は自動的に大文字小文字を区別しないマッチング(
re.IGNORECASE)が有効になります/pattern/iなどの JavaScript スタイルの書き方に対応(フラグは無視されます。デフォルトで大文字小文字を区別しないため)無効な正規表現構文は通常語として処理されます
正規表現は通常語、必須語(
+)、フィルター語(!)に使用可能
💡 正規表現が書けない?AI に生成してもらいましょう!
正規表現に詳しくない場合は、ChatGPT / Gemini / DeepSeek に直接生成してもらうことができます。AI に伝えるだけでOK:
Python 正規表現が必要です。英単語 "ai" にマッチするが、"training" の中の "ai" にはマッチしないもの。 正規表現を
/pattern/形式で直接教えてください。追加の説明は不要です。
AI は次のような結果を返してくれます:/(?<![a-zA-Z])ai(?![a-zA-Z])/
7. 表示名 => 備考 - カスタム表示テキスト(v4.7.0 新機能)
正規表現はプッシュメッセージや HTML ページでの表示時にわかりにくい場合があります。=> 備考 構文で表示名を設定できます:
/(?<![a-zA-Z])ai(?![a-zA-Z])/ => AI 相关
人工智能機能: プッシュメッセージと HTML ページに複雑な正規表現ではなく「AI 関連」と表示されます
構文形式:
# 正则 + 显示名称
/pattern/ => 显示名称
/pattern/i => 显示名称 # 支持 flags 写法(flags 被忽略)
/pattern/=>显示名称 # => 两边空格可选
# 普通词 + 显示名称
deepseek => DeepSeek 动态マッチング例:
# 配置
/(?<![a-zA-Z])ai(?![a-zA-Z])/ => AI 相关
人工智能元の設定 | プッシュ/HTML 表示 |
|
|
|
|
注意事項:
表示名はグループの最初の語にのみ記述します
グループ内の複数の語に表示名がある場合は、最初のものを使用します
表示名を設定しない場合、グループ内のすべての語を連結して自動的に使用します
🔗 語グループ機能 - 空行区切りの重要な役割
コアルール: 空行で異なる語グループを区切り、各グループは独立して集計されます
設定例:
iPhone
华为
OPPO
+发布
A股
上证
深证
+涨跌
!预测
世界杯
欧洲杯
亚洲杯
+比赛語グループの説明とマッチング効果:
第1グループ - スマホ新製品カテゴリ:
キーワード:iPhone、华为、OPPO
必須語:发布
効果:スマホブランド名を含み、かつ「发布」を含む必要があります
マッチング例:
✅ 「iPhone 15正式发布售价公布」 ← 「iPhone」+「发布」あり
✅ 「华为Mate60系列发布会直播」 ← 「华为」+「发布」あり
✅ 「OPPO Find X7发布时间确定」 ← 「OPPO」+「发布」あり
❌ 「iPhone销量创新高」 ← 「iPhone」はあるが「发布」がない
第2グループ - 株式市場カテゴリ:
キーワード:A股、上证、深证
必須語:涨跌
フィルター語:预测
効果:株式市場の値動きの実況を監視し、予測系コンテンツを除外
マッチング例:
✅ 「A股今日大幅涨跌分析」 ← 「A股」+「涨跌」あり
✅ 「上证指数涨跌幅创新高」 ← 「上证」+「涨跌」あり
❌ 「专家预测A股涨跌趋势」 ← 「A股」+「涨跌」はあるが「预测」を含む
第3グループ - サッカー大会カテゴリ:
キーワード:世界杯、欧洲杯、亚洲杯
必須語:比赛
効果:試合関連のニュースのみを監視
📝 設定のコツ
1. 広い範囲から厳密へ
# 第一步:先用宽泛关键词测试
人工智能
AI
ChatGPT
# 第二步:发现误匹配后,加入必须词限定
人工智能
AI
ChatGPT
+技术
# 第三步:发现干扰内容后,加入过滤词
人工智能
AI
ChatGPT
+技术
!广告
!培训2. 過度な複雑化を避ける
❌ 非推奨: 1つのグループにあまりに多くの語彙を含める
华为
OPPO
苹果
三星
vivo
一加
魅族
+手机
+发布
+销量
!假货
!维修
!二手✅ 推奨: 複数の正確なグループに分割する
华为
OPPO
+新品
苹果
三星
+发布
手机
销量
+市场2.2 高度な設定(v3.2.0 新機能)
キーワードの並び順の優先順位
設定場所: config/config.yaml
report:
sort_by_position_first: false # 排序优先级配置設定値 | 並び順ルール | 適用シーン |
| ホット件数 ↓ → 設定位置 ↑ | トレンドの注目度に注目 |
| 設定位置 ↑ → ホット件数 ↓ | 個人の優先順位に注目 |
例: 設定順 A、B、C、ホット数 A(3件)、B(10件)、C(5件)
false:B(10件) → C(5件) → A(3件)true:A(3件) → B(10件) → C(5件)
グローバル表示件数制限
report:
max_news_per_keyword: 10 # 每个关键词最多显示10条(0=不限制)Docker 環境変数:
SORT_BY_POSITION_FIRST=true
MAX_NEWS_PER_KEYWORD=10総合例:
# config.yaml
report:
sort_by_position_first: true # 按配置顺序优先
max_news_per_keyword: 10 # 全局默认每个关键词最多10条# frequency_words.txt
特斯拉
马斯克
@20 # 重点关注,显示20条(覆盖全局配置)
华为 # 使用全局配置,显示10条
比亚迪
@5 # 限制5条最終効果: 設定順に 特斯拉(20件) → 华为(10件) → 比亚迪(5件) と表示
3. プッシュモードはどれを選ぶ?
設定場所: config/config.yaml の report.mode
report:
mode: "daily" # 可选: "daily" | "incremental" | "current"詳細比較表
モード | 対象者 | プッシュタイミング | 表示内容 | 典型的な使用シーン |
当日サマリー | 📋 企業管理者/一般ユーザー | 定時プッシュ(デフォルトは毎時1回) | 当日のすべてのマッチングニュース+ 新着ニュースエリア | ケース:毎日18時に今日のすべての重要ニュースを確認特徴:1日の完全なトレンドを見られ、ホットトピックを逃さない注意:以前プッシュしたニュースも含まれます |
現在のランキング | 📰 自媒体人/コンテンツ制作者 | 定時プッシュ(デフォルトは毎時1回) | 現在のランキングのマッチングニュース+ 新着ニュースエリア | ケース:毎時「今どの話題が最もホットか」を追跡特徴:現在のホット度ランキングの変化をリアルタイムに把握注意:ランキングに残り続けるニュースは毎回表示されます |
増分モニタリング | 📈 投資家/トレーダー | 新着がある場合のみプッシュ | 新しく出現したマッチング頻度語ニュース | ケース:「特斯拉」を監視し、新着メッセージがある時のみ通知特徴:重複ゼロ、初出のニュースのみ表示適している:高頻度モニタリング、情報の煩わしさを回避 |
実際のプッシュ効果の例
「苹果」キーワードを監視し、毎時実行すると仮定します:
時間 | daily モードのプッシュ | current モードのプッシュ | incremental モードのプッシュ |
10:00 | ニュースA、ニュースB | ニュースA、ニュースB | ニュースA、ニュースB |
11:00 | ニュースA、ニュースB、ニュースC | ニュースB、ニュースC、ニュースD | ニュースCのみ |
12:00 | ニュースA、ニュースB、ニュースC | ニュースC、ニュースD、ニュースE | ニュースD、ニュースEのみ |
説明:
daily:当日のすべてのニュースを累積表示(A、B、C すべて保持)current:現在のランキングのニュースを表示(ランキング変動、ニュースDがランクイン、ニュースAがランク外)incremental:新しく出現したニュースのみプッシュ(重複による煩わしさを回避)
よくある質問
💡 こんな問題に遭遇? 👉 「毎時実行しているのに、最初の実行で出力されたニュースが次の実行時にも表示される」
原因:
daily(当日サマリー)またはcurrent(現在のランキング)モードを選択している可能性があります解決:
incremental(増分モニタリング)モードに変更し、新着コンテンツのみプッシュ
⚠️ 増分モードの重要なお知らせ
incremental(増分モニタリング)モードを選択したユーザーへの注意:📌 増分モードは新しくマッチングしたニュースがある場合のみプッシュされます
長時間プッシュが届かない場合、以下の原因が考えられます:
現在の時間帯にキーワードに合致する新しいホットトピックがない
キーワード設定が厳しすぎる、または広すぎる
監視プラットフォームの数が少ない
解決策:
解決策1:👉 キーワード設定の最適化 - キーワードの精度を調整し、監視語彙を追加・変更
解決策2:プッシュモードの切り替え -
currentまたはdailyモードに変更すると、定期的にプッシュを受信できます解決策3:👉 監視プラットフォームの追加 - ニュースプラットフォームを追加し、情報ソースを拡大
4. ホットトピックアルゴリズムの調整
設定場所: config/config.yaml の advanced.weight セクション
advanced:
weight:
rank: 0.6 # 排名权重
frequency: 0.3 # 频次权重
hotness: 0.1 # 热度权重現在のデフォルト設定はバランス型設定です
2つのコアシーン
リアルタイムホットトピック追跡型:
advanced:
weight:
rank: 0.8 # 主要看排名
frequency: 0.1 # 不太在乎持续性
hotness: 0.1対象者:自媒体ブロガー、マーケティング担当者、今最もホットな話題を素早く知りたいユーザー
深層トピック追跡型:
advanced:
weight:
rank: 0.4 # 适度看排名
frequency: 0.5 # 重视当天内的持续热度
hotness: 0.1対象者:投資家、研究者、ジャーナリスト、トレンドの深層分析が必要なユーザー
調整方法
3つの数字の合計は必ず 1.0 にすること
重要なものを大きくする:ランキングを重視するなら
rankを大きく、持続性を重視するならfrequencyを大きく一度に 0.1〜0.2 ずつ調整し、効果を確認することをお勧めします
核心的な考え方:スピードと即時性を追求するユーザーはランキングの重みを上げ、深さと安定性を追求するユーザーは頻度の重みを上げます。
5. 受け取るメッセージはどんな見た目?
プッシュ例
📊 ホットワード統計
🔥 [1/3] AI ChatGPT : 2 件
[百度热搜] 🆕 ChatGPT-5正式发布 [1] - 09時15分 (1回)
[今日头条] AI芯片概念股暴涨 [3] - [08時30分 ~ 10時45分] (3回)
━━━━━━━━━━━━━━━━━━━
📈 [2/3] 比亚迪 特斯拉 : 2 件
[微博] 🆕 比亚迪月销量破纪录 [2] - 10時20分 (1回)
[抖音] 特斯拉降价促销 [4] - [07時45分 ~ 09時15分] (2回)
━━━━━━━━━━━━━━━━━━━
📌 [3/3] A股 股市 : 1 件
[华尔街见闻] A股午盘点评分析 [5] - [11時30分 ~ 12時00分] (2回)
🆕 今回の新着ホットニュース (全 2 件)
百度热搜 (1 件):
ChatGPT-5正式发布 [1]
微博 (1 件):
比亚迪月销量破纪录 [2]
更新時間:2025-01-15 12:30:15
メッセージ形式の説明
形式要素 | 例 | 意味 | 説明 |
🔥📈📌 | 🔥 [1/3] AI ChatGPT | ホット度レベル | 🔥高ホット度(≥10件) 📈中ホット度(5-9件) 📌通常ホット度(<5件) |
[番号/総数] | [1/3] | 並び順位置 | 現在の語グループの全マッチンググループ内での順位 |
頻度語グループ | AI ChatGPT | キーワードグループ | 設定ファイル内のグループ。タイトルにその中の語彙を含む必要があります |
: N 件 | : 2 件 | マッチング数 | そのグループがマッチしたニュースの総数 |
[プラットフォーム名] | [百度热搜] | ソースプラットフォーム | ニュースが属するプラットフォーム名 |
🆕 | 🆕 ChatGPT-5正式发布 | 新着マーク | 今回の取得で初めて出現したホットトピック |
[数字] | [1] | 高ランキング | ランキング≤しきい値のホット検索。赤色太字で表示 |
[数字] | [7] | 通常ランキング | ランキング>しきい値のホット検索。通常表示 |
- 時間 | - 09時15分 | 初回時間 | そのニュースが初めて発見された時間 |
[時間~時間] | [08時30分 ~ 10時45分] | 持続時間 | 初回出現から最後の出現までの時間範囲 |
(N回) | (3回) | 出現頻度 | 監視期間中に出現した合計回数 |
新着エリア | 🆕 今回の新着ホットニュース | 新トピックまとめ | 今回新しく出現したホットトピックを個別に表示 |
6. Docker デプロイ
イメージ説明:
TrendRadar は2つの独立した Docker イメージを提供しており、ニーズに応じてデプロイを選択できます:
イメージ名 | 用途 | 説明 |
| ニュースプッシュサービス | 定時ニュース取得、通知プッシュ(必須) |
| AI 分析サービス | MCP プロトコル対応、AI 対話分析(任意) |
💡 提案:
プッシュ機能のみ必要な場合:
wantcat/trendradarイメージのみデプロイAI 分析機能が必要な場合:両方のイメージをデプロイ
方法1:docker compose を使用(推奨)
プロジェクトディレクトリと設定を作成:
# 克隆项目到本地 git clone https://github.com/sansan0/TrendRadar.git cd TrendRadar💡 説明:Docker デプロイに必要な主要なディレクトリ構造は以下の通りです:
当前目录/
├── config/
│ ├── config.yaml # 核心功能配置(必需)
│ ├── frequency_words.txt # 关键词配置(必需)
│ ├── timeline.yaml # 时间线配置
│ ├── ai_analysis_prompt.txt # AI 分析提示词(可选)
│ ├── ai_translation_prompt.txt # AI 翻译提示词(可选)
│ ├── ai_interests.txt # AI 兴趣过滤配置(可选)
│ ├── ai_filter/ # AI 过滤相关提示词
│ │ ├── prompt.txt
│ │ ├── extract_prompt.txt
│ │ └── update_tags_prompt.txt
│ └── custom/ # 用户自定义配置(可选)
│ ├── ai/ # 自定义 AI 提示词
│ └── keyword/ # 自定义关键词文件
└── docker/
├── .env # 敏感信息 + Docker 特有配置
└── docker-compose.yml # Docker Compose 编排文件設定ファイルの説明:
設定の役割分担の原則(v4.6.0 の改善):
ファイル
用途
変更頻度
説明
config/config.yamlコア機能の設定
低
レポートモード、配信設定、保存形式、配信ウィンドウ、AI 分析のオン/オフ、チャネルの有効化などのグローバルな動作を制御
config/frequency_words.txtキーワード設定
高
気になるホットワードを設定します。グループ化、正規表現、エイリアスなどの高度な構文に対応
config/timeline.yamlタイムライン設定
低
ニュースのタイムライン表示とフィルタリングルールを制御
config/ai_analysis_prompt.txtAI 分析プロンプト
中
AI 分析のロール定義と出力形式をカスタマイズ(v5.0.0+)
config/ai_translation_prompt.txtAI 翻訳プロンプト
低
AI 翻訳のプロンプトテンプレートをカスタマイズ
config/ai_interests.txtAI 興味フィルタ
中
AI が興味に基づいてニュースを自動的にフィルタリングするルールを定義
config/ai_filter/AI フィルタリング用プロンプト
低
AI フィルタリングモジュールの内部プロンプト(通常は変更不要)
config/custom/ユーザーカスタム拡張
必要に応じて
custom/ai/にはカスタム AI プロンプト、custom/keyword/にはカスタムキーワードファイルを配置docker/.env機密情報 + Docker 固有の設定
低
webhook の URL、API キー、S3 キー、スケジュールタスクなどを設定。git では追跡されません
💡 役割分担のポイント:
機能の動作 →
config.yamlを変更(例:あるチャネルの有効化/無効化、配信モードの調整)関心のあるコンテンツ →
frequency_words.txtを変更(例: 新しい関心キーワードの追加)AI の出力スタイル →
ai_analysis_prompt.txtまたはai_translation_prompt.txtを変更キーと認証情報 →
docker/.envを変更(API キー、webhook URL などの機密情報はここにまとめる)個別の拡張 →
config/custom/ディレクトリを使用し、既定の設定を直接変更してアップデートで上書きされることを避ける
💡 設定変更の反映:
config.yamlを変更後、docker compose up -dを実行してコンテナを再起動すると反映されます⚙️ 環境変数の上書きメカニズム(v3.0.5+)
`.env` ファイルの環境変数は、`config.yaml` の対応する設定を上書きします:環境変数
対応する設定
例の値
説明
WEBSERVER_PORT-
8080Web サーバーのポート
FEISHU_WEBHOOK_URLnotification.channels.feishu.webhook_urlhttps://...飞书 Webhook(複数アカウントは
;で区切り)AI_ANALYSIS_ENABLEDai_analysis.enabledtrue/falseAI 分析を有効にするかどうか(v5.0.0 で追加)
AI_API_KEYai.api_keysk-xxx...AI API キー(ai_analysis と ai_translation で共用)
AI_PROVIDERai.providerdeepseek/openai/geminiAI プロバイダー
S3_*storage.remote.*-
リモートストレージ設定(5 つのパラメータ)
設定の優先順位: 環境変数 > config.yaml
使い方:
.envファイルを編集して、必要な設定を記入しますまたは NAS/群晖 の Docker 管理画面の「環境変数」で直接追加します
コンテナを再起動すると有効になります:
docker compose up -d
サービスの起動:
オプション A:すべてのサービスを起動(配信 + AI 分析)
# 拉取最新镜像 docker compose pull # 启动所有服务(trendradar + trendradar-mcp) docker compose up -dオプション B:ニュース配信サービスのみ起動
# 只启动 trendradar(定时抓取和推送) docker compose pull trendradar docker compose up -d trendradarオプション C:MCP AI 分析サービスのみ起動
# 只启动 trendradar-mcp(提供 AI 分析接口) docker compose pull trendradar-mcp docker compose up -d trendradar-mcp💡 ヒント:
ほとんどのユーザーは
trendradarを起動するだけでニュース配信機能を利用できますChatGPT/Gemini による AI 対話分析が必要な場合のみ、
trendradar-mcpを起動します2 つのサービスは相互に独立しているので、必要に応じて自由に組み合わせられます
実行状態の確認:
# 查看新闻推送服务日志 docker logs -f trendradar # 查看 MCP AI 分析服务日志 docker logs -f trendradar-mcp # 查看所有容器状态 docker ps | grep trendradar # 停止特定服务 docker compose stop trendradar # 停止推送服务 docker compose stop trendradar-mcp # 停止 MCP 服务
方法 2: 自分で構築する場合(開発者オプション)
コードをカスタマイズしたり、自分のイメージを構築したい場合:
# 克隆项目
git clone https://github.com/sansan0/TrendRadar.git
cd TrendRadar
# 修改配置文件
vim config/config.yaml
vim config/frequency_words.txt
# 使用构建版本的 docker compose
cd docker
cp docker-compose-build.yml docker-compose.ymlイメージの構築とサービスの起動:
# 选项 A:构建并启动所有服务
docker compose build
docker compose up -d
# 选项 B:仅构建并启动新闻推送服务
docker compose build trendradar
docker compose up -d trendradar
# 选项 C:仅构建并启动 MCP AI 分析服务
docker compose build trendradar-mcp
docker compose up -d trendradar-mcp💡 アーキテクチャパラメータの説明:
既定では
amd64アーキテクチャのイメージを構築(ほとんどの x86_64 サーバーに対応)
arm64アーキテクチャ(Apple Silicon、Raspberry Pi など)を構築する場合は、環境変数を設定します:export DOCKER_ARCH=arm64 docker compose build
イメージの更新
# 方式一:手动更新(爬虫 + MCP 镜像)
docker pull wantcat/trendradar:latest
docker pull wantcat/trendradar-mcp:latest
docker compose down
docker compose up -d
# 方式二:使用 docker compose 更新
docker compose pull
docker compose up -d利用可能なイメージ:
イメージ名 | 用途 | 説明 |
| ニュース配信サービス | 定期的にニュースを取得して通知を配信 |
| MCP サービス | AI 分析機能(オプション) |
サービスの管理コマンド
# 查看运行状态
docker exec -it trendradar python manage.py status
# 手动执行一次爬虫
docker exec -it trendradar python manage.py run
# 查看实时日志
docker exec -it trendradar python manage.py logs
# 显示当前配置
docker exec -it trendradar python manage.py config
# 显示输出文件
docker exec -it trendradar python manage.py files
# Web 服务器管理(用于浏览器访问生成的报告)
docker exec -it trendradar python manage.py start_webserver # 启动 Web 服务器
docker exec -it trendradar python manage.py stop_webserver # 停止 Web 服务器
docker exec -it trendradar python manage.py webserver_status # 查看 Web 服务器状态
# 查看帮助信息
docker exec -it trendradar python manage.py help
# 重启容器
docker restart trendradar
# 停止容器
docker stop trendradar
# 删除容器(保留数据)
docker rm trendradar💡 Web サーバーの説明:
cron モードでは自動起動し、ブラウザで
http://localhost:8080にアクセスすると最新のレポートを確認できますディレクトリのナビゲーションで過去のレポートにアクセスできます(例:
http://localhost:8080/2025-xx-xx/)ポートは
.envファイルのWEBSERVER_PORTパラメータで設定できます手動停止:
docker exec -it trendradar python manage.py stop_webserver手動起動:
docker exec -it trendradar python manage.py start_webserverセキュリティのヒント: 静的ファイルアクセスのみ提供し、output ディレクトリに限定し、ローカルアクセスのみにバインドします
データの永続化
生成されたレポートとデータはデフォルトで ./output ディレクトリに保存されます。コンテナを再起動または削除しても、データは保持されます。
📊 Web 版レポートのアクセスパス:
TrendRadar が生成した当日の集計 HTML レポートは、同時に 2 つの場所に保存されます:
ファイルの場所 | アクセス方法 | 適用シーン |
| ホストから直接アクセス | Docker デプロイ(Volume マウントでホストから参照可) |
| ルートディレクトリからのアクセス | GitHub Pages(リポジトリのルート、Pages が自動認識) |
| 過去のレポートへのアクセス | すべての環境(日付ごとにアーカイブ) |
ローカルアクセスの例:
# 方式 1:通过 Web 服务器访问(推荐,Docker 环境)
# 1. 启动 Web 服务器
docker exec -it trendradar python manage.py start_webserver
# 2. 在浏览器访问
http://localhost:8080 # 访问最新报告(默认 index.html)
http://localhost:8080/html/2025-xx-xx/ # 访问指定日期的报告
# 方式 2:直接打开文件(本地环境)
open ./output/index.html # macOS
start ./output/index.html # Windows
xdg-open ./output/index.html # Linux
# 方式 3:访问历史归档
open ./output/html/2025-xx-xx/当日汇总.htmlGXP54 が 2 つあるのはなぜ?
output/index.html:Docker Volume がホストにマウントされ、ローカルで直接開くことができますindex.html:GitHub Actions がリポジトリにプッシュし、GitHub Pages が自動デプロイします
💡 ヒント: 2 つのファイルの内容は完全に同じです。どちらにアクセスしても構いません。
トラブルシューティング
# 检查容器状态
docker inspect trendradar
# 查看容器日志
docker logs --tail 100 trendradar
# 进入容器调试
docker exec -it trendradar /bin/bash
# 验证配置文件
docker exec -it trendradar ls -la /app/config/MCP サービスのデプロイ(AI 分析機能)
AI 分析機能を使用する必要がある場合は、独立した MCP サービスコンテナをデプロイできます。
アーキテクチャの説明:
flowchart TB
subgraph trendradar["trendradar"]
A1[定时抓取新闻]
A2[推送通知]
end
subgraph trendradar-mcp["trendradar-mcp"]
B1[127.0.0.1:3333]
B2[AI 分析接口]
end
subgraph shared["共享卷"]
C1["config/ (ro)"]
C2["output/ (ro)"]
end
trendradar --> shared
trendradar-mcp --> sharedクイックスタート:
方法 1: docker compose でデプロイする をすでに完了している場合は、MCP サービスを起動するだけです:
cd TrendRadar/docker
docker compose up -d trendradar-mcp
# 查看运行状态
docker ps | grep trendradar-mcpMCP サービスを単独で起動する(docker compose を使わない場合):
# Linux/Mac
docker run -d --name trendradar-mcp \
-p 127.0.0.1:3333:3333 \
-v $(pwd)/config:/app/config:ro \
-v $(pwd)/output:/app/output:ro \
-e TZ=Asia/Shanghai \
wantcat/trendradar-mcp:latest
# Windows PowerShell
docker run -d --name trendradar-mcp `
-p 127.0.0.1:3333:3333 `
-v ${PWD}/config:/app/config:ro `
-v ${PWD}/output:/app/output:ro `
-e TZ=Asia/Shanghai `
wantcat/trendradar-mcp:latest⚠️ 注意: 単独で実行する場合は、現在のディレクトリに
config/,output/フォルダがあり、設定ファイルとニュースデータが含まれていることを確認してください。
サービスの確認:
# 检查 MCP 服务健康状态
curl http://127.0.0.1:3333/mcp
# 查看 MCP 服务日志
docker logs -f trendradar-mcpAI クライアントでの設定:
MCP サービス起動後、クライアントに応じて設定します:
Cherry Studio(推奨、GUI 設定):
設定 → MCP サーバー → 追加
タイプ:
streamableHttpURL:
http://127.0.0.1:3333/mcp
Claude Desktop / Cline(JSON 設定):
{
"mcpServers": {
"trendradar": {
"url": "http://127.0.0.1:3333/mcp",
"type": "streamableHttp"
}
}
}💡 ヒント: MCP サービスはローカルポート(127.0.0.1)のみをリッスンするので、安全性が確保されます。リモートアクセスが必要な場合は、リバースプロキシと認証を自分で設定してください。
7. 配信内容はどう表示されますか?
設定場所: config/config.yaml の report と display 部分
report:
mode: "daily" # 推送模式
display_mode: "keyword" # 显示模式(v4.6.0 新增)
rank_threshold: 5 # 排名高亮阈值
sort_by_position_first: false # 排序优先级
max_news_per_keyword: 0 # 每个关键词最大显示数量
display:
region_order: # 区域显示顺序(v5.2.0 新增)
- new_items # 新增热点区域
- hotlist # 热榜区域
- rss # RSS 订阅区域
- standalone # 独立展示区
- ai_analysis # AI 分析区域よく使う設定項目の説明
調整したい項目 | 変更するパラメータ | デフォルト値 | 説明 |
配信モード |
|
| 配信タイミングと内容を決定します。詳細は 配信モードの詳細 を参照 |
グループ化方式 |
|
|
|
ハイライト |
|
| ランキング上位 5 件のニュースは太字表示で、最もホットなものがひと目で分かります |
ソート順序 |
|
|
|
件数制限 |
|
| キーワードごとの最大ニュース件数? |
表示順序 |
| 上の設定を参照 | リストの並びを調整することで、各領域の表示位置を制御できます |
グループ化方式の比較(display_mode)
「このトピックのニュースが見たい」のか、それとも「このプラットフォームのニュースが見たい」のか。
モード | グループ化方式 | 見出しプレフィック | 適用シーン |
| キーワード で集約 |
| 「AI」を注目し、各プラットフォームの AI 関連ニュースを見たい |
| プラットフォームで集約 |
| 「微博」に注目し、微博上の気になるキーワードに関するニュースを見たい |
名前表示順序(region_order)
display.region_order リストの順序を調整することで、配信メッセージ内の各領域の表示位置を制御できます。
デフォルトの順序: 新着ホットトピック → ホットランキング → RSS → スタンドアロン表示エリア → AI
カスタム例:AI 分析を先頭にしたい場合は?
display:
region_order:
- ai_analysis # 移到第一行
- new_items
- hotlist
- rss
- standalone注意:領域が表示されるには 、次の 2 つの条件を同時に満たす必要があります。
region_orderリストに含まれているdisplay.regionsで対応するスイッチがtrueになっている
の領域のスイッチ(regions)
display.regions で、配信に各領域に表示するかどうかを制御します:
display:
regions:
hotlist: true # 热榜区域(关键词匹配的热点新闻)
new_items: false # 新增热点区域(含热榜新增 + RSS 新增)
rss: true # RSS 订阅区域(关键词匹配的 RSS 内容)
standalone: false # 独立展示区(完整热榜/RSS,不受关键词过滤)
ai_analysis: true # AI 分析区域領域 | 設定キー | デフォルト値 | 説明 |
ヒットランキング |
|
| キーワードに一致するホットなを集約 |
新着ホットトピック |
|
| 今回新たに出現したホットトピック(ホットランキングの新規 + RSS の新規を含む)。なお、ホットランキング領域の🆕マークはが OFF に付いています |
RSS |
|
| キーワードに一致する RSS の購読内容。オフにすると RSS 分析をスキップしますが、独立表示領域. |
独立表示エリア |
|
| 指定したプラットフォーム/RSS の全内容を表示し、キーワードの影響を受けません |
AI Analysis |
|
| AI が生成するホットトピックの分析サマリー |
表示優先順位(sort_by_position_first)
次のようなキーワードを設定したとします:1.特斯拉、2.比亚迪 実際のホット度:比亚迪(10 条)、特斯拉(3 条)
設定値 | 表示順 | 意図 |
| 比亚迪(10 条)→ 特斯拉(3 条) | "ホットなものが先" |
| 特斯拉(3 条)→ 比亚迪(10 条) | "設定した順序が優先で、ホット度は関係しない" |
独立表示領域(standalone)
シナリオ:一部のプラットフォーム(知乎ホットリスト、HackerNewsなど)は、キーワードに一致するかどうかかかわらず、その完全な内容をすべて見たい場合があります。
display:
regions:
standalone: true # 推送中展示独立展示区(关闭不影响 AI 分析)
standalone:
platforms: ["zhihu", "weibo"] # 这些平台的热榜给我完整显示
rss_feeds: ["hacker-news"] # 这些RSS源的内容给我完整显示
max_items: 20 # 最多显示多少条💡 配信表示と AI 分析は個別に制御できます:
regions.standaloneは配信内で独立表示領域を表示するかどうかのみを制御します。配信表示をオフにしても、AI 設定でinclude_standalone: trueを有効にすれば、AI はこれらのプラットフォームの完全なデータを分析します。AI に深い分析をさせたいが、配信メッセージを長くしたくないユーザーに向いています。
8. いつ配信されますか ?
設定場所: config/config.yaml の schedule 部分 + config/timeline.yaml
クイックスタート
config.yaml でプリセットテンプレートを選択するだけで、timeline.yaml を編集する必要はありません:
schedule:
enabled: true
preset: "morning_evening" # 改这里就行選択できるプリセットテンプレート
テンプレート名 | 説明 | 配信動作 |
| 終日&夜間サマリー(推奨) | 終日新しいランプがあったら配信 + 19:00-21:00 の夜間サマリー |
| 終日監視 | 終日新しいランプがあれば全部配信時間区分なし |
| 勤務時間 | 平日 3 段構成(出勤時→昼・ランチ→終業時サマリー)、週末は自由 |
| 夜型 | 午後のランチ + 深夜の終日サマリー(22:00-01:00 の深夜をまたぐ) |
| 完全カスタム |
|
完全にカスタマイズ
すべての既存テンプレートが要件を満たさない場合は、config/timeline.yaml の下部にある custom セクションを編集して、時間帯、日のプラン、週間マッピングを自由に定義できます。詳細は timeline.yaml ファイル内のコメントを参照してください。
重要なヒント
⚠️ 以前のバージョンからアップグレードする場合の注意:
v6.0.0 では、古い
notification.push_windowとanalysis_windowの設定が廃止されました 新しいscheduleとtimeline.yamlのスケジュールシステムを使用してください 以前の「毎日 1 回配信」はmorning_eveningプリセットで、以前の「勤務時間配信」はoffice_hoursプリセットで置き換えられます
⚠️ GitHub Actions を利用する場合の注意書き:
GitHub Actions は実行時間の不確認があるため、±15 分程度のずれが生じることがあります 時間帯の範囲は少なくとも2 時間の余裕を持たせるわすときめ 予定ピック正確なタイミング配信えいには個人・ホストで Docker デプロイがおすすめ
9. どのくらいの頻度 ?
設定場所: .github/workflows/crawler.yml の schedule セクション
on:
schedule:
- cron: "0 * * * *" # 每小时运行一次実行間隔のはどう変更する?
GitHub Actions は 「Cron」 という時間形式を使います。詳しく理解する必要はなく、下記のコードをコピペするだけです。
設定場所: ファイル .github/workflows/crawler.yml 内の schedule セクション
希望する間隔 | コピーする行 | 説明 |
1 時間ごと |
| デート設定, 0 分に実行 |
30 分ご |
| 30 分ごとに実行 |
毎日 8 時 |
| ⚠️ |
勤務時間は 30 分ご |
| 北京時間 8:00 - 22:00 に対応 |
朝晩の2回 |
| 北京時間 8:00、14:00、20:00 に対応 |
⚠️ 重要な注意点
時差の問題:GitHub のサーバーの本拠地海外のため、UTC 時間が使われています。
簡単な計算:設定したい北京時刻 マイナス8時間 = 記入する時刻
例:北京時刻 20:00 に実行するには、設定に 12:00 を入力します
頻度を高くしないでほしい:間隔は 30 分以上のあいだ推奨します。
GitHub の無料リソースは限られているため、動きすぎるとアカウントが制限される場合があります
また、Actions の起動自体も数分の遅延さがあるため、細かい制御はあまり意味ありますません
手順解説
GitHub リポジトリの
.github/workflows/crawler.ymlを見つけます右上の ✏️(Edit) をクリックします
cron: "..."の行の引用符の中身を、上記の「コード」に変更します右上の緑色の Commit changes ボタンをクリックして保存します
10. 複数のグループ・デバイに配信
⚠️ セキュリティ最優先
config.yamlに直接パスワード・トークン・キーを書かないでください! パスワードを含むファイルを GitHub アップロードすると、全世界に見られてしまいます。正しい作法:
GitHub Actions のお場合:Settings の Secrets に追加
Docker 場ユschema:
.envファイルに記載(このファイルはアップロードされません)
複数の場所に同時配信するどうするか?
簡単です。設定時にセミコロン ; で複数のアドレスを区切るだけです。
例: あなたに2つのふたつの飞书グループがあり、両方に同時に配信したいとします:
グループ 1 のWebhook:
https://.../webhook/aaaグループ 2 のWebhook:
https://.../webhook/bbb
設定時には次のように記入します:
https://.../webhook/bbb;https://.../webhook/bbb
複数さん台をサポートするプラットフォーム
プラットフォーム | 設定方法 | 注意事項 |
飛書/钉钉/企微 |
| 最も簡単で、そのまま繋げるだけ |
Bark (iOS) |
| 複数台の iPhone にプッシュ |
Telegram | Token と ChatID の両方を | ⚠️ 順序を対応させること:Token1 は ChatID1 に対応Token2 は ChatID2 に対応 |
ntfy | Topic と Token の両方を | Token が不要な Topic がある場合は空欄に: |
よく使う設定例 (GitHub Secrets / .env)
# 飞书发给 3 个群
FEISHU_WEBHOOK_URL=https://hook1...;https://hook2...;https://hook3...
# 钉钉发给 2 个群
DINGTALK_WEBHOOK_URL=https://oapi...;https://oapi...
# Telegram 发给 2 个人 (注意一一对应)
TELEGRAM_BOT_TOKEN=tokenA;tokenB
TELEGRAM_CHAT_ID=userA;userBヒント:悪用防止のため、デフォルトでは各プラットフォーム最大 3 アカウントまでプッシュできます。それ以上必要な場合は、
MAX_ACCOUNTS_PER_CHANNEL設定を変更してください。
11. データはどこに保存されますか?
データはどこに保存されますか?
システムが自動的に最適な場所を選択するため、通常は気にする必要はありません:
実行環境 | データ保存先 | 説明 |
Docker / ローカル実行 | ローカルディスク | プロジェクトディレクトリ内の |
GitHub Actions | クラウドストレージ | GitHub Actions は実行後に環境が破棄されるため、クラウドストレージ(例:Cloudflare R2)の設定が必須です。 |
クラウドストレージの設定方法 (GitHub Actions ユーザー必読)
GitHub Actions で実行する場合、データを保存するための「クラウドドライブ」が必要です。例えば Cloudflare R2(無料枠があるため)を使用します。
GitHub Secrets に以下の 5 つの変数を追加:
変数名 | 設定値 |
|
|
| バケット名 |
| Access Key |
| Secret Key |
| R2 エンドポイント URL |
💡 詳細チュートリアル:R2 の申請方法は? クイックスタート - リモートストレージ設定 をご覧ください
データはどのくらい保存されますか?
デフォルトでは、データは自動的に削除されません。ただし、データ量が多くてスペースを圧迫する場合は、「自動クリーンアップ」を設定できます。
設定場所:config/config.yaml
storage:
local:
retention_days: 30 # 本地数据只保留 30 天 (0 表示永久)
remote:
retention_days: 30 # 云端数据只保留 30 天プッシュ時間が合わない?(タイムゾーン設定)
海外にいる場合や、プッシュ時間がローカルタイムと合わない場合は、タイムゾーンを変更できます。
設定場所:config/config.yaml
app:
timezone: "Asia/Shanghai" # 默认是中国时间例:アメリカ・ロサンゼルス在住の場合:
America/Los_Angelesに変更例:イギリス・ロンドン在住の場合:
Europe/Londonに変更
12. AI にホットトピックを分析させる
AI は何ができるの?
この機能を有効にすると、AI がプロのアナリストのように、ニュースの各バッチをプッシュする際に:
自動読取:マッチしたすべてのホットニュースを読む
深い思考:本来は独立しているニュース間の関連性を分析
レポート作成:プッシュメッセージの末尾に、簡潔で深い「インサイトレポート」を添付
含まれる内容:ホットトピックのトレンド要約、世論の方向性の判断、クロスプラットフォーム関連分析、潜在的な影響評価など。
AI 分析を有効にするには?
最も簡単な方法は環境変数での設定です(GitHub Secrets または .env 推奨)。
必須の設定項目:
変数名 | 設定値 | 説明 |
|
| 有効スイッチ |
|
| API Key |
|
| モデル識別子(形式: |
対応 AI プロバイダー(LiteLLM ベース、100+ プロバイダー対応):
プロバイダー | AI_MODEL の設定値 | 説明 |
DeepSeek (推奨) |
| コストパフォーマンスが非常に高く、高頻度分析に最適 |
OpenAI |
| GPT-4o シリーズ |
Google Gemini |
| Gemini シリーズ |
カスタム API | 任意の形式 |
|
💡 新機能:LiteLLM ベースの統一インターフェースにより、100+ の AI プロバイダーに対応。設定がより簡単になり、エラーハンドリングも改善されました。
オプションの設定項目:
変数名 | デフォルト値 | 説明 |
| (自動) | カスタム API アドレス(OneAPI、ローカルモデルなど) |
|
| サンプリング温度(0-2、高いほどランダム) |
|
| 最大生成トークン数 |
|
| リクエストタイムアウト(秒) |
|
| 失敗時のリトライ回数 |
上級テクニック:AI 翻訳
海外の RSS フィード(例:Hacker News)をフォローしている場合、AI がコンテンツを中国語に翻訳してプッシュできます。
設定場所:config/config.yaml
ai_translation:
enabled: true # 开启翻译
language: "Chinese" # 翻译成什么语言 (Chinese, English, Japanese...)上級テクニック:カスタム AI「ペルソナ」
AI の話し方が堅苦しいと感じますか?プロンプトを変更して、好みのスタイル(例:「毒舌評論家」、「シニア投資アドバイザー」)にカスタマイズできます。
変更ファイル:
config/ai_analysis_prompt.txt変更方法:メモ帳などで開いて編集し、AI に希望する分析スタイルを指示します。
✨ AI スマート分析
TrendRadar v3.0.0 では、MCP (Model Context Protocol) ベースの AI 分析機能が新たに追加されました。自然言語でニュースデータと対話し、深い分析を行うことができます。
⚠️ 使用前の必読事項
重要:AI 機能にはローカルニュースデータが必要です
AI 分析機能は、ネットワーク上のリアルタイムデータを直接クエリするのではなく、ローカルに蓄積されたニュースデータ(output フォルダに保存)を分析します。
使用方法:
プロジェクトにテストデータ付属:
outputディレクトリにはデフォルトで 2025-12-21~2025-12-27 の 1 週間分のホットランキングニュースデータが含まれており、AI 機能をすぐに体験できます。クエリ制限:
✅ 既存の日付範囲内のデータのみクエリ可能(12月21日〜27日、計7日間)
❌ リアルタイムニュースや未来の日付はクエリ不可
最新データの取得:
テストデータはクイック体験用です。リアルタイムデータを取得するには、プロジェクトを自分でデプロイすることをお勧めします
クイックスタート に従ってプロジェクトをデプロイ・実行
ニュースデータが 1 日以上蓄積された後、最新のホットトピックをクエリできます
1. クイックデプロイ
Cherry Studio は GUI 設定インターフェースを提供し、5 分でクイックデプロイが可能です。複雑な部分はワンクリックインストールです。
図解デプロイチュートリアル:私の公式アカウントに更新済みです。「mcp」と返信してください
詳細デプロイチュートリアル:README-Cherry-Studio.md
デプロイモードの説明:
STDIO モード(推奨):一度設定すれば以降は再設定不要です。図解デプロイチュートリアルではこのモードの設定のみを例としています。
HTTP モード(代替):STDIO モードの設定で問題が発生した場合は、HTTP モードを使用できます。このモードの設定方法は STDIO とほぼ同じですが、コピー&ペーストする内容が 1 行だけで、エラーが発生しにくいです。唯一の注意点は、使用前に毎回手動でサービスを起動する必要があることです。詳細は README-Cherry-Studio.md 下部の HTTP モードの説明を参照してください。
2. AI との対話方法を学ぶ
詳細な対話チュートリアル:README-MCP-FAQ.md
💡 ヒント:実際には、一度に複数の質問をすることはお勧めしません。選択した AI モデルが下図の順次呼び出しさえできない場合は、別のモデルに変更することをお勧めします。
🔌 MCP クライアント
TrendRadar MCP サービスは標準の Model Context Protocol (MCP) プロトコルをサポートしており、MCP 対応のさまざまな AI クライアントに接続してスマート分析を行うことができます。
対応クライアント
注意事項:
/path/to/TrendRadarを実際のプロジェクトパスに置き換えてくださいWindows のパスは二重バックスラッシュを使用:
C:\\Users\\YourName\\TrendRadar保存後は必ず再起動してください
方法1:HTTP モード
HTTP サービスの起動:
# Windows start-http.bat # Mac/Linux ./start-http.shCursor の設定:
プロジェクトレベル設定(推奨): プロジェクトルートディレクトリに
.cursor/mcp.jsonを作成:{ "mcpServers": { "trendradar": { "url": "http://localhost:3333/mcp", "description": "TrendRadar 新闻热点聚合分析" } } }グローバル設定: ユーザーディレクトリに
~/.cursor/mcp.jsonを作成(同じ内容)使用手順:
設定ファイルを保存後、Cursor を再起動
チャットインターフェースの "Available Tools" で接続済みツールを確認
使用開始:
今日の「AI」関連ニュースを検索
方法2:STDIO モード(推奨)
.cursor/mcp.json を作成:
{
"mcpServers": {
"trendradar": {
"command": "uv",
"args": [
"--directory",
"/path/to/TrendRadar",
"run",
"python",
"-m",
"mcp_server.server"
]
}
}
}Cline 設定
Cline の MCP 設定に追加:
HTTP モード:
{
"trendradar": {
"url": "http://localhost:3333/mcp",
"type": "streamableHttp",
"autoApprove": [],
"disabled": false
}
}STDIO モード(推奨):
{
"trendradar": {
"command": "uv",
"args": [
"--directory",
"/path/to/TrendRadar",
"run",
"python",
"-m",
"mcp_server.server"
],
"type": "stdio",
"disabled": false
}
}Continue 設定
~/.continue/config.json を編集:
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"/path/to/TrendRadar",
"run",
"python",
"-m",
"mcp_server.server"
]
}
}
]
}
}使用例:
分析最近7天"特斯拉"的热度变化趋势
生成今天的热点摘要报告
搜索"比特币"相关新闻并分析情感倾向MCP Inspector は公式デバッグツールで、MCP 接続のテストに使用します:
使用手順
TrendRadar HTTP サービスの起動:
# Windows start-http.bat # Mac/Linux ./start-http.shMCP Inspector の起動:
npx @modelcontextprotocol/inspectorブラウザで接続:
アクセス:
http://localhost:3333/mcp"Ping Server" 機能で接続をテスト
"List Tools" が 17 個のツールを返すか確認:
基本クエリ:get_latest_news, get_news_by_date, get_trending_topics
スマート検索:search_news, find_related_news
高度な分析:analyze_topic_trend, analyze_data_insights, analyze_sentiment, aggregate_news, compare_periods, generate_summary_report
RSS クエリ:get_latest_rss, search_rss, get_rss_feeds_status
システム管理:get_current_config, get_system_status, resolve_date_range
Model Context Protocol に対応するクライアントはすべて TrendRadar に接続できます:
HTTP モード
サービスアドレス:http://localhost:3333/mcp
基本設定テンプレート:
{
"name": "trendradar",
"url": "http://localhost:3333/mcp",
"type": "http",
"description": "新闻热点聚合分析"
}STDIO モード(推奨)
基本設定テンプレート:
{
"name": "trendradar",
"command": "uv",
"args": [
"--directory",
"/path/to/TrendRadar",
"run",
"python",
"-m",
"mcp_server.server"
],
"type": "stdio"
}注意事項:
/path/to/TrendRadarを実際のプロジェクトパスに置き換えてくださいWindows のパスはバックスラッシュでエスケープ:
C:\\Users\\...プロジェクトの依存関係のインストールが完了していることを確認(setup スクリプトを実行済み)
よくある質問
確認手順:
ポート 3333 が使用されていないことを確認:
# Windows netstat -ano | findstr :3333 # Mac/Linux lsof -i :3333プロジェクトの依存関係がインストールされているか確認:
# 重新运行安装脚本 # Windows: setup-windows.bat 或者 setup-windows-en.bat # Mac/Linux: ./setup-mac.sh詳細なエラーログを確認:
uv run python -m mcp_server.server --transport http --port 3333カスタムポートを試す:
uv run python -m mcp_server.server --transport http --port 33333
解決策:
STDIO モード:
UV パスが正しいことを確認(
which uvまたはwhere uvを実行)プロジェクトパスが正しく、中国語文字が含まれていないことを確認
クライアントのエラーログを確認
HTTP モード:
サービスが起動していることを確認(
http://localhost:3333/mcpにアクセス)ファイアウォール設定を確認
localhost の代わりに 127.0.0.1 を試す
共通チェック:
クライアントアプリを再起動
MCP サービスのログを確認
MCP Inspector で接続をテスト
考えられる原因:
データが存在しない:
クローラーを実行済みか確認(output ディレクトリにデータがあるか)
クエリする日付範囲にデータがあるか確認
output ディレクトリの利用可能な日付を確認
パラメータエラー:
日付形式を確認:
YYYY-MM-DDプラットフォーム ID が正しいか確認:
zhihu,weiboなどツールドキュメントのパラメータ説明を確認
設定の問題:
config/config.yamlが存在するか確認config/frequency_words.txtが存在するか確認設定ファイルの形式が正しいか確認
📚 プロジェクト関連
記事 4 本:
AI 開発:
ニッチなニーズがあれば、私のプロジェクトをベースに自由に開発できます。プログラミング未経験者でも試せます
私のオープンソースプロジェクトは、多かれ少なかれ自作のAI 支援ソフトウェアを使用して開発効率を向上させています。このツールもオープンソース化しています
コア機能:プロジェクトコードを迅速に選別して AI に渡すことができ、個人のニーズを補足するだけで OK です
プロジェクトアドレス:https://github.com/sansan0/ai-code-context-helper
その他のプロジェクト
📍 毛主席足跡マップ - 1893-1976年の完全な軌跡をインタラクティブに動的表示。データ提供歓迎
哔哩哔哩(bilibili)コメント欄データ可視化分析ソフトウェア
📄 ライセンス
GPL-3.0 License
Available Tools
27 toolsaggregate_newsA
跨平台新闻聚合 - 对相似新闻进行去重合并
将不同平台报道的同一事件合并为一条聚合新闻,显示跨平台覆盖情况和综合热度。
Args: date_range: 日期范围,不指定则查询今天 platforms: 平台ID列表,如 ['zhihu', 'weibo'],不指定则使用所有平台 similarity_threshold: 相似度阈值,0.3-1.0,默认0.7(越高越严格) limit: 返回聚合新闻数量,默认50 include_url: 是否包含URL链接,默认False
Returns: JSON格式的聚合结果,包含去重统计、聚合新闻列表和平台覆盖统计
Examples: - aggregate_news() - aggregate_news(similarity_threshold=0.8)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| platforms | No | ||
| date_range | No | ||
| include_url | No | ||
| similarity_threshold | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
无任何注释,描述需承担行为披露责任。描述说明了去重合并行为、返回内容包含去重统计和平台覆盖统计,但未提及是否有副作用(如触发抓取)、是否需要提前抓取数据、是否有速率限制等。对于只读聚合工具,基本行为已透明,但缺少额外细节。
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
描述以标题、Args、Returns、Examples分节,结构清晰,每个句子都有信息量,没有冗余。参数说明采用列表形式,并给出两个示例调用,简洁易读。
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
所有参数均有解释,返回结构有概述,且有示例。存在输出schema,因此无需详述返回字段。唯一小缺失是date_range的具体格式(允许字符串或对象但未举例),但整体信息足够代理正确调用。
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
输入schema的覆盖率为0%,但描述对所有5个参数都做了详细说明,包括类型、默认值、示例和含义(如similarity_threshold范围0.3-1.0,include_url控制是否包含链接)。描述完全补偿了schema的缺失,参数语义非常清晰。
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
描述以明确的动词'聚合'和资源'新闻'开头,说明将相似新闻去重合并,并显示跨平台覆盖和综合热度。与兄弟工具如search_news、get_latest_news相比,功能边界清晰,可直接区分。
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
描述通过功能说明隐含了使用场景(跨平台新闻去重聚合),但未明确说明何时应使用此工具而非其他工具(如search_news或find_related_news),也没有给出排除条件。缺乏显式的when/when-not指引。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_data_insightsA
统一数据洞察分析工具 - 整合多种数据分析模式
Args: insight_type: 洞察类型,可选值: - "platform_compare": 平台对比分析(对比不同平台对话题的关注度) - "platform_activity": 平台活跃度统计(统计各平台发布频率和活跃时间) - "keyword_cooccur": 关键词共现分析(分析关键词同时出现的模式) topic: 话题关键词(可选,platform_compare模式适用) date_range: 【对象类型】 日期范围(可选) - 格式: {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"} - 示例: {"start": "2025-01-01", "end": "2025-01-07"} - 重要: 必须是对象格式,不能传递整数 min_frequency: 最小共现频次(keyword_cooccur模式),默认3 top_n: 返回TOP N结果(keyword_cooccur模式),默认20
Returns: JSON格式的数据洞察分析结果
Examples: - analyze_data_insights(insight_type="platform_compare", topic="人工智能") - analyze_data_insights(insight_type="platform_activity", date_range={"start": "2025-01-01", "end": "2025-01-07"}) - analyze_data_insights(insight_type="keyword_cooccur", min_frequency=5, top_n=15)
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | ||
| topic | No | ||
| date_range | No | ||
| insight_type | No | platform_compare | |
| min_frequency | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states that results are returned as JSON and describes analysis modes, but it never clarifies whether the tool is read-only, whether it triggers expensive computation, whether it depends on external data sources, or whether any state is changed. This leaves a meaningful transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well organized with an intro, Args, Returns, and Examples sections. Every line adds value: mode definitions, parameter constraints, and concrete usage examples are all present without redundant filler. It is long enough to be useful and compact enough to scan quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three modes, conditional parameters, and subtle date_range typing, the description covers the essential invocation knowledge: which parameters apply to which mode, defaults, formats, and example calls. It does not explicitly explain what happens when irrelevant parameters are passed or describe error cases, but an output schema exists and the provided information is sufficient for basic correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides rich semantics for all five parameters: allowed insight_type values with mode meanings, optional topic, strict date_range object format with example and a warning against integers, plus defaults for min_frequency and top_n. This is exactly what an agent needs to construct valid calls and goes far beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies an analysis tool for multiple data insight modes, enumerating three specific insight types with plain-language explanations. It does not explicitly differentiate itself from overlapping sibling tools like analyze_topic_trend or analyze_sentiment, so it misses a bit of sibling-targeted clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description shows when to use each mode through the insight_type options and concrete examples, but it never states when not to use the tool or which alternative sibling covers a similar case. Usage guidance is implied rather than explicit, especially given the large sibling set with analysis-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_sentimentA
分析新闻的情感倾向和热度趋势
建议:使用自然语言日期时,先调用 resolve_date_range 获取精确日期范围。
Args: topic: 话题关键词(可选) platforms: 平台ID列表,如 ['zhihu', 'weibo'],不指定则使用所有平台 date_range: 日期范围,格式 {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"},默认今天 limit: 返回新闻数量,默认50,最大100(会对标题去重) sort_by_weight: 是否按热度权重排序,默认True include_url: 是否包含URL链接,默认False(节省token)
Returns: JSON格式的分析结果,包含情感分布、热度趋势和相关新闻
Examples: - analyze_sentiment(topic="AI", date_range={"start": "2025-01-01", "end": "2025-01-07"})
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | No | ||
| platforms | No | ||
| date_range | No | ||
| include_url | No | ||
| sort_by_weight | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does this well by revealing meaningful behaviors: default date range is today, limit defaults to 50 and max 100, titles are deduplicated, platforms default to all, sorting defaults by heat weight, and include_url defaults to false to save tokens. It does not mention error cases or data-freshness limitations, but for a read-style analysis tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured and front-loaded: purpose, routing advice, parameter list, return summary, and example. It contains no filler or redundant explanation, and every section serves a practical purpose. The format makes it easy for an agent to scan and extract the needed information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, no annotations, and an output schema, the description is largely complete: all parameters are documented, return contents are summarized, an example is provided, and sibling routing is mentioned. The output schema exists, so detailed return fields do not need to be enumerated. The main missing element is clearer guidance on when to choose this tool over sibling analysis tools, and the available platform IDs are not listed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully document the parameters, and it does. Every argument is explained with concrete details: date_range gets an explicit JSON format, platforms gets a realistic example, limit gets a maximum and deduplication note, and boolean flags get their default behavior. This fully compensates for the schema's lack of descriptive text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: analyze news sentiment and heat trends (分析新闻的情感倾向和热度趋势). It names a specific action and resource, and the parameter list clarifies that it works on a topic/platform/date range. However, it does not explicitly distinguish itself from similar sibling tools like analyze_topic_trend or analyze_data_insights, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit routing suggestion: if using natural-language dates, call resolve_date_range first. This is direct, actionable guidance for a specific alternative. It does not, however, discuss when this tool should be preferred over the other analysis-oriented siblings, so the usage guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_topic_trendA
统一话题趋势分析工具 - 整合多种趋势分析模式
建议:使用自然语言日期时,先调用 resolve_date_range 获取精确日期范围。
Args: topic: 话题关键词(必需) analysis_type: 分析类型 - "trend": 热度趋势分析(默认) - "lifecycle": 生命周期分析 - "viral": 异常热度检测 - "predict": 话题预测 date_range: 日期范围,格式 {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"},默认最近7天 granularity: 时间粒度,默认"day" spike_threshold: 热度突增倍数阈值(viral模式),默认3.0 time_window: 检测时间窗口小时数(viral模式),默认24 lookahead_hours: 预测未来小时数(predict模式),默认6 confidence_threshold: 置信度阈值(predict模式),默认0.7
Returns: JSON格式的趋势分析结果
Examples: - analyze_topic_trend(topic="AI", date_range={"start": "2025-01-01", "end": "2025-01-07"}) - analyze_topic_trend(topic="特斯拉", analysis_type="lifecycle")
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | ||
| date_range | No | ||
| granularity | No | day | |
| time_window | No | ||
| analysis_type | No | trend | |
| lookahead_hours | No | ||
| spike_threshold | No | ||
| confidence_threshold | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses the JSON return format, the default date range, and mode-specific parameter behavior (viral thresholds, prediction lookahead, confidence). It does not mention rate limits, auth, or side effects, but for an analysis tool this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a title line, a usage tip, a compact Args block, Returns, and Examples. Every section adds value and the format is easy for an agent to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, 0% schema description coverage, no annotations, and an output schema, the description is largely complete: it explains parameter semantics, defaults, mode-specific options, and gives examples. Minor gaps remain, such as valid granularity values and explicit sibling-tool selection guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description documents every parameter: topic as required, analysis_type with its four accepted values, date_range format, granularity, spike_threshold, time_window, lookahead_hours, and confidence_threshold. It fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies it as a topic-trend analysis tool ('统一话题趋势分析工具') and enumerates four analysis modes. It states a specific verb and resource, but it does not explicitly contrast it with sibling analysis tools like analyze_data_insights or analyze_sentiment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one practical workflow hint: call resolve_date_range for natural-language dates. However, it does not say when to prefer this tool over its analysis siblings or when not to use it, so the usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_versionA
检查版本更新(同时检查 TrendRadar 和 MCP Server)
比较本地版本与 GitHub 远程版本,判断是否需要更新。
Args: proxy_url: 可选的代理URL,用于访问 GitHub(如 http://127.0.0.1:7890)
Returns: JSON格式的版本检查结果,包含两个组件的版本对比和是否需要更新
Examples: - check_version() - check_version(proxy_url="http://127.0.0.1:7890")
| Name | Required | Description | Default |
|---|---|---|---|
| proxy_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains that the tool compares local and GitHub remote versions, checks both TrendRadar and MCP Server, supports an optional proxy for GitHub access, and returns JSON with comparison and update-needed status. This is reasonably transparent, though it does not explicitly state side-effect-free behavior or network failure characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Purpose, Args, Returns, and Examples sections. It is compact, front-loaded with the main purpose, and every section contributes useful information without padding or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and an output schema available, the description is complete enough to invoke correctly. It explains the return format, the optional argument, and provides two concrete call examples. Nothing essential is missing for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. The Args section fully explains proxy_url as an optional proxy URL to access GitHub, provides a concrete example, and the schema supplies the default null. This adds clear meaning beyond the bare type definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: it checks version updates by comparing local versions with GitHub remote versions, covering both TrendRadar and MCP Server. This makes it immediately distinguishable from sibling tools like sync_from_remote or get_system_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the purpose and examples, but the description does not explicitly state when to prefer this tool over alternatives or when not to use it. There is no mention of sibling tools or exclusion cases, so guidance is only inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_periodsA
时期对比分析 - 比较两个时间段的新闻数据
对比不同时期的热点话题、平台活跃度、新闻数量等维度。
使用场景:
对比本周和上周的热点变化
分析某个话题在两个时期的热度差异
查看各平台活跃度的周期性变化
Args: period1: 第一个时间段(基准期) - {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"}: 日期范围 - "today", "yesterday", "this_week", "last_week", "this_month", "last_month": 预设值 period2: 第二个时间段(对比期,格式同 period1) topic: 可选的话题关键词(聚焦特定话题的对比) compare_type: 对比类型 - "overview": 总体概览(默认)- 新闻数量、关键词变化、TOP新闻 - "topic_shift": 话题变化分析 - 上升话题、下降话题、新出现话题 - "platform_activity": 平台活跃度对比 - 各平台新闻数量变化 platforms: 平台过滤列表,如 ['zhihu', 'weibo'] top_n: 返回 TOP N 结果,默认10
Returns: JSON格式的对比分析结果,包含: - periods: 两个时期的日期范围 - compare_type: 对比类型 - overview/topic_shift/platform_comparison: 具体对比结果(根据类型)
Examples: - compare_periods(period1="last_week", period2="this_week") # 周环比 - compare_periods(period1="last_month", period2="this_month", compare_type="topic_shift") - compare_periods( period1={"start": "2025-01-01", "end": "2025-01-07"}, period2={"start": "2025-01-08", "end": "2025-01-14"}, topic="人工智能" )
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | ||
| topic | No | ||
| period1 | Yes | ||
| period2 | Yes | ||
| platforms | No | ||
| compare_type | No | overview |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It explains that compare_type selects different analyses (overview, topic_shift, platform_activity), that platforms filters sources, and that the result is JSON with period and type fields. It stops short of discussing failure modes, rate limits, or explicit read-only guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized with clear sections (purpose, use cases, arguments, returns, examples) and front-loads the core purpose. Despite covering six parameters, every sentence contributes useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter analytical tool with no annotations but an output schema, the description is complete: all parameters are specified, supported values are listed, return shape is summarized, and three usage examples are provided. Nothing necessary to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully document parameters. It does: period1/period2 accept either object ranges or presets, topic is optional, compare_type enumerates all three values with meanings, platforms provides a concrete example, and top_n has its default. Examples reinforce the parameter formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with '时期对比分析 - 比较两个时间段的新闻数据', which names a specific verb (compare) and resource (news data across two periods). The use-case bullets further distinguish it from single-period or trend-only siblings by focusing on dual-period comparisons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated '使用场景' section lists concrete scenarios such as comparing this week vs last week and analyzing topic heat differences across periods. It gives clear when-to-use context but does not explicitly name excluded alternatives or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_summary_reportA
每日/每周摘要生成器 - 自动生成热点摘要报告
Args: report_type: 报告类型(daily/weekly) date_range: 【对象类型】 自定义日期范围(可选) - 格式: {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"} - 示例: {"start": "2025-01-01", "end": "2025-01-07"} - 重要: 必须是对象格式,不能传递整数
Returns: JSON格式的摘要报告,包含Markdown格式内容
| Name | Required | Description | Default |
|---|---|---|---|
| date_range | No | ||
| report_type | No | daily |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It adds useful details: the output is JSON containing Markdown, and date_range must be an object rather than an integer. It does not disclose side effects, permissions, or any processing limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: a one-line purpose, then Args with clear formatting, then Returns. Every line adds value, and the object-format warning is high-signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only two optional parameters and an output schema, it covers parameter formats and the return shape well. The main omissions are when-to-use guidance and side-effect/permission hints, which would make it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema is under-specified: report_type is a plain string and date_range is a loose anyOf. The description compensates strongly by defining report_type values as daily/weekly and giving the exact date_range object format, an example, and a warning against passing integers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it generates daily/weekly hotspot summary reports. The daily/weekly scope is concrete, though it does not explicitly distinguish itself from sibling analysis tools like analyze_topic_trend or aggregate_news.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given for when to use this tool instead of siblings such as analyze_data_insights or aggregate_news. It only lists parameter values, not use conditions, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_format_guideA
获取通知渠道的格式化策略指南
返回各渠道支持的 Markdown 特性、格式限制和最佳格式化提示词。 在调用 send_notification 之前使用此工具,可以了解目标渠道的格式要求, 从而生成最佳排版效果的消息内容。
各渠道格式差异概览:
飞书:支持 粗体、彩色文本、链接、--- 分割线
钉钉:支持 ### 标题、粗体、> 引用、--- 分割线,不支持颜色
企业微信:仅支持 粗体、链接、> 引用,不支持标题和分割线
Telegram:自动转为 HTML,支持粗体/斜体/删除线/代码/链接/引用块
ntfy:支持标准 Markdown,不支持颜色
Bark:iOS 推送,仅支持粗体和链接,内容需精简
Slack:自动转为 mrkdwn,粗体、
删除线、<url|链接>邮件:自动转为完整 HTML 网页,支持标题/样式/分割线
通用 Webhook:标准 Markdown 或自定义模板
Args: channel: 指定渠道 ID(可选),不指定返回所有渠道策略 可选值: feishu, dingtalk, wework, telegram, email, ntfy, bark, slack, generic_webhook
Returns: JSON格式的渠道格式化策略,包含支持特性、限制和格式化提示词
Examples: - get_channel_format_guide() # 获取所有渠道策略 - get_channel_format_guide(channel="feishu") # 获取飞书策略 - get_channel_format_guide(channel="telegram") # 获取 Telegram 策略
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It clearly conveys a read-only, informational operation ('获取', '返回'), describes the JSON return format, and enumerates the detailed behavior across channels. It does not explicitly state 'read-only' or discuss side effects, but the non-mutating nature is strongly implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but highly structured and information-dense. It front-loads the purpose, then organizes channel differences, arguments, return type, and examples into clearly labeled sections. Every sentence contributes actionable information, and the per-channel breakdown is directly useful for the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, and the description still supplies essential context: optional behavior, valid channel IDs, return format, and usage examples. Given the tool's simple single-parameter interface, nothing an agent needs to select and invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must fully compensate. It defines the channel parameter, lists all valid values (feishu, dingtalk, wework, telegram, email, ntfy, bark, slack, generic_webhook), explains that omitting it returns all channel policies, and gives concrete usage examples. This exceeds what the minimal schema alone would provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: '获取通知渠道的格式化策略指南' (get notification channel formatting policy guide), and explicitly states it returns Markdown features, formatting restrictions, and best-practice prompt suggestions per channel. This clearly differentiates it from sibling tools like send_notification and get_notification_channels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool before calling send_notification to understand the target channel's format requirements. It provides clear context for when it is relevant, though it does not explicitly discuss when not to use it or name alternatives beyond its relationship to send_notification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_current_configA
获取当前系统配置
Args: section: 配置节,可选值: - "all": 所有配置(默认) - "crawler": 爬虫配置 - "push": 推送配置 - "keywords": 关键词配置 - "weights": 权重配置
Returns: JSON格式的配置信息
| Name | Required | Description | Default |
|---|---|---|---|
| section | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It clearly indicates a read-only 'get' operation and mentions the JSON return format, but does not address potential authentication requirements, whether the config reflects live or cached state, or any other side effects. Sufficient for a simple getter, but not richly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with a front-loaded purpose and clear Args/Returns sections. It contains no fluff, though it slightly repeats the default value already present in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and an output schema, the description is nearly complete. It documents all section choices and the return type. The only minor gap is not clarifying what 'current' means (e.g., live system state vs. persisted config), but this is not critical for a config getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides a default value and type for `section`, while the description adds all valid values: 'all', 'crawler', 'push', 'keywords', and 'weights'. Since schema description coverage is 0%, this description fully compensates by giving the agent the exact enumeration needed to call the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the current system configuration, with a specific resource (config) and verb (获取/get). It lists distinct config sections, which helps differentiate it from siblings like get_system_status or get_storage_status, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to use the `section` parameter and its allowed values, but it does not provide guidance on when to use this tool versus the many sibling tools. No exclusions or alternative tool references are given, leaving usage context to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_newsA
获取最新一批爬取的新闻数据,快速了解当前热点
Args: platforms: 平台ID列表,如 ['zhihu', 'weibo'],不指定则使用所有平台 limit: 返回条数限制,默认50,最大1000 include_url: 是否包含URL链接,默认False(节省token)
Returns: JSON格式的新闻列表
数据展示建议
默认展示全部返回数据,除非用户明确要求总结
用户说"总结"或"挑重点"时才进行筛选
用户问"为什么只显示部分"说明需要完整数据
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| platforms | No | ||
| include_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses return format, default limit, platform handling, include_url token-saving behavior, and explicit display expectations for the agent. It does not cover error behavior or data freshness guarantees, but the read-only nature is clear from the get verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args, Returns, and display guidance sections. The main purpose is front-loaded, and each section earns its place, though the display-suggestion block is slightly beyond tool invocation semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with three optional parameters and an output schema, the description is largely complete: it covers parameter behavior, defaults, return format, and agent-facing display policy. It could still mention ordering of results or what news fields are returned, but the output schema likely covers those.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by explaining all three parameters: platforms, limit with default and max, and include_url with its token-saving rationale. This is exactly the semantic content the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: it fetches the latest batch of crawled news data to quickly understand current hotspots. It is distinguishable from siblings like get_latest_rss and get_news_by_date, though it does not explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as search_news, get_news_by_date, or get_trending_topics. The only usage-related context is the display suggestion block, which addresses how to present results rather than when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_latest_rssA
获取最新的 RSS 订阅数据(支持多日查询)
RSS 数据与热榜新闻分开存储,按时间流展示,适合获取特定来源的最新内容。
Args: feeds: RSS 源 ID 列表,如 ['hacker-news', '36kr'],不指定则返回所有源 days: 获取最近 N 天的数据,默认 1(仅今天),最大 30 天 limit: 返回条数限制,默认50,最大500 include_summary: 是否包含文章摘要,默认False(节省token)
Returns: JSON格式的 RSS 条目列表
Examples: - get_latest_rss() - get_latest_rss(days=7, feeds=['hacker-news'])
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| feeds | No | ||
| limit | No | ||
| include_summary | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses storage separation, time-flow display, default/maximum values, and the token-saving effect of include_summary. As a read-only fetch tool, this is adequate, though it does not mention error or authentication behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with a clear purpose, structured Args, Returns, and Examples sections. Minor redundancy like 支持多日查询 repeating the days parameter details is acceptable but slightly unnecessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All four parameters are documented with defaults and limits, return format is specified as JSON, and examples demonstrate typical calls. The presence of an output schema means detailed return-field documentation is unnecessary, making this complete for a read-only RSS fetching tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by explaining every parameter: feeds with ID examples, days with range and default, limit with cap, and include_summary with its purpose. This goes far beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 获取最新的 RSS 订阅数据, and further clarifies that RSS data is stored separately from hot-list news and displayed as a time stream. This makes it easy to distinguish from siblings like get_latest_news and search_rss.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use case: retrieving recent content from specific RSS sources, and notes that RSS data is separate from hot-list news. However, it does not explicitly name alternatives such as search_rss or state when not to use this tool, so exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_news_by_dateA
获取指定日期的新闻数据,用于历史数据分析和对比
Args: date_range: 日期范围,支持多种格式: - 范围对象: {"start": "2025-01-01", "end": "2025-01-07"} - 自然语言: "今天", "昨天", "本周", "最近7天" - 单日字符串: "2025-01-15" - 默认值: "今天" platforms: 平台ID列表,如 ['zhihu', 'weibo'],不指定则使用所有平台 limit: 返回条数限制,默认50,最大1000 include_url: 是否包含URL链接,默认False(节省token)
Returns: JSON格式的新闻列表,包含标题、平台、排名等信息
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| platforms | No | ||
| date_range | No | ||
| include_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It transparently explains date_range formats, platform filtering behavior, limit maximums, and the include_url token-saving default. It does not mention error handling, rate limits, or authentication, but the read-only nature of 'fetch' is clear and the parameter behaviors are well documented.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a concise purpose sentence followed by a clean Args/Returns breakdown. Every argument is explained with practical examples and defaults, with no filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has four optional parameters and an output schema, and the description covers all parameters, defaults, and return fields. It lacks edge-case details such as empty-result behavior or timezone handling, but for a read-only historical query tool, the description provides enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate for parameter semantics. It does this excellently: date_range has multiple explicit format examples, platforms has an example list, limit has default and max values, and include_url states its default and rationale. This is more informative than the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool fetches news data for a specified date range for historical analysis and comparison. This is a specific verb+resource pair that distinguishes it from get_latest_news, though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage context: historical data analysis and comparison. It implies this tool is for date-bound queries rather than real-time or keyword searches, but it does not explicitly state when to prefer alternatives like get_latest_news or search_news.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notification_channelsB
获取所有已配置的通知渠道及其状态
检测 config.yaml 和 .env 环境变量中的通知渠道配置。 支持 9 个渠道:飞书、钉钉、企业微信、Telegram、邮件、ntfy、Bark、Slack、通用 Webhook。
Returns: JSON格式的渠道状态,包含每个渠道是否已配置及配置来源
Examples: - get_notification_channels()
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It does disclose that the tool reads config.yaml and .env and returns a JSON status with configuration source, which is useful. However, it does not explicitly state that the operation is read-only, makes no external calls, or sends no notifications, which would be valuable given the sibling send_notification.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and key details are front-loaded, with the Returns and Examples sections adding clarity without excessive verbosity. Listing nine channels is necessary context, and the structure is easy to scan. Minor redundancy exists because the return format is already captured by the output schema, but it does not hurt usability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool returns, which config files are inspected, the list of supported channels, and a usage example. Since the tool has no parameters and an output schema exists, this is nearly complete. The main missing element is explicit guidance about how this tool relates to sibling notification tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties and 100% schema coverage, so there is no parameter detail for the description to add. The description includes an example invocation `get_notification_channels()` that confirms no arguments are required, satisfying the baseline for a zero-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: “获取所有已配置的通知渠道及其状态” (get all configured notification channels and their status). It further clarifies scope by listing 9 supported channels and the config sources checked. It does not explicitly differentiate from sibling tools like get_channel_format_guide, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a usage context by mentioning config.yaml and .env detection, but it never states when to use this tool versus alternatives such as send_notification or get_channel_format_guide. There are no explicit exclusions or conditions that would help an agent decide between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rss_feeds_statusA
获取 RSS 源状态信息
查看当前配置的 RSS 源及其数据统计信息。
Returns: JSON格式的 RSS 源状态,包含: - available_dates: 有 RSS 数据的日期列表 - total_dates: 总日期数 - today_feeds: 今日各 RSS 源的数据统计 - {feed_id}: { name, item_count } - generated_at: 生成时间
Examples: - get_rss_feeds_status() # 查看所有 RSS 源状态
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description conveys that this is a read-only status view through '查看' and details of generated statistics. However, it does not explicitly state side-effect-free behavior, whether data is cached, or how it behaves when no feeds exist, so the burden is only partially met.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured and front-loaded with purpose, followed by a compact Returns list and an example. The opening line '获取 RSS 源状态信息' is mildly redundant with the name and second sentence, but overall there is no wasted bulk.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter status tool, the description is largely complete: it states scope, return structure, and an example invocation. It could be more complete by explicitly distinguishing when to use this over sibling tools like get_system_status or list_available_dates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, and the example get_rss_feeds_status() confirms no arguments are required. With schema coverage at 100% and no params, the description adds no parameter semantics but none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('获取/查看') and a specific resource (RSS feeds status and their data statistics), and the Returns section defines exactly what is included. It differentiates from siblings like get_system_status/get_storage_status by scoping to configured RSS sources and their stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this to view currently configured RSS sources and their data statistics. It does not explicitly name alternative tools or provide when-not-to-use conditions, but the context is specific enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_storage_statusA
获取存储配置和状态
查看当前存储后端配置、本地和远程存储的状态信息。
Returns: JSON格式的存储状态信息,包含本地/远程存储状态和拉取配置
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
无注释提供,描述承担了行为披露的负担。描述了返回内容和格式(JSON状态信息),但未明确说明操作是否只读、是否会触发副作用或需要权限。不过“查看”和“获取”暗示了非破坏性,基本行为是清晰的。
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
描述简洁高效,第一句即点明核心功能,随后补充返回内容,每句话都有价值,没有冗余信息。
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
工具无参数、有输出模式,描述已涵盖返回格式和主要内容。对于这种简单查询工具,没有遗漏关键信息,描述足以让代理正确调用。
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
该工具没有参数,输入模式为空,因此描述无需补充参数语义。根据规则,0参数时基线得分为4。
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
描述明确使用了具体动词“获取/查看”,资源是“存储配置和状态”,并具体说明包含本地/远程存储状态和拉取配置。与兄弟工具如get_rss_feeds_status、get_system_status在名称和描述上都能清晰区分。
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
描述隐含了用途(查看存储状态),但没有明确说明何时使用此工具而非其他工具,也没有提及替代方案或排除条件。虽然功能自明,但缺少显式的使用情境指导。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_statusB
获取系统运行状态和健康检查信息
返回系统版本、数据统计、缓存状态等信息
Returns: JSON格式的系统状态信息
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of explaining behavior. It indicates a read-only operation through '获取' and '返回', and lists what data is returned. However, it does not explicitly state that the operation is non-destructive, or disclose any side effects, auth requirements, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, but somewhat repetitive: '返回系统版本、数据统计、缓存状态等信息' and 'Returns: JSON格式的系统状态信息' overlap. Given that an output schema exists, the final 'Returns' line adds marginal value and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple parameterless status tool with an output schema, and the description covers what the status includes and the return format. However, it lacks guidance on how this tool relates to overlapping siblings and does not compensate for the absence of annotations with additional behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and schema coverage is 100%, so no parameter documentation is needed. The description adds no parameter semantics, but the baseline for a parameterless tool is 4, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: '获取系统运行状态和健康检查信息' (get system running status and health check info) and lists concrete contents (system version, data statistics, cache status). This is clear, though it does not explicitly differentiate itself from siblings like get_storage_status or check_version beyond the broad scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus the many related siblings such as get_rss_feeds_status, get_storage_status, get_current_config, or check_version. The description implies general system status retrieval but provides no conditions, exclusions, or alternative suggestions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trending_topicsA
获取热点话题统计
Args: top_n: 返回TOP N话题,默认10 mode: 时间模式 - "daily": 当日累计数据统计 - "current": 最新一批数据统计(默认) extract_mode: 提取模式 - "keywords": 统计预设关注词(基于 config/frequency_words.txt,默认) - "auto_extract": 自动从新闻标题提取高频词(无需预设,自动发现热点)
Returns: JSON格式的话题频率统计列表
Examples: - 使用预设关注词: get_trending_topics(mode="current") - 自动提取热点: get_trending_topics(extract_mode="auto_extract", top_n=20)
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | current | |
| top_n | No | ||
| extract_mode | No | keywords |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the two extraction modes, references the config/frequency_words.txt source, and states that the return is a JSON frequency list. It does not discuss side effects, but for a getter-style statistics tool the disclosed behavior is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args, Returns, and Examples sections. Every sentence adds value, the main purpose is front-loaded, and the examples are concise illustrations rather than repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three optional parameters and no annotations, the description is complete: it defines all parameters, their defaults, mode semantics, extraction sources, return format, and usage examples. Nothing an agent needs to call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions at all, yet the description documents every parameter: top_n with its default, mode with both allowed values and their meanings, and extract_mode with both options plus the config file dependency. Examples reinforce the parameter combinations, fully compensating for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving hot-topic frequency statistics, and the examples make the purpose concrete. It does not explicitly distinguish itself from siblings such as analyze_topic_trend, so it misses the top score, but the verb+resource combination is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context by explaining the mode options and showing concrete examples for preset keywords and auto extraction. It does not explicitly state when not to use this tool or name alternatives, so the guidance is strong but not fully exclusionary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_available_datesA
列出本地/远程可用的日期范围
查看本地和远程存储中有哪些日期的数据可用。
Args: source: 数据来源 - "local": 仅本地 - "remote": 仅远程 - "both": 同时列出并对比(默认)
Returns: JSON格式的日期列表,包含各来源的日期信息和对比结果
Examples: - list_available_dates() - list_available_dates(source="local")
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | both |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the behavioral disclosure burden. It discloses that the tool reads local/remote storage, can compare both, and returns JSON date lists, which is adequate for a non-destructive listing tool. However, it does not mention date format, empty-result behavior, or network/error implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured with summary, Args, Returns, and Examples sections, making it easy to scan. There is minor redundancy between '列出本地/远程可用的日期范围' and '查看本地和远程存储中有哪些日期的数据可用', but no wasteful content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and no required fields, the description covers purpose, source values, return shape, and examples; an output schema also exists. It could add exact date range format or behavior when no data is available, but nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only says source is a string with default 'both' and has 0% description coverage. The description compensates by enumerating valid values local/remote/both, stating the default, and giving examples. There is no ambiguity about how to use the only parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line names a specific operation (列出) and resource (local/remote available date ranges), and the description expands on distinct scopes. It stands apart from siblings like get_news_by_date or resolve_date_range because it focuses on availability of dates in storage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to use the source parameter and what each value does, but it does not explicitly state when to use this tool instead of siblings such as resolve_date_range or get_news_by_date. Usage is implied through '查看本地和远程存储中有哪些日期的数据可用', but no exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_articleA
读取指定 URL 的文章内容,返回 LLM 友好的 Markdown 格式
通过 Jina AI Reader 将网页转换为干净的 Markdown,自动去除广告、导航栏等噪音内容。 适合用于:阅读新闻正文、获取文章详情、分析文章内容。
典型使用流程:
先用 search_news(include_url=True) 搜索新闻获取链接
再用 read_article(url=链接) 读取正文内容
AI 对 Markdown 正文进行分析、摘要、翻译等
Args: url: 文章链接(必需),以 http:// 或 https:// 开头 timeout: 请求超时时间(秒),默认 30,最大 60
Returns: JSON格式的文章内容,包含完整 Markdown 正文
Examples: - read_article(url="https://example.com/news/123")
Note: - 使用 Jina AI Reader 免费服务(100 RPM 限制) - 每次请求间隔 5 秒(内置速率控制) - 部分付费墙/登录墙页面可能无法完整获取
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does so well. It discloses the underlying Jina AI Reader service, automatic noise removal, the free-tier 100 RPM limit, built-in 5-second rate control, and the fact that paywalled/login-walled pages may not be fully retrievable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well organized with sections for purpose, use cases, workflow, arguments, return format, and limitations. Every section adds practical information for an agent, and the primary purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core return value (JSON containing Markdown), the expected usage flow, rate limits, and failure caveats. For a small two-parameter tool, this is sufficient for an agent to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully. It specifies that url is required and must start with http:// or https://, gives timeout semantics with default 30 and max 60, and includes a concrete example call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: reading the content of a given URL and converting it to LLM-friendly Markdown. It clearly differentiates from search-oriented siblings by focusing on fetching and cleaning page content rather than discovering or aggregating news.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context: use after search_news(include_url=True), and for reading news正文, getting article details, or analyzing content. It does not explicitly contrast with read_articles_batch, so it lacks a direct exclusion for multi-URL cases, but the intended workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_articles_batchA
批量读取多篇文章内容(最多 5 篇,间隔 5 秒)
逐篇请求文章内容,每篇之间自动间隔 5 秒以遵守速率限制。
典型使用流程:
先用 search_news(include_url=True) 搜索新闻获取多个链接
再用 read_articles_batch(urls=[...]) 批量读取正文
AI 对多篇文章进行对比分析、综合报告
Args: urls: 文章链接列表(必需),最多处理 5 篇 timeout: 每篇的请求超时时间(秒),默认 30
Returns: JSON格式的批量读取结果,包含每篇的完整内容和状态
Examples: - read_articles_batch(urls=["https://a.com/1", "https://b.com/2"])
Note: - 单次最多读取 5 篇,超出部分会被跳过 - 5 篇约需 25-30 秒(每篇间隔 5 秒) - 单篇失败不影响其他篇的读取
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description bears the full burden of behavior disclosure and succeeds: it reveals automatic 5-second spacing for rate-limit compliance, a hard cap of 5 articles with excess skipped, per-article failure isolation, expected duration, and the nature of the JSON return. This is substantial valuable context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with sections for Args, Returns, Examples, and Notes, making it scannable. It loses a point for redundancy: the 5-article limit and 5-second interval are repeated in the opening sentence, the following paragraph, and the Notes section, but the overall size remains reasonable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, two parameters, no annotations, and the presence of an output schema, the description covers every practical need: selection workflow, limits, timing, timeout, partial failure behavior, and return shape. An agent can correctly invoke this tool without further information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates: urls is explained as a required list of article links with a maximum of 5, and timeout is defined as per-request timeout in seconds with default 30. This adds semantic meaning the bare input schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: '批量读取多篇文章内容(最多 5 篇,间隔 5 秒)'. It clearly differentiates from the sibling read_article by emphasizing batch processing, and even provides a workflow where it follows search_news, making its role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete '典型使用流程' with an explicit before-step: first search_news(include_url=True) to get URLs, then read_articles_batch(urls=[...]). It does not explicitly contrast with read_article or list exclusions, but the workflow and batch scope make the primary use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_date_rangeA
【推荐优先调用】将自然语言日期表达式解析为标准日期范围
为什么需要这个工具? 用户经常使用"本周"、"最近7天"等自然语言表达日期,但 AI 模型自己计算日期 可能导致不一致的结果。此工具在服务器端使用精确的当前时间计算,确保所有 AI 模型获得一致的日期范围。
推荐使用流程:
用户说"分析AI本周的情感倾向"
AI 调用 resolve_date_range("本周") → 获取精确日期范围
AI 调用 analyze_sentiment(topic="ai", date_range=上一步返回的date_range)
Args: expression: 自然语言日期表达式,支持: - 单日: "今天", "昨天", "today", "yesterday" - 周: "本周", "上周", "this week", "last week" - 月: "本月", "上月", "this month", "last month" - 最近N天: "最近7天", "最近30天", "last 7 days", "last 30 days" - 动态: "最近5天", "last 10 days"(任意天数)
Returns: JSON格式的日期范围,可直接用于其他工具的 date_range 参数: { "success": true, "expression": "本周", "date_range": { "start": "2025-11-18", "end": "2025-11-26" }, "current_date": "2025-11-26", "description": "本周(周一到周日,11-18 至 11-26)" }
Examples: 用户:"分析AI本周的情感倾向" AI调用步骤: 1. resolve_date_range("本周") → {"date_range": {"start": "2025-11-18", "end": "2025-11-26"}, ...} 2. analyze_sentiment(topic="ai", date_range={"start": "2025-11-18", "end": "2025-11-26"})
用户:"看看最近7天的特斯拉新闻"
AI调用步骤:
1. resolve_date_range("最近7天")
→ {"date_range": {"start": "2025-11-20", "end": "2025-11-26"}, ...}
2. search_news(query="特斯拉", date_range={"start": "2025-11-20", "end": "2025-11-26"})| Name | Required | Description | Default |
|---|---|---|---|
| expression | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses server-side computation using precise current time, consistency across AI models, supported expression categories, and the exact return JSON shape. It does not discuss failure behavior or timezone assumptions, but it provides substantial behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than minimal, but it is well-structured with headers, bullet lists, and examples, and each section adds value. The workflow and duplicate examples are somewhat repetitive, but the structure is scannable and front-loaded with the recommended-priority guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter helper tool with no annotations but an output schema, the description is complete: it covers why the tool exists, when to call it, how to call it, supported inputs, return format, and worked examples chaining into other tools. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully explain the parameter, and it does. It documents the single 'expression' parameter with categorized supported formats, examples, and dynamic 'last N days' support, adding clear meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resolves natural language date expressions into a standard date range using a specific verb and resource. It distinguishes itself by explaining this is the recommended first call before date-consuming tools like analyze_sentiment, and the scope is precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly recommends prioritizing this tool when users express dates naturally and provides a step-by-step workflow with concrete examples. It does not explicitly state when not to use it or name alternative date-related tools, but the usage context is strong and unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_newsA
统一搜索接口,支持多种搜索模式,可同时搜索热榜和RSS
建议:使用自然语言日期时,先调用 resolve_date_range 获取精确日期范围。
Args: query: 搜索关键词或内容片段 search_mode: 搜索模式 - "keyword": 精确关键词匹配(默认) - "fuzzy": 模糊内容匹配 - "entity": 实体名称搜索(人物/地点/机构) date_range: 日期范围,格式 {"start": "YYYY-MM-DD", "end": "YYYY-MM-DD"},默认今天 platforms: 平台ID列表,如 ['zhihu', 'weibo'],不指定则使用所有平台 limit: 热榜返回条数限制,默认50 sort_by: 排序方式 - "relevance"(相关度)/ "weight"(权重)/ "date"(日期) threshold: 相似度阈值(仅fuzzy模式),0-1,默认0.6 include_url: 是否包含URL链接,默认False include_rss: 是否同时搜索RSS数据,默认False rss_limit: RSS返回条数限制,默认20
Returns: JSON格式的搜索结果,包含热榜新闻列表和可选的RSS结果
Examples: - search_news(query="AI") - search_news(query="AI", include_rss=True) - search_news(query="特斯拉", date_range={"start": "2025-01-01", "end": "2025-01-07"})
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| sort_by | No | relevance | |
| platforms | No | ||
| rss_limit | No | ||
| threshold | No | ||
| date_range | No | ||
| include_rss | No | ||
| include_url | No | ||
| search_mode | No | keyword |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It explains that the tool returns JSON with hot searches and optional RSS results, and describes search modes and filtering. It does not disclose potential side effects, rate limits, or result ordering behavior beyond the sort_by parameter, so coverage is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: a purpose statement, a cross-tool suggestion, a parameter reference, return description, and examples. Every section adds value, and the structure makes the long parameter list scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex with 10 parameters, but the description covers parameters, defaults, modes, and examples, while an output schema exists for return values. The only meaningful gap is the lack of explicit guidance on when to choose this tool versus closely related sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, but the description fully compensates with a detailed Args block explaining every parameter, including search_mode variants, threshold semantics, date_range format, and default values. This goes well beyond the schema and gives agents actionable parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as a unified search interface that searches both hot lists and RSS, with multiple search modes. It is distinguishable from siblings like search_rss and get_latest_news, though it does not explicitly name them or contrast itself against them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete usage suggestion to call resolve_date_range for natural language dates, which gives useful cross-tool guidance. However, it does not explicitly state when to prefer this over sibling tools such as search_rss or get_trending_topics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_rssA
搜索 RSS 数据
在 RSS 订阅数据中搜索包含指定关键词的文章。
Args: keyword: 搜索关键词(必需) feeds: RSS 源 ID 列表,如 ['hacker-news', '36kr'] - 不指定时:搜索所有 RSS 源 days: 搜索最近 N 天的数据,默认 7 天,最大 30 天 limit: 返回条数限制,默认50 include_summary: 是否包含文章摘要,默认False
Returns: JSON格式的匹配 RSS 条目列表
Examples: - search_rss(keyword="AI") - search_rss(keyword="machine learning", feeds=['hacker-news'], days=14)
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| feeds | No | ||
| limit | No | ||
| keyword | Yes | ||
| include_summary | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It covers feed scoping behavior, default and maximum days, limit default, include_summary default, and the JSON return format. It does not mention sorting, matching semantics, or error behavior, but these are relatively minor for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a one-line summary, an Args block, Returns, and Examples. Every section earns its place, there is no filler, and the most important scoping information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter search tool with no annotations, the description covers parameter semantics, defaults, return type, and provides two concrete invocation examples. It omits details like valid feed identifiers and sort order, but these are largely discoverable from sibling tools and do not prevent correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, and the description fully compensates by explaining every parameter: keyword is required, feeds has an example and default behavior, days has default/max, limit has default, and include_summary has 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: searching RSS subscription data for articles containing a keyword. It is unambiguous about the resource (RSS 订阅数据) but does not explicitly distinguish itself from sibling tools like search_news or get_latest_rss, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful behavioral context such as 'search all RSS feeds when feeds is not specified' and includes examples, which imply typical usage. However, it does not explicitly state when to prefer this tool over alternatives or when not to use it, leaving some routing decisions to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_notificationA
向已配置的通知渠道发送消息
接受 markdown 格式内容,内部自动适配各渠道的格式要求和限制:
飞书:Markdown 卡片消息(支持 粗体、彩色文本、链接、---)
钉钉:Markdown(自动降级标题为 ###、剥离 标签和删除线)
企业微信:Markdown(自动剥离 # 标题、---、 标签、删除线)
Telegram:HTML(自动转换 **→、*→、~~→、>→)
Email:HTML 邮件(完整网页样式,支持 # 标题、---、粗体斜体)
ntfy:Markdown(自动剥离 标签)
Bark:Markdown(自动简化为粗体+链接,适配 iOS 推送)
Slack:mrkdwn(自动转换 **→*、~~→~、text→<url|text>)
通用 Webhook:Markdown(支持自定义模板)
提示:发送前可调用 get_channel_format_guide 获取目标渠道的详细格式化策略, 以生成最佳排版效果的消息内容。
Args: message: markdown 格式的消息内容(必需) title: 消息标题,默认 "TrendRadar 通知" channels: 指定发送的渠道列表,不指定则发送到所有已配置渠道 可选值: feishu, dingtalk, wework, telegram, email, ntfy, bark, slack, generic_webhook
Returns: JSON格式的发送结果,包含每个渠道的发送状态
Examples: - send_notification(message="测试消息\n这是一条测试通知") - send_notification(message="紧急通知", title="系统告警", channels=["feishu", "dingtalk"])
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | TrendRadar 通知 | |
| message | Yes | ||
| channels | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does this well by detailing how markdown is adapted per channel (e.g., Telegram converts ** to <b>, Slack converts ** to *), stating that channels default to all configured channels, and noting that the return is JSON with per-channel status. It could be more transparent about failure behavior and rate limits, but the given detail is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with sections: purpose, per-channel formatting details, a helpful tip, args, return value, and examples. Every section earns its place, and the most important information is front-loaded. The per-channel list is dense but directly useful for predicting tool behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of multi-channel formatting and zero schema coverage, the description is remarkably complete. It explains what the tool does, how it transforms content for each channel, what parameters are accepted, what the return value looks like, and gives examples. The mention of get_channel_format_guide also connects it to related tooling. No critical information needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 for all parameter meaning. It does so thoroughly: message is marked as required markdown content, title has a default of 'TrendRadar 通知', and channels lists all valid values. Examples further clarify usage. This fully bridges the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: '向已配置的通知渠道发送消息' (send messages to configured notification channels). It clearly distinguishes itself from sibling tools like get_channel_format_guide and get_notification_channels by focusing on the sending action rather than retrieval or guidance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it sends markdown-formatted messages to channels, optionally specifying channels, and explicitly recommends calling get_channel_format_guide before sending for optimal formatting. It does not explicitly state when not to use this tool, but the purpose is distinct enough among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_from_remoteA
从远程存储拉取数据到本地
用于 MCP Server 等场景:爬虫存到远程云存储(如 Cloudflare R2), MCP Server 拉取到本地进行分析查询。
Args: days: 拉取最近 N 天的数据,默认 7 天 - 0: 不拉取 - 7: 拉取最近一周的数据 - 30: 拉取最近一个月的数据
Returns: JSON格式的同步结果,包含: - success: 是否成功 - synced_files: 成功同步的文件数量 - synced_dates: 成功同步的日期列表 - skipped_dates: 跳过的日期(本地已存在) - failed_dates: 失败的日期及错误信息 - message: 操作结果描述
Examples: - sync_from_remote() # 拉取最近7天 - sync_from_remote(days=30) # 拉取最近30天
Note: 需要在 config/config.yaml 中配置远程存储(storage.remote)或设置环境变量: - S3_ENDPOINT_URL: 服务端点 - S3_BUCKET_NAME: 存储桶名称 - S3_ACCESS_KEY_ID: 访问密钥 ID - S3_SECRET_ACCESS_KEY: 访问密钥
| Name | Required | Description | Default |
|---|---|---|---|
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral disclosure burden, and it largely does. It explains that dates already present locally are skipped (skipped_dates), failed dates are reported with errors, and the operation requires specific S3 configuration. It does not explicitly warn about network load or whether it modifies existing files beyond skipping, but the skip behavior implies non-destructive sync.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: overview, Args, Returns, Examples, and Note. Every section contributes necessary information — parameter semantics, return schema, usage examples, and configuration requirements — with no redundant filler. The purpose sentence is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool, the description covers everything needed to invoke it correctly: parameter meaning and default, return format with all fields, configuration requirements, and usage examples. The output schema exists, but the description already details the return structure sufficiently, and the sibling context shows this is a standalone sync operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines 'days' as an integer with default 7 and 0% description coverage. The tool description fully compensates by explaining the meaning ('pull data from the last N days'), enumerating common values (0, 7, 30) with concrete interpretations, and providing examples for both default and explicit usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: '从远程存储拉取数据到本地' (pull data from remote storage to local), making the tool's core action unmistakable. It also situates the tool in the MCP Server workflow (crawlers store to remote cloud storage, server pulls for local analysis), which clearly distinguishes it from siblings like trigger_crawl, get_storage_status, or list_available_dates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear usage context: pulling crawler data from remote cloud storage (e.g., Cloudflare R2) into local for analysis. It does not explicitly name alternative tools or state when-not-to-use conditions, but the scenario and prerequisites (config file or S3 environment variables) are clear enough for an agent to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trigger_crawlA
手动触发一次爬取任务(可选持久化)
Args: platforms: 平台ID列表,如 ['zhihu', 'weibo'],不指定则使用所有平台 save_to_local: 是否保存到本地 output 目录,默认 False include_url: 是否包含URL链接,默认False(节省token)
Returns: JSON格式的任务状态信息,包含成功/失败平台列表和新闻数据
Examples: - trigger_crawl(platforms=['zhihu']) - trigger_crawl(save_to_local=True)
| Name | Required | Description | Default |
|---|---|---|---|
| platforms | No | ||
| include_url | No | ||
| save_to_local | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does a good job: it reveals that this is a manual/mutating crawl action, that persistence is optional via save_to_local, that include_url=False saves tokens, and that the return is JSON task status with success/failure platform lists. It does not cover rate limits, duration, or whether the crawl may overwrite existing data, but it provides materially more than a bare mutation label.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line summary, labeled Args with defaults/meaning, a Returns note, and two concrete examples. No redundant filler appears, and the key scoping behavior (default all platforms) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with an output schema and clear examples, the description covers invocation, defaults, and return shape sufficiently. It could be even more complete by noting whether the crawl runs synchronously/asynchronously and how invalid platform IDs are handled, but nothing an agent strictly needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must document parameters, and it does: platforms is explained with domain examples and a default ('use all platforms'), save_to_local is tied to the output directory, and include_url is explained with a token-saving rationale. This adds real semantic meaning beyond the raw JSON schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource: '手动触发一次爬取任务' (manually trigger a crawl task), with optional persistence. This clearly identifies it as the direct crawl-trigger action and distinguishes it from the read/analysis tools among its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by explaining default behavior (all platforms when platforms is unspecified) and providing two examples, but it never explicitly says when to choose this tool over alternatives. No exclusions or 'use X instead' guidance is given, though the manual-trigger wording makes the basic intent reasonably inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
27 tool updates
v6.10.0- First observed
aggregate_news - First observed
analyze_data_insights - First observed
analyze_sentiment - First observed
analyze_topic_trend - First observed
check_version - First observed
compare_periods - First observed
find_related_news - First observed
generate_summary_report - First observed
get_channel_format_guide - First observed
get_current_config - First observed
get_latest_news - First observed
get_latest_rss - First observed
get_news_by_date - First observed
get_notification_channels - First observed
get_rss_feeds_status - First observed
get_storage_status - First observed
get_system_status - First observed
get_trending_topics - First observed
list_available_dates - First observed
read_article - First observed
read_articles_batch - First observed
resolve_date_range - First observed
search_news - First observed
search_rss - First observed
send_notification - First observed
sync_from_remote - First observed
trigger_crawl
TDQS
Scored across 27 tools
The tools have reasonably distinct purposes, but there is some overlap between search_news, search_rss, and get_news_by_date, as well as between get_latest_news and get_news_by_date. Also, analyze_topic_trend and analyze_data_insights both serve as umbrella analyzers, which could cause misselection despite distinct sub-modes.
Most tool names follow a clear verb_noun pattern (get_, search_, analyze_, send_, etc.), with only minor deviations like resolve_date_range (verb_object) or check_version (verb_noun). The naming is generally consistent and intuitive.
With 27 tools, the server covers a wide range of functionality (news retrieval, analysis, configuration, notifications, storage), which is somewhat heavy but justifiable given the broad scope. It is on the upper edge of the acceptable range, but not excessive.
The tool surface is quite comprehensive for a news monitoring and analysis server, covering retrieval, search, trend analysis, sentiment, aggregation, comparison, reporting, and notifications. Minor gaps include lack of direct article management or explicit data deletion, but these are not critical for the domain.
Maintenance
Related MCP Connectors
The only News based AI MCP your agents will ever need — custom categories, global regions, and time-scoped results in one tool. We use multi-vector & sparse-hybrid search to search through thousands of articles across the world to find the exact news you're looking for.
Narrative intelligence from thousands of curated media sources, delivered to AI through MCP.
MCP server: AI-agent access to Chinese social & trend signals — Douyin, Weibo, Xiaohongshu/RedNote,
Free read-only Chinese AI news MCP: verified events, reports, products. No API key.
Related MCP Servers
- AlicenseAqualityDmaintenanceA real-time hotspot monitoring and news aggregation assistant that provides AI-powered analysis of trending topics across multiple platforms via the Model Context Protocol. It enables users to track news and receive automated notifications through various services like Telegram, WeChat, and Slack.14GPL 3.0
- AlicenseAqualityNot gradedmaintenanceAn AI-powered news and trend aggregator that tracks real-time hot topics and RSS feeds with personalized filtering and summaries. It enables users to monitor global trends and receive automated reports across multiple platforms including WeChat, Telegram, and Slack.27GPL 3.0
- AlicenseAqualityDmaintenanceAn aggregator for real-time hot topics and news from major social and financial platforms like Zhihu, Bilibili, and Wall Street News. It features an MCP server that allows AI models to fetch and analyze trending information for automated insights.17GPL 3.0
- AlicenseAqualityCmaintenanceMCP server for real-time trending news aggregation, AI-powered analysis and filtering, and multi-channel push notifications.27GPL 3.0


