GitHub MCP Server
Integra funcionalidades de GitHub en asistentes de IA usando la CLI de GitHub.
Documentación
GitHub MCP Server
Un servidor Model Context Protocol (MCP) basado en Spring Boot que proporciona herramientas de integración con GitHub para asistentes de IA como Claude Desktop.
Resumen
Este servidor implementa el Model Context Protocol para exponer operaciones de GitHub como herramientas que pueden ser utilizadas por clientes MCP. Aprovecha la GitHub CLI (gh) para realizar diversas operaciones de GitHub, incluyendo gestión de repositorios, seguimiento de incidencias, gestión de pull requests y más. Esto proporciona una alternativa ligera al servidor MCP oficial de GitHub que no requiere Docker.
Inicio rápido para Claude Desktop
Para usar este servidor con Claude Desktop, añade lo siguiente a tu archivo de configuración de Claude:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"github": {
"command": "java",
"args": ["-jar", "/path/to/gh_mcp_server/build/libs/gh_mcp_server.jar"],
"env": {}
}
}
}
Reemplaza /path/to/gh_mcp_server con la ruta real a tu directorio del proyecto.
Características
Operaciones de repositorio
- Listar repositorios del usuario autenticado
- Buscar repositorios en GitHub
- Obtener información detallada de repositorios
- Listar ramas en un repositorio
- Crear nuevas ramas
- Obtener contenido de archivos de repositorios
- Obtener historial de commits
Gestión de incidencias
- Listar incidencias (abiertas, cerradas o todas)
- Obtener información detallada de incidencias
- Crear nuevas incidencias
- Cerrar incidencias
- Añadir comentarios a incidencias
- Editar título y cuerpo de incidencias
Gestión de pull requests
- Listar pull requests
- Obtener información detallada de pull requests
- Crear nuevas pull requests
- Fusionar pull requests (merge, squash o rebase)
- Cerrar pull requests
- Añadir comentarios a pull requests
Workflows y acciones
- Listar workflows en un repositorio
- Listar ejecuciones de workflows con filtrado opcional
- Ver información detallada de ejecuciones de workflows
Gestión de releases
- Listar releases
- Ver detalles de releases
- Crear nuevos releases (con opciones de borrador/pre-lanzamiento)
Operaciones de usuario
- Obtener detalles del usuario autenticado
Requisitos previos
- Java 21 o superior - Utiliza características modernas de Java (virtual threads, records, pattern matching)
- GitHub CLI (
gh) - Debe estar instalada y autenticada - Gradle - Wrapper incluido en el proyecto
¿Por qué usar este servidor MCP?
- 🚀 Ligero: No requiere Docker, implementación pura en Java
- 🔧 Integral: 26 operaciones de GitHub que cubren flujos de trabajo completos
- ⚡ Rápido: Integración directa con GitHub CLI con respuestas JSON optimizadas
- 🧪 Bien probado: Más de 75 casos de prueba que garantizan la fiabilidad
- 🛡️ Seguro: Aprovecha la autenticación existente de GitHub CLI
Configuración
-
Instalar GitHub CLI
# macOS brew install gh # or download from https://cli.github.com/ -
Autenticarse con GitHub
gh auth login -
Clonar y compilar el proyecto
git clone <repository-url> cd gh_mcp_server ./gradlew buildNota: La compilación crea automáticamente un enlace simbólico independiente de versión
gh_mcp_server.jar→gh_mcp_server-1.0.0.jar -
Configurar Claude Desktop
Después de compilar, configura Claude para usar este servidor MCP. Tienes dos opciones:
Opción A: Usando el archivo JAR (Recomendado)
{ "mcpServers": { "github": { "command": "java", "args": ["-jar", "/path/to/gh_mcp_server/build/libs/gh_mcp_server.jar"], "env": {} } } }Nota: Un enlace simbólico
gh_mcp_server.jarapunta a la versión actual (gh_mcp_server-1.0.0.jar). Esto proporciona una implementación independiente de la versión. Para una implementación específica de versión, usa el nombre de archivo completo con versión.Opción B: Usando Gradle
{ "mcpServers": { "github": { "command": "./gradlew", "args": ["bootRun"], "cwd": "/path/to/gh_mcp_server", "env": {} } } } -
Reinicia Claude Desktop para cargar la nueva configuración del servidor
Ejemplos de uso
Después de configurar Claude Desktop, puedes usar lenguaje natural para interactuar con GitHub:
Gestión de repositorios
- "Lista mis repositorios" → Muestra tus repositorios con detalles
- "Lista mis repositorios privados" → Filtra por visibilidad (público/privado/interno)
- "Busca repositorios de Spring Boot con más de 1000 estrellas"
- "Muéstrame detalles del repositorio microsoft/vscode"
- "Obtén los últimos 5 commits de mi repositorio de proyecto"
- "¿Qué ramas existen en mi repositorio de proyecto?"
Seguimiento de incidencias
- "Lista las incidencias abiertas en mi proyecto" → Lista las incidencias abiertas actuales
- "Muéstrame los detalles de la incidencia #123" → Obtiene información específica de la incidencia
- "Crea una nueva incidencia titulada 'Error: el inicio de sesión falla' con descripción..."
- "Cierra la incidencia #123 y añade un comentario 'Corregido en la última versión'"
Gestión de pull requests
- "Lista todas las pull requests en el repositorio kubernetes/kubernetes"
- "Muéstrame los detalles del PR #456"
- "Crea una pull request desde mi feature-branch a main"
- "Fusiona el PR #789 usando estrategia squash"
CI/CD y releases
- "Muéstrame todos los workflows en este repositorio" → Lista GitHub Actions
- "¿Cuál es el estado de las ejecuciones recientes de workflows?"
- "Lista los releases del repositorio golang/go"
- "Crea un nuevo release v2.1.0 como borrador"
Operaciones de archivos
- "Obtén el contenido de package.json de mi proyecto"
- "Muéstrame el archivo README de la rama main"
Verificación
Si el servidor no se inicia, comprueba que:
- Java 21+ está instalado y en tu PATH
- GitHub CLI está instalada y autenticada (
gh auth status) - La ruta del archivo JAR en la configuración es correcta
- Claude Desktop ha sido reiniciado
Pruebas del servidor
Para probar el servidor de forma independiente (sin Claude):
./gradlew bootRun
El servidor se iniciará en modo STDIO y esperará mensajes del protocolo MCP. Sin embargo, para uso normal, el servidor debe configurarse para que Claude Desktop lo ejecute automáticamente como se muestra arriba.
Comandos de desarrollo
# Build the project and run all tests
./gradlew build
# Run tests (command syntax validation only)
./gradlew test
# Run tests including GitHub CLI integration tests
./gradlew test -Dtest.gh.integration=true
# Format code with Spotless (Google Java Format)
./gradlew spotlessApply
# Check code formatting without applying changes
./gradlew spotlessCheck
# Clean build artifacts
./gradlew clean
# Run the server locally for testing
./gradlew bootRun
Cobertura de pruebas
El proyecto incluye una cobertura de pruebas integral:
- Más de 75 casos de prueba que validan las 26 operaciones de GitHub
- Pruebas de sintaxis de comandos - Verifican la construcción exacta de comandos
gh - Pruebas de casos límite - Manejan caracteres especiales, Unicode, valores nulos
- Pruebas de integración - Ejecución opcional de GitHub CLI real
- Pruebas de manejo de errores - Validan modos de fallo elegantes
Consulta src/test/java/com/kousenit/gh_mcp_server/TEST_README.md para la documentación detallada de pruebas.
Configuración
El servidor usa la configuración predeterminada de Spring Boot. Puedes personalizar los ajustes en src/main/resources/application.properties.
Opciones de configuración clave
github.defaultBranch- Nombre de rama predeterminado para operaciones (predeterminado:main)spring.threads.virtual.enabled- Habilita virtual threads para mejor rendimiento (predeterminado:true)- El servidor MCP se ejecuta en modo STDIO para integración CLI
Operaciones disponibles (26 en total)
Operaciones de repositorio
listRepositories- Lista los repositorios del usuario con filtro de visibilidad opcional (público/privado/interno)searchRepositories- Busca repositorios en GitHubgetRepository- Obtiene información detallada del repositoriogetCommitHistory- Obtiene el historial de commits del repositorio con límite configurablelistBranches- Lista las ramas del repositoriocreateBranch- Crea una nueva rama
Gestión de incidencias
listIssues- Lista incidencias en el repositoriogetIssue- Obtiene detalles de una incidencia específicacreateIssue- Crea una nueva incidenciacloseIssue- Cierra una incidenciacommentOnIssue- Añade comentario a una incidenciaeditIssue- Edita título/cuerpo de una incidencia
Gestión de pull requests
listPullRequests- Lista pull requestsgetPullRequest- Obtiene detalles del PRcreatePullRequest- Crea una nueva pull requestmergePullRequest- Fusiona PR (merge/squash/rebase)closePullRequest- Cierra pull requestcommentOnPullRequest- Añade comentario al PR
Workflows y CI/CD
listWorkflows- Lista workflows del repositoriolistWorkflowRuns- Lista ejecuciones de workflows con filtradogetWorkflowRun- Obtiene detalles de ejecución de workflow
Gestión de releases
listReleases- Lista releases del repositoriogetRelease- Obtiene detalles de releasecreateRelease- Crea nuevo release (opciones de borrador/pre-lanzamiento)
Operaciones de archivos y usuario
getFileContents- Obtiene contenido de archivos del repositoriogetMe- Obtiene detalles del usuario autenticado
Todas las operaciones devuelven respuestas JSON optimizadas y soportan un manejo integral de errores.
Solución de problemas
Problemas comunes
"gh: command not found"
- Instala GitHub CLI desde https://cli.github.com/
- Asegúrate de que
ghesté en tu PATH del sistema - Prueba con
gh --version
Errores de autenticación
- Ejecuta
gh auth loginpara autenticarte - Comprueba el estado con
gh auth status - Asegúrate de tener acceso a los repositorios a los que intentas acceder
Fallos al iniciar el servidor
- Verifica que Java 21+ esté instalado:
java --version - Comprueba la ruta del archivo JAR en la configuración de Claude
- Busca mensajes de error en los registros de Claude Desktop
- Asegúrate de que el servidor no esté ya ejecutándose en otra instancia
Tiempos de espera agotados en comandos
- Los repositorios grandes o las redes lentas pueden causar tiempos de espera
- El tiempo de espera predeterminado es de 30 segundos por operación
- Comprueba tu conexión a internet y el estado de la API de GitHub
Errores de permisos denegados
- Asegúrate de que GitHub CLI tenga los permisos adecuados para el repositorio
- Para repositorios de organizaciones, comprueba si tienes el acceso adecuado
- Algunas operaciones requieren permisos de escritura (crear, editar, fusionar, cerrar)
Consejos de rendimiento
- Usa nombres específicos de repositorio y propietario para respuestas más rápidas
- Limita los resultados de búsqueda con parámetros de límite apropiados
- El servidor usa virtual threads para un rendimiento concurrente óptimo
- GitHub CLI maneja la limitación de tasa automáticamente
Obtener ayuda
- Consulta la documentación de GitHub CLI:
gh help - Revisa el protocolo MCP: https://modelcontextprotocol.io/
- Para problemas del servidor, habilita el registro de depuración en application.properties
Consideraciones de implementación
Versionado de JAR
El proceso de compilación genera archivos JAR con números de versión en el nombre de archivo (p. ej., gh_mcp_server-1.0.0.jar). Al implementar o actualizar:
-
Implementación inicial: Usa la versión actual en tu configuración de Claude Desktop:
"args": ["-jar", "/path/to/gh_mcp_server/build/libs/gh_mcp_server-1.0.0.jar"] -
Actualizaciones de versión: Al actualizar a una nueva versión, debes:
- Compilar la nueva versión:
./gradlew build - Actualizar tu configuración de Claude Desktop con el nuevo nombre de archivo JAR
- Reiniciar Claude Desktop para cargar la nueva versión
- Compilar la nueva versión:
-
Implementación independiente de versión: Para una implementación más fácil, puedes:
- Usar el enlace simbólico generado automáticamente
gh_mcp_server.jar(creado automáticamente durante la compilación) - Usar la opción de Gradle (usa automáticamente la última compilación)
- Usar un script de implementación que maneje las actualizaciones de versión
Gestión automática de enlaces simbólicos: El proceso de compilación crea y mantiene automáticamente el enlace simbólico:
./gradlew buildcreagh_mcp_server.jar→gh_mcp_server-X.Y.Z.jar./gradlew clean buildrecrea el enlace simbólico con la versión correcta- No se requiere gestión manual de enlaces simbólicos
- Usar el enlace simbólico generado automáticamente
Gestión de configuración
- Mantén tu configuración de Claude Desktop en control de versiones
- Documenta la versión específica del JAR que se usa en producción
- Considera usar variables de entorno para rutas en scripts de implementación
Stack tecnológico
- Spring Boot 3.5.0 - Marco de aplicación
- Spring AI 1.0.0 - Integración de IA y capacidades de servidor MCP
- Java 21 - Lenguaje de programación con soporte de virtual threads
- GitHub CLI - Integración con la API de GitHub
- Gradle - Herramienta de compilación
- Spotless - Formato de código con Google Java Format
Características clave de implementación
- Virtual Threads (Java 21) - Operaciones de E/S concurrentes eficientes
- ProcessBuilder - Ejecución segura de comandos con soporte de tiempo de espera
- Records (Java 17) - Estructuras de datos inmutables para resultados de comandos
- Pattern Matching - Sintaxis moderna de Java para comprobación de tipos
- String Templates - Usando
String.formatted()para una construcción de cadenas más limpia
Licencia
Este proyecto está licenciado bajo la Licencia MIT - consulta el archivo LICENSE para más detalles.