endoflife.ai について
endoflife.aiは、ソフトウェアのサポート期間とEOLリスクを確認する、開発・運用チーム向けの読み取り専用MCPサーバーです。バージョン状態、リスクスコア、スタックとSBOMの検査、安全情報フィードを扱い、結果に出典URLを含めます。
主な機能
- 01バージョンのサポート状態を確認
- 02EOLリスクをスコア化
- 03スタックとSBOMをスキャン
- 04製品のライフサイクル履歴を表示
- 05KEVとデバイス情報フィードを確認
- 06アップグレード経路と今後のEOLを確認
活用シーン
- 01スタック全体の依存関係のサポート状況を監査
- 02SBOM内のライフサイクルリスクを評価
- 03製品のEOL前にアップグレードを計画
- 04製品のKEV該当状況を確認
MCP 対応
Streamable HTTPで、読み取り専用のライフサイクルツール、リソース、プロンプトをMCPクライアントに提供します。ツールはendoflife.aiのAPIと公開フィードを参照し、結果に出典URLを含めます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.endoflife.aiclaude mcp add --transport http e30f5a https://mcp.endoflife.ai{"mcpServers":{"e30f5a":{"type":"http","url":"https://mcp.endoflife.ai"}}}Cursor で開く{"servers":{"e30f5a":{"type":"http","url":"https://mcp.endoflife.ai"}}}VS Code で開く{"mcpServers":{"e30f5a":{"type":"http","url":"https://mcp.endoflife.ai"}}}{"mcpServers":{"e30f5a":{"serverUrl":"https://mcp.endoflife.ai"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://mcp.endoflife.ai認証が必要ツール
5| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| product | string | はい | 製品のスラッグまたは名前。例:"postgresql"、"nodejs"、"ubuntu"。 |
| version | string | はい | バージョン/サイクル。例:"14"、"18"、"20.04"。 |
詳細
endoflife.ai — MCP サーバー
endoflife.ai のライフサイクルに関する情報を、Model Context
Protocol(MCP、Streamable HTTP トランスポート)経由で AI エージェントに提供します。依存関係のない Cloudflare Worker が、公開されている api.endoflife.ai/v1 エンドポイントとサイトが公開するフィードをラップします。データは重複して保持せず、すべての回答にソース URL が含まれます。
現在のバージョン:1.4.0(src/index.js の SERVER_INFO.version、server.json、
package.json、Dockerfile の ARG VERSION、およびサイトの
endoflife/.well-known/mcp/server-card.json。すべて同じバージョンにしてください。レジストリと
Glama は server.json を参照します)。
1.4.0:check_sbom は API の POST /v1/sbom へのシンプルなプロキシです(すべてのインターフェースで同じリゾルバーを使用し、バージョンはリリース系列を保持します。例:python 3.12、ubuntu 20.04)。
プランの上限を超えた場合は、スコアリング済みの対象に加えて limit_note と
not_scored_count を返します。scan_stack はプランで許可される先頭の N 件をスコアリングし、残りを
not_checked に一覧表示します。1.4.0 より前の check_sbom はすべてのバージョンをメジャーバージョンに切り詰めており、キーなしの SBOM で一致したコンポーネントが 5 件を超えると何も返しませんでした。
ツール(すべて読み取り専用)
| ツール | 機能 | データソース |
|---|---|---|
check_eol | 製品 X のバージョン Y はサポート終了していますか? | GET /v1/status/:slug/:version |
get_risk_score | EOL リスクスコア(0~100)+要因の内訳 | GET /v1/score/:slug[/:version] |
scan_stack | スタック全体を一度にスコアリング | POST /v1/batch |
list_products | 追跡対象の 700 以上の製品を検索 → スラッグを特定 | GET /v1/products |
get_product_lifecycle | 1 つの製品の全バージョン履歴と日付 | GET /v1/product/:slug |
get_kev_exposure | 製品に紐付けられた CISA KEV エントリーすべて(日付、期限、必須アクションの原文)+Exploit 済みおよびパッチ適用不可のエントリー | endoflife.ai/kev-products.json, exploited-and-unpatchable.json |
get_upcoming_eol | 今後 N 日以内にサポート終了となるすべての対象(カタログ全体または製品リスト) | endoflife.ai/scanner-db.json |
get_edge_device_status | BOD 26-02 のステータスを含む EOS Edge Device フィード。プラットフォーム/ステータス/モデルで絞り込み | endoflife.ai/eos-edge-devices.json |
get_upgrade_path | サポート対象の移行先、サイトの推奨、ベンダーが明示する後継製品 | GET /v1/product/:slug, checker-db.json, edge フィード |
check_sbom | CycloneDX / SPDX JSON → package URL(完全一致、purl-map.json)でコンポーネントを特定。purl がない場合は名前で特定 → プラン上限までスコアリングし、残りは注記に件数を記載。一致しない項目は理由とともに一覧表示し、推測は行いません | POST /v1/sbom |
各ツールは annotations(readOnlyHint、idempotentHint)と
制限の緩い outputSchema を提供します。結果は JSON テキストと
structuredContent の両方で返されます。検索で見つからない場合は、稼働中の製品リストを対象にしたスラッグ候補(先頭一致/部分一致/編集距離 ≤ 2)を「もしかして」として提示します。
リソース(resources/list / resources/read):llms.txt、EOS Edge Device
フィード、Exploited & Unpatchable、製品別 KEV、edge の変更履歴。
プロンプト(prompts/list / prompts/get):audit_stack、eol_calendar、
edge_device_review。
エンドポイント: POST /(JSON-RPC)、GET /(情報ページ)、GET /health(稼働状態の JSON)、
GET /.well-known/mcp/server-card.json(検出カード)。
使用状況のテレメトリー
USAGE Analytics Engine バインディングを設定すると(wrangler.toml、データセット
endoflife_mcp_usage を参照)、各メソッド/ツールの呼び出しで 1 つのデータポイントが記録されます。内容は、ツール名、
クライアントのユーザーエージェント、成功/エラー、キーあり/匿名、レイテンシー(ミリ秒)です。リクエスト本文は記録されません。たとえば、Cloudflare Analytics Engine SQL API 経由でクエリできます。
SELECT blob1 AS tool, count() AS calls, sum(_sample_interval) AS weighted
FROM endoflife_mcp_usage WHERE timestamp > NOW() - INTERVAL '7' DAY
GROUP BY tool ORDER BY calls DESC
このバインディングは任意です。設定しなくてもコードは問題なく動作します。
デプロイ
本番環境へのデプロイは GitHub Actions から実行します。ローカルの wrangler は使用しません。
gh workflow run mcp-server-deploy.yml
(.github/workflows/mcp-server-deploy.yml。wrangler のバージョンは固定されています。リポジトリのシークレット CLOUDFLARE_API_TOKEN/CLOUDFLARE_ACCOUNT_ID が必要です。)開発では引き続きローカルの wrangler dev を使用できます。API サービスバインディングと USAGE データセットは、デフォルト環境と production 環境の両方で宣言されています。
カスタムドメイン(mcp.endoflife.ai)
wrangler.toml の route で、mcp.endoflife.ai が Cloudflare 経由で名前解決される必要があります。AAAA レコード、名前 mcp、IPv6 100::、プロキシ有効の設定です。設定済みです。
デプロイ前のテスト
Node のハーネスで、ライブ API とフィードに対するすべてのメソッドをテストします(env.API = { fetch } を設定すれば、モジュールは Node でも変更なしで実行できます)。
node scratch/mcp_test.mjs # see the session scratchpad; 22 RPC calls, expects 0 failures
オフラインのユニットテスト(fetch をモックし、ネットワークは使用しません):mcp-server/ で npm test を実行します(node --test test/)。
コンテナーとして実行(Red Hat UBI)
server.mjs は、mcp.endoflife.ai のリクエストを処理するものと同じハンドラーを、通常の Node.js プロセス内で実行します。Dockerfile は、クラスターへのデプロイ用に registry.access.redhat.com/ubi9/nodejs-22-minimal をベースとしてパッケージ化します(OpenShift AI の MCP カタログが想定する形式です)。ビルド手順や依存関係はありません。コンテナーは HTTPS 経由で https://api.endoflife.ai に接続し、権限のない UBI ユーザー(uid 1001)として実行されます。
docker build -t endoflife-mcp mcp-server/
docker run --rm -p 8080:8080 endoflife-mcp
curl -s localhost:8080/health
エンドポイントは Worker 自身のものです:POST /(Streamable HTTP JSON-RPC)、GET /health(レディネス)、GET /.well-known/mcp/server-card.json。ENDOFLIFE_API_KEY を設定すると(docker run -e ENDOFLIFE_API_KEY=...)、サーバーは独自のキーがないすべての呼び出しに X-API-Key としてこのキーを送信します。セルフホストのサーバーでは、2026 年 11 月 16 日 00:00 UTC からキーが必要になります。この時刻以降、キーなしでは API がデータリクエストに応答しなくなります。キーなしで利用できるのは、mcp.endoflife.ai のホスト済みエンドポイントのみです。無料キーは https://endoflife.ai/api#free-key から即時にメールで送信されます(1 日 150 リクエスト、有効期限なし。より多くの利用には有料キーが必要です)。.github/workflows/rhel-validation.yml により、Node 20 および 22 を使用して RHEL 9 と 10 で検証済みです(証跡は docs/company/redhat-validation-evidence.md にあります)。
MCP クライアントから接続する
Claude Desktop/Cursor/VS Code(mcpServers):
{
"mcpServers": {
"endoflife": { "command": "npx", "args": ["mcp-remote", "https://mcp.endoflife.ai"] }
}
}
リモート MCP にネイティブ対応しているクライアントでは、URL を直接使用できます。
{ "mcpServers": { "endoflife": { "url": "https://mcp.endoflife.ai" } } }
クライアントを使わずにテストする
# tools/list
curl -s https://mcp.endoflife.ai -X POST -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq
# KEV exposure for a product
curl -s https://mcp.endoflife.ai -X POST -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_kev_exposure","arguments":{"product":"ivanti-connect-secure"}}}' | jq
# health + discovery card
curl -s https://mcp.endoflife.ai/health | jq
curl -s https://mcp.endoflife.ai/.well-known/mcp/server-card.json | jq
認証とプラン
読み取りツールは、ホスト済みエンドポイント mcp.endoflife.ai を通じて、個人利用および評価目的であればキーなしで利用できます(各エージェントは 1 日 200 リクエスト、1 回あたり 5 件まで)。API を直接呼び出す場合、またはこのサーバーを自分で実行する場合は、2026 年 11 月 16 日 00:00 UTC まではキーなしで利用できます(匿名プラン:1 日 50 リクエスト、SBOM または一括呼び出しで 1 回あたり 3 コンポーネントまで)。それ以降は、すべてのデータリクエストにキーが必要です(セルフホストのサーバーでは ENDOFLIFE_API_KEY を設定してください。無料キーは https://endoflife.ai/api#free-key から取得できます)。企業のツール内で動作するエージェント、インベントリを確認するエージェント、または定期的に呼び出しを行うエージェントは本番利用に該当するため、有料キーが必要です。Starter(月額 $89、1 日 10,000 リクエスト、1 回あたり 25 件まで)または Pro(月額 $199、1 日あたりの上限なし、1 回あたり 50 件まで)は、https://endoflife.ai/api?utm_source=mcp#get-key のチェックアウト時に発行されます。X-API-Key ヘッダーとして転送してください。Worker はそのまま api.endoflife.ai に渡します。
備考
- 同一ゾーンの落とし穴:
api.endoflife.aiはこのゾーン上の Worker です。通常のfetch()を呼び出すとオリジンに送られて失敗します。本番環境ではAPIサービスバインディングが必須です。 - 静的フィードは、
cf.cacheTtl = 600を指定してサイトのオリジンから取得し、分離環境内に 10 分間メモ化されます。 - クライアントごとのレート制限: 上流 API の制限に依存します。MCP トラフィックが増えた場合は、上流への呼び出しの前に
CF-Connecting-IPをキーとする KV レートリミッターを追加してください。 - 検出カードは、メインサイトの
https://endoflife.ai/.well-known/mcp/server-card.jsonからも提供されます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。