使用说明
⛔ 失望——JFrog MCP服务器(实验)
[!小心]
🚨 此项目已弃用,不再维护🚨
请勿将此存储库用于新的或现有的集成。
这个实验性的MCP服务器已经 被官方JFrog MCP服务器取代,由JFrog构建、维护和支持。官方服务器是安全的、远程托管的、生产就绪的,并接收持续的更新、错误修复和安全补丁。
👉 请改用官方的JFrog MCP服务器:
https://jfrog.com/help/r/jfrog-integrations-documentation/jfrog-mcp-server
不会向此存储库提供更多功能、修复程序或安全更新。以下内容仅供历史参考。
用于JFrog平台API的模型上下文协议(MCP)服务器,实现存储库管理、构建跟踪、发布生命周期管理等。
https://github.com/user-attachments/assets/aca3af2b-f294-41c8-8727-799a019a55b5
⚠️ 弃用通知
此项目已弃用,不再由JFrog维护。
它最初是作为一个实验项目创建的,旨在展示JFrog使用MCP的能力,从未得到JFrog的正式支持或验证。它将不会收到进一步的更新、错误修复或安全补丁。
JFrog现在提供 官方、安全和远程托管的MCP服务器 与JFrog平台无缝集成。托管MCP服务器由JFrog维护,是未来推荐和唯一支持的选项,提供增强的安全性、可靠性和支持。
请迁移到官方服务器:
特性
- 库管理:创建和管理本地、远程和虚拟存储库
- 构建跟踪:列出并检索构建信息
- 运行时监控:查看运行时集群和正在运行的容器映像
- 任务控制:查看关联的JFrog平台实例
- 文物搜索:执行强大的AQL查询以搜索工件和构建
- 目录和策展:访问包信息、版本、漏洞,并检查管理状态
- X射线:访问扫描工件摘要,按每个工件的严重程度分组
工具
Repository Management
-
check_jfrog_availability- 检查JFrog平台是否准备就绪并正常运行
- 返回:平台就绪状态
-
create_local_repository- 在Artifactory中创建新的本地存储库
- 输入:
key(string):存储库密钥rclass(string):存储库类(必须是“local”)packageType(string):存储库的包类型description(可选字符串):存储库描述projectKey(可选字符串):用于分配存储库的项目密钥environments(可选字符串[]):将存储库分配给的环境
- 返回:已创建存储库详细信息
-
create_remote_repository- 在Artifactory中创建一个新的远程存储库来代理外部包注册表
- 输入:
key(string):存储库密钥rclass(string):存储库类(必须是“remote”)packageType(string):存储库的包类型url(string):远程存储库的URLusername(可选字符串):远程存储库用户名password(可选字符串):远程存储库密码description(可选字符串):存储库描述projectKey(可选字符串):用于分配存储库的项目密钥environments(可选字符串[]):将存储库分配给的环境- 特定存储库配置的许多其他可选参数
- 返回:已创建存储库详细信息
-
create_virtual_repository- 在Artifactory中创建一个新的虚拟存储库,聚合多个存储库
- 输入:
key(string):存储库密钥rclass(string):存储库类(必须是“virtual”)packageType(string):存储库的包类型repositories(string[]):要包含在虚拟存储库中的存储库密钥列表description(可选字符串):存储库描述projectKey(可选字符串):用于分配存储库的项目密钥environments(可选字符串[]):将存储库分配给的环境- 特定存储库配置的其他可选参数
- 返回:已创建存储库详细信息
-
list_repositories- 列出Artifactory中的所有存储库,并可选择过滤
- 输入:
type(可选字符串):按类型(本地、远程、虚拟、联合、分发)筛选存储库packageType(可选字符串):按包类型筛选存储库project(可选字符串):按项目键筛选存储库
- 返回:与筛选器匹配的存储库列表
-
set_folder_property- 使用可选的递归应用程序在Artifactory中设置文件夹的属性
- 输入:
folderPath(string):应设置属性的文件夹的路径properties(object):要设置的属性的键值对recursive(可选布尔值):是否将属性递归应用于子文件夹
- 返回:运算结果
-
execute_aql_query- 执行工件查询语言(AQL)查询,在JFrog工件库中搜索工件、构建或其他实体
- 输入:
query(string):要执行的AQL查询。必须遵循AQL语法(例如,items.find({“repo”:“my repo”}).include(“name”,“path”))domain(可选字符串):要搜索的主域(项目、构建、archive.entries、构建促销、发布)transitive(可选布尔值):是否在远程存储库中搜索limit(可选数字):返回的最大结果数offset(可选数字):要跳过的结果数include_fields(可选字符串[]):要包含在结果中的字段sort_by(可选字符串):用于对结果进行排序的字段sort_order(可选字符串):排序顺序(asc或desc)
- 返回:包含元数据的搜索结果
Build Management
-
list_jfrog_builds- 返回JFrog平台中所有版本的列表
- 返回:构建列表
-
get_specific_build- 按名称获取特定版本的详细信息
- 输入:
buildName(string):要检索的版本名称project(可选字符串):用于确定生成搜索范围的项目密钥
- 返回:构建详细信息
Runtime Management
-
list_jfrog_runtime_clusters- 返回JFrog平台中所有运行时集群的列表
- 输入:
limit(可选整数):要返回的最大簇数next_key(可选字符串):用于分页的下一个键
- 返回:运行时集群列表
-
get_jfrog_runtime_specific_cluster- 按ID返回运行时集群
- 输入:
clusterId(integer):要检索的集群的ID
- 返回:群集详细信息
-
list_jfrog_running_images- 列出运行时集群中所有正在运行的容器映像及其安全和操作状态
- 输入:
filters(可选字符串):要应用的筛选器num_of_rows(可选整数):要返回的行数page_num(可选整数):页码statistics(可选布尔值):是否包含统计信息timePeriod(可选字符串):要查询的时间段
- 返回:正在运行的图像列表
Access Control
-
list_jfrog_environments- 获取JFrog平台中所有环境类型的列表及其详细信息
- 输入:
- 返回:环境列表
-
list_jfrog_projects- 获取JFrog平台中所有项目的列表及其详细信息
- 输入:
- 返回:项目列表
-
get_specific_project- 获取JFrog平台中特定项目的详细信息
- 输入:
project_key(string):要检索的项目的唯一密钥
- 返回:项目详细信息
-
create_project- 在JFrog平台中创建新项目
- 输入:
project_key(string):项目的唯一标识符display_name(string):项目的显示名称description(string):项目描述admin_privileges(object):项目的管理权限storage_quota_bytes(number):以字节为单位的存储配额(-1表示无限制)
- 返回:已创建项目详细信息
Catalog and Curation
-
jfrog_get_package_info- 获取有关软件包的公开信息
- 输入:
type(string):包的类型(pypi、npm、maven、golang、nuget、huggingface、rubygems)name(string):包存储库中显示的包的名称version(可选字符串):包的版本(默认:“latest”)
- 返回:包信息,包括描述、最新版本、许可证和URL
-
jfrog_get_package_versions- 获取包含发布日期的公开可用软件包的版本列表
- 输入:
type(string):包的类型(pypi、npm、maven、golang、nuget、huggingface、rubygems)name(string):包存储库中显示的包的名称
- 返回:包含发布日期的软件包版本列表
-
jfrog_get_package_version_vulnerabilities- 获取影响特定版本开源软件包的已知漏洞列表
- 输入:
type(string):包的类型(pypi、npm、maven、golang、nuget、huggingface、rubygems)name(string):包存储库中显示的包的名称version(可选字符串):包的版本(默认:“latest”)pageSize(可选数字):每页返回的漏洞数(默认值:10)pageCount(可选数字):要返回的页数(默认值:1)
- 返回:影响指定包版本的漏洞列表
-
jfrog_get_vulnerability_info- 获取有关特定漏洞的详细信息,包括受影响的软件包和版本
- 输入:
cve_id(string):要查找的CVE ID或漏洞标识符pageSize(可选数字):每页返回的漏洞数(默认值: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(字符串数组):从中创建摘要的工件路径数组
- 返回值:基于所提供数组中每个工件的每个严重性的漏洞计数加上总问题数的摘要
设置
通过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:日志记录级别:调试、信息、警告、错误(默认值:信息)MAX_RECONNECT_ATTEMPTS:SSE服务器的最大重新连接尝试次数(默认值:5)RECONNECT_DELAY_MS:重新连接尝试之间的基本延迟(毫秒)(默认值:2000)
JFrog代币(JFROG_ACCESS_TOKEN)
要使用此MCP服务器,您需要创建JFrog访问令牌或使用具有适当权限的身份令牌:
有关如何创建JFrog令牌的信息,请参阅JFrog官方文档:
JFrog 网址JFROG_URL)
您的JFrog平台实例URL(例如。https://acme.jfrog.io)
SSE运输特征
SSE运输模式包括以下特征:
- 连接管理:每个SSE连接都使用一个唯一的ID进行跟踪,允许客户端在重新连接尝试中保持状态。
- 结构化日志记录:带有时间戳、严重性级别和相关上下文信息的详细日志。
- 连接弹性:如果服务器无法启动,则会尝试以指数回退的方式自动重新连接。
- 健康端点A.
/health返回服务器状态信息的端点。 - 连接跟踪:通过定期统计日志记录实时跟踪活动连接。
- 性能指标:工具操作和HTTP请求的执行时间跟踪。
使用SSE模式时:
- 客户端应连接到
/sse端点,可选地提供connectionId会话跟踪的查询参数。 - 客户请求应发送至
/messages端点相同connectionId作为查询参数。 - 服务器将通过已建立的SSE连接以服务器发送的事件进行响应。
具有连接ID的客户端连接示例:
GET /sse?connectionId=client123
客户端请求示例:
POST /messages?connectionId=client123
Content-Type: application/json
{
"jsonrpc": "2.0",
"method": "listTools",
"id": 1
}
如何构建
使用以下命令将仓库克隆到本地计算机 git clone 和 cd 进入项目目录:
git clone git@github.com:jfrog/mcp-jfrog.git
cd mcp-jfrog
构建为Docker镜像:
docker build -t mcp/jfrog -f Dockerfile .
构建为npm模块:
npm i && npm run build
用法
Use with Cursor
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>"
}
}
}
码头工人
{
"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服务器(适用于Cursor的web视图等web界面):
{
"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模式,您需要添加 serverUrl 指向SSE端点的参数,并公开服务器使用的端口(-p 8080:8080)。
Use with Claude Desktop
将以下内容添加到您的 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"
}
}
}
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.
