GitHub
Interactúa con la API de GitHub para la gestión de repositorios, operaciones de archivos y búsqueda.
Documentación
Servidor MCP de GitHub
Servidor MCP para la API de GitHub, que permite operaciones de archivos, gestión de repositorios, funcionalidad de búsqueda y más.
Características
- Creación automática de ramas: Al crear/actualizar archivos o enviar cambios, las ramas se crean automáticamente si no existen
- Manejo integral de errores: Mensajes de error claros para problemas comunes
- Preservación del historial de Git: Las operaciones mantienen un historial de Git adecuado sin forzar el push
- Operaciones por lotes: Soporte para operaciones de un solo archivo y de múltiples archivos
- Búsqueda avanzada: Soporte para buscar código, issues/PRs y usuarios
Herramientas
-
create_or_update_file- Crear o actualizar un solo archivo en un repositorio
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriopath(string): Ruta donde crear/actualizar el archivocontent(string): Contenido del archivomessage(string): Mensaje de commitbranch(string): Rama en la que crear/actualizar el archivosha(opcional string): SHA del archivo que se reemplaza (para actualizaciones)
- Devuelve: Contenido del archivo y detalles del commit
-
push_files- Enviar múltiples archivos en un solo commit
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriobranch(string): Rama a la que enviarfiles(array): Archivos a enviar, cada uno conpathycontentmessage(string): Mensaje de commit
- Devuelve: Referencia de la rama actualizada
-
search_repositories- Buscar repositorios de GitHub
- Entradas:
query(string): Consulta de búsquedapage(opcional number): Número de página para la paginaciónperPage(opcional number): Resultados por página (máx. 100)
- Devuelve: Resultados de búsqueda de repositorios
-
create_repository- Crear un nuevo repositorio de GitHub
- Entradas:
name(string): Nombre del repositoriodescription(opcional string): Descripción del repositorioprivate(opcional boolean): Si el repositorio debe ser privadoautoInit(opcional boolean): Inicializar con README
- Devuelve: Detalles del repositorio creado
-
get_file_contents- Obtener el contenido de un archivo o directorio
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriopath(string): Ruta al archivo/directoriobranch(opcional string): Rama de la que obtener el contenido
- Devuelve: Contenido del archivo/directorio
-
create_issue- Crear un nuevo issue
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriotitle(string): Título del issuebody(opcional string): Descripción del issueassignees(opcional string[]): Nombres de usuario a asignarlabels(opcional string[]): Etiquetas a agregarmilestone(opcional number): Número de hito
- Devuelve: Detalles del issue creado
-
create_pull_request- Crear una nueva pull request
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriotitle(string): Título de la PRbody(opcional string): Descripción de la PRhead(string): Rama que contiene los cambiosbase(string): Rama en la que fusionardraft(opcional boolean): Crear como PR borradormaintainer_can_modify(opcional boolean): Permitir ediciones del mantenedor
- Devuelve: Detalles de la pull request creada
-
fork_repository- Hacer fork de un repositorio
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositorioorganization(opcional string): Organización a la que hacer fork
- Devuelve: Detalles del repositorio bifurcado
-
create_branch- Crear una nueva rama
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriobranch(string): Nombre para la nueva ramafrom_branch(opcional string): Rama de origen (por defecto, la rama predeterminada del repositorio)
- Devuelve: Referencia de la rama creada
-
list_issues- Listar y filtrar issues del repositorio
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriostate(opcional string): Filtrar por estado ('open', 'closed', 'all')labels(opcional string[]): Filtrar por etiquetassort(opcional string): Ordenar por ('created', 'updated', 'comments')direction(opcional string): Dirección de ordenamiento ('asc', 'desc')since(opcional string): Filtrar por fecha (marca de tiempo ISO 8601)page(opcional number): Número de páginaper_page(opcional number): Resultados por página
- Devuelve: Arreglo de detalles de issues
-
update_issue- Actualizar un issue existente
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositorioissue_number(number): Número de issue a actualizartitle(opcional string): Nuevo títulobody(opcional string): Nueva descripciónstate(opcional string): Nuevo estado ('open' o 'closed')labels(opcional string[]): Nuevas etiquetasassignees(opcional string[]): Nuevos asignadosmilestone(opcional number): Número de nuevo hito
- Devuelve: Detalles del issue actualizado
-
add_issue_comment- Agregar un comentario a un issue
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositorioissue_number(number): Número de issue al que comentarbody(string): Texto del comentario
- Devuelve: Detalles del comentario creado
-
search_code- Buscar código en repositorios de GitHub
- Entradas:
q(string): Consulta de búsqueda usando la sintaxis de búsqueda de código de GitHubsort(opcional string): Campo de ordenamiento (solo 'indexed')order(opcional string): Orden de ordenamiento ('asc' o 'desc')per_page(opcional number): Resultados por página (máx. 100)page(opcional number): Número de página
- Devuelve: Resultados de búsqueda de código con contexto del repositorio
-
search_issues- Buscar issues y pull requests
- Entradas:
q(string): Consulta de búsqueda usando la sintaxis de búsqueda de issues de GitHubsort(opcional string): Campo de ordenamiento (comments, reactions, created, etc.)order(opcional string): Orden de ordenamiento ('asc' o 'desc')per_page(opcional number): Resultados por página (máx. 100)page(opcional number): Número de página
- Devuelve: Resultados de búsqueda de issues y pull requests
-
search_users- Buscar usuarios de GitHub
- Entradas:
q(string): Consulta de búsqueda usando la sintaxis de búsqueda de usuarios de GitHubsort(opcional string): Campo de ordenamiento (followers, repositories, joined)order(opcional string): Orden de ordenamiento ('asc' o 'desc')per_page(opcional number): Resultados por página (máx. 100)page(opcional number): Número de página
- Devuelve: Resultados de búsqueda de usuarios
-
list_commits
- Obtiene los commits de una rama en un repositorio
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriopage(opcional string): número de páginaper_page(opcional string): número de registros por páginasha(opcional string): nombre de la rama
- Devuelve: Lista de commits
get_issue
- Obtiene el contenido de un issue dentro de un repositorio
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositorioissue_number(number): Número de issue a recuperar
- Devuelve: Objeto de Issue de GitHub y detalles
get_pull_request
- Obtener detalles de una pull request específica
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriopull_number(number): Número de pull request
- Devuelve: Detalles de la pull request, incluidos el diff y el estado de revisión
list_pull_requests
- Listar y filtrar pull requests del repositorio
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriostate(opcional string): Filtrar por estado ('open', 'closed', 'all')head(opcional string): Filtrar por usuario/org de la cabeza y ramabase(opcional string): Filtrar por rama basesort(opcional string): Ordenar por ('created', 'updated', 'popularity', 'long-running')direction(opcional string): Dirección de ordenamiento ('asc', 'desc')per_page(opcional number): Resultados por página (máx. 100)page(opcional number): Número de página
- Devuelve: Arreglo de detalles de pull requests
create_pull_request_review
- Crear una revisión en una pull request
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriopull_number(number): Número de pull requestbody(string): Texto del comentario de revisiónevent(string): Acción de revisión ('APPROVE', 'REQUEST_CHANGES', 'COMMENT')commit_id(opcional string): SHA del commit a revisarcomments(opcional array): Comentarios específicos de línea, cada uno con:path(string): Ruta del archivoposition(number): Posición de línea en el diffbody(string): Texto del comentario
- Devuelve: Detalles de la revisión creada
merge_pull_request
- Fusionar una pull request
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriopull_number(number): Número de pull requestcommit_title(opcional string): Título para el commit de fusióncommit_message(opcional string): Detalle adicional para el commit de fusiónmerge_method(opcional string): Método de fusión ('merge', 'squash', 'rebase')
- Devuelve: Detalles del resultado de la fusión
get_pull_request_files
- Obtener la lista de archivos modificados en una pull request
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriopull_number(number): Número de pull request
- Devuelve: Arreglo de archivos modificados con detalles de parche y estado
get_pull_request_status
- Obtener el estado combinado de todas las verificaciones de estado para una pull request
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriopull_number(number): Número de pull request
- Devuelve: Resultados combinados de verificaciones de estado y detalles de cada verificación
update_pull_request_branch
- Actualizar la rama de una pull request con los últimos cambios de la rama base (equivalente al botón "Update branch" de GitHub)
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriopull_number(number): Número de pull requestexpected_head_sha(opcional string): El SHA esperado de la referencia HEAD de la pull request
- Devuelve: Mensaje de éxito cuando se actualiza la rama
get_pull_request_comments
- Obtener los comentarios de revisión en una pull request
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriopull_number(number): Número de pull request
- Devuelve: Arreglo de comentarios de revisión de la pull request con detalles como el texto del comentario, el autor y la ubicación en el diff
get_pull_request_reviews
- Obtener las revisiones de una pull request
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriopull_number(number): Número de la pull request
- Devuelve: Matriz de revisiones de la pull request con detalles como el estado de la revisión (APPROVED, CHANGES_REQUESTED, etc.), el revisor y el cuerpo de la revisión
Sintaxis de consulta de búsqueda
Búsqueda de código
language:javascript: Buscar por lenguaje de programaciónrepo:owner/name: Buscar en un repositorio específicopath:app/src: Buscar en una ruta específicaextension:js: Buscar por extensión de archivo- Ejemplo:
q: "import express" language:typescript path:src/
Búsqueda de issues
is:issueois:pr: Filtrar por tipois:openois:closed: Filtrar por estadolabel:bug: Buscar por etiquetaauthor:username: Buscar por autor- Ejemplo:
q: "memory leak" is:issue is:open label:bug
Búsqueda de usuarios
type:userotype:org: Filtrar por tipo de cuentafollowers:>1000: Filtrar por seguidoreslocation:London: Buscar por ubicación- Ejemplo:
q: "fullstack developer" location:London followers:>100
Para conocer la sintaxis de búsqueda detallada, consulta la documentación de búsqueda de GitHub.
Configuración
Token de acceso personal
Crea un token de acceso personal de GitHub con los permisos adecuados:
- Ve a Tokens de acceso personal (en Configuración de GitHub > Configuración de desarrollador)
- Selecciona a qué repositorios quieres que tenga acceso este token (Públicos, Todos o Seleccionar)
- Crea un token con el alcance
repo("Control total de repositorios privados")- Alternativamente, si trabajas solo con repositorios públicos, selecciona únicamente el alcance
public_repo
- Alternativamente, si trabajas solo con repositorios públicos, selecciona únicamente el alcance
- Copia el token generado
Uso con Claude Desktop
Para usar esto con Claude Desktop, añade lo siguiente a tu claude_desktop_config.json:
Docker
{
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"mcp/github"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
}
}
}
}
NPX
{
"mcpServers": {
"github": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-github"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
}
}
}
}
Compilación
Compilación de Docker:
docker build -t mcp/github -f src/github/Dockerfile .
Licencia
Este servidor MCP está licenciado bajo la Licencia MIT. Esto significa que eres libre de usar, modificar y distribuir el software, sujeto a los términos y condiciones de la Licencia MIT. Para más detalles, consulta el archivo LICENSE en el repositorio del proyecto.