JFrog MCP Server (🧪 Experimental) について
JFrog MCP Server は、JFrog Platform API 向けの MCP サーバーで、リポジトリ管理、ビルド追跡、リリースのライフサイクル管理などを扱います。本プロジェクトは非推奨で保守も終了しており、README では JFrog 公式の MCP サーバーへの移行が案内されています。
主な機能
- 01ローカル、リモート、バーチャルリポジトリの作成と管理
- 02ビルド情報の一覧取得と参照
- 03AQL クエリによるアーティファクトの検索
- 04パッケージのバージョン、脆弱性、キュレーション状況の照会
- 05Xray によるアーティファクトの重大度別問題集計
活用シーン
- 01MCP クライアントから Artifactory のリポジトリやビルドを照会する
- 02オープンソースパッケージの既知の脆弱性とキュレーション結果を確認する
MCP 対応
本プロジェクトは MCP サーバーであり、JFrog Platform のリポジトリ、ビルド、ランタイム、プロジェクト、Xray の操作をツールとして MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
⛔ 非推奨 — JFrog MCP Server(実験版)
注意
🚨 このプロジェクトは非推奨であり、メンテナンスされていません 🚨
新規または既存のインテグレーションに、このリポジトリを使用しないでください。
この実験版 MCP サーバーは、JFrog が構築、メンテナンス、サポートする公式 JFrog MCP Serverに置き換えられました。公式サーバーはセキュリティが確保され、リモートでホストされており、本番環境で使用できる状態で、継続的にアップデート、バグ修正、セキュリティパッチが提供されます。
👉 代わりに公式 JFrog MCP Server をご利用ください:
https://jfrog.com/help/r/jfrog-integrations-documentation/jfrog-mcp-server
このリポジトリには、今後機能追加、修正、セキュリティアップデートは提供されません。以下の内容は、履歴を参照する目的に限り保存されています。
JFrog Platform API 用の Model Context Protocol(MCP)サーバーです。リポジトリ管理、ビルドの追跡、リリースライフサイクル管理などを可能にします。
https://github.com/user-attachments/assets/aca3af2b-f294-41c8-8727-799a019a55b5
⚠️ 非推奨のお知らせ
このプロジェクトは非推奨であり、JFrog によるメンテナンスは終了しています。
このプロジェクトはもともと、MCP による JFrog の機能を実証するための実験プロジェクトとして作成されたもので、JFrog による公式サポートや検証を受けたことはありません。今後、アップデート、バグ修正、セキュリティパッチは提供されません。
JFrog は現在、JFrog Platform とシームレスに統合できる、公式のセキュアなリモート MCP サーバーを提供しています。このマネージド MCP サーバーは JFrog がメンテナンスしており、セキュリティ、信頼性、サポートが強化された、今後推奨される唯一のサポート対象オプションです。
公式サーバーに移行してください:
機能
- リポジトリ管理:ローカル、リモート、仮想リポジトリの作成と管理
- ビルド追跡:ビルド情報の一覧表示と取得
- ランタイム監視:ランタイムクラスターと実行中のコンテナーイメージの表示
- Mission Control:関連付けられた JFrog Platform インスタンスの表示
- アーティファクト検索:強力な AQL クエリを実行して、アーティファクトとビルドを検索
- カタログとキュレーション:パッケージ情報、バージョン、脆弱性へのアクセス、キュレーションステータスの確認
- Xray:スキャン対象アーティファクトの概要にアクセスし、アーティファクトごとに重大度でグループ化
ツール
リポジトリ管理
-
check_jfrog_availability- JFrog プラットフォームが準備完了状態で、正常に動作しているか確認
- 戻り値:プラットフォームの準備状況
-
create_local_repository- Artifactory に新しいローカルリポジトリを作成
- 入力:
key(string):リポジトリキーrclass(string):リポジトリクラス("local" である必要があります)packageType(string):リポジトリのパッケージタイプdescription(optional string):リポジトリの説明projectKey(optional string):リポジトリの割り当て先プロジェクトキーenvironments(optional string[]):リポジトリに割り当てる環境
- 戻り値:作成されたリポジトリの詳細
-
create_remote_repository- 外部パッケージレジストリをプロキシするために、Artifactory に新しいリモートリポジトリを作成します
- 入力:
key(string):リポジトリキーrclass(string):リポジトリクラス("remote" である必要があります)packageType(string):リポジトリのパッケージタイプurl(string):リモートリポジトリの URLusername(省略可能な string):リモートリポジトリのユーザー名password(省略可能な string):リモートリポジトリのパスワードdescription(省略可能な string):リポジトリの説明projectKey(省略可能な string):リポジトリを割り当てるプロジェクトキーenvironments(省略可能な string[]):リポジトリを割り当てる環境- 特定のリポジトリ設定に関するその他多くの省略可能なパラメーター
- 戻り値:作成したリポジトリの詳細
-
create_virtual_repository- 複数のリポジトリを集約するために、Artifactory に新しい仮想リポジトリを作成します
- 入力:
key(string):リポジトリキーrclass(string):リポジトリクラス("virtual" である必要があります)packageType(string):リポジトリのパッケージタイプrepositories(string[]):仮想リポジトリに含めるリポジトリキーの一覧description(省略可能な string):リポジトリの説明projectKey(省略可能な string):リポジトリを割り当てるプロジェクトキーenvironments(省略可能な string[]):リポジトリを割り当てる環境- 特定のリポジトリ設定に関するその他の省略可能なパラメーター
- 戻り値:作成したリポジトリの詳細
-
list_repositories- オプションのフィルタリングを使用して、Artifactory 内のすべてのリポジトリを一覧表示します
- 入力:
type(省略可能な string):リポジトリをタイプでフィルタリングします(local、remote、virtual、federated、distribution)packageType(省略可能な string):リポジトリをパッケージタイプでフィルタリングしますproject(省略可能な string):リポジトリをプロジェクトキーでフィルタリングします
- 戻り値:フィルターに一致するリポジトリの一覧
-
set_folder_property- Artifactory 内のフォルダーにプロパティを設定します。必要に応じて再帰的に適用できます
- 入力:
folderPath(string):プロパティを設定するフォルダーのパスproperties(object):設定するプロパティのキーと値のペアrecursive(省略可能な boolean):サブフォルダーにもプロパティを再帰的に適用するかどうか
- 戻り値:操作結果
-
execute_aql_query- Artifactory Query Language(AQL)クエリを実行し、JFrog Artifactory 内のアーティファクト、ビルド、その他のエンティティを検索します
- 入力:
query(string):実行する AQL クエリです。AQL 構文に従う必要があります(例:items.find({"repo":"my-repo"}).include("name","path"))domain(省略可能な string):検索する主要なドメイン(items、builds、archive.entries、build.promotions、releases)transitive(省略可能な boolean):リモートリポジトリも検索するかどうかlimit(省略可能な number):返す結果の最大数offset(省略可能な number):スキップする結果の数include_fields(省略可能な string[]):結果に含めるフィールドsort_by(省略可能な string):結果の並べ替えに使用するフィールドsort_order(省略可能な string):並べ替え順(asc または desc)
- 戻り値:メタデータを含む検索結果
ビルド管理
-
list_jfrog_builds- JFrog プラットフォーム内のすべてのビルドの一覧を返します
- 戻り値:ビルドの一覧
-
get_specific_build- 名前を指定して、特定のビルドの詳細を取得します
- 入力:
buildName(string):取得するビルドの名前project(省略可能な string):ビルド検索の対象を指定するプロジェクトキー
- 戻り値:ビルドの詳細
ランタイム管理
10. `list_jfrog_runtime_clusters` - JFrog プラットフォーム内のすべてのランタイムクラスターの一覧を返します - 入力: - `limit`(省略可能な整数):返すクラスターの最大数 - `next_key`(省略可能な文字列):ページネーションで使用する次のキー - 戻り値:ランタイムクラスターの一覧-
get_jfrog_runtime_specific_cluster- ID を指定してランタイムクラスターを返します
- 入力:
clusterId(整数):取得するクラスターの ID
- 戻り値:クラスターの詳細
-
list_jfrog_running_images- ランタイムクラスター全体で実行中のすべてのコンテナイメージを、セキュリティと運用のステータスとともに一覧表示します
- 入力:
filters(省略可能な文字列):適用するフィルターnum_of_rows(省略可能な整数):返す行数page_num(省略可能な整数):ページ番号statistics(省略可能なブール値):統計情報を含めるかどうかtimePeriod(省略可能な文字列):クエリする期間
- 戻り値:実行中のイメージの一覧
アクセス制御
-
list_jfrog_environments- JFrog プラットフォーム内のすべての環境タイプとその詳細の一覧を取得します
- 入力:
- 戻り値:環境の一覧
-
list_jfrog_projects- JFrog プラットフォーム内のすべてのプロジェクトとその詳細の一覧を取得します
- 入力:
- 戻り値:プロジェクトの一覧
-
get_specific_project- JFrog プラットフォーム内の特定のプロジェクトに関する詳細情報を取得します
- 入力:
project_key(文字列):取得するプロジェクトの一意のキー
- 戻り値:プロジェクトの詳細
-
create_project- JFrog プラットフォームに新しいプロジェクトを作成します
- 入力:
project_key(文字列):プロジェクトの一意の識別子display_name(文字列):プロジェクトの表示名description(文字列):プロジェクトの説明admin_privileges(オブジェクト):プロジェクトの管理者権限storage_quota_bytes(数値):バイト単位のストレージクォータ(無制限の場合は -1)
- 戻り値:作成したプロジェクトの詳細
カタログとキュレーション
-
jfrog_get_package_info- ソフトウェアパッケージに関する公開情報を取得します
- 入力:
type(文字列):パッケージの種類(pypi、npm、maven、golang、nuget、huggingface、rubygems)name(文字列):パッケージリポジトリに表示されるパッケージ名version(省略可能な文字列):パッケージのバージョン(デフォルト:"latest")
- 戻り値:説明、最新バージョン、ライセンス、URL を含むパッケージ情報
-
jfrog_get_package_versions- 公開されているパッケージのバージョンと公開日の一覧を取得します
- 入力:
type(文字列):パッケージの種類(pypi、npm、maven、golang、nuget、huggingface、rubygems)name(文字列):パッケージリポジトリに表示されるパッケージ名
- 戻り値:公開日を含むパッケージバージョンの一覧
-
jfrog_get_package_version_vulnerabilities- オープンソースパッケージの特定のバージョンに影響する既知の脆弱性の一覧を取得します
- 入力:
type(文字列):パッケージの種類(pypi、npm、maven、golang、nuget、huggingface、rubygems)name(文字列):パッケージリポジトリに表示されるパッケージ名version(省略可能な文字列):パッケージのバージョン(デフォルト:"latest")pageSize(省略可能な数値):1 ページあたりに返す脆弱性の数(デフォルト:10)pageCount(省略可能な数値):返すページ数(デフォルト:1)
- 戻り値:指定したパッケージバージョンに影響する脆弱性の一覧
jfrog_get_package_curation_status- 特定のパッケージバージョンのキュレーションステータスを確認します
- 入力:
packageType(string):パッケージの種類(pypi、npm、maven、golang、nuget、huggingface、rubygems)packageName(string):パッケージリポジトリ上での表記どおりのパッケージ名packageVersion(string):パッケージリポジトリ上での表記どおりのパッケージバージョン
- 戻り値:キュレーションステータス(承認、ブロック、または判定不能)
Xray
jfrog_get_artifacts_summary- リポジトリまたはビルド内のアーティファクトの問題を、重大度(低、中、高、重大、不明)ごとに分類して件数をまとめます
- 入力:
paths(string array):集計対象のアーティファクトのパスの配列
- 戻り値:指定された配列内の各アーティファクトについて、重大度ごとの脆弱性件数に基づく概要と、問題の合計件数
セットアップ
Smithery 経由でインストールする
Smithery 経由で Claude Desktop に mcp-jfrog を自動的にインストールするには:
npx -y @smithery/cli install @jfrog/mcp-jfrog --client claude
前提条件
- Node.js v18 以降
- Docker(Docker デプロイを使用する場合は、Docker デプロイを参照)
- 適切な権限を持つ有効な JFrog プラットフォームインスタンス
- JFrog プラットフォームインスタンスでアクセストークンを作成および管理する権限
環境変数
JFROG_ACCESS_TOKEN:JFrog アクセストークン(必須)JFROG_URL:JFrog プラットフォームのベース URL(必須)TRANSPORT:使用するトランスポートモード。SSE トランスポートを有効にするには 'sse' を設定します(デフォルト:stdio)PORT:SSE トランスポートで使用するポート番号(デフォルト:8080)CORS_ORIGIN:SSE 接続で許可する CORS オリジン(デフォルト:'*')LOG_LEVEL:ログレベル:DEBUG、INFO、WARN、ERROR(デフォルト:INFO)MAX_RECONNECT_ATTEMPTS:SSE サーバーの最大再接続試行回数(デフォルト:5)RECONNECT_DELAY_MS:再接続試行間の基本待機時間(ミリ秒)(デフォルト:2000)
JFrog トークン(JFROG_ACCESS_TOKEN)
この MCP サーバーを使用するには、JFrog アクセストークンを作成するか、適切な権限を持つ ID トークンを使用する必要があります。
JFrog トークンの作成方法については、JFrog の公式ドキュメントを参照してください。
JFrog URL(JFROG_URL)
JFrog プラットフォームインスタンスの URL(例:https://acme.jfrog.io)
SSE トランスポートの機能
SSE トランスポートモードには、次の機能があります。
- 接続管理:各 SSE 接続は一意の ID で追跡されるため、クライアントは再接続を試みる際にも状態を維持できます。
- 構造化ログ:タイムスタンプ、重要度レベル、関連するコンテキスト情報を含む詳細なログを記録します。
- 接続の回復性:サーバーの起動に失敗した場合、指数バックオフで自動的に再接続を試みます。
- ヘルスエンドポイント:サーバーのステータス情報を返す
/healthエンドポイント。 - 接続追跡:アクティブな接続をリアルタイムで追跡し、統計情報を定期的にログに記録します。
- パフォーマンス指標:ツール操作と HTTP リクエストの実行時間を追跡します。
SSE モードを使用する場合:
- クライアントは
/sseエンドポイントに接続します。セッションを追跡するには、必要に応じてconnectionIdクエリパラメーターを指定します。 - クライアントのリクエストは、同じ
connectionIdをクエリパラメーターとして指定し、/messagesエンドポイントに送信します。 - サーバーは、確立された SSE 接続を通じてサーバー送信イベントで応答します。
接続 ID を指定したクライアント接続の例:
GET /sse?connectionId=client123
クライアントリクエストの例:
POST /messages?connectionId=client123
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "listTools",
"id": 1
}
ビルド方法
git clone を使用してリポジトリをローカルマシンにクローンし、プロジェクトディレクトリに移動します。
git clone [email protected]:jfrog/mcp-jfrog.git
cd mcp-jfrog
Docker イメージとしてビルドします。
docker build -t mcp/jfrog -f Dockerfile .
npm モジュールとしてビルドします。
npm i && npm run build
使用方法
Cursor で使用する
`~/.cursor/mcp.json` に次の内容を追加します。npm
{
"mcpServers": {
"MCP-JFrog": {
"command": "npm",
"args": [
"exec",
"-y",
"github:jfrog/mcp-jfrog"
],
"env": {
"JFROG_ACCESS_TOKEN": "ACCESS_TOKEN",
"JFROG_URL": "https://<YOUR_JFROG_INSTANCE_URL>"
}
}
},
"mcp-local-dev":{
"command": "node",
"args": [
"/<ABSOLUT_PATH_TO>/mcp-jfrog/dist/index.js"
],
"env": {
"JFROG_ACCESS_TOKEN": "<ACCESS_TOKEN>>",
"JFROG_URL": "<JFROG_URL>"
}
}
}
Docker
{
"mcpServers": {
"jfrog": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"JFROG_ACCESS_TOKEN",
"-e",
"JFROG_URL",
"mcp/jfrog"
],
"env": {
"JFROG_ACCESS_TOKEN": "<YOUR_TOKEN>",
"JFROG_URL": "https://your-instance.jfrog.io"
},
"serverUrl": "http://localhost:8080/sse"
}
}
}
SSE トランスポートモード
SSE トランスポートモードで JFrog MCP Server を使用する場合(Cursor のウェブビューなどのウェブインターフェースに便利です):
{
"mcpServers": {
"jfrog-sse": {
"command": "docker",
"args": [
"run",
"--rm",
"-p",
"8080:8080",
"-e",
"TRANSPORT=sse",
"-e",
"PORT=8080",
"-e",
"CORS_ORIGIN=*",
"-e",
"LOG_LEVEL=INFO",
"-e",
"MAX_RECONNECT_ATTEMPTS=5",
"-e",
"RECONNECT_DELAY_MS=2000",
"-e",
"JFROG_ACCESS_TOKEN",
"-e",
"JFROG_URL",
"mcp/jfrog"
],
"env": {
"JFROG_ACCESS_TOKEN": "<YOUR_TOKEN>",
"JFROG_URL": "https://your-instance.jfrog.io",
"serverUrl": "http://localhost:8080/sse"
}
}
}
}
注:SSE モードでは、SSE エンドポイントを指す serverUrl パラメーターを追加し、サーバーが使用するポートを公開する必要があります(-p 8080:8080)。
Claude Desktop で使用する
claude_desktop_config.json に次の内容を追加します。
Docker
{
"mcpServers": {
"jfrog": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"JFROG_ACCESS_TOKEN",
"-e",
"JFROG_URL",
"mcp/jfrog"
],
"env": {
"JFROG_ACCESS_TOKEN": "<YOUR_TOKEN>",
"JFROG_URL": "https://your-instance.jfrog.io" // Your JFrog platform URL
},
"serverUrl": "http://localhost:8080/sse"
}
}
}
npm
{
"mcpServers": {
"MCP-JFrog": {
"command": "npm",
"args": [
"exec",
"-y",
"github:jfrog/mcp-jfrog"
],
"env": {
"JFROG_ACCESS_TOKEN": "ACCESS_TOKEN",
"JFROG_URL": "https://<YOUR_JFROG_INSTANCE_URL>"
}
}
}
}
SSE トランスポートモード
SSE トランスポートを使用する Claude Desktop の場合:
{
"mcpServers": {
"jfrog-sse": {
"command": "docker",
"args": [
"run",
"--rm",
"-p",
"8080:8080",
"-e",
"TRANSPORT=sse",
"-e",
"PORT=8080",
"-e",
"CORS_ORIGIN=*",
"-e",
"LOG_LEVEL=INFO",
"-e",
"MAX_RECONNECT_ATTEMPTS=5",
"-e",
"RECONNECT_DELAY_MS=2000",
"-e",
"JFROG_ACCESS_TOKEN",
"-e",
"JFROG_URL",
"mcp/jfrog"
],
"env": {
"JFROG_ACCESS_TOKEN": "<YOUR_TOKEN>",
"JFROG_URL": "https://your-instance.jfrog.io",
"serverUrl": "http://localhost:8080/sse"
}
}
}
}
</details>
## License
This MCP server is licensed under the Apache License 2.0. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the Apache License 2.0. For more details, please see the LICENSE.md file in the project repository.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。