GitHub MCP-сервер
GitHub MCP Server — это сервер Model Context Protocol (MCP) , который обеспечивает бесшовную интеграцию с API GitHub, предоставляя разработчикам и инструментам расширенные возможности автоматизации и взаимодействия.
Варианты использования
- Автоматизация рабочих процессов и процессов GitHub.
- Извлечение и анализ данных из репозиториев GitHub.
- Создание инструментов и приложений на базе искусственного интеллекта, взаимодействующих с экосистемой GitHub.
Предпосылки
- Для запуска сервера в контейнере вам потребуется установить Docker .
- После установки Docker вам также нужно будет убедиться, что Docker запущен. Образ является публичным; если вы получаете ошибки при pull, у вас может быть просроченный токен и вам нужно
docker logout ghcr.io
. - Наконец, вам нужно будет создать токен доступа GitHub Personal Access Token . Сервер MCP может использовать многие API GitHub, поэтому включите разрешения, которые вы считаете удобными для предоставления вашим инструментам ИИ (чтобы узнать больше о токенах доступа, ознакомьтесь с документацией ).
Установка
Использование с VS Code
Для быстрой установки используйте одну из кнопок установки одним щелчком в верхней части этого README. После завершения этого потока переключите режим агента (расположенный рядом с текстовым вводом Copilot Chat), и сервер запустится.
Для ручной установки добавьте следующий блок JSON в файл настроек пользователя (JSON) в VS Code. Это можно сделать, нажав Ctrl + Shift + P
и введя Preferences: Open User Settings (JSON)
.
При желании вы можете добавить аналогичный пример (т.е. без ключа mcp) в файл .vscode/mcp.json
в вашем рабочем пространстве. Это позволит вам поделиться конфигурацией с другими.
Подробнее об использовании инструментов сервера MCP см. в документации по режиму агента VS Code.
Использование с Claude Desktop
Сборка из исходного кода
Если у вас нет Docker, вы можете использовать go build
для сборки двоичного файла в каталоге cmd/github-mcp-server
и использовать команду github-mcp-server stdio
с переменной среды GITHUB_PERSONAL_ACCESS_TOKEN
, установленной на ваш токен. Чтобы указать расположение вывода сборки, используйте флаг -o
. Вам следует настроить свой сервер для использования собранного исполняемого файла в качестве своей command
. Например:
Конфигурация инструмента
Сервер GitHub MCP поддерживает включение или отключение определенных групп функций с помощью флага --toolsets
. Это позволяет вам контролировать, какие возможности API GitHub доступны для ваших инструментов ИИ. Включение только тех наборов инструментов, которые вам нужны, может помочь LLM с выбором инструментов и сократить размер контекста.
Доступные наборы инструментов
Доступны следующие наборы инструментов (все включены по умолчанию):
Набор инструментов | Описание |
---|---|
repos | Инструменты, связанные с репозиторием (файловые операции, ветки, коммиты) |
issues | Инструменты для решения проблем (создание, чтение, обновление, комментирование) |
users | Все, что касается пользователей GitHub |
pull_requests | Операции по запросу на извлечение (создание, объединение, просмотр) |
code_security | Оповещения о сканировании кодов и функции безопасности |
experiments | Экспериментальные функции (не считаются стабильными) |
Указание наборов инструментов
Чтобы указать наборы инструментов, которые вы хотите предоставить LLM, вы можете передать список разрешений двумя способами:
- Использование аргумента командной строки :
- Использование переменной среды :
Переменная среды GITHUB_TOOLSETS
имеет приоритет над аргументом командной строки, если указаны оба.
Использование наборов инструментов с Docker
При использовании Docker вы можете передавать наборы инструментов как переменные среды:
Набор инструментов "все"
Специальный набор all
может быть предоставлен для включения всех доступных наборов инструментов независимо от любой другой конфигурации:
Или с помощью переменной окружения:
Динамическое обнаружение инструментов
Примечание : эта функция в настоящее время находится в стадии бета-тестирования и может быть недоступна во всех средах. Пожалуйста, протестируйте ее и сообщите нам, если у вас возникнут какие-либо проблемы.
Вместо того, чтобы начинать со всех включенных инструментов, вы можете включить динамическое обнаружение наборов инструментов. Динамические наборы инструментов позволяют хосту MCP перечислять и включать наборы инструментов в ответ на запрос пользователя. Это должно помочь избежать ситуаций, когда модель путается из-за огромного количества доступных инструментов.
Использование динамического обнаружения инструментов
При использовании двоичного файла можно передать флаг --dynamic-toolsets
.
При использовании Docker вы можете передавать наборы инструментов как переменные среды:
Корпоративный сервер GitHub
Флаг --gh-host
и переменная окружения GITHUB_HOST
могут использоваться для установки имени хоста GitHub Enterprise Server. Добавьте к имени хоста префикс https://
URI-схему, иначе по умолчанию будет http://
, что GitHub Enterprise Server не поддерживает.
i18n / Переопределение описаний
Описания инструментов можно переопределить, создав файл github-mcp-server-config.json
в том же каталоге, что и двоичный файл.
Файл должен содержать объект JSON с именами инструментов в качестве ключей и новыми описаниями в качестве значений. Например:
Вы можете создать экспорт текущих переводов, запустив двоичный файл с флагом --export-translations
.
Этот флаг сохранит все выполненные вами переводы/переопределения, а также добавит все новые переводы, добавленные в двоичный файл с момента последнего экспорта.
Вы также можете использовать переменные среды для переопределения описаний. Имена переменных среды такие же, как и ключи в файле JSON, с префиксом GITHUB_MCP_
и все в верхнем регистре.
Например, чтобы переопределить инструмент TOOL_ADD_ISSUE_COMMENT_DESCRIPTION
, можно установить следующую переменную среды:
Инструменты
Пользователи
- get_me - Получить данные об аутентифицированном пользователе
- Параметры не требуются
Проблемы
- get_issue — Получает содержимое проблемы в репозитории
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)issue_number
: Номер выпуска (номер, обязательно)
- get_issue_comments — Получить комментарии к проблеме GitHub
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)issue_number
: Номер выпуска (номер, обязательно)
- create_issue — создать новую проблему в репозитории GitHub
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)title
: Название выпуска (строка, обязательно)body
: Содержимое тела вопроса (строка, необязательно)assignees
: Имена пользователей, которых следует назначить для решения этой проблемы (string[], необязательно)labels
: Метки, применяемые к этой проблеме (string[], необязательно)
- add_issue_comment — Добавить комментарий к проблеме
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)issue_number
: Номер выпуска (номер, обязательно)body
: Текст комментария (строка, обязательно)
- list_issues — список и фильтрация проблем репозитория
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)state
: Фильтр по состоянию («открыто», «закрыто», «все») (строка, необязательно)labels
: Метки для фильтрации (string[], необязательно)sort
: Сортировать по («создано», «обновлено», «комментарии») (строка, необязательно)direction
: Направление сортировки ('asc', 'desc') (строка, необязательно)since
: Фильтр по дате (временная метка ISO 8601) (строка, необязательно)page
: Номер страницы (номер, необязательно)perPage
: Результаты на страницу (число, необязательно)
- update_issue — обновить существующую проблему в репозитории GitHub
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)issue_number
: Номер выпуска для обновления (номер, обязательно)title
: Новый заголовок (строка, необязательно)body
: Новое описание (строка, необязательно)state
: Новое состояние («открыто» или «закрыто») (строка, необязательно)labels
: Новые метки (string[], необязательно)assignees
: Новые получатели (string[], необязательно)milestone
: новый номер вехи (номер, необязательно)
- search_issues — Поиск проблем и запросов на извлечение
query
: Поисковый запрос (строка, обязательно)sort
: Поле сортировки (строка, необязательно)order
: Порядок сортировки (строка, необязательно)page
: Номер страницы (номер, необязательно)perPage
: Результаты на страницу (число, необязательно)
Запросы на извлечение
- get_pull_request — Получить сведения о конкретном запросе на извлечение
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)pullNumber
: Номер запроса на извлечение (номер, обязательно)
- list_pull_requests — список и фильтрация запросов на извлечение из репозитория
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)state
: состояние PR (строка, необязательно)sort
: Поле сортировки (строка, необязательно)direction
: Направление сортировки (строка, необязательно)perPage
: Результаты на страницу (число, необязательно)page
: Номер страницы (номер, необязательно)
- merge_pull_request — объединение запроса на вытягивание
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)pullNumber
: Номер запроса на извлечение (номер, обязательно)commit_title
: Заголовок для коммита слияния (строка, необязательно)commit_message
: Сообщение для коммита слияния (строка, необязательно)merge_method
: Метод слияния (строка, необязательно)
- get_pull_request_files — Получить список файлов, измененных в запросе на извлечение
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)pullNumber
: Номер запроса на извлечение (номер, обязательно)
- get_pull_request_status — получить объединенный статус всех проверок статуса для запроса на извлечение
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)pullNumber
: Номер запроса на извлечение (номер, обязательно)
- update_pull_request_branch — обновление ветки запроса на извлечение с последними изменениями из базовой ветки
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)pullNumber
: Номер запроса на извлечение (номер, обязательно)expectedHeadSha
: ожидаемый SHA HEAD-ссылки запроса на извлечение (строка, необязательно)
- get_pull_request_comments — Получить комментарии к отзыву о запросе на включение изменений
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)pullNumber
: Номер запроса на извлечение (номер, обязательно)
- get_pull_request_reviews — Получить отзывы о запросе на извлечение
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)pullNumber
: Номер запроса на извлечение (номер, обязательно)
- create_pull_request_review — Создать обзор по запросу на вытягивание
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)pullNumber
: Номер запроса на извлечение (номер, обязательно)body
: Текст комментария к отзыву (строка, необязательно)event
: Действие обзора ('APPROVE', 'REQUEST_CHANGES', 'COMMENT') (строка, обязательно)commitId
: SHA коммита для проверки (строка, необязательно)comments
: Массив объектов комментариев, специфичных для строк, для размещения комментариев к изменениям в запросе на извлечение (массив, необязательно)- Для встроенных комментариев: укажите
path
,position
(илиline
) иbody
- Для многострочных комментариев: укажите
path
,start_line
,line
, необязательноside
/start_side
иbody
.
- Для встроенных комментариев: укажите
- create_pull_request — создать новый запрос на извлечение
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)title
: PR title (строка, обязательно)body
: описание PR (строка, необязательно)head
: Ветка, содержащая изменения (строка, обязательно)base
: Ветка для слияния (строка, обязательно)draft
: создать как черновик PR (логическое значение, необязательно)maintainer_can_modify
: Разрешить редактирование сопровождающему (логическое значение, необязательно)
- add_pull_request_review_comment — Добавить комментарий-обзор к запросу на извлечение или ответить на существующий комментарий
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)pull_number
: Номер запроса на извлечение (номер, обязательно)body
: Текст комментария к отзыву (строка, обязательно)commit_id
: SHA коммита, который нужно прокомментировать (строка, обязательна, если не используется in_reply_to)path
: Относительный путь к файлу, который требует комментария (строка, обязательна, если не используется in_reply_to)line
: строка BLOB-объекта в diff-запросе на извлечение, к которой применяется комментарий (число, необязательно)side
: сторона разницы, которую нужно прокомментировать (ЛЕВАЯ или ПРАВАЯ) (строка, необязательно)start_line
: Для многострочных комментариев — первая строка диапазона (число, необязательно)start_side
: Для многострочных комментариев начальная сторона diff (ЛЕВАЯ или ПРАВАЯ) (строка, необязательно)subject_type
: Уровень, на котором находится комментарий (строка или файл) (строка, необязательно)in_reply_to
: Идентификатор комментария-обзора для ответа (число, необязательно). Если указано, требуется только тело, а другие параметры игнорируются.
- update_pull_request — обновление существующего запроса на извлечение в репозитории GitHub
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)pullNumber
: Номер запроса на извлечение для обновления (номер, обязательно)title
: Новый заголовок (строка, необязательно)body
: Новое описание (строка, необязательно)state
: Новое состояние («открыто» или «закрыто») (строка, необязательно)base
: Новое базовое имя ветви (строка, необязательно)maintainer_can_modify
: Разрешить редактирование сопровождающему (логическое значение, необязательно)
- request_copilot_review — запросить проверку GitHub Copilot для запроса на включение изменений (экспериментальная функция; при условии поддержки API GitHub)
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)pullNumber
: Номер запроса на извлечение (номер, обязательно)- Примечание : в настоящее время этот инструмент работает только для github.com.
Репозитории
- create_or_update_file — Создать или обновить один файл в репозитории
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)path
: Путь к файлу (строка, обязательно)message
: Сообщение о фиксации (строка, обязательно)content
: Содержимое файла (строка, обязательно)branch
: Имя ветви (строка, необязательно)sha
: SHA файла при обновлении (строка, необязательно)
- list_branches — список веток в репозитории GitHub
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)page
: Номер страницы (номер, необязательно)perPage
: Результаты на страницу (число, необязательно)
- push_files — отправка нескольких файлов за один коммит
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)branch
: Ветка, в которую нужно отправить (строка, обязательно)files
: файлы для отправки, каждый с путем и содержимым (массив, обязательно)message
: Сообщение о фиксации (строка, обязательно)
- search_repositories — Поиск репозиториев GitHub
query
: Поисковый запрос (строка, обязательно)sort
: Поле сортировки (строка, необязательно)order
: Порядок сортировки (строка, необязательно)page
: Номер страницы (номер, необязательно)perPage
: Результаты на страницу (число, необязательно)
- create_repository — создать новый репозиторий GitHub
name
: Имя репозитория (строка, обязательно)description
: Описание репозитория (строка, необязательно)private
: является ли репозиторий частным (логическое значение, необязательно)autoInit
: Автоматическая инициализация с помощью README (логическое значение, необязательно)
- get_file_contents — Получить содержимое файла или каталога
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)path
: Путь к файлу (строка, обязательно)ref
: Ссылка Git (строка, необязательно)
- fork_repository — Форк репозитория
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)organization
: Название целевой организации (строка, необязательно)
- create_branch — Создать новую ветку
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)branch
: Новое имя ветви (строка, обязательно)sha
: SHA для создания ветки из (строка, обязательно)
- list_commits — Получить список коммитов ветки в репозитории
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)sha
: Имя ветви, тег или SHA коммита (строка, необязательно)path
: только коммиты, содержащие этот путь к файлу (строка, необязательно)page
: Номер страницы (номер, необязательно)perPage
: Результаты на страницу (число, необязательно)
- get_commit — Получить сведения о коммите из репозитория
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)sha
: SHA фиксации, имя ветки или имя тега (строка, обязательно)page
: Номер страницы для файлов в коммите (номер, необязательно)perPage
: Результаты на страницу для файлов в коммите (число, необязательно)
- search_code — Поиск кода в репозиториях GitHub
query
: Поисковый запрос (строка, обязательно)sort
: Поле сортировки (строка, необязательно)order
: Порядок сортировки (строка, необязательно)page
: Номер страницы (номер, необязательно)perPage
: Результаты на страницу (число, необязательно)
Пользователи
- search_users — Поиск пользователей GitHub
q
: Поисковый запрос (строка, обязательно)sort
: Поле сортировки (строка, необязательно)order
: Порядок сортировки (строка, необязательно)page
: Номер страницы (номер, необязательно)perPage
: Результаты на страницу (число, необязательно)
Сканирование кода
- get_code_scanning_alert — Получить оповещение о сканировании кода
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)alertNumber
: Номер оповещения (номер, обязательно)
- list_code_scanning_alerts — список оповещений сканирования кода для репозитория
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)ref
: Ссылка Git (строка, необязательно)state
: Состояние оповещения (строка, необязательно)severity
: серьезность оповещения (строка, необязательно)tool_name
: Имя инструмента, используемого для сканирования кода (строка, необязательно)
Секретное сканирование
- get_secret_scanning_alert — Получить секретное оповещение о сканировании
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)alertNumber
: Номер оповещения (номер, обязательно)
- list_secret_scanning_alerts — список секретных оповещений сканирования для репозитория
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)state
: Состояние оповещения (строка, необязательно)secret_type
: типы секретов, по которым необходимо выполнить фильтрацию, в списке, разделенном запятыми (строка, необязательно)resolution
: статус разрешения (строка, необязательно)
Ресурсы
Содержимое репозитория
- Получить содержимое репозитория Извлекает содержимое репозитория по указанному пути.
- Шаблон :
repo://{owner}/{repo}/contents{/path*}
- Параметры :
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)path
: Путь к файлу или каталогу (строка, необязательно)
- Шаблон :
- Получить содержимое репозитория для определенной ветви Извлекает содержимое репозитория по определенному пути для указанной ветви.
- Шаблон :
repo://{owner}/{repo}/refs/heads/{branch}/contents{/path*}
- Параметры :
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)branch
: Имя филиала (строка, обязательно)path
: Путь к файлу или каталогу (строка, необязательно)
- Шаблон :
- Получить содержимое репозитория для определенного коммита Извлекает содержимое репозитория по определенному пути для указанного коммита.
- Шаблон :
repo://{owner}/{repo}/sha/{sha}/contents{/path*}
- Параметры :
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)sha
: Фиксация SHA (строка, обязательно)path
: Путь к файлу или каталогу (строка, необязательно)
- Шаблон :
- Получить содержимое репозитория для определенного тега Извлекает содержимое репозитория по определенному пути для указанного тега.
- Шаблон :
repo://{owner}/{repo}/refs/tags/{tag}/contents{/path*}
- Параметры :
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)tag
: Имя тега (строка, обязательно)path
: Путь к файлу или каталогу (строка, необязательно)
- Шаблон :
- Получить содержимое репозитория для определенного запроса на извлечение. Извлекает содержимое репозитория по определенному пути для указанного запроса на извлечение.
- Шаблон :
repo://{owner}/{repo}/refs/pull/{prNumber}/head/contents{/path*}
- Параметры :
owner
: Владелец репозитория (строка, обязательно)repo
: Имя репозитория (строка, обязательно)prNumber
: Номер запроса на извлечение (строка, обязательно)path
: Путь к файлу или каталогу (строка, необязательно)
- Шаблон :
Использование библиотеки
Экспортированный API Go этого модуля в настоящее время следует считать нестабильным и подверженным критическим изменениям. В будущем мы можем предложить стабильность; пожалуйста, сообщите о проблеме, если есть вариант использования, где это было бы ценно.
Лицензия
Этот проект лицензирован в соответствии с условиями лицензии MIT с открытым исходным кодом. Пожалуйста, обратитесь к MIT для получения полных условий.
This server cannot be installed
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
Рую Ма
Related MCP Servers
- PythonMIT License
- PythonGPL 3.0
- GoMIT License
- JavaScriptMIT License