Сервер 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 :
Предпосылки
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.
Пример клиентского подключения с идентификатором подключения:
Пример запроса клиента:
Как построить
Клонируйте репозиторий на локальную машину с помощью git clone и cd в каталог проекта:
Сборка как образа Docker:
Сборка как npm-модуля:
Использование
нпм
Докер
Транспортный режим SSE
Чтобы использовать сервер JFrog MCP с транспортным режимом SSE (полезно для веб-интерфейсов, таких как Cursor's WebView):
Примечание: для режима SSE вам необходимо добавить параметр serverUrl , указывающий на вашу конечную точку SSE, и указать порт, используемый сервером (-p 8080:8080).
Добавьте следующее в ваш claude_desktop_config.json :
Докер
нпм
Транспортный режим SSE
Для Claude Desktop с транспортом SSE: