Servidor MCP de GitHub
El servidor MCP de GitHub es un servidor de protocolo de contexto de modelo (MCP) que proporciona una integración perfecta con las API de GitHub, lo que permite capacidades avanzadas de automatización e interacción para desarrolladores y herramientas.
Casos de uso
- Automatizar flujos de trabajo y procesos de GitHub.
- Extracción y análisis de datos de los repositorios de GitHub.
- Desarrollar herramientas y aplicaciones impulsadas por IA que interactúen con el ecosistema de GitHub.
Prerrequisitos
- Para ejecutar el servidor en un contenedor, necesitará tener instalado Docker .
- Una vez instalado Docker, también deberá asegurarse de que esté ejecutándose. La imagen es pública; si se producen errores al extraerla, es posible que tenga un token caducado y deba cerrar sesión en
docker logout ghcr.io
- Por último, deberá crear un token de acceso personal de GitHub . El servidor MCP puede usar muchas de las API de GitHub, así que habilite los permisos que considere necesarios para sus herramientas de IA (para obtener más información sobre los tokens de acceso, consulte la documentación ).
Instalación
Uso con VS Code
Para una instalación rápida, utilice uno de los botones de instalación con un solo clic en la parte superior de este archivo README. Una vez completado el proceso, active el modo Agente (ubicado junto a la entrada de texto de Copilot Chat) y el servidor se iniciará.
Para la instalación manual, agregue el siguiente bloque JSON a su archivo de configuración de usuario (JSON) en VS Code. Para ello, presione Ctrl + Shift + P
y escriba Preferences: Open User Settings (JSON)
.
Opcionalmente, puede agregar un ejemplo similar (es decir, sin la clave mcp) a un archivo llamado .vscode/mcp.json
en su espacio de trabajo. Esto le permitirá compartir la configuración con otros.
Más información sobre el uso de las herramientas del servidor MCP en la documentación del modo agente de VS Code.
Uso con Claude Desktop
Construir desde la fuente
Si no tiene Docker, puede usar go build
para compilar el binario en el directorio cmd/github-mcp-server
y usar el comando github-mcp-server stdio
con la variable de entorno GITHUB_PERSONAL_ACCESS_TOKEN
establecida en su token. Para especificar la ubicación de salida de la compilación, use el parámetro -o
. Debe configurar su servidor para que use el ejecutable compilado como su command
. Por ejemplo:
Configuración de herramientas
El servidor MCP de GitHub permite habilitar o deshabilitar grupos específicos de funcionalidades mediante el indicador --toolsets
. Esto permite controlar qué capacidades de la API de GitHub están disponibles para las herramientas de IA. Habilitar solo los conjuntos de herramientas necesarios facilita la selección de herramientas y reduce el tamaño del contexto.
Conjuntos de herramientas disponibles
Los siguientes conjuntos de herramientas están disponibles (todos están activados de forma predeterminada):
Conjunto de herramientas | Descripción |
---|---|
repos | Herramientas relacionadas con el repositorio (operaciones de archivos, ramas, confirmaciones) |
issues | Herramientas relacionadas con problemas (crear, leer, actualizar, comentar) |
users | Todo lo relacionado con los usuarios de GitHub |
pull_requests | Operaciones de solicitud de extracción (crear, fusionar, revisar) |
code_security | Alertas de escaneo de código y funciones de seguridad |
experiments | Características experimentales (no consideradas estables) |
Especificación de conjuntos de herramientas
Para especificar los conjuntos de herramientas que desea que estén disponibles para el LLM, puede pasar una lista de permitidos de dos maneras:
- Usando el argumento de la línea de comandos :
- Usando la variable de entorno :
La variable de entorno GITHUB_TOOLSETS
tiene prioridad sobre el argumento de la línea de comando si se proporcionan ambos.
Uso de conjuntos de herramientas con Docker
Al usar Docker, puedes pasar los conjuntos de herramientas como variables de entorno:
El conjunto de herramientas "todos"
Se puede proporcionar el conjunto de herramientas especial all
para habilitar todos los conjuntos de herramientas disponibles independientemente de cualquier otra configuración:
O utilizando la variable de entorno:
Descubrimiento dinámico de herramientas
Nota : Esta función está actualmente en fase beta y podría no estar disponible en todos los entornos. Pruébela y avísenos si encuentra algún problema.
En lugar de comenzar con todas las herramientas habilitadas, puede activar la detección dinámica de conjuntos de herramientas. Los conjuntos de herramientas dinámicos permiten que el host MCP los enumere y los habilite según la solicitud del usuario. Esto debería ayudar a evitar situaciones en las que el modelo se confunda con la gran cantidad de herramientas disponibles.
Uso del descubrimiento dinámico de herramientas
Al utilizar el binario, puede pasar el indicador --dynamic-toolsets
.
Al usar Docker, puedes pasar los conjuntos de herramientas como variables de entorno:
Servidor empresarial de GitHub
El indicador --gh-host
y la variable de entorno GITHUB_HOST
se pueden usar para establecer el nombre de host de GitHub Enterprise Server. Añada el prefijo https://
" al nombre de host; de lo contrario, el valor predeterminado es http://
, que GitHub Enterprise Server no admite.
i18n / Descripciones de reemplazo
Las descripciones de las herramientas se pueden anular creando un archivo github-mcp-server-config.json
en el mismo directorio que el binario.
El archivo debe contener un objeto JSON con los nombres de las herramientas como claves y las nuevas descripciones como valores. Por ejemplo:
Puede crear una exportación de las traducciones actuales ejecutando el binario con el indicador --export-translations
.
Esta bandera preservará cualquier traducción o anulación que haya realizado, mientras agrega cualquier traducción nueva que se haya agregado al binario desde la última vez que exportó.
También puedes usar variables de entorno para sobrescribir las descripciones. Los nombres de las variables de entorno son los mismos que las claves del archivo JSON, con el prefijo GITHUB_MCP_
y en mayúsculas.
Por ejemplo, para anular la herramienta TOOL_ADD_ISSUE_COMMENT_DESCRIPTION
, puede configurar la siguiente variable de entorno:
Herramientas
Usuarios
- get_me - Obtener detalles del usuario autenticado
- No se requieren parámetros
Asuntos
- get_issue - Obtiene el contenido de un problema dentro de un repositorio
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)issue_number
: Número de emisión (número, obligatorio)
- get_issue_comments : obtener comentarios sobre un problema de GitHub
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)issue_number
: Número de emisión (número, obligatorio)
- create_issue - Crea un nuevo problema en un repositorio de GitHub
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)title
: Título del problema (cadena, obligatorio)body
: contenido del cuerpo del problema (cadena, opcional)assignees
: nombres de usuario para asignar a este problema (cadena[], opcional)labels
: etiquetas que se aplicarán a este problema (cadena[], opcional)
- add_issue_comment - Agregar un comentario a un problema
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)issue_number
: Número de emisión (número, obligatorio)body
: Texto del comentario (cadena, obligatorio)
- list_issues - Enumera y filtra los problemas del repositorio
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)state
: Filtrar por estado ('abierto', 'cerrado', 'todos') (cadena, opcional)labels
: etiquetas para filtrar por (cadena[], opcional)sort
: Ordenar por ('creado', 'actualizado', 'comentarios') (cadena, opcional)direction
: Ordenar dirección ('asc', 'desc') (cadena, opcional)since
: Filtrar por fecha (marca de tiempo ISO 8601) (cadena, opcional)page
: Número de página (número, opcional)perPage
: Resultados por página (número, opcional)
- update_issue : actualiza un problema existente en un repositorio de GitHub
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)issue_number
: Número de problema a actualizar (número, obligatorio)title
: Nuevo título (cadena, opcional)body
: Nueva descripción (cadena, opcional)state
: Nuevo estado ('abierto' o 'cerrado') (cadena, opcional)labels
: Nuevas etiquetas (cadena[], opcional)assignees
: nuevos cesionarios (cadena[], opcional)milestone
: Nuevo número de hito (número, opcional)
- search_issues - Busca problemas y solicitudes de extracción
query
: Consulta de búsqueda (cadena, obligatoria)sort
: Campo de ordenación (cadena, opcional)order
: orden de clasificación (cadena, opcional)page
: Número de página (número, opcional)perPage
: Resultados por página (número, opcional)
Solicitudes de extracción
- get_pull_request - Obtener detalles de una solicitud de extracción específica
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)pullNumber
: Número de solicitud de extracción (número, obligatorio)
- list_pull_requests - Lista y filtra las solicitudes de extracción del repositorio
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)state
: estado de PR (cadena, opcional)sort
: Campo de ordenación (cadena, opcional)direction
: Dirección de ordenamiento (cadena, opcional)perPage
: Resultados por página (número, opcional)page
: Número de página (número, opcional)
- merge_pull_request - Fusionar una solicitud de extracción
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)pullNumber
: Número de solicitud de extracción (número, obligatorio)commit_title
: Título para la confirmación de fusión (cadena, opcional)commit_message
: Mensaje para la confirmación de fusión (cadena, opcional)merge_method
: Método de fusión (cadena, opcional)
- get_pull_request_files - Obtener la lista de archivos modificados en una solicitud de extracción
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)pullNumber
: Número de solicitud de extracción (número, obligatorio)
- get_pull_request_status : obtiene el estado combinado de todas las comprobaciones de estado para una solicitud de extracción
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)pullNumber
: Número de solicitud de extracción (número, obligatorio)
- update_pull_request_branch : actualiza una rama de solicitud de extracción con los últimos cambios de la rama base
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)pullNumber
: Número de solicitud de extracción (número, obligatorio)expectedHeadSha
: el SHA esperado de la referencia HEAD de la solicitud de extracción (cadena, opcional)
- get_pull_request_comments - Obtener los comentarios de revisión en una solicitud de extracción
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)pullNumber
: Número de solicitud de extracción (número, obligatorio)
- get_pull_request_reviews - Obtener las reseñas en una solicitud de extracción
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)pullNumber
: Número de solicitud de extracción (número, obligatorio)
- create_pull_request_review - Crea una revisión en una solicitud de extracción
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)pullNumber
: Número de solicitud de extracción (número, obligatorio)body
: Texto del comentario de revisión (cadena, opcional)event
: Acción de revisión ('APROBAR', 'SOLICITAR_CAMBIOS', 'COMENTARIO') (cadena, obligatoria)commitId
: SHA del commit a revisar (cadena, opcional)comments
: Matriz de comentarios específicos de cada línea que contiene objetos para colocar comentarios sobre los cambios en la solicitud de extracción (matriz, opcional)- Para comentarios en línea: proporcione
path
,position
(oline
) ybody
- Para comentarios de varias líneas: proporcione
path
,start_line
,line
,side
/start_side
opcional ybody
- Para comentarios en línea: proporcione
- create_pull_request - Crea una nueva solicitud de extracción
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)title
: título de PR (cadena, obligatorio)body
: descripción de PR (cadena, opcional)head
: Rama que contiene los cambios (cadena, obligatoria)base
: Rama en la que fusionarse (cadena, obligatoria)draft
: Crear como borrador de PR (booleano, opcional)maintainer_can_modify
: Permitir ediciones del mantenedor (booleano, opcional)
- add_pull_request_review_comment : agrega un comentario de revisión a una solicitud de extracción o responde a un comentario existente
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)pull_number
: Número de solicitud de extracción (número, obligatorio)body
: El texto del comentario de la revisión (cadena, obligatoria)commit_id
: El SHA de la confirmación que se va a comentar (cadena, obligatoria a menos que se utilice in_reply_to)path
: la ruta relativa al archivo que requiere un comentario (cadena, obligatoria a menos que se utilice in_reply_to)line
: la línea del blob en la diferencia de la solicitud de extracción a la que se aplica el comentario (número, opcional)side
: el lado de la diferencia que se va a comentar (IZQUIERDA o DERECHA) (cadena, opcional)start_line
: Para comentarios de varias líneas, la primera línea del rango (número, opcional)start_side
: para comentarios de varias líneas, el lado inicial de la diferencia (IZQUIERDA o DERECHA) (cadena, opcional)subject_type
: El nivel al que se dirige el comentario (línea o archivo) (cadena, opcional)in_reply_to
: El ID del comentario de la revisión al que se responderá (número, opcional). Si se especifica, solo se requiere el cuerpo; se ignoran los demás parámetros.
- update_pull_request : actualiza una solicitud de extracción existente en un repositorio de GitHub
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)pullNumber
: Número de solicitud de extracción a actualizar (número, obligatorio)title
: Nuevo título (cadena, opcional)body
: Nueva descripción (cadena, opcional)state
: Nuevo estado ('abierto' o 'cerrado') (cadena, opcional)base
: nuevo nombre de la rama base (cadena, opcional)maintainer_can_modify
: Permitir ediciones del mantenedor (booleano, opcional)
- request_copilot_review : solicita una revisión de GitHub Copilot para una solicitud de extracción (experimental; sujeto a la compatibilidad con la API de GitHub)
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)pullNumber
: Número de solicitud de extracción (número, obligatorio)- Nota : Actualmente, esta herramienta solo funcionará para github.com
Repositorios
- create_or_update_file - Crea o actualiza un solo archivo en un repositorio
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)path
: Ruta del archivo (cadena, obligatoria)message
: Mensaje de confirmación (cadena, obligatorio)content
: Contenido del archivo (cadena, obligatorio)branch
: Nombre de la rama (cadena, opcional)sha
: Archivo SHA si se actualiza (cadena, opcional)
- list_branches - Lista de ramas en un repositorio de GitHub
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)page
: Número de página (número, opcional)perPage
: Resultados por página (número, opcional)
- push_files - Envía múltiples archivos en una sola confirmación
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)branch
: Rama a la que enviar (cadena, obligatoria)files
: archivos para enviar, cada uno con ruta y contenido (matriz, obligatorio)message
: Mensaje de confirmación (cadena, obligatorio)
- search_repositories - Buscar repositorios de GitHub
query
: Consulta de búsqueda (cadena, obligatoria)sort
: Campo de ordenación (cadena, opcional)order
: orden de clasificación (cadena, opcional)page
: Número de página (número, opcional)perPage
: Resultados por página (número, opcional)
- create_repository - Crea un nuevo repositorio de GitHub
name
: Nombre del repositorio (cadena, obligatorio)description
: Descripción del repositorio (cadena, opcional)private
: si el repositorio es privado (booleano, opcional)autoInit
: inicializar automáticamente con README (booleano, opcional)
- get_file_contents - Obtener el contenido de un archivo o directorio
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)path
: Ruta del archivo (cadena, obligatoria)ref
: referencia de Git (cadena, opcional)
- fork_repository - Bifurcar un repositorio
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)organization
: Nombre de la organización de destino (cadena, opcional)
- create_branch - Crea una nueva rama
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)branch
: Nuevo nombre de rama (cadena, obligatorio)sha
: SHA para crear una rama desde (cadena, requerida)
- list_commits - Obtener una lista de confirmaciones de una rama en un repositorio
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)sha
: nombre de rama, etiqueta o confirmación SHA (cadena, opcional)path
: Solo confirmaciones que contengan esta ruta de archivo (cadena, opcional)page
: Número de página (número, opcional)perPage
: Resultados por página (número, opcional)
- get_commit - Obtener detalles de una confirmación desde un repositorio
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)sha
: SHA de confirmación, nombre de la rama o nombre de la etiqueta (cadena, obligatoria)page
: Número de página, para los archivos en la confirmación (número, opcional)perPage
: Resultados por página, para los archivos en la confirmación (número, opcional)
- search_code - Busca código en los repositorios de GitHub
query
: Consulta de búsqueda (cadena, obligatoria)sort
: Campo de ordenación (cadena, opcional)order
: orden de clasificación (cadena, opcional)page
: Número de página (número, opcional)perPage
: Resultados por página (número, opcional)
Usuarios
- search_users - Buscar usuarios de GitHub
q
: Consulta de búsqueda (cadena, obligatoria)sort
: Campo de ordenación (cadena, opcional)order
: orden de clasificación (cadena, opcional)page
: Número de página (número, opcional)perPage
: Resultados por página (número, opcional)
Escaneo de código
- get_code_scanning_alert - Recibe una alerta de escaneo de código
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)alertNumber
: Número de alerta (número, obligatorio)
- list_code_scanning_alerts : lista de alertas de escaneo de código para un repositorio
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)ref
: referencia de Git (cadena, opcional)state
: Estado de alerta (cadena, opcional)severity
: Gravedad de la alerta (cadena, opcional)tool_name
: El nombre de la herramienta utilizada para escanear el código (cadena, opcional)
Escaneo secreto
- get_secret_scanning_alert - Recibe una alerta de escaneo secreto
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)alertNumber
: Número de alerta (número, obligatorio)
- list_secret_scanning_alerts : enumera las alertas de escaneo secreto de un repositorio
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)state
: Estado de alerta (cadena, opcional)secret_type
: Los tipos de secretos que se filtrarán en una lista separada por comas (cadena, opcional)resolution
: El estado de la resolución (cadena, opcional)
Recursos
Contenido del repositorio
- Obtener contenido del repositorio Recupera el contenido de un repositorio en una ruta específica.
- Plantilla :
repo://{owner}/{repo}/contents{/path*}
- Parámetros :
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)path
: Ruta del archivo o directorio (cadena, opcional)
- Plantilla :
- Obtener el contenido del repositorio para una rama específica Recupera el contenido de un repositorio en una ruta específica para una rama determinada.
- Plantilla :
repo://{owner}/{repo}/refs/heads/{branch}/contents{/path*}
- Parámetros :
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)branch
: Nombre de la rama (cadena, obligatoria)path
: Ruta del archivo o directorio (cadena, opcional)
- Plantilla :
- Obtener el contenido del repositorio para una confirmación específica Recupera el contenido de un repositorio en una ruta específica para una confirmación determinada.
- Plantilla :
repo://{owner}/{repo}/sha/{sha}/contents{/path*}
- Parámetros :
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)sha
: Confirmar SHA (cadena, obligatoria)path
: Ruta del archivo o directorio (cadena, opcional)
- Plantilla :
- Obtener el contenido del repositorio para una etiqueta específica Recupera el contenido de un repositorio en una ruta específica para una etiqueta determinada.
- Plantilla :
repo://{owner}/{repo}/refs/tags/{tag}/contents{/path*}
- Parámetros :
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)tag
: Nombre de la etiqueta (cadena, obligatoria)path
: Ruta del archivo o directorio (cadena, opcional)
- Plantilla :
- Obtener el contenido del repositorio para una solicitud de extracción específica Recupera el contenido de un repositorio en una ruta específica para una solicitud de extracción determinada.
- Plantilla :
repo://{owner}/{repo}/refs/pull/{prNumber}/head/contents{/path*}
- Parámetros :
owner
: Propietario del repositorio (cadena, obligatoria)repo
: Nombre del repositorio (cadena, obligatorio)prNumber
: Número de solicitud de extracción (cadena, obligatoria)path
: Ruta del archivo o directorio (cadena, opcional)
- Plantilla :
Uso de la biblioteca
La API de Go exportada de este módulo se considera inestable y está sujeta a cambios importantes. En el futuro, podríamos ofrecer estabilidad; por favor, reporte un problema si existe un caso práctico donde esto sea útil.
Licencia
Este proyecto está licenciado bajo los términos de la licencia de código abierto del MIT. Consulte los términos completos en el 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.
Ruiyu Ma
Related MCP Servers
- PythonMIT License
- PythonGPL 3.0
- GoMIT License
- JavaScriptMIT License