GitHub
Interactúa con la API de GitHub para operaciones de archivos, gestión de repositorios 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 el historial de Git adecuado sin forzar 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 archivo en un repositorio
- Entradas:
owner(cadena): propietario del repositorio (nombre de usuario u organización)repo(cadena): nombre del repositoriopath(cadena): ruta donde crear/actualizar el archivocontent(cadena): contenido del archivomessage(cadena): mensaje de confirmaciónbranch(cadena): rama en la que crear/actualizar el archivosha(cadena opcional): SHA del archivo que se reemplaza (para actualizaciones)
- Devuelve: contenido del archivo y detalles de la confirmación
-
push_files- Enviar varios archivos en una sola confirmación
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriobranch(cadena): rama a la que enviarfiles(matriz): archivos a enviar, cada uno conpathycontentmessage(cadena): mensaje de confirmación
- Devuelve: referencia de la rama actualizada
-
search_repositories- Buscar repositorios de GitHub
- Entradas:
query(cadena): consulta de búsquedapage(número opcional): número de página para la paginaciónperPage(número opcional): resultados por página (máximo 100)
- Devuelve: resultados de búsqueda de repositorios
-
create_repository- Crear un nuevo repositorio de GitHub
- Entradas:
name(cadena): nombre del repositoriodescription(cadena opcional): descripción del repositorioprivate(booleano opcional): si el repositorio debe ser privadoautoInit(booleano opcional): inicializar con README
- Devuelve: detalles del repositorio creado
-
get_file_contents- Obtener el contenido de un archivo o directorio
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriopath(cadena): ruta al archivo/directoriobranch(cadena opcional): rama de la que obtener el contenido
- Devuelve: contenido del archivo/directorio
-
create_issue- Crear un nuevo issue
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriotitle(cadena): título del issuebody(cadena opcional): descripción del issueassignees(cadena[] opcional): nombres de usuario para asignarlabels(cadena[] opcional): etiquetas para agregarmilestone(número opcional): número de hito
- Devuelve: detalles del issue creado
-
create_pull_request- Crear una nueva solicitud de extracción (pull request)
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriotitle(cadena): título de la PRbody(cadena opcional): descripción de la PRhead(cadena): rama que contiene los cambiosbase(cadena): rama en la que fusionardraft(booleano opcional): crear como PR borradormaintainer_can_modify(booleano opcional): permitir ediciones del mantenedor
- Devuelve: detalles de la solicitud de extracción creada
-
fork_repository- Hacer fork de un repositorio
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositorioorganization(cadena opcional): organización a la que hacer fork
- Devuelve: detalles del repositorio bifurcado
-
create_branch- Crear una nueva rama
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriobranch(cadena): nombre para la nueva ramafrom_branch(cadena opcional): 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(cadena): propietario del repositoriorepo(cadena): nombre del repositoriostate(cadena opcional): filtrar por estado ('open', 'closed', 'all')labels(cadena[] opcional): filtrar por etiquetassort(cadena opcional): ordenar por ('created', 'updated', 'comments')direction(cadena opcional): dirección de orden ('asc', 'desc')since(cadena opcional): filtrar por fecha (marca de tiempo ISO 8601)page(número opcional): número de páginaper_page(número opcional): resultados por página
- Devuelve: matriz de detalles de issues
-
update_issue- Actualizar un issue existente
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositorioissue_number(número): número del issue a actualizartitle(cadena opcional): nuevo títulobody(cadena opcional): nueva descripciónstate(cadena opcional): nuevo estado ('open' o 'closed')labels(cadena[] opcional): nuevas etiquetasassignees(cadena[] opcional): nuevos asignadosmilestone(número opcional): nuevo número de hito
- Devuelve: detalles del issue actualizado
-
add_issue_comment- Agregar un comentario a un issue
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositorioissue_number(número): número del issue en el que comentarbody(cadena): texto del comentario
- Devuelve: detalles del comentario creado
-
search_code- Buscar código en los repositorios de GitHub
- Entradas:
q(cadena): consulta de búsqueda usando la sintaxis de búsqueda de código de GitHubsort(cadena opcional): campo de orden ('indexed' únicamente)order(cadena opcional): orden ('asc' o 'desc')per_page(número opcional): resultados por página (máximo 100)page(número opcional): número de página
- Devuelve: resultados de búsqueda de código con contexto del repositorio
-
search_issues- Buscar issues y solicitudes de extracción
- Entradas:
q(cadena): consulta de búsqueda usando la sintaxis de búsqueda de issues de GitHubsort(cadena opcional): campo de orden (comments, reactions, created, etc.)order(cadena opcional): orden ('asc' o 'desc')per_page(número opcional): resultados por página (máximo 100)page(número opcional): número de página
- Devuelve: resultados de búsqueda de issues y solicitudes de extracción
-
search_users- Buscar usuarios de GitHub
- Entradas:
q(cadena): consulta de búsqueda usando la sintaxis de búsqueda de usuarios de GitHubsort(cadena opcional): campo de orden (followers, repositories, joined)order(cadena opcional): orden ('asc' o 'desc')per_page(número opcional): resultados por página (máximo 100)page(número opcional): número de página
- Devuelve: resultados de búsqueda de usuarios
-
list_commits
- Obtiene las confirmaciones (commits) de una rama en un repositorio
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriopage(cadena opcional): número de páginaper_page(cadena opcional): número de registros por páginasha(cadena opcional): nombre de la rama
- Devuelve: lista de confirmaciones
get_issue
- Obtiene el contenido de un issue dentro de un repositorio
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositorioissue_number(número): número del issue a recuperar
- Devuelve: objeto de issue de GitHub y detalles
get_pull_request
- Obtener detalles de una solicitud de extracción específica
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriopull_number(número): número de la solicitud de extracción
- Devuelve: detalles de la solicitud de extracción, incluidos diff y estado de revisión
list_pull_requests
- Listar y filtrar solicitudes de extracción del repositorio
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriostate(cadena opcional): filtrar por estado ('open', 'closed', 'all')head(cadena opcional): filtrar por usuario/organización y rama headbase(cadena opcional): filtrar por rama basesort(cadena opcional): ordenar por ('created', 'updated', 'popularity', 'long-running')direction(cadena opcional): dirección de orden ('asc', 'desc')per_page(número opcional): resultados por página (máximo 100)page(número opcional): número de página
- Devuelve: matriz de detalles de solicitudes de extracción
create_pull_request_review
- Crear una revisión en una solicitud de extracción
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriopull_number(número): número de la solicitud de extracciónbody(cadena): texto del comentario de revisiónevent(cadena): acción de revisión ('APPROVE', 'REQUEST_CHANGES', 'COMMENT')commit_id(cadena opcional): SHA de la confirmación a revisarcomments(matriz opcional): comentarios específicos de línea, cada uno con:path(cadena): ruta del archivoposition(número): posición de línea en el diffbody(cadena): texto del comentario
- Devuelve: detalles de la revisión creada
merge_pull_request
- Fusionar una solicitud de extracción
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriopull_number(número): número de la solicitud de extraccióncommit_title(cadena opcional): título para la confirmación de fusióncommit_message(cadena opcional): detalle adicional para la confirmación de fusiónmerge_method(cadena opcional): 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 solicitud de extracción
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriopull_number(número): número de la solicitud de extracción
- Devuelve: matriz de archivos modificados con detalles de parche y estado
get_pull_request_status
- Obtener el estado combinado de todas las comprobaciones de estado para una solicitud de extracción
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriopull_number(número): número de la solicitud de extracción
- Devuelve: resultados de comprobación de estado combinados y detalles de comprobación individuales
update_pull_request_branch
- Actualizar la rama de una solicitud de extracción con los últimos cambios de la rama base (equivalente al botón "Update branch" de GitHub)
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriopull_number(número): número de la solicitud de extracciónexpected_head_sha(cadena opcional): el SHA esperado de la referencia HEAD de la solicitud de extracción
- Devuelve: mensaje de éxito cuando la rama se actualiza
get_pull_request_comments
- Obtener los comentarios de revisión en una solicitud de extracción
- Entradas:
owner(cadena): propietario del repositoriorepo(cadena): nombre del repositoriopull_number(número): número de la solicitud de extracción
- Devuelve: matriz de comentarios de revisión de la solicitud de extracción 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 solicitud de extracción
- Entradas:
owner(string): Propietario del repositoriorepo(string): Nombre del repositoriopull_number(number): Número de solicitud de extracción
- Devuelve: Matriz de revisiones de solicitudes de extracción con detalles como el estado de la revisión (APPROVED, CHANGES_REQUESTED, etc.), revisor y 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 problemas
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 obtener 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 deseas que este token tenga acceso (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, agrega 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.