by jfrog
Enables repository creation and management, build tracking, runtime monitoring, vulnerability analysis, and package curation for the JFrog Platform through the Model Context Protocol.
Provides a set of MCP tools that interact with JFrog Artifactory, Xray, Distribution, and Runtime services, allowing automation of repository lifecycle, build inspection, artifact security summarisation, and open‑source package lookup.
JFROG_ACCESS_TOKEN
and JFROG_URL
.TRANSPORT=sse
).Q: Which JFrog permissions are required? A: The access token must have repository‑admin, build‑read, runtime‑read, and Xray‑read scopes.
Q: Can I run the server in production? A: This repository is experimental. For production, use the officially managed JFrog MCP Server offered by JFrog.
Q: How do I enable SSE mode?
A: Set TRANSPORT=sse
, expose a port (default 8080), and configure the client’s serverUrl
to http://localhost:8080/sse
.
Q: Is Docker required?
A: No. You can run the server directly with Node.js (npm run build && node dist/index.js
) or via the npx command.
Q: Where can I find the full list of tool methods? A: All methods are documented in the README under the Tools sections.
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
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.
This 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
check_jfrog_availability
create_local_repository
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 tocreate_remote_repository
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 tocreate_virtual_repository
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 tolist_repositories
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 keyset_folder_property
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-foldersexecute_aql_query
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)list_jfrog_builds
get_specific_build
buildName
(string): Name of the build to retrieveproject
(optional string): Project key to scope the build searchlist_jfrog_runtime_clusters
limit
(optional integer): The maximum number of clusters to returnnext_key
(optional string): The next key to use for paginationget_jfrog_runtime_specific_cluster
clusterId
(integer): The ID of the cluster to retrievelist_jfrog_running_images
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 querylist_jfrog_environments
list_jfrog_projects
get_specific_project
project_key
(string): The unique key of the project to retrievecreate_project
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)jfrog_get_package_info
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")jfrog_get_package_versions
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 repositoryjfrog_get_package_version_vulnerabilities
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)jfrog_get_vulnerability_info
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)jfrog_get_package_curation_status
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 repositoryjfrog_get_artifacts_summary
paths
(string array): An array of paths to the artifacts from which to create the summary fromTo install mcp-jfrog for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @jfrog/mcp-jfrog --client claude
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_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
)Your JFrog platform instance URL (e.g. https://acme.jfrog.io)
The SSE transport mode includes the following features:
/health
endpoint that returns server status information.When using SSE mode:
/sse
endpoint, optionally providing a connectionId
query parameter for session tracking./messages
endpoint with the same connectionId
as a query parameter.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
}
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
{
"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>"
}
}
}
{
"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"
}
}
}
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
:
{
"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"
}
}
}
{
"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>"
}
}
}
}
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.
Please log in to share your review and rating for this MCP.
{ "mcpServers": { "jfrog": { "command": "npx", "args": [ "-y", "github:jfrog/mcp-jfrog" ], "env": { "JFROG_ACCESS_TOKEN": "<YOUR_ACCESS_TOKEN>", "JFROG_URL": "<YOUR_JFROG_URL>" } } } }
Discover more MCP servers with similar functionality and use cases
by zed-industries
Provides real-time collaborative editing powered by Rust, enabling developers to edit code instantly across machines with a responsive, GPU-accelerated UI.
by cline
Provides autonomous coding assistance directly in the IDE, enabling file creation, editing, terminal command execution, browser interactions, and tool extension with user approval at each step.
by continuedev
Provides continuous AI assistance across IDEs, terminals, and CI pipelines, offering agents, chat, inline editing, and autocomplete to accelerate software development.
by github
Enables AI agents, assistants, and chatbots to interact with GitHub via natural‑language commands, providing read‑write access to repositories, issues, pull requests, workflows, security data and team activity.
by block
Automates engineering tasks by installing, executing, editing, and testing code using any large language model, providing end‑to‑end project building, debugging, workflow orchestration, and external API interaction.
by RooCodeInc
An autonomous coding agent that lives inside VS Code, capable of generating, refactoring, debugging code, managing files, running terminal commands, controlling a browser, and adapting its behavior through custom modes and instructions.
by lastmile-ai
A lightweight, composable framework for building AI agents using Model Context Protocol and simple workflow patterns.
by firebase
Provides a command‑line interface to manage, test, and deploy Firebase projects, covering hosting, databases, authentication, cloud functions, extensions, and CI/CD workflows.
by gptme
Empowers large language models to act as personal AI assistants directly inside the terminal, providing capabilities such as code execution, file manipulation, web browsing, vision, and interactive tool usage.