mcp-newsapi について
mcp-newsapiは、AIアシスタントからNewsAPI.aiのニュース記事、イベント、トレンド、利用状況を参照する読み取り専用MCPサーバーです。従量制トークンの使用を制御する仕組みを備えています。
主な機能
- 01記事の検索と取得
- 02イベントの検索と取得
- 03概念や絞り込み条件の候補表示
- 04トレンド概念の確認
- 05トークン使用量と上限の確認
活用シーン
- 01特定の対象に関する最新報道の検索
- 02同じイベントを扱う記事の確認
- 03名称を正確なエンティティURIに変換
- 04残りのAPIトークン予算の監視
MCP 対応
NewsAPI.aiの記事やイベントの検索、概念や条件の候補表示、トレンド取得、アカウント利用状況の確認に使える10個の読み取り専用ツールをMCPクライアントに公開します。セッションごとのトークン予算とローカル制限で、従量制検索の使用量を管理します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @nubiia/mcp-newsapiNEWSAPI_AI_API_KEYシークレットYour NewsAPI.ai API key (newsapi.ai → Dashboard).NEWSAPI_AI_MAX_TOKENS_PER_SESSIONシークレットMax NewsAPI.ai tokens this server may spend per session (process lifetime). Defaults to 200.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
10掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| lang | any | いいえ | 3 文字の ISO 639-3 言語コード。例:"spa" または ["eng", "spa"]。OR 条件で検索します。単一の文字列または文字列の配列を受け付けます。 |
| page | integer | いいえ | 結果ページ。1 から始まります(デフォルトは 1)。 |
| count | integer | いいえ | ページあたりの記事数。1~100(デフォルトは 10)。コンテキストを節約するため、小さい値にしてください。 |
| keyword | string | いいえ | トピックや一般用語を検索する自由形式のキーワードまたはフレーズ(例:"inflation"、"wildfire")。企業、人、場所、組織には使用しないでください。一般的な単語が名前としても使われるため(例:"Telefónica" は一般的なスペイン語の形容詞 "telefónica" にも一致します)、無関係な結果が生じます。これらのエンティティには、先に suggest_concepts を呼び出し、返された URI を concept_uris に渡してください。 |
| sort_by | enum | いいえ | 並べ替え順(デフォルトは date)。"rel" はクエリとの関連性で順位付けします。date | rel | sourceImportance | cosSim |
| body_len | integer | いいえ | 記事ごとの本文の最大文字数。0~5000(デフォルトは 300、0 は本文なし)。 |
| date_end | string | いいえ | 最も新しい日付。YYYY-MM-DD(当日を含む)。date_start 以上である必要があります。allow_archive を指定した場合、date_start から date_end(デフォルトは今日)までの期間は最大 1 年です。 |
| sort_asc | boolean | いいえ | 昇順で並べ替えます(デフォルトは false)。 |
| data_types | any | いいえ | 含めるコンテンツタイプ(デフォルト:すべて)。単一の文字列または文字列の配列を受け付けます。 |
| date_start | string | いいえ | 最も古い日付。YYYY-MM-DD(当日を含む)。allow_archive=true でない限り、過去 31 日以内である必要があります。allow_archive=true の場合、date_start は必須です。 |
| keyword_loc | enum | いいえ | キーワードを検索する場所(デフォルト:API のデフォルトである本文)。body | title | body,title |
| source_uris | any | いいえ | ニュースソースの URI。例:"bbc.co.uk"(suggest_sources を使用)。OR 条件で検索します。単一の文字列または文字列の配列を受け付けます。 |
| concept_uris | any | いいえ | エンティティ(企業、人、場所、組織)のコンセプト URI。名前付きエンティティには keyword よりこちらを優先してください。最初に suggest_concepts を呼び出して名前を解決し、返された `uri` をここに渡します(無料)。複数の値は OR 条件で検索され、keyword よりはるかに精度が高く、同名語によるノイズを避けられます。単一の文字列または文字列の配列を受け付けます。 |
| allow_archive | boolean | いいえ | デフォルトは false で、過去 31 日間のみを検索します(最も低コスト)。true にすると過去のアーカイブも検索できます。検索する年ごとに追加のトークンが必要です。また、date_start が必須で、期間は最大 1 年です。 |
| category_uris | any | いいえ | カテゴリ URI。例:"news/Business"(suggest_categories を使用)。OR 条件で検索します。単一の文字列または文字列の配列を受け付けます。 |
| location_uris | any | いいえ | ニュースが発生した場所のロケーション URI(suggest_locations を使用)。OR 条件で検索します。単一の文字列または文字列の配列を受け付けます。 |
| max_sentiment | number | いいえ | センチメントの上限。-1~1(英語の記事のみ)。 |
| min_sentiment | number | いいえ | センチメントの下限。-1~1(英語の記事のみ)。 |
| ignore_keyword | string | いいえ | これに言及している記事を除外します。 |
| ignore_source_uris | any | いいえ | これらのニュースソースを除外します。単一の文字列または文字列の配列を受け付けます。 |
| include_duplicates | boolean | いいえ | 重複記事/シンジケート記事を含めます(デフォルトは false)。 |
| keyword_search_mode | enum | いいえ | キーワードの一致方法:simple(任意の単語)、exact(完全一致)、または phrase(フレーズ)。simple | exact | phrase |
詳細
MCP NewsAPI.ai
NewsAPI.ai(Event RegistryのニュースインテリジェンスAPI)向けのModel Context Protocol(MCP)サーバーです。ClaudeのようなAIアシスタントが、ニュース記事やイベント(同じ出来事に関する記事のクラスター)を検索したり、名前からエンティティURIを解決したり、トレンドを確認したり、アカウントのトークン予算を監視したりできます。
**Nubiia**が開発・保守しています — ビジネス向けのAI自動化と連携(MCP、Holded、Pipedriveなど)。自社にもこのようなものを導入したいですか? **nubiia.es**までお問い合わせください。
⚠️ NewsAPI.aiはトークン従量制です
検索のたびに、ご利用プランのトークンが消費されます。無料プランの予算は少量です。このサーバーはトークンを節約できるように設計されています。
- 結果数はデフォルトで10件(記事/イベント)、記事本文は300文字です。そのため、1回の呼び出しで消費するトークンも、アシスタントのコンテキストウィンドウも小さく抑えられます。
allow_archive: trueを指定しない限り、検索対象は過去31日間に限られます(過去データは対象となる年ごとに追加のトークンが必要です)。allow_archiveには**date_startが必須で、date_startからdate_endまでの期間(デフォルトは今日)は最長1年**です。31日より前の日付を指定したdate_start/date_endは、allow_archiveを指定しない場合、何も返さずに終了するのではなく、理由を説明して拒否されます。- フィルターをまったく指定しない検索は、トークンが消費される前にローカルで拒否されます。
- セッションのトークン予算(デフォルトは200トークン。下記を参照)により、ループが暴走してAPIに到達する前に停止します。
suggest_*ツールとget_usageは無料です。検索の前にこれらを使ってエンティティをURIに解決してください。get_usageでは残りの予算を確認できます。
ライブアカウントで計測したコスト(31日間の期間):
| ツール | 1回の呼び出しあたりのトークン数 |
|---|---|
search_articles、get_article | 1 |
search_events、get_event(情報) | 5 |
get_event(include_articles) | 1 |
get_trending_concepts | 10 |
suggest_*、get_usage | 0 |
プランと料金は変更される場合があります。newsapi.ai/pricingとdocs/api-notes.mdを参照してください。
特長
読み取り専用のツールを10個提供します。
- 記事(2):
search_articles、get_article - イベント(2):
search_events、get_event - オートサジェスト(4):
suggest_concepts、suggest_categories、suggest_sources、suggest_locations - トレンド(1):
get_trending_concepts - アカウント(1):
get_usage
合計:10個のツール。すべてにreadOnlyHint: trueが設定されており、このサーバーがNewsAPI.aiやその他の場所に書き込みを行うことはありません。
v1で意図的に対象外としている機能
トピックページと保存済み検索、分析サービス(テキストの分類、任意のテキストの感情分析)、ストーリーのクラスター化、記事への言及、集計結果タイプ(conceptAggr、timeAggrなど)、マルチテナント構成。
インストール
前提条件
- Node.js 22.14以降
- NewsAPI.aiアカウントとAPIキー(newsapi.ai → Dashboardから取得)
npmからインストール
npm install -g @nubiia/mcp-newsapi
ソースからインストール
git clone https://github.com/nubiia-dev/mcp-newsapi.git
cd mcp-newsapi
npm install
npm run build
設定
環境変数
| 変数 | 必須 | 説明 |
|---|---|---|
NEWSAPI_AI_API_KEY | はい | NewsAPI.aiのAPIキー(Dashboard)。秘密情報です。絶対にコミットしないでください。 |
NEWSAPI_AI_MAX_TOKENS_PER_SESSION | いいえ | 1セッション中(サーバープロセスを再起動するまで)にこのサーバーが消費できるNewsAPI.aiトークンの最大数。デフォルトは200です。 |
export NEWSAPI_AI_API_KEY=your_newsapi_ai_key
export NEWSAPI_AI_MAX_TOKENS_PER_SESSION=200 # optional
セッションのトークン予算
予算はサーバープロセスごとに設定されます。起動した各 MCP クライアント/サーバーのインスタンスには個別のカウンターがあるため、200 に設定したクライアントが2つあれば、合計で400を使用できます。再起動するとリセットされます。
各呼び出しは、測定されたトークンコスト(上の表を参照)が送信前に課金されます。呼び出しによって残りの予算を超える場合、ツールは残りの予算と合計予算、および予算の引き上げ方法を示すエラーを返し、NewsAPI.ai にはリクエストを送信しません。無料のツール(suggest_*、get_usage)がブロックされることはありません。get_usage は、アカウント残高と併せてセッション予算(maxTokens、spentTokens、remainingTokens)も報告します。API が完全に拒否した呼び出し(4xx)は返金されます。受け付けられた後に失敗した呼び出し(HTTP 200 の {"error"} 本文を含む)は、API に課金されるため、課金されたままになります。無効な値(例:abc、-5)は警告を標準エラー出力に表示して200に戻されます。0 に設定すると、有料の呼び出しはすべて無効になります。
Claude Desktop の設定
Claude Desktop の設定ファイルに追加します。
macOS:~/Library/Application Support/Claude/claude_desktop_config.json
Windows:%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"newsapi": {
"command": "npx",
"args": ["-y", "@nubiia/mcp-newsapi@latest"],
"env": {
"NEWSAPI_AI_API_KEY": "your_newsapi_ai_key",
"NEWSAPI_AI_MAX_TOKENS_PER_SESSION": "200"
}
}
}
}
ソースからインストールした場合:
{
"mcpServers": {
"newsapi": {
"command": "node",
"args": ["/path/to/mcp-newsapi/dist/index.js"],
"env": {
"NEWSAPI_AI_API_KEY": "your_newsapi_ai_key"
}
}
}
}
Claude Code の設定
claude mcp add newsapi --env NEWSAPI_AI_API_KEY=your_newsapi_ai_key -- npx -y @nubiia/mcp-newsapi@latest
トラブルシューティング
- このリポジトリ内から起動すると
sh: mcp-newsapi: command not foundが表示される。 クローンしたリポジトリのディレクトリから Claude Code(または別の MCP クライアント)を起動すると、npx @nubiia/mcp-newsapiは公開パッケージではなくローカルのpackage.jsonを解決するため、mcp-newsapiバイナリがPATHに見つかりません。上記の例のように@latestを指定してレジストリのバージョンを固定するか、別のディレクトリからクライアントを起動してください。
ツール
パラメーター(lang、concept_uris、category_uris、source_uris、location_uris、
ignore_source_uris、data_types、types、concept_types)は、単一の文字列または文字列の配列を指定できます。"lang": "spa" と "lang": ["spa"] は同じ意味です。
推奨される流れは、suggest_*(無料)→ search_* → get_* です。
suggest_concepts · 読み取り専用 · 無料
名前(「Telefónica」、「Pedro Sánchez」など)をコンセプト URI に解決します。検索時に uri を concept_uris として渡すと、キーワードを使うよりもはるかに正確です。
{ "prefix": "Telefónica", "types": ["org"], "count": 3 }
企業、人、場所、組織を検索する場合は? まず
suggest_conceptsで解決し、返されたuriをconcept_urisとして渡してください。keywordは自由語やトピック向けで、一般的な単語を指定するとノイズが多くなります。たとえばスペイン語でkeyword: "Telefónica"を指定すると、一般的な形容詞「telefónica」にも一致します。
suggest_categories、suggest_sources、suggest_locations · 読み取り専用 · 無料
カテゴリ(news/Business)、出版物(bbc.co.uk)、場所にも同じ考え方が適用されます。
search_articles · 読み取り専用 · 1トークン
keyword、concept_uris、category_uris、source_uris、location_uris のうち、少なくとも1つが必要です。デフォルトは、結果10件、新しい順、重複をスキップ、直近31日間、本文300文字です。page でページ送りできます。レスポンスには total と pages が含まれます。
{
"concept_uris": ["http://en.wikipedia.org/wiki/Telefónica"],
"lang": ["spa"],
"date_start": "2026-10-01",
"count": 5
}
日付には実在する YYYY-MM-DD 形式の日付を指定してください。date_end は date_start より前の日付にできません。また、上記のアーカイブのルールが適用されます(allow_archive には date_start が必要で、最大1年間です)。
その他のオプション:keyword_loc、keyword_search_mode、ignore_keyword、ignore_source_uris、data_types(news/pr/blog)、sort_by(date/rel/sourceImportance/cosSim)、min_sentiment/max_sentiment、body_len、include_duplicates、allow_archive。
get_article · 読み取り専用 · 1トークン
article_uri で指定した記事を1件取得します。本文をより長く取得できます(body_len のデフォルトは3000です)。
search_events · 読み取り専用 · 5トークン
イベントとは、同じ出来事についての記事のクラスターです。タイトル、短い要約、日付、場所、主要なコンセプト、記事数が含まれます。「X について何が起きているか」を知るのに適した粒度です。sort_by: "size" を指定すると、最大のニュースを優先して表示できます。min_articles_in_event でノイズを除外できます。
get_event · 読み取り専用 · 5トークン(include_articles ありの場合は1トークン)
event_uriで指定した1件のイベント、またはinclude_articles: trueを指定した場合は、そのイベントを取り上げた記事を取得します。
get_trending_concepts · 読み取り専用 · 10トークン
news、social、pr、blogで現在トレンドになっている人物、組織、場所(過去2日間と過去2週間を比較)を取得します(プランによってはブログのトレンドを利用できない場合があり、失敗した呼び出しにも料金が発生します)。最も高額なツールです。必要な場合にのみ呼び出してください。
get_usage · 読み取り専用 · 無料
availableTokens、usedTokens、remainingTokensを取得します。検索をまとめて実行する前に確認してください。
レート制限
ローカルガードにより、エージェントのループが暴走してトークン予算を使い果たすのを防ぎます。
| ツール | 制限 |
|---|---|
search_articles, search_events, get_article, get_event | 30リクエスト/分 |
get_trending_concepts | 20リクエスト/分 |
suggest_*, get_usage | 120リクエスト/分 |
| その他すべて(デフォルト) | 60リクエスト/分 |
API自体が許可する同時リクエスト数は最大5件です。429/502/503/504レスポンス、および接続拒否/DNSエラーは、バックオフを挟んで再試行します。曖昧な失敗(タイムアウト、接続リセット)は、課金対象のリクエストがすでに処理されている可能性があるため、再試行しません。
各試行は30秒でタイムアウトします。
エラーメッセージ
401/403レスポンスには、単なる「Unauthorized」ではなく説明が含まれます。キーが間違っている、または失効している場合や、アカウントのトークンが不足している場合があります(どちらかはget_usageで確認できます)。
APIキーはリクエスト本文で送信され、URLには含まれません。また、すべてのエラーメッセージ(HTTP、ネットワーク、JSON解析エラーを含む)から削除されます。
開発
npm install
npm run build
npm test # runs entirely against mocks — no network, no API key
npm run test:coverage
npm run lint
ワークフローの全容についてはCONTRIBUTING.mdを、稼働中のアカウントで検証したAPIの動作についてはdocs/api-notes.mdを参照してください。
ライセンス
関連項目
@nubiia/mcp-holded— Holdedの請求書発行・会計API向けMCP サーバー。@nubiia/mcp-signaturit— Signaturitの電子署名API向けMCP サーバー。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。