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

  1. 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 repositorio
      • path (cadena): ruta donde crear/actualizar el archivo
      • content (cadena): contenido del archivo
      • message (cadena): mensaje de confirmación
      • branch (cadena): rama en la que crear/actualizar el archivo
      • sha (cadena opcional): SHA del archivo que se reemplaza (para actualizaciones)
    • Devuelve: contenido del archivo y detalles de la confirmación
  2. push_files

    • Enviar varios archivos en una sola confirmación
    • Entradas:
      • owner (cadena): propietario del repositorio
      • repo (cadena): nombre del repositorio
      • branch (cadena): rama a la que enviar
      • files (matriz): archivos a enviar, cada uno con path y content
      • message (cadena): mensaje de confirmación
    • Devuelve: referencia de la rama actualizada
  3. search_repositories

    • Buscar repositorios de GitHub
    • Entradas:
      • query (cadena): consulta de búsqueda
      • page (número opcional): número de página para la paginación
      • perPage (número opcional): resultados por página (máximo 100)
    • Devuelve: resultados de búsqueda de repositorios
  4. create_repository

    • Crear un nuevo repositorio de GitHub
    • Entradas:
      • name (cadena): nombre del repositorio
      • description (cadena opcional): descripción del repositorio
      • private (booleano opcional): si el repositorio debe ser privado
      • autoInit (booleano opcional): inicializar con README
    • Devuelve: detalles del repositorio creado
  5. get_file_contents

    • Obtener el contenido de un archivo o directorio
    • Entradas:
      • owner (cadena): propietario del repositorio
      • repo (cadena): nombre del repositorio
      • path (cadena): ruta al archivo/directorio
      • branch (cadena opcional): rama de la que obtener el contenido
    • Devuelve: contenido del archivo/directorio
  6. create_issue

    • Crear un nuevo issue
    • Entradas:
      • owner (cadena): propietario del repositorio
      • repo (cadena): nombre del repositorio
      • title (cadena): título del issue
      • body (cadena opcional): descripción del issue
      • assignees (cadena[] opcional): nombres de usuario para asignar
      • labels (cadena[] opcional): etiquetas para agregar
      • milestone (número opcional): número de hito
    • Devuelve: detalles del issue creado
  7. create_pull_request

    • Crear una nueva solicitud de extracción (pull request)
    • Entradas:
      • owner (cadena): propietario del repositorio
      • repo (cadena): nombre del repositorio
      • title (cadena): título de la PR
      • body (cadena opcional): descripción de la PR
      • head (cadena): rama que contiene los cambios
      • base (cadena): rama en la que fusionar
      • draft (booleano opcional): crear como PR borrador
      • maintainer_can_modify (booleano opcional): permitir ediciones del mantenedor
    • Devuelve: detalles de la solicitud de extracción creada
  8. fork_repository

    • Hacer fork de un repositorio
    • Entradas:
      • owner (cadena): propietario del repositorio
      • repo (cadena): nombre del repositorio
      • organization (cadena opcional): organización a la que hacer fork
    • Devuelve: detalles del repositorio bifurcado
  9. create_branch

    • Crear una nueva rama
    • Entradas:
      • owner (cadena): propietario del repositorio
      • repo (cadena): nombre del repositorio
      • branch (cadena): nombre para la nueva rama
      • from_branch (cadena opcional): rama de origen (por defecto la rama predeterminada del repositorio)
    • Devuelve: referencia de la rama creada
  10. list_issues

    • Listar y filtrar issues del repositorio
    • Entradas:
      • owner (cadena): propietario del repositorio
      • repo (cadena): nombre del repositorio
      • state (cadena opcional): filtrar por estado ('open', 'closed', 'all')
      • labels (cadena[] opcional): filtrar por etiquetas
      • sort (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ágina
      • per_page (número opcional): resultados por página
    • Devuelve: matriz de detalles de issues
  11. update_issue

    • Actualizar un issue existente
    • Entradas:
      • owner (cadena): propietario del repositorio
      • repo (cadena): nombre del repositorio
      • issue_number (número): número del issue a actualizar
      • title (cadena opcional): nuevo título
      • body (cadena opcional): nueva descripción
      • state (cadena opcional): nuevo estado ('open' o 'closed')
      • labels (cadena[] opcional): nuevas etiquetas
      • assignees (cadena[] opcional): nuevos asignados
      • milestone (número opcional): nuevo número de hito
    • Devuelve: detalles del issue actualizado
  12. add_issue_comment

    • Agregar un comentario a un issue
    • Entradas:
      • owner (cadena): propietario del repositorio
      • repo (cadena): nombre del repositorio
      • issue_number (número): número del issue en el que comentar
      • body (cadena): texto del comentario
    • Devuelve: detalles del comentario creado
  13. 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 GitHub
      • sort (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
  14. 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 GitHub
      • sort (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
  15. search_users

    • Buscar usuarios de GitHub
    • Entradas:
      • q (cadena): consulta de búsqueda usando la sintaxis de búsqueda de usuarios de GitHub
      • sort (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
  16. list_commits

  • Obtiene las confirmaciones (commits) de una rama en un repositorio
  • Entradas:
    • owner (cadena): propietario del repositorio
    • repo (cadena): nombre del repositorio
    • page (cadena opcional): número de página
    • per_page (cadena opcional): número de registros por página
    • sha (cadena opcional): nombre de la rama
  • Devuelve: lista de confirmaciones
  1. get_issue
  • Obtiene el contenido de un issue dentro de un repositorio
  • Entradas:
    • owner (cadena): propietario del repositorio
    • repo (cadena): nombre del repositorio
    • issue_number (número): número del issue a recuperar
  • Devuelve: objeto de issue de GitHub y detalles
  1. get_pull_request
  • Obtener detalles de una solicitud de extracción específica
  • Entradas:
    • owner (cadena): propietario del repositorio
    • repo (cadena): nombre del repositorio
    • pull_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
  1. list_pull_requests
  • Listar y filtrar solicitudes de extracción del repositorio
  • Entradas:
    • owner (cadena): propietario del repositorio
    • repo (cadena): nombre del repositorio
    • state (cadena opcional): filtrar por estado ('open', 'closed', 'all')
    • head (cadena opcional): filtrar por usuario/organización y rama head
    • base (cadena opcional): filtrar por rama base
    • sort (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
  1. create_pull_request_review
  • Crear una revisión en una solicitud de extracción
  • Entradas:
    • owner (cadena): propietario del repositorio
    • repo (cadena): nombre del repositorio
    • pull_number (número): número de la solicitud de extracción
    • body (cadena): texto del comentario de revisión
    • event (cadena): acción de revisión ('APPROVE', 'REQUEST_CHANGES', 'COMMENT')
    • commit_id (cadena opcional): SHA de la confirmación a revisar
    • comments (matriz opcional): comentarios específicos de línea, cada uno con:
      • path (cadena): ruta del archivo
      • position (número): posición de línea en el diff
      • body (cadena): texto del comentario
  • Devuelve: detalles de la revisión creada
  1. merge_pull_request
  • Fusionar una solicitud de extracción
  • Entradas:
    • owner (cadena): propietario del repositorio
    • repo (cadena): nombre del repositorio
    • pull_number (número): número de la solicitud de extracción
    • commit_title (cadena opcional): título para la confirmación de fusión
    • commit_message (cadena opcional): detalle adicional para la confirmación de fusión
    • merge_method (cadena opcional): método de fusión ('merge', 'squash', 'rebase')
  • Devuelve: detalles del resultado de la fusión
  1. get_pull_request_files
  • Obtener la lista de archivos modificados en una solicitud de extracción
  • Entradas:
    • owner (cadena): propietario del repositorio
    • repo (cadena): nombre del repositorio
    • pull_number (número): número de la solicitud de extracción
  • Devuelve: matriz de archivos modificados con detalles de parche y estado
  1. 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 repositorio
    • repo (cadena): nombre del repositorio
    • pull_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
  1. 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 repositorio
    • repo (cadena): nombre del repositorio
    • pull_number (número): número de la solicitud de extracción
    • expected_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
  1. get_pull_request_comments
  • Obtener los comentarios de revisión en una solicitud de extracción
  • Entradas:
    • owner (cadena): propietario del repositorio
    • repo (cadena): nombre del repositorio
    • pull_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
  1. get_pull_request_reviews
  • Obtener las revisiones de una solicitud de extracción
  • Entradas:
    • owner (string): Propietario del repositorio
    • repo (string): Nombre del repositorio
    • pull_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ón
  • repo:owner/name: Buscar en un repositorio específico
  • path:app/src: Buscar en una ruta específica
  • extension:js: Buscar por extensión de archivo
  • Ejemplo: q: "import express" language:typescript path:src/

Búsqueda de problemas

  • is:issue o is:pr: Filtrar por tipo
  • is:open o is:closed: Filtrar por estado
  • label:bug: Buscar por etiqueta
  • author:username: Buscar por autor
  • Ejemplo: q: "memory leak" is:issue is:open label:bug

Búsqueda de usuarios

  • type:user o type:org: Filtrar por tipo de cuenta
  • followers:>1000: Filtrar por seguidores
  • location: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
  • 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.