GitHub

Interactúa con repositorios de GitHub, incluyendo 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.

Modificaciones de Mission Squad

  • El PAT de GitHub ahora es dinámico por solicitud y no tiene que incluirse mediante variables de entorno, pero aún así recurre a las variables de entorno.
  • name: mcp-github

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 archivo único 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 solo archivo en un repositorio
    • Entradas:
      • owner (string): Propietario del repositorio (nombre de usuario u organización)
      • repo (string): Nombre del repositorio
      • path (string): Ruta donde crear/actualizar el archivo
      • content (string): Contenido del archivo
      • message (string): Mensaje del commit
      • branch (string): Rama en la que crear/actualizar el archivo
      • sha (optional string): SHA del archivo que se reemplaza (para actualizaciones)
    • Devuelve: Contenido del archivo y detalles del commit
  2. push_files

    • Enviar múltiples archivos en un solo commit
    • Entradas:
      • owner (string): Propietario del repositorio
      • repo (string): Nombre del repositorio
      • branch (string): Rama a la que enviar
      • files (array): Archivos a enviar, cada uno con path y content
      • message (string): Mensaje del commit
    • Devuelve: Referencia de rama actualizada
  3. search_repositories

    • Buscar repositorios de GitHub
    • Entradas:
      • query (string): Consulta de búsqueda
      • page (optional number): Número de página para paginación
      • perPage (optional number): Resultados por página (máx. 100)
    • Devuelve: Resultados de búsqueda de repositorios
  4. create_repository

    • Crear un nuevo repositorio de GitHub
    • Entradas:
      • name (string): Nombre del repositorio
      • description (optional string): Descripción del repositorio
      • private (optional boolean): Si el repositorio debe ser privado
      • autoInit (optional boolean): Inicializar con README
    • Devuelve: Detalles del repositorio creado
  5. get_file_contents

    • Obtener el contenido de un archivo o directorio
    • Entradas:
      • owner (string): Propietario del repositorio
      • repo (string): Nombre del repositorio
      • path (string): Ruta al archivo/directorio
      • branch (optional string): Rama de la que obtener el contenido
    • Devuelve: Contenido del archivo/directorio
  6. create_issue

    • Crear un nuevo issue
    • Entradas:
      • owner (string): Propietario del repositorio
      • repo (string): Nombre del repositorio
      • title (string): Título del issue
      • body (optional string): Descripción del issue
      • assignees (optional string[]): Nombres de usuario a asignar
      • labels (optional string[]): Etiquetas a añadir
      • milestone (optional number): Número de hito
    • Devuelve: Detalles del issue creado
  7. create_pull_request

    • Crear una nueva pull request
    • Entradas:
      • owner (string): Propietario del repositorio
      • repo (string): Nombre del repositorio
      • title (string): Título del PR
      • body (optional string): Descripción del PR
      • head (string): Rama que contiene los cambios
      • base (string): Rama en la que fusionar
      • draft (optional boolean): Crear como PR borrador
      • maintainer_can_modify (optional boolean): Permitir ediciones del mantenedor
    • Devuelve: Detalles de la pull request creada
  8. fork_repository

    • Hacer fork de un repositorio
    • Entradas:
      • owner (string): Propietario del repositorio
      • repo (string): Nombre del repositorio
      • organization (optional string): Organización a la que hacer fork
    • Devuelve: Detalles del repositorio bifurcado
  9. create_branch

    • Crear una nueva rama
    • Entradas:
      • owner (string): Propietario del repositorio
      • repo (string): Nombre del repositorio
      • branch (string): Nombre para la nueva rama
      • from_branch (optional string): 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 (string): Propietario del repositorio
      • repo (string): Nombre del repositorio
      • state (optional string): Filtrar por estado ('open', 'closed', 'all')
      • labels (optional string[]): Filtrar por etiquetas
      • sort (optional string): Ordenar por ('created', 'updated', 'comments')
      • direction (optional string): Dirección de ordenación ('asc', 'desc')
      • since (optional string): Filtrar por fecha (marca de tiempo ISO 8601)
      • page (optional number): Número de página
      • per_page (optional number): Resultados por página
    • Devuelve: Matriz de detalles de issues
  11. update_issue

    • Actualizar un issue existente
    • Entradas:
      • owner (string): Propietario del repositorio
      • repo (string): Nombre del repositorio
      • issue_number (number): Número de issue a actualizar
      • title (optional string): Nuevo título
      • body (optional string): Nueva descripción
      • state (optional string): Nuevo estado ('open' o 'closed')
      • labels (optional string[]): Nuevas etiquetas
      • assignees (optional string[]): Nuevos asignados
      • milestone (optional number): Nuevo número de hito
    • Devuelve: Detalles del issue actualizado
  12. add_issue_comment

    • Añadir un comentario a un issue
    • Entradas:
      • owner (string): Propietario del repositorio
      • repo (string): Nombre del repositorio
      • issue_number (number): Número de issue al que comentar
      • body (string): Texto del comentario
    • Devuelve: Detalles del comentario creado
  13. 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 GitHub
      • sort (optional string): Campo de ordenación (solo 'indexed')
      • order (optional string): Orden de ordenación ('asc' o 'desc')
      • per_page (optional number): Resultados por página (máx. 100)
      • page (optional number): Número de página
    • Devuelve: Resultados de búsqueda de código con contexto del repositorio
  14. search_issues

    • Buscar issues y pull requests
    • Entradas:
      • q (string): Consulta de búsqueda usando la sintaxis de búsqueda de issues de GitHub
      • sort (optional string): Campo de ordenación (comments, reactions, created, etc.)
      • order (optional string): Orden de ordenación ('asc' o 'desc')
      • per_page (optional number): Resultados por página (máx. 100)
      • page (optional number): Número de página
    • Devuelve: Resultados de búsqueda de issues y pull requests
  15. search_users

    • Buscar usuarios de GitHub
    • Entradas:
      • q (string): Consulta de búsqueda usando la sintaxis de búsqueda de usuarios de GitHub
      • sort (optional string): Campo de ordenación (followers, repositories, joined)
      • order (optional string): Orden de ordenación ('asc' o 'desc')
      • per_page (optional number): Resultados por página (máx. 100)
      • page (optional number): Número de página
    • Devuelve: Resultados de búsqueda de usuarios
  16. list_commits

  • Obtiene los commits de una rama en un repositorio
  • Entradas:
    • owner (string): Propietario del repositorio
    • repo (string): Nombre del repositorio
    • page (optional string): número de página
    • per_page (optional string): número de registros por página
    • sha (optional string): nombre de la rama
  • Devuelve: Lista de commits
  1. get_issue
  • Obtiene el contenido de un issue dentro de un repositorio
  • Entradas:
    • owner (string): Propietario del repositorio
    • repo (string): Nombre del repositorio
    • issue_number (number): Número de issue a recuperar
  • Devuelve: Objeto de issue de GitHub y detalles
  1. get_pull_request
  • Obtener detalles de una pull request específica
  • Entradas:
    • owner (string): Propietario del repositorio
    • repo (string): Nombre del repositorio
    • pull_number (number): Número de pull request
  • Devuelve: Detalles de la pull request, incluidos el diff y el estado de revisión
  1. list_pull_requests
  • Listar y filtrar pull requests del repositorio
  • Entradas:
    • owner (string): Propietario del repositorio
    • repo (string): Nombre del repositorio
    • state (optional string): Filtrar por estado ('open', 'closed', 'all')
    • head (optional string): Filtrar por usuario/org de la rama head y rama
    • base (optional string): Filtrar por rama base
    • sort (optional string): Ordenar por ('created', 'updated', 'popularity', 'long-running')
    • direction (optional string): Dirección de ordenación ('asc', 'desc')
    • per_page (optional number): Resultados por página (máx. 100)
    • page (optional number): Número de página
  • Devuelve: Matriz de detalles de pull requests
  1. create_pull_request_review
  • Crear una revisión en una pull request
  • Entradas:
    • owner (string): Propietario del repositorio
    • repo (string): Nombre del repositorio
    • pull_number (number): Número de pull request
    • body (string): Texto del comentario de revisión
    • event (string): Acción de revisión ('APPROVE', 'REQUEST_CHANGES', 'COMMENT')
    • commit_id (optional string): SHA del commit a revisar
    • comments (optional array): Comentarios específicos de línea, cada uno con:
      • path (string): Ruta del archivo
      • position (number): Posición de línea en el diff
      • body (string): Texto del comentario
  • Devuelve: Detalles de la revisión creada
  1. merge_pull_request
  • Fusionar una pull request
  • Entradas:
    • owner (string): Propietario del repositorio
    • repo (string): Nombre del repositorio
    • pull_number (number): Número de pull request
    • commit_title (optional string): Título para el commit de fusión
    • commit_message (optional string): Detalle adicional para el commit de fusión
    • merge_method (optional string): 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 pull request
  • Entradas:
    • owner (string): Propietario del repositorio
    • repo (string): Nombre del repositorio
    • pull_number (number): Número de pull request
  • Devuelve: Matriz de archivos modificados con detalles de patch y estado
  1. get_pull_request_status
  • Obtener el estado combinado de todas las comprobaciones de estado de una pull request
  • Entradas:
    • owner (string): Propietario del repositorio
    • repo (string): Nombre del repositorio
    • pull_number (number): Número de pull request
  • Devuelve: Resultados combinados de comprobaciones de estado y detalles de cada comprobación
  1. 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 repositorio
    • repo (string): Nombre del repositorio
    • pull_number (number): Número de pull request
    • expected_head_sha (optional string): El SHA esperado de la referencia HEAD de la pull request
  • Devuelve: Mensaje de éxito cuando se actualiza la rama
  1. get_pull_request_comments
  • Obtener los comentarios de revisión de una solicitud de extracción (pull request)
  • 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 (pull request)
  • 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 revisiones de la solicitud de extracción con detalles como el estado de la revisión (APPROVED, CHANGES_REQUESTED, etc.), el revisor y el cuerpo de la revisión

Herramientas de Webhook

Este servidor ahora admite toda la superficie REST de webhooks de repositorios y organizaciones disponible con el modelo de autenticación github_pat existente.

Herramientas de webhook de repositorio

  • list_repository_webhooks
  • get_repository_webhook
  • create_repository_webhook
  • update_repository_webhook
  • delete_repository_webhook
  • get_repository_webhook_config
  • update_repository_webhook_config
  • ping_repository_webhook
  • list_repository_webhook_deliveries
  • get_repository_webhook_delivery
  • redeliver_repository_webhook_delivery

Herramientas de webhook de organización

  • list_organization_webhooks
  • get_organization_webhook
  • create_organization_webhook
  • update_organization_webhook
  • delete_organization_webhook
  • get_organization_webhook_config
  • update_organization_webhook_config
  • ping_organization_webhook
  • list_organization_webhook_deliveries
  • get_organization_webhook_delivery
  • redeliver_organization_webhook_delivery

Permisos

Webhooks de repositorio:

  • Los PAT clásicos normalmente necesitan admin:repo_hook (o el más amplio repo) para crear, editar, eliminar, hacer ping o reenviar entregas.
  • Los PAT de grano fino necesitan el permiso Webhooks del repositorio con read para listar/obtener y write para crear/actualizar/eliminar/hacer ping/reentregar.

Webhooks de organización:

  • Los PAT clásicos necesitan admin:org_hook.
  • Los PAT de grano fino necesitan el permiso Webhooks de la organización con read para listar/obtener y write para crear/actualizar/eliminar/hacer ping/reentregar.

Notas de uso

  • Las herramientas de creación y actualización de webhooks codifican fijamente name: "web" internamente, que es lo que GitHub requiere.
  • La configuración de webhooks de repositorio admite url, content_type, secret y insecure_ssl.
  • La configuración de webhooks de organización admite esos campos más los opcionales username y password para autenticación básica.
  • GitHub recomienda encarecidamente establecer un secret de webhook y validar las firmas de entrega en el servicio receptor.
  • insecure_ssl: "1" deshabilita la verificación de certificados y no se recomienda su uso.

Flujo de depuración

  • Use ping_*_webhook para activar una entrega de prueba después de crear o actualizar.
  • Use list_*_webhook_deliveries para inspeccionar intentos recientes.
  • Use get_*_webhook_delivery para inspeccionar la carga útil (payload) de la solicitud, los encabezados y la respuesta capturada por GitHub.
  • Use redeliver_*_webhook_delivery para reproducir una entrega fallida o desactualizada.

Fuera del alcance

  • Este servidor no implementa un receptor HTTP entrante para entregas de webhook.
  • Este servidor no realiza la validación de firmas de entrega para su endpoint de webhook.
  • Los endpoints de webhook de GitHub App no están incluidos en esta fase porque esas API requieren autenticación de aplicación basada en JWT en lugar de un PAT.

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 Issues

  • 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, consulte la documentación de búsqueda de GitHub.

Configuración

Token de Acceso Personal

Cree un Token de Acceso Personal de GitHub con los permisos adecuados:

  • Vaya a Tokens de acceso personal (en Configuración de GitHub > Configuración de desarrollador)
  • Seleccione a qué repositorios le gustaría que este token tuviera acceso (Públicos, Todos o Seleccionados)
  • Cree un token con el alcance repo ("Control total de repositorios privados")
    • Alternativamente, si solo trabaja con repositorios públicos, seleccione únicamente el alcance public_repo
  • Copie el token generado

Uso con Claude Desktop

Para usar esto con Claude Desktop, agregue lo siguiente a su 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 es libre de usar, modificar y distribuir el software, sujeto a los términos y condiciones de la Licencia MIT. Para más detalles, consulte el archivo LICENSE en el repositorio del proyecto.