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 с выбором инструментов и сократить размер контекста.
Доступные наборы инструментов
Доступны следующие наборы инструментов (все включены по умолчанию):
Набор инструментов | Описание |
| Инструменты, связанные с репозиторием (файловые операции, ветки, коммиты) |
| Инструменты для решения проблем (создание, чтение, обновление, комментирование) |
| Все, что касается пользователей GitHub |
| Операции по запросу на извлечение (создание, объединение, просмотр) |
| Оповещения о сканировании кодов и функции безопасности |
| Экспериментальные функции (не считаются стабильными) |
Указание наборов инструментов
Чтобы указать наборы инструментов, которые вы хотите предоставить LLM, вы можете передать список разрешений двумя способами:
Использование аргумента командной строки :
github-mcp-server --toolsets repos,issues,pull_requests,code_securityИспользование переменной среды :
GITHUB_TOOLSETS="repos,issues,pull_requests,code_security" ./github-mcp-server
Переменная среды 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
- MIT License
- GPL 3.0
- MIT License
- MIT License