JFrog MCP Server
平台与服务by jfrog
通过集成式 MCP server 管理 JFrog 仓库、追踪 builds 与发布生命周期,使用强大的 AQL 查询搜索 artifacts,并有效监控 runtime clusters。
把 JFrog 仓库管理、构建发布追踪和集群监控串成一条线,配合集成式 MCP Server 与 AQL 查询,制品治理效率明显更高。
什么是 JFrog MCP Server?
通过集成式 MCP server 管理 JFrog 仓库、追踪 builds 与发布生命周期,使用强大的 AQL 查询搜索 artifacts,并有效监控 runtime clusters。
核心功能 (31 个工具)
jfrog_check_availabilityCheck if JFrog platform is ready and functioning or not
jfrog_create_local_repositoryCreate a new local repository in artifactroy
jfrog_create_remote_repositoryCreate a new remote repository in Artifactory to proxy external package registries
jfrog_create_virtual_repositoryCreate a new virtual repository in Artifactory that aggregates multiple repositories
jfrog_set_folder_propertySet properties on a folder in Artifactory, with optional recursive application
jfrog_list_repositoriesList all repositories in Artifactory with optional filtering by type, package type, and project
jfrog_list_buildsreturn a list of all my build in the jfrog platform
jfrog_get_specific_buildGet details for a specific build by name, optionally scoped to a project
jfrog_list_runtime_clustersreturn a list of all my runtime clusters in the jfrog platform
jfrog_get_runtime_specific_clusterreturn a runtime cluster by id
jfrog_list_running_imagesList all running container images across runtime clusters with their security and operational status
jfrog_list_environmentsGet a list of all environments types (e.g. dev, prod, etc.) in the JFrog platform with their details
jfrog_list_projectsGet a list of all projects in the JFrog platform with their details
jfrog_create_projectCreate a new project in the JFrog platform
jfrog_get_specific_projectGet detailed information about a specific project in the JFrog platform
jfrog_execute_aql_queryExecute an Artifactory Query Language (AQL) query to search for artifacts, builds, or other entities in JFrog Artifactory. AQL is a powerful query language for searching and filtering artifacts in Artifactory repositories. It supports complex criteria, sorting, pagination, and more.
jfrog_get_package_infoUseful for when you need to get publicly available information about a software package. it will provide you with the following information on it, if available in public sources: a short description of the package, its latest published version, the software license this software is distributed under, along with urls of its version control system, its homepage and whether it is known to be a malicious package (in any version).
jfrog_get_package_versionsUseful for when you need to get a list of versions of a publicly available package. it can tell you each version's publication date. Can also filter based on version vulnerability status.
jfrog_get_package_version_vulnerabilitiesUseful for when you need the list of known vulnerabilities affecting a specific version of an open source package.
jfrog_get_vulnerability_infoUseful for when you need to get a specific vulnerability information, including its affected packages and versions.
jfrog_get_package_curation_statusUseful for checking the curation status of a specific package version. Returns one of the following statuses: approved, blocked, inconclusive.
jfrog_list_permission_targetsGet a list of all permission targets in the JFrog platform
jfrog_get_permission_targetGet detailed information about a specific permission target
jfrog_create_permission_targetCreate a new permission target in the JFrog platform
jfrog_update_permission_targetUpdate an existing permission target in the JFrog platform
jfrog_delete_permission_targetDelete a permission target from the JFrog platform
jfrog_get_permission_resourceGet details of a specific resource type within a permission target
jfrog_update_permission_resourceUpdate a specific resource type within a permission target
jfrog_replace_permission_resourceReplace a specific resource type within a permission target
jfrog_delete_permission_resourceDelete a specific resource type from a permission target
jfrog_get_artifacts_summaryGet the summary of artifacts, one or many
README
JFrog MCP Server (🧪 Experimental)
Model Context Protocol (MCP) Server for the JFrog Platform API, enabling repository management, build tracking, release lifecycle management, and more.
https://github.com/user-attachments/assets/aca3af2b-f294-41c8-8727-799a019a55b5
Disclaimer
This is an experimental project intended to demonstrate JFrog's capabilities with MCP. It is not officially supported or verified by JFrog.
Update (2025):
JFrog now provides an official, secure, and remotely hosted MCP server for seamless integration with the JFrog Platform.
The managed MCP server is maintained by JFrog and is recommended for production use, offering enhanced security, reliability, and support.
Learn more and get started here:
👉 JFrog MCP Server Documentation
Features
- Repository Management: Create and manage local, remote, and virtual repositories
- Build Tracking: List and retrieve build information
- Runtime Monitoring: View runtime clusters and running container images
- Mission Control: View associated JFrog Platform instances
- Artifact Search: Execute powerful AQL queries to search for artifacts and builds
- Catalog and Curation: Access package information, versions, vulnerabilities, and check curation status
- Xray: Access scan artifacts summary, group by severity per artifact
Tools
<details> <summary><strong>Repository Management</strong></summary>-
check_jfrog_availability- Check if JFrog platform is ready and functioning
- Returns: Platform readiness status
-
create_local_repository- Create a new local repository in Artifactory
- Inputs:
key(string): Repository keyrclass(string): Repository class (must be "local")packageType(string): Package type of the repositorydescription(optional string): Repository descriptionprojectKey(optional string): Project key to assign the repository toenvironments(optional string[]): Environments to assign the repository to
- Returns: Created repository details
-
create_remote_repository- Create a new remote repository in Artifactory to proxy external package registries
- Inputs:
key(string): Repository keyrclass(string): Repository class (must be "remote")packageType(string): Package type of the repositoryurl(string): URL to the remote repositoryusername(optional string): Remote repository usernamepassword(optional string): Remote repository passworddescription(optional string): Repository descriptionprojectKey(optional string): Project key to assign the repository toenvironments(optional string[]): Environments to assign the repository to- Many other optional parameters for specific repository configurations
- Returns: Created repository details
-
create_virtual_repository- Create a new virtual repository in Artifactory that aggregates multiple repositories
- Inputs:
key(string): Repository keyrclass(string): Repository class (must be "virtual")packageType(string): Package type of the repositoryrepositories(string[]): List of repository keys to include in the virtual repositorydescription(optional string): Repository descriptionprojectKey(optional string): Project key to assign the repository toenvironments(optional string[]): Environments to assign the repository to- Other optional parameters for specific repository configurations
- Returns: Created repository details
-
list_repositories- List all repositories in Artifactory with optional filtering
- Inputs:
type(optional string): Filter repositories by type (local, remote, virtual, federated, distribution)packageType(optional string): Filter repositories by package typeproject(optional string): Filter repositories by project key
- Returns: List of repositories matching the filters
-
set_folder_property- Set properties on a folder in Artifactory, with optional recursive application
- Inputs:
folderPath(string): Path to the folder where properties should be setproperties(object): Key-value pairs of properties to setrecursive(optional boolean): Whether to apply properties recursively to sub-folders
- Returns: Operation result
-
execute_aql_query- Execute an Artifactory Query Language (AQL) query to search for artifacts, builds, or other entities in JFrog Artifactory
- Inputs:
query(string): The AQL query to execute. Must follow AQL syntax (e.g., items.find({"repo":"my-repo"}).include("name","path"))domain(optional string): The primary domain to search in (items, builds, archive.entries, build.promotions, releases)transitive(optional boolean): Whether to search in remote repositorieslimit(optional number): Maximum number of results to returnoffset(optional number): Number of results to skipinclude_fields(optional string[]): Fields to include in the resultssort_by(optional string): Field to sort results bysort_order(optional string): Sort order (asc or desc)
- Returns: Search results with metadata
-
list_jfrog_builds- Return a list of all builds in the JFrog platform
- Returns: List of builds
-
get_specific_build- Get details for a specific build by name
- Inputs:
buildName(string): Name of the build to retrieveproject(optional string): Project key to scope the build search
- Returns: Build details
-
list_jfrog_runtime_clusters- Return a list of all runtime clusters in the JFrog platform
- Inputs:
limit(optional integer): The maximum number of clusters to returnnext_key(optional string): The next key to use for pagination
- Returns: List of runtime clusters
-
get_jfrog_runtime_specific_cluster- Return a runtime cluster by ID
- Inputs:
clusterId(integer): The ID of the cluster to retrieve
- Returns: Cluster details
-
list_jfrog_running_images- List all running container images across runtime clusters with their security and operational status
- Inputs:
filters(optional string): Filters to applynum_of_rows(optional integer): Number of rows to returnpage_num(optional integer): Page numberstatistics(optional boolean): Whether to include statisticstimePeriod(optional string): Time period to query
- Returns: List of running images
-
list_jfrog_environments- Get a list of all environments types in the JFrog platform with their details
- Inputs:
- Returns: List of environments
-
list_jfrog_projects- Get a list of all projects in the JFrog platform with their details
- Inputs:
- Returns: List of projects
-
get_specific_project- Get detailed information about a specific project in the JFrog platform
- Inputs:
project_key(string): The unique key of the project to retrieve
- Returns: Project details
-
create_project- Create a new project in the JFrog platform
- Inputs:
project_key(string): Unique identifier for the projectdisplay_name(string): Display name of the projectdescription(string): Description of the projectadmin_privileges(object): Administrative privileges for the projectstorage_quota_bytes(number): Storage quota in bytes (-1 for unlimited)
- Returns: Created project details
-
jfrog_get_package_info- Get publicly available information about a software package
- Inputs:
type(string): The type of package (pypi, npm, maven, golang, nuget, huggingface, rubygems)name(string): The name of the package, as it appears in the package repositoryversion(optional string): The version of the package (default: "latest")
- Returns: Package information including description, latest version, license, and URLs
-
jfrog_get_package_versions- Get a list of versions of a publicly available package with publication dates
- Inputs:
type(string): The type of package (pypi, npm, maven, golang, nuget, huggingface, rubygems)name(string): The name of the package, as it appears in the package repository
- Returns: List of package versions with publication dates
-
jfrog_get_package_version_vulnerabilities- Get a list of known vulnerabilities affecting a specific version of an open source package
- Inputs:
type(string): The type of package (pypi, npm, maven, golang, nuget, huggingface, rubygems)name(string): The name of the package, as it appears in the package repositoryversion(optional string): The version of the package (default: "latest")pageSize(optional number): Number of vulnerabilities to return per page (default: 10)pageCount(optional number): Number of pages to return (default: 1)
- Returns: List of vulnerabilities affecting the specified package version
-
jfrog_get_vulnerability_info- Get detailed information about a specific vulnerability, including affected packages and versions
- Inputs:
cve_id(string): The CVE ID or vulnerability identifier to look uppageSize(optional number): Number of vulnerabilities to return per page (default: 10)pageCount(optional number): Number of pages to return (default: 1)
- Returns: Detailed vulnerability information and affected packages
-
jfrog_get_package_curation_status- Check the curation status of a specific package version
- Inputs:
packageType(string): The type of package (pypi, npm, maven, golang, nuget, huggingface, rubygems)packageName(string): The name of the package, as it appears in the package repositorypackageVersion(string): The version of the package, as it appears in the package repository
- Returns: Curation status (approved, blocked, or inconclusive)
jfrog_get_artifacts_summary- Get artifacts issues summary in a repository or build, categorized and counted by severity (Low, Medium, High, Critical, Unkown)
- Inputs:
paths(string array): An array of paths to the artifacts from which to create the summary from
- Returns: A summary based on vulnerability count per severity for each artifact in the provided array plus the total issues
Setup
Installing via Smithery
To install mcp-jfrog for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @jfrog/mcp-jfrog --client claude
Prerequisites
- Node.js v18 or higher
- Docker (if using Docker deployment, See Docker Deployment )
- A valid JFrog platform instance with appropriate permissions
- Access to create and manage access tokens in your JFrog platform instance
Environment Variables
JFROG_ACCESS_TOKEN: Your JFrog access token (required)JFROG_URL: Base URL for your JFrog platform (required)TRANSPORT: Transport mode to use, set to 'sse' to enable SSE transport (default: stdio)PORT: Port number to use for SSE transport (default: 8080)CORS_ORIGIN: CORS origin allowed for SSE connections (default: '*')LOG_LEVEL: Logging level: DEBUG, INFO, WARN, ERROR (default: INFO)MAX_RECONNECT_ATTEMPTS: Maximum number of reconnection attempts for SSE server (default: 5)RECONNECT_DELAY_MS: Base delay in milliseconds between reconnection attempts (default: 2000)
JFrog Token (JFROG_ACCESS_TOKEN)
To use this MCP server, you need to create a JFrog Access Token or use an identity token with appropriate permissions:
For information on how to create a JFrog Token, please refer to the JFrog official documentations:
JFrog URL (JFROG_URL)
Your JFrog platform instance URL (e.g. https://acme.jfrog.io)
SSE Transport Features
The SSE transport mode includes the following features:
- Connection Management: Each SSE connection is tracked with a unique ID, allowing clients to maintain state across reconnection attempts.
- Structured Logging: Detailed logs with timestamps, severity levels, and relevant contextual information.
- Connection Resilience: Automatic reconnection attempts with exponential backoff if the server fails to start.
- Health Endpoint: A
/healthendpoint that returns server status information. - Connection Tracking: Real-time tracking of active connections with periodic statistics logging.
- Performance Metrics: Execution time tracking for tool operations and HTTP requests.
When using SSE mode:
- Clients should connect to the
/sseendpoint, optionally providing aconnectionIdquery parameter for session tracking. - Client requests should be sent to the
/messagesendpoint with the sameconnectionIdas a query parameter. - The server will respond with server-sent events through the established SSE connection.
Example client connection with connection ID:
GET /sse?connectionId=client123
Example client request:
POST /messages?connectionId=client123
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "listTools",
"id": 1
}
How to build
Clone the repo to your local machine using git clone and cd into the project directory:
git clone git@github.com:jfrog/mcp-jfrog.git
cd mcp-jfrog
Build as a Docker image:
docker build -t mcp/jfrog -f Dockerfile .
Build as an npm module:
npm i && npm run build
Usage
<details> <summary><strong>Use with Cursor</strong></summary> Add the following to your `~/.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 Transport Mode
To use the JFrog MCP Server with SSE transport mode (useful for web interfaces like Cursor's webview):
{
"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"
}
}
}
}
Note: For SSE mode, you need to add the serverUrl parameter pointing to your SSE endpoint, and expose the port used by the server (-p 8080:8080).
Add the following to your 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 Transport Mode
For Claude Desktop with SSE transport:
{
"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.
常见问题
JFrog MCP Server 是什么?
通过集成式 MCP server 管理 JFrog 仓库、追踪 builds 与发布生命周期,使用强大的 AQL 查询搜索 artifacts,并有效监控 runtime clusters。
JFrog MCP Server 提供哪些工具?
提供 31 个工具,包括 jfrog_check_availability、jfrog_create_local_repository、jfrog_create_remote_repository 等。
相关 Skills
MCP构建
by anthropics
聚焦高质量 MCP Server 开发,覆盖协议研究、工具设计、错误处理与传输选型,适合用 FastMCP 或 MCP SDK 对接外部 API、封装服务能力。
✎ 想让 LLM 稳定调用外部 API,就用 MCP构建:从 Python 到 Node 都有成熟指引,帮你更快做出高质量 MCP 服务器。
Slack动图
by anthropics
面向Slack的动图制作Skill,内置emoji/消息GIF的尺寸、帧率和色彩约束、校验与优化流程,适合把创意或上传图片快速做成可直接发送的Slack动画。
✎ 帮你快速做出适配 Slack 的动图,内置约束规则和校验工具,少踩上传与播放坑,做表情包和演示都更省心。
接口设计评审
by alirezarezvani
审查 REST API 设计是否符合行业规范,自动检查命名、HTTP 方法、状态码与文档覆盖,识别破坏性变更并给出设计评分,适合评审接口方案和版本迭代前把关。
✎ 做API和架构方案时,它能帮你提前揪出接口设计问题并对齐最佳实践,评审视角系统,团队协作更省心。
相关 MCP Server
Slack 消息
编辑精选by Anthropic
Slack 是让 AI 助手直接读写你的 Slack 频道和消息的 MCP 服务器。
✎ 这个服务器解决了团队协作中需要 AI 实时获取 Slack 信息的痛点,特别适合开发团队让 Claude 帮忙汇总频道讨论或发送通知。不过,它目前只是参考实现,文档有限,不建议在生产环境直接使用——更适合开发者学习 MCP 如何集成第三方服务。
by netdata
io.github.netdata/mcp-server 是让 AI 助手实时监控服务器指标和日志的 MCP 服务器。
✎ 这个工具解决了运维人员需要手动检查系统状态的痛点,最适合 DevOps 团队让 Claude 自动分析性能数据。不过,它依赖 NetData 的现有部署,如果你没用过这个监控平台,得先花时间配置。
by d4vinci
Scrapling MCP Server 是专为现代网页设计的智能爬虫工具,支持绕过 Cloudflare 等反爬机制。
✎ 这个工具解决了爬取动态网页和反爬网站时的头疼问题,特别适合需要批量采集电商价格或新闻数据的开发者。不过,它依赖外部浏览器引擎,资源消耗较大,不适合轻量级任务。