news-monitor-mcp について
news-monitor-mcpは、WorldNewsAPIをAIアシスタントにつなぎ、ニュース検索とメディア監視を行うMCPサーバーです。ドイツ語・英語のセンチメント分析、ブリーフィング、トレンド検出、地域検索、継続的なアラートに対応し、APIキーが必要です。
主な機能
- 01国・言語をまたぐ全文検索
- 02ドイツ語・英語のセンチメント分析
- 03国・言語別の主要ニュース
- 04複数トピックのメディアブリーフィング
- 05ニューストレンドと地域検索
- 06継続的なアラート管理
活用シーン
- 01組織やトピックの報道状況を監視
- 02複数トピックの週次メディアブリーフィングを作成
- 03ドイツ語・英語ニュースのセンチメントを追跡
- 04キーワード、報道量、センチメントの変化を通知
MCP 対応
WorldNewsAPIを利用したニュース検索、分析、ブリーフィング、トレンド、地域検索、アラートのツールをMCPクライアントに公開します。利用にはWorldNewsAPIのキーが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
🇨🇭 スイス公共データ MCP ポートフォリオの一部
📰 news-monitor-mcp
WorldNewsAPI を介した世界のニュース監視、メディア分析、センチメント追跡のための MCP サーバーです。150 か国以上を対象とした全文検索、ドイツ語/英語のセンチメント分析、トップニュース、GL 向けブリーフィング、新聞の一面、地理検索に対応しています。API キーが必要です。
概要
news-monitor-mcp は、あらゆる AI アシスタントを、積極的に情報を収集するメディア分析エージェントへと変えます。このサーバーは、Claude のような LLM を世界のニュースデータに接続します。スイスの機関の評判監視から、週次のリーダーシップ向けブリーフィング、カテゴリ横断のトレンド検出まで対応します。
データソース: WorldNewsAPI(worldnewsapi.com)— ドイツ語のセンチメント分析を備えた、唯一の無料で利用できるニュース API です。
API キーが必要です。 worldnewsapi.com/console で無料キーを取得できます。無料プランは 1 日あたり 50 ポイントで、クレジットカードは不要ですが、worldnewsapi.com へのバックリンクが必要です(2026-08-14 確認)。
デモ用の代表的なクエリ: 「過去 30 日間、Schulamt Zürich はメディアでどのように報道されてきましたか。また、全体的なセンチメントはどうなっていますか?」
機能
- 🔍 全文検索 – 150 か国以上、50 以上の言語に対応。ブール検索と完全一致フレーズ検索が可能です
- 📊 センチメント分析 – ドイツ語と英語のみ(WorldNewsAPI 独自の機能)。スコアは −1(否定的)から +1(肯定的)です
- 📰 トップニュース – 国と言語ごとにクラスタリングし、報道した情報源の数でランキングします
- 📋 メディアブリーフィング – GL/リーダーシップ向けの最新情報として、センチメント概要を含む複数トピックの週次レポートを作成します
- 🗞️ 新聞の一面 – 125 か国、6,000 以上の出版物のデジタル紙面を取得します
- 📡 トレンドレーダー – 国ごとにカテゴリ別(政治、テクノロジー、教育など)のトレンドを検出します
- 📍 地理検索 – Zürich、Bern、Basel、Kanton Zürich など、特定の場所に関するニュースを検索します
- ☁️ デュアルトランスポート – Claude Desktop 用の stdio と、クラウドデプロイ用の Streamable HTTP に対応します
| # | ツール | 説明 |
|---|---|---|
| 1 | news_search | 150 か国以上を対象とした全文ニュース検索 |
| 2 | news_top_headlines | 国と言語別のトップニュース |
| 3 | news_sentiment_monitor | エンティティまたはトピックのセンチメント分析 |
| 4 | news_media_briefing | 複数トピックの週次ブリーフィングレポート |
| 5 | news_retrieve_article | ID を指定して記事全文を取得 |
| 6 | news_search_sources | 名前または国で利用可能なニュースソースを検索 |
| 7 | news_front_pages | デジタル新聞の一面 — 有料プランが必要です。詳細は以下をご覧ください |
| 8 | news_trend_radar | 国ごとのカテゴリ別トレンド検出 |
| 9 | news_geo_search | 特定の場所に関するニュース検索 |
| 10 | news_alert_create | 永続アラートを作成(センチメント/件数/キーワード) |
| 11 | news_alert_list | 設定済みアラートとステータスを一覧表示 |
| 12 | news_alert_check | 現在のデータに照らしてアラートを評価 |
| 13 | news_alert_delete | アラートを完全に削除 |
| 14 | news_cache_stats | キャッシュのヒット率と種類別エントリ数 |
| 15 | news_cache_clear | キャッシュを消去(全体またはツールの種類別) |
デモ

「次のトピックのメディアブリーフィングを作成してください:教育における AI、Volksschule Zürich、学校のデジタル化」
データソース
| ソース | API の種類 | コンテンツ |
|---|---|---|
| WorldNewsAPI | REST JSON | 150 か国以上、50 以上の言語、全文、センチメント |
前提条件
- Python 3.11+
uvまたはpip- worldnewsapi.com/console の API キー(無料プランあり)
インストール
# Recommended: uvx (no install step needed)
uvx news-monitor-mcp
# Alternative: pip
pip install news-monitor-mcp
クイックスタート
# Start the server (stdio mode for Claude Desktop)
WORLD_NEWS_API_KEY=your-key uvx news-monitor-mcp
Claude Desktopですぐに試してみましょう:
「今日のスイスのトップニュースを表示して」 「今月、ドイツ語メディアでは Schulamt Zürich はどのように報道されていますか?」 「次のトピックについてメディアブリーフィングを作成して:Volksschule Zürich、教育における AI、学校のデジタル化」
設定
環境変数
| 変数 | デフォルト | 説明 |
|---|---|---|
WORLD_NEWS_API_KEY | – | 必須です。 worldnewsapi.com の API キー |
MCP_TRANSPORT | stdio | トランスポート:stdio または streamable_http |
MCP_HOST | 127.0.0.1 | HTTP のバインド先ホスト。コンテナー内でのみ 0.0.0.0 を使用してください。 |
MCP_PORT | 8000 | HTTP トランスポートのポート |
MCP_BEARER_TOKEN | – | --http モードでは必須です。 クライアントが Authorization: Bearer <token> で提示する必要があるベアラートークン。python -c "import secrets; print(secrets.token_urlsafe(32))" で生成できます。 |
MCP_ALLOWED_ORIGINS | – | Origin ヘッダーの任意の CSV 許可リスト(DNS リバインディング対策)。例:https://claude.ai。 |
LOG_LEVEL | INFO | ログレベル:DEBUG / INFO / WARNING / ERROR。ログは JSON 形式で stderr に出力され、api-key= クエリパラメーターと Authorization: Bearer ヘッダーは自動的にマスキングされます。 |
NEWS_MONITOR_ALERTS_DIR | ~/.news-monitor-mcp | alerts.json を格納するディレクトリ。親ディレクトリがシンボリックリンクの場合、パスインジェクション対策として起動時に拒否されます。ファイルはモード 0o600、ディレクトリは 0o700 で作成されます。 |
NEWS_MONITOR_ALERTS_FILE | – | (後方互換性) アラートファイルの明示的なパス。同じシンボリックリンクチェックが適用されます。NEWS_MONITOR_ALERTS_DIR の使用を推奨します。 |
MCP_ALERT_RETENTION_DAYS | 90 | 起動時に、指定日数より古いアラートを削除します(docs/privacy-dsg.md に基づくプライバシー保護のデフォルト値)。保持期間を無効にするには 0 を設定します。 |
MCP_CACHE_MAX_PER_TYPE | 1000 | ツールの種類ごとのキャッシュエントリの最大数。上限を超えると、その種類の中で最も長く使われていないエントリが削除されます。上限を無効にするには 0 を設定します(無制限に増加するため、短時間だけ稼働するプロセスでのみ安全です)。 |
MCP_CACHE_SWEEP_SECONDS | 300 | TTL の期限が切れたキャッシュエントリを削除するバックグラウンドタスクの実行間隔。スイープを無効にするには 0 を設定します(期限切れのエントリは news_cache_stats の呼び出し時に引き続き遅延削除されます)。 |
Claude Desktop の設定
{
"mcpServers": {
"news-monitor": {
"command": "uvx",
"args": ["news-monitor-mcp"],
"env": {
"WORLD_NEWS_API_KEY": "your-api-key-here"
}
}
}
}
設定ファイルの場所:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Claude Desktop を再起動すると、すべてのツールが使用できるようになります。クエリの例:
- 「今日のスイスのトップニュースを表示して」
- 「今月の教育における AI に対するメディアの論調は?」
- 「次のトピックについて週次ブリーフィングを作成して:Schulamt Zürich、Volksschule、KI Bildung」
- 「過去 14 日間の学校のデジタル化に関するドイツ語の記事をすべて探して」
- 「今日のスイスの新聞の一面を表示して」
クラウドへのデプロイ(Streamable HTTP)
ブラウザー版の claude.ai 経由で使用する場合(例:ローカルソフトウェアを利用できない管理対象ワークステーション):
認証は必須です。 HTTP トランスポートは、有効な Authorization: Bearer <token> ヘッダーがないリクエストをすべて拒否します。トークンを一度生成し、秘密に保管してください:
python -c "import secrets; print(secrets.token_urlsafe(32))"
Render.com(推奨):
- リポジトリを GitHub にプッシュするか、フォークします
- render.com で、New Web Service → GitHub リポジトリに接続します
- Render ダッシュボードで次の環境変数を設定します:
WORLD_NEWS_API_KEY— WorldNewsAPI の API キーMCP_BEARER_TOKEN— 上記で生成したトークンMCP_HOST=0.0.0.0— コンテナー内のすべてのインターフェースにバインドしますMCP_ALLOWED_ORIGINS=https://claude.ai(任意、推奨)
- claude.ai の Settings → MCP Servers で、URL
https://your-app.onrender.com/mcpを追加し、ベアラートークンを認証ヘッダーとして設定します。
# Local HTTP mode (binds 127.0.0.1 by default)
WORLD_NEWS_API_KEY=your-key \
MCP_BEARER_TOKEN=$(python -c "import secrets; print(secrets.token_urlsafe(32))") \
news-monitor-mcp --http --port 8000
# Verify auth is enforced
curl -i http://127.0.0.1:8000/mcp # → 401
curl -i -H "Authorization: Bearer $MCP_BEARER_TOKEN" http://127.0.0.1:8000/mcp
スケーリングに関する注意事項
このサーバーは現在、単一プロセス/単一レプリカです。
- TTL キャッシュはプロセスのメモリ内(
NewsCache)にあります。Render または Kubernetes のレプリカを複数起動すると、各レプリカがそれぞれ独自のキャッシュを持つため、ヒット率はレプリカ数に応じて直線的に低下します。 - アラートはローカルの
alerts.json(コンテナ内では既定で/data)に保存されます。複数のレプリカが同じ永続ボリュームをマウントしている場合、fcntl.flockにより書き込みは直列化されますが、クラスターで本格的に運用するには共有ストア(Redis/Postgres)が必要です。未解決の指摘事項SCALE-STATEFULを参照してください。 - 保留中の確認(
input_required。 MCP プロトコルバージョンを参照)にはrequestStateが含まれます。SDK は、このプロセスだけが保持するキーを使ってこれに署名し、その有効期間は 10 分です。リトライが別のレプリカに届いた場合、再起動後に届いた場合、または有効期間を過ぎて届いた場合は、-32602 Invalid or expired requestStateで拒否されます。何も削除されず、クライアントが再度呼び出し、ユーザーにももう一度確認が求められます。複数のレプリカを稼働させるには共有キーが必要ですが(MCPServerのrequest_state_security=)、このサーバーでは設定していません。 - Render Free Tierでは、約 15 分間操作がないとコンテナがスリープし、永続化されていない状態は失われます。再起動後もアラートを保持する必要がある場合は、
/dataに Persistent Disk をアタッチしてください。Render Free でアラートを使用する場合、起動のたびにキャッシュが失われることを受け入れる必要があります。
MCP_CACHE_MAX_PER_TYPE の上限(既定値は種類ごとに 1000 件)とバックグラウンドの一括削除(MCP_CACHE_SWEEP_SECONDS。既定値は 5 分)により、プロセス内キャッシュが無制限に増加するのを防ぎます。
コンテナイメージ
非 root のマルチステージ Dockerfile が含まれており、CI の実行ごとにビルドされます。コンテナ内では、サーバーは既定で --http を使用し、0.0.0.0:8000 にバインドして、アラートを /data に保存します。また、MCP_BEARER_TOKEN が設定されていない場合は起動を拒否します。
docker build -t news-monitor-mcp .
docker run --rm -p 8000:8000 \
-e WORLD_NEWS_API_KEY=your-key \
-e MCP_BEARER_TOKEN=$(python -c "import secrets; print(secrets.token_urlsafe(32))") \
-e MCP_ALLOWED_ORIGINS=https://claude.ai \
-v news-monitor-data:/data \
news-monitor-mcp
アーキテクチャ
┌─────────────────┐ ┌──────────────────────────┐ ┌──────────────────────────┐
│ Claude / AI │────▶│ News Monitor MCP │────▶│ WorldNewsAPI │
│ (MCP Host) │◀────│ (MCP Server) │◀────│ REST JSON API │
└─────────────────┘ │ │ │ 150+ countries │
│ 9 Tools │ │ 50+ languages │
│ Stdio | Streamable HTTP │ │ Sentiment DE/EN │
└──────────────────────────┘ └──────────────────────────┘
プロジェクト構成
news-monitor-mcp/
├── src/
│ └── news_monitor_mcp/
│ ├── __init__.py
│ └── server.py # All 9 tools
├── tests/
│ ├── __init__.py
│ └── test_server.py # 20 tests (unit + live)
├── pyproject.toml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md # This file (English)
└── README.de.md # German version
MCP プロトコルバージョン
このサーバーは、同じエンドポイントで2 つのプロトコル世代を扱います。接続でクライアントが最初に送信するリクエストによって、適用される世代が決まります。後から別の世代を指定しても拒否されます。
| 世代 | リビジョン | 対応するクライアント |
|---|---|---|
initialize ハンドシェイク | 2024-11-05 … 2025-11-25 | 現在のクライアントが使用する方式です。サーバーは要求されたリビジョンで応答します。ただし、要求が新しいリビジョンの場合は、上限である 2025-11-25 を返します。 |
| リクエストごとのエンベロープ | 2026-07-28 | 2026-07-28 の _meta エンベロープを含むリクエストによって、モダンな接続が開始されます。 |
両方のリビジョンは
tests/test_protocol_version.py で固定され、インストール済みの SDK と照合して検証されます。そのため、Dependabot による mcp の更新で、どちらかが知らないうちに変更されることはありません。ハンドシェイクの上限は、定数名を参照するのではなく、組み立て済みの ASGI スタックを通して実際に initialize を実行し、確認します。
SDK の LATEST_PROTOCOL_VERSION はハンドシェイク世代ではなく、モダンな世代のエイリアスです。これだけを基準に固定すると、現在のクライアントが実際にネゴシエートする世代が変更される余地が残るので注意してください。
更新ポリシー。 ゲートの検証に失敗した場合、定数を確認せずに変更しないでください。2 つのリビジョン間の仕様変更履歴を読み、サーバーが引き続き正常に動作することを確認したうえで、定数、このセクション、README.de.md、および CHANGELOG.md をまとめて更新してください。
2026-07-28 でサーバーが担うこと
SDK が担うのは、エンベロープ、server/discover、エラーコードです。tests/test_spec_2026_07_28.py で組み立てた ASGI スタックを通じて測定したところ、SDK だけでは正しく処理できない点が 3 つあります。
- アイデンティティ。 ハンドシェイクがない場合、
serverInfoはserver/discoverと各結果の_metaに含まれます。以前は"version": ""でしたが、現在はバージョン(パッケージのメタデータから取得)、タイトル、説明、ウェブサイトを示します。 - どちらの時代もセッションなし。 仕様では
Mcp-Session-Idが削除されました(SEP-2567)。HTTP トランスポートは、ハンドシェイクを行うクライアントに対してもステートレスで動作するようになりました。このサーバーは接続ごとの状態を保持しません。アラートはツール引数として渡される、サーバーが発行した ID で指定し、キャッシュはプロセス全体で共有されます。セッションによってクライアントが 1 つのプロセスに固定されることはなくなりました。引き続き固定される要因については、スケーリングに関する注意をご覧ください。 - 破壊的な操作を行う 2 つのツール
news_alert_deleteとnews_cache_clearでは、input_requiredによる人間の確認が必要です(SEP-2322)。2026-07-28クライアントがフォームによる引き出しを宣言すると、サーバーは 人間 に確認し、その回答に基づいてのみ操作します。モデルがconfirm=trueを設定しても、確認を省略できなくなりました。フォームによる引き出しを利用しないクライアントと、すべてのハンドシェイククライアントでは、confirmのフローに変更はありません。
意図的に変更していない点:MCPServer が両方のハンドラーを無条件に登録するため、server/discover は引き続き prompts と resources の機能を一覧表示します。どちらのリストも空です。
テスト
# Unit + contract tests (no network) — this is what CI runs
PYTHONPATH=src pytest tests/ -m "not live"
# Live tests. The route check needs no key; the data tests skip without one.
PYTHONPATH=src pytest tests/ -m "live"
# Re-record the route inventory (writes tests/fixtures/ + PROVENANCE.md)
PYTHONPATH=src python scripts/record_fixtures.py
256 件のテスト — オフライン 249 件、ライブ 7 件(うち 2 件は API キー不要)。
ライブテストは、プッシュ時ではなく、.github/workflows/live-tests.yml を通じて毎日 06:17 UTC に実行されます。テスト対象はソースであり、ソースはこのリポジトリとは独立して変更されるためです。
3 つのライブテストが一度も実行されていませんでした
2026-08-08 まで、リポジトリの 3 つのライブテストには @pytest.mark.live が付いていましたが、@pytest.mark.asyncio は付いていませんでした。pytest-asyncio のデフォルトである strict モードでは、これは「スキップ」を意味するのではなく、「async def functions are not natively supported」を意味します。テストは一度も実行されず、-m live を実行した人にはソースについて何もわからないエラーが 3 件表示されていました。CI は -m live を除外するため、誰もこの問題を報告しませんでした。
現在は asyncio_mode = "auto" により、マーカーの付け忘れが原因でこの問題が起きることはありません。
また、実行したとしても、あまり意味のある結果にはなりませんでした。
assert "Volksschule" in result or "Ergebnisse" in result
2 つ目の分岐はツール自身の結果見出しと一致するため、選言が失敗することはありませんでした。assert "Top-Schlagzeilen" in result と assert "Sentiment" in result も同様に、テンプレートにしか一致していませんでした。現在は 3 つとも失敗しうる内容をアサートし、キーが設定されていない場合は失敗ではなく スキップ します。「赤」は問題があることを意味すべきであり、キーがないことを意味すべきではありません。
キーなしで検証できることと、できないこと
tests/fixtures/api_routen.json には、ツールが構成する 5 つのパスそれぞれについて、キーなしで測定したステータスコードとコンテンツタイプが記録されています。ゲートウェイは認証前にルーティングします。
| パス | 応答 |
|---|---|
| サーバーが構成する 5 つのパス | 401、application/json |
| 自由に作ったパス(対照) | 404、text/html |
したがって、401 は「このルートは存在する」という意味です。対照がなければ、「401 が返ってきた」ということしかわかりません。それが必ずしも成り立つとは限りません。このポートフォリオ内の別の場所にある epl.bag.admin.ch は、存在しないパスにも 401 を返します。そのため、記録ツールは実行のたびに対照を再測定し、判別できなくなった場合は中断します。
未解決のままであり、その旨が PROVENANCE.md に記載されています: サーバーが送信するクエリパラメーター名が正しいかどうかです。API はパラメーターに関係なく 401 を返すため、キーがなければ検証できません。同じポートフォリオにある global-education-mcp では、まさにこの問題が発生しました。未知のパラメーターに対して HTTP 200 を返し、無視したため、2 つのフィルターが機能していませんでした。この確認は未完了であり、実施済みではありません。
結果が空の場合とレスポンス形式が変わった場合
data.get("news", []) は、「ソースが何も見つけなかった」と「ソースのレスポンスが想定と異なる」というまったく違うケースに、同じ結果を返します。後者は「結果 0 件」となり、完全で、もっともらしく、形式も整っていますが、誤りです。これは仮定の話ではありません。global-education-mcp ではレスポンスのエンベロープ名が変更されていたため、128 件のテストがすべて成功したまま、すべての回答が空になっていました。
articles_of() はエンベロープを読み取るようになりました。news が空であれば、空のリストのままです。これはソースによる明示です。一方、news が存在しない場合、それはニュースについての明示ではなく、レスポンスについての問題であるため、そのように報告されます。
使用例
学校管理局/組織内コミュニケーション
"How has the Schulamt Zürich been portrayed in media over the last 30 days?"
→ news_sentiment_monitor(entity="Schulamt Zürich", language="de", days_back=30)
"Create a weekly media briefing for leadership"
→ news_media_briefing(topics=["Volksschule Zürich", "KI Bildung", "Schuldigitalisierung"])
"What are Swiss media reporting on school digitalisation?"
→ news_search(query="Schuldigitalisierung", language="de", source_country="ch")
AI 専門家グループ/AI ワーキンググループ
"What are the current tech trends in Swiss press this week?"
→ news_trend_radar(category="technology", source_country="ch", language="de")
"How are AI developments in education covered internationally?"
→ news_search(query="AI education classroom", language="en", number=20)
"Compare Swiss and German media coverage of AI regulation"
→ news_search(query="KI Regulierung", source_country="ch", language="de")
→ news_search(query="KI Regulierung", source_country="de", language="de")
市役所/地域調査
"What is being reported about Zürich school infrastructure?"
→ news_geo_search(location="Zürich", query="Schule")
"Show today's front pages of Swiss newspapers"
→ news_front_pages(source_country="ch")
→ 対象別のその他の使用例 →
感情分析
WorldNewsAPI はドイツ語の感情分析を提供しています。ニュース API では珍しい機能です。
| スコア | ラベル | 意味 |
|---|---|---|
| > 0.3 | ポジティブ 😊 | 肯定的な報道 |
| −0.3 to 0.3 | 中立 😐 | 中立的/事実に基づく報道 |
| < −0.3 | ネガティブ 😟 | 批判的/否定的な報道 |
⚠️ 感情分析を利用できるのはドイツ語(de)と英語(en)のみです。
安全性、制限、責任ある利用
読み取り専用の操作
15 個のツールのうち 12 個には readOnlyHint: true が設定されています。9 個の監視ツール(search、headlines、sentiment、briefing、article、sources、front_pages、trend、geo)は完全に読み取り専用で、WorldNewsAPI に GET リクエストのみを送信します。例外の 3 個はローカルのみで動作する操作です。news_alert_create と news_alert_delete は ~/.news-monitor-mcp/alerts.json を書き込み/削除し、news_cache_clear はメモリ内キャッシュを消去します。15 個のツールのいずれも、外部データソースを変更しません。
API のレート制限
| 制約 | WorldNewsAPI 無料プラン | 有料プラン |
|---|---|---|
| クォータ | 1 日あたり 50 ポイント | 1 日あたり 500~50,000 ポイント |
| 1 回の呼び出しあたりの記事数 | 最大 100 件 | 最大 100 件 |
| 過去データの取得可能期間 | 30 日 | 延長 |
| 1 回の呼び出しのタイムアウト | 30 秒 | 30 秒 |
クォータは 2026-08-14 に worldnewsapi.com/pricing で確認しました。確認日が記載されていなければ、1 年後にはクォータが推測と見分けられなくなります。この表を前提に計画を立てる前に、知っておくべき注意点が 2 つあります。
- API の課金単位は呼び出し回数ではなくポイントです。 リクエストのコストはエンドポイントとそのオプションによって異なるため、「1 日あたりの呼び出し回数」に固定の値はありません。以前の「月 1,000 回」という記述は、単位も規模も間違っていました。
news_front_pagesは無料プランでは動作しません。 2026-08-14 に測定したところ、/retrieve-front-pageはHTTP 403 — This endpoint is not available on the free plan.を返しました。無料プランのキーで利用できたのは、残りの 14 個のツールです。- 1 回の呼び出しあたりの記事数はプランに依存しません。 2026-08-14 に無料プランで測定したところ、
number=50では 50 件、number=100では 100 件の記事が返され、どちらも HTTP 200 でした(いずれもavailable: 13037)。以前の README では、無料プランの上限を 10 件としていました。これは、このサーバー独自のデフォルト(DEFAULT_RESULTS)をソース側の制限と取り違えたものでした。
TTL キャッシュ(v0.2+)により、重複する呼び出しを最大 80% 削減できます。
データのプライバシー
- 個人データを保存しません: サーバーはユーザーデータを永続的に保持しません。キャッシュのエントリーはメモリ内に保存され、サーバーの再起動時にリセットされます。
- プロファイリングを行いません: サーバーが取得するのは、公開済みの報道のみです。監視や個人のプロファイリングを目的とした設計ではありません。
- アラートデータ: アラート設定はローカルの
~/.news-monitor-mcp/alerts.jsonに保存されます。保存先はお使いのマシンのみで、外部に送信されることはありません。
責任ある利用
- 公開ニュースの検索にのみ使用し、個人のプロファイリングには使用しないでください。
- 感情スコアは報道の論調をアルゴリズムで分析した結果であり、編集上の判断が検証済みであることを示すものではありません。
- 結果は WorldNewsAPI のインデックスに依存するため、スイスの地域メディアは全国紙などと比べて掲載が少ない場合があります。
利用規約
ユーザーは以下を遵守する必要があります。
この MCP サーバーは独立したオープンソースプロジェクトであり、WorldNewsAPI とは提携していません。
他の MCP サーバーとの連携
news-monitor-mcp は、ポートフォリオ内の他のサーバーと組み合わせて使用できます。
| 組み合わせ | 使用例 |
|---|---|
+ fedlex-mcp | 法律と世論の連携:法的枠組み+メディア報道 |
+ global-education-mcp | OECD 統計+最新のメディア動向 |
+ srgssr-mcp | スイスの公共メディア+国際ニュースの比較 |
+ swiss-environment-mcp | 環境データ+メディア報道 |
+ swiss-statistics-mcp | BFS 統計+最新のメディア報道 |
+ zurich-opendata-mcp | 市のデータ+地域メディアの報道 |
変更履歴
CHANGELOG.md を参照してください。
貢献
CONTRIBUTING.md(ドイツ語)を参照してください。
セキュリティとコンプライアンス
- 脆弱性は非公開で報告してください。SECURITY.md を参照してください。
- スイスの公共部門への導入:docs/isds-klassifikation.md で ISDS / Schutzbedarfsfeststellung を参照してください。
- スイスのデータ保護(revDSG)— 義務、プロファイリング、保持、第三国へのデータ移転:docs/privacy-dsg.md
- 監査履歴:audits/
ライセンス
MIT License — LICENSE を参照してください。
作者
Hayal Oezkan · malkreide
クレジットと関連プロジェクト
- データ: WorldNewsAPI – 感情分析付きの世界各国のニュースデータ
- プロトコル: Model Context Protocol – Anthropic / Linux Foundation
- 関連: swiss-culture-mcp – スイスの文化遺産データ向け MCP サーバー
- 関連: srgssr-mcp – SRG SSR のスイス公共メディア向け MCP サーバー
- ポートフォリオ: Swiss Public Data MCP Portfolio
インストール
uv の uvx を使って実行します。クローンや手動インストールは不要です。MCP クライアントの設定に追加してください(Claude Desktop、Cursor、Windsurf では mcpServers を使用します。VS Code では .vscode/mcp.json のトップレベルに servers キーを使用します)。
{
"mcpServers": {
"news-monitor-mcp": {
"command": "uvx",
"args": [
"news-monitor-mcp"
]
}
}
}
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。