Provides seamless integration with GitHub APIs, enabling repository management (file operations, branches, commits), issue tracking (create, read, update, comment), pull request operations (create, merge, review), user management, and code security features like code scanning and secret scanning alerts.
Allows requesting GitHub Copilot reviews for pull requests, providing AI-assisted code review capabilities through the experimental Copilot review features.
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
- -securityAlicense-qualityAn MCP server that implements a conversational AI 'waifu' character using a text generation service with Redis queuing and GPU acceleration.Last updated -1PythonMIT No Attribution
- GoMIT License
- PythonMIT License