Сервер JFrog MCP (🧪 Экспериментальный)
Сервер протокола контекста модели (MCP) для API платформы JFrog, обеспечивающий управление репозиторием, отслеживание сборок, управление жизненным циклом релизов и многое другое.
https://github.com/user-attachments/assets/aca3af2b-f294-41c8-8727-799a019a55b5
Отказ от ответственности
Это экспериментальный проект, призванный продемонстрировать возможности JFrog с MCP. Он официально не поддерживается и не проверяется JFrog.
Related MCP server: Foundry MCP Project
Функции
Управление репозиториями : создание и управление локальными, удаленными и виртуальными репозиториями.
Отслеживание сборки : список и извлечение информации о сборке
Мониторинг выполнения : просмотр кластеров выполнения и запущенных образов контейнеров.
Mission Control : просмотр связанных экземпляров платформы JFrog
Поиск артефактов : выполнение эффективных AQL-запросов для поиска артефактов и сборок.
Каталог и курирование : доступ к информации о пакете, версиям, уязвимостям и проверка статуса курирования.
Рентген : сводка артефактов сканирования, группировка по степени серьезности каждого артефакта
Инструменты
check_jfrog_availabilityПроверьте готовность и работоспособность платформы JFrog
Возврат: Статус готовности платформы
create_local_repositoryСоздайте новый локальный репозиторий в Artifactory
Входные данные:
key(строка): Ключ репозиторияrclass(строка): Класс репозитория (должен быть «локальным»)packageType(string): Тип пакета репозиторияdescription(необязательная строка): Описание репозиторияprojectKey(необязательная строка): ключ проекта, которому будет назначен репозиторий.environments(необязательно string[]): среды, в которые следует назначить репозиторий
Возвращает: Созданные данные репозитория
create_remote_repositoryСоздайте новый удаленный репозиторий в Artifactory для прокси-сервера внешних реестров пакетов.
Входные данные:
key(строка): Ключ репозиторияrclass(строка): Класс репозитория (должен быть «удалённым»)packageType(string): Тип пакета репозиторияurl(строка): URL-адрес удаленного репозиторияusername(необязательная строка): имя пользователя удаленного репозиторияpassword(необязательная строка): пароль удаленного репозиторияdescription(необязательная строка): Описание репозиторияprojectKey(необязательная строка): ключ проекта, которому будет назначен репозиторий.environments(необязательно string[]): среды, в которые следует назначить репозиторийМножество других дополнительных параметров для определенных конфигураций репозитория.
Возвращает: Созданные данные репозитория
create_virtual_repositoryСоздайте новый виртуальный репозиторий в Artifactory, который объединяет несколько репозиториев.
Входные данные:
key(строка): Ключ репозиторияrclass(строка): Класс репозитория (должен быть «виртуальным»)packageType(string): Тип пакета репозиторияrepositories(string[]): Список ключей репозитория для включения в виртуальный репозиторийdescription(необязательная строка): Описание репозиторияprojectKey(необязательная строка): ключ проекта, которому будет назначен репозиторий.environments(необязательно string[]): среды, в которые следует назначить репозиторийДругие необязательные параметры для определенных конфигураций репозитория
Возвращает: Созданные данные репозитория
list_repositoriesСписок всех репозиториев в Artifactory с возможностью фильтрации
Входные данные:
type(необязательная строка): Фильтрация репозиториев по типу (локальный, удаленный, виртуальный, федеративный, дистрибутивный)packageType(необязательная строка): Фильтрация репозиториев по типу пакетаproject(необязательная строка): Фильтрация репозиториев по ключу проекта
Возвращает: Список репозиториев, соответствующих фильтрам.
set_folder_propertyУстановка свойств папки в Artifactory с возможностью рекурсивного применения
Входные данные:
folderPath(строка): Путь к папке, в которой следует задать свойства.properties(объект): пары «ключ-значение» свойств для установкиrecursive(необязательно логическое значение): следует ли применять свойства рекурсивно к подпапкам
Возврат: Результат операции
execute_aql_queryВыполнить запрос Artifactory Query Language (AQL) для поиска артефактов, сборок или других сущностей в JFrog Artifactory
Входные данные:
query(string): AQL-запрос для выполнения. Должен соответствовать синтаксису AQL (например, items.find({"repo":"my-repo"}).include("name","path"))domain(необязательная строка): основной домен для поиска (элементы, сборки, архивные записи, сборки.рекламные акции, релизы)transitive(необязательно логический): следует ли искать в удаленных репозиторияхlimit(необязательное число): максимальное количество возвращаемых результатовoffset(необязательное число): количество результатов, которые нужно пропуститьinclude_fields(необязательно string[]): поля для включения в результатыsort_by(необязательная строка): Поле для сортировки результатов.sort_order(необязательная строка): порядок сортировки (по возрастанию или по убыванию)
Возвращает: Результаты поиска с метаданными
list_jfrog_buildsВерните список всех сборок на платформе JFrog.
Возврат: Список сборок
get_specific_buildПолучить подробную информацию о конкретной сборке по названию
Входные данные:
buildName(строка): Имя сборки для извлеченияproject(необязательная строка): ключ проекта для определения области поиска сборки
Возврат: Подробности сборки
list_jfrog_runtime_clusters
Возврат списка всех кластеров времени выполнения на платформе JFrog
Входные данные:
limit(необязательное целое число): максимальное количество возвращаемых кластеровnext_key(необязательная строка): следующий ключ для использования при разбиении на страницы.
Возвращает: список кластеров времени выполнения.
get_jfrog_runtime_specific_cluster
Возврат кластера времени выполнения по идентификатору
Входные данные:
clusterId(целое число): идентификатор кластера, который нужно получить.
Возвращает: сведения о кластере
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(string): уникальный ключ проекта для извлечения
Возврат: Подробности проекта
create_project
Создайте новый проект на платформе JFrog
Входные данные:
project_key(строка): Уникальный идентификатор проектаdisplay_name(string): Отображаемое имя проектаdescription(строка): Описание проектаadmin_privileges(объект): Административные привилегии для проектаstorage_quota_bytes(число): Квота хранения в байтах (-1 для неограниченного)
Возвращает: Созданные детали проекта
jfrog_get_package_info
Получите общедоступную информацию о программном пакете
Входные данные:
type(строка): тип пакета (pypi, npm, maven, golang, nuget, huggingface, rubygems)name(строка): имя пакета, как оно отображается в репозитории пакетов.version(необязательная строка): версия пакета (по умолчанию: «последняя»).
Возврат: информация о пакете, включая описание, последнюю версию, лицензию и 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(необязательная строка): версия пакета (по умолчанию: «последняя»).pageSize(необязательное число): количество уязвимостей, возвращаемых на страницу (по умолчанию: 10)pageCount(необязательное число): количество возвращаемых страниц (по умолчанию: 1)
Возвращает: Список уязвимостей, влияющих на указанную версию пакета.
jfrog_get_vulnerability_info
Получите подробную информацию о конкретной уязвимости, включая затронутые пакеты и версии.
Входные данные:
cve_id(строка): идентификатор CVE или идентификатор уязвимости для поискаpageSize(необязательное число): количество уязвимостей, возвращаемых на страницу (по умолчанию: 10)pageCount(необязательное число): количество возвращаемых страниц (по умолчанию: 1)
Возвращает: подробную информацию об уязвимостях и затронутых пакетах.
jfrog_get_package_curation_status
Проверьте статус курирования конкретной версии пакета
Входные данные:
packageType(строка): тип пакета (pypi, npm, maven, golang, nuget, huggingface, rubygems)packageName(строка): Имя пакета, как оно отображается в репозитории пакетов.packageVersion(строка): версия пакета, как она отображается в репозитории пакетов.
Возвращает: статус курирования (одобрено, заблокировано или неопределенно)
jfrog_get_artifacts_summary
Получите сводку проблем с артефактами в репозитории или сборке, отсортированную по категориям и степени серьезности (низкая, средняя, высокая, критическая, неизвестная)
Входные данные:
paths(строковый массив): Массив путей к артефактам, из которых создается сводка.
Возвращает: сводку, основанную на количестве уязвимостей по степени серьезности для каждого артефакта в предоставленном массиве, а также общее количество проблем.
Настраивать
Установка через Smithery
Чтобы автоматически установить mcp-jfrog для Claude Desktop через Smithery :
npx -y @smithery/cli install @jfrog/mcp-jfrog --client claudeПредпосылки
Node.js v18 или выше
Docker (если используется развертывание Docker, см. )
Действительный экземпляр платформы JFrog с соответствующими разрешениями
Доступ для создания и управления токенами доступа в вашем экземпляре платформы JFrog.
Переменные среды
JFROG_ACCESS_TOKEN: Ваш токен доступа JFrog (обязательно)JFROG_URL: базовый URL-адрес вашей платформы JFrog (обязательно)TRANSPORT: режим транспорта, который нужно использовать, установите значение «sse», чтобы включить транспорт SSE (по умолчанию: stdio)PORT: Номер порта, используемый для транспорта SSE (по умолчанию: 8080)CORS_ORIGIN: источник CORS разрешен для соединений SSE (по умолчанию: '*')LOG_LEVEL: Уровень ведения журнала: DEBUG, INFO, WARN, ERROR (по умолчанию: INFO)MAX_RECONNECT_ATTEMPTS: Максимальное количество попыток повторного подключения для сервера SSE (по умолчанию: 5)RECONNECT_DELAY_MS: Базовая задержка в миллисекундах между попытками повторного подключения (по умолчанию: 2000)
Токен JFrog ( JFROG_ACCESS_TOKEN )
Чтобы использовать этот сервер MCP, вам необходимо создать токен доступа JFrog или использовать токен Idenetity с соответствующими разрешениями:
Информацию о том, как создать токен JFrog, можно найти в официальной документации JFrog:
URL-адрес JFrog ( JFROG_URL )
URL вашего экземпляра платформы JFrog (например, https://acme.jfrog.io )
Транспортные возможности SSE
Транспортный режим SSE включает в себя следующие функции:
Управление соединениями : каждое соединение SSE отслеживается с помощью уникального идентификатора, что позволяет клиентам сохранять состояние при повторных соединениях.
Структурированное ведение журнала : подробные журналы с временными метками, уровнями серьезности и соответствующей контекстной информацией.
Устойчивость соединения : автоматические попытки повторного подключения с экспоненциальной задержкой, если сервер не запускается.
Конечная точка здоровья : конечная точка
/health, которая возвращает информацию о состоянии сервера.Отслеживание подключений : отслеживание активных подключений в режиме реального времени с периодической регистрацией статистики.
Показатели производительности : отслеживание времени выполнения операций инструмента и HTTP-запросов.
При использовании режима SSE:
Клиенты должны подключаться к конечной точке
/sse, при необходимости предоставляя параметр запросаconnectionIdдля отслеживания сеанса.Клиентские запросы должны отправляться в конечную точку
/messagesс тем жеconnectionIdв качестве параметра запроса.Сервер ответит отправленными сервером событиями через установленное соединение SSE.
Пример клиентского подключения с идентификатором подключения:
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Использование
нпм
{
"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
Чтобы использовать сервер JFrog MCP с транспортным режимом SSE (полезно для веб-интерфейсов, таких как 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"
}
}
}
}Примечание: для режима SSE вам необходимо добавить параметр serverUrl , указывающий на вашу конечную точку SSE, и указать порт, используемый сервером (-p 8080:8080).
Добавьте следующее в ваш 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>"
}
}
}
}Транспортный режим SSE
Для Claude Desktop с транспортом SSE:
{
"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.