GitHub MCP Server
GitHub MCP Server
Un proyecto que permite a un asistente de IA comunicarse con GitHub mediante herramientas seguras y estructuradas.
En palabras sencillas: en lugar de que la IA adivine cómo funciona GitHub, este proyecto le ofrece un menú de acciones claro — como "listar mis repos", "mostrar issues abiertos" o "leer un archivo". La IA elige la acción correcta, este servidor habla con GitHub, y la respuesta llega en un formato limpio que la IA puede entender.
¿Qué problema resuelve esto?
Los chatbots son buenos con el lenguaje, pero no tienen acceso automático a tu cuenta de GitHub.
Este proyecto construye un puente:
Haces una pregunta en lenguaje natural («Muéstrame los issues abiertos en microsoft/vscode»).
Un modelo de IA (a través de Groq) decide qué herramienta de GitHub usar.
El servidor MCP ejecuta esa herramienta contra la API real de GitHub.
Los resultados se limpian (se normalizan) y se devuelven a la IA.
La IA explica el resultado en un lenguaje sencillo y claro.
MCP es el Model Context Protocol. Piénsalo como un enchufe estándar: cualquier cliente de IA compatible puede conectarse a este servidor y usar sus herramientas.
Related MCP server: GitHub MCP Server
Vista general (arquitectura)
You
↓
AI Agent (client/agent.py) ← talks to Groq LLM
↓
MCP Server (notebooks/server.py) ← menu of GitHub tools
↓
GitHub Client ← HTTP calls with your token
↓
GitHub REST API
↓
GitHubRegla de diseño (importante)
Las herramientas se mantienen ligeras:
Verifican la entrada (¿el nombre del repositorio es válido?).
Llaman al cliente de GitHub.
Normalizan la respuesta para darle una forma estable.
Devuelven esos datos limpios al agente.
Todos los detalles confusos de GitHub quedan dentro de la capa del cliente, no repartidos por las herramientas.
Carpetas del proyecto (para qué sirve cada parte)
Ruta | Para qué sirve |
| Servidor MCP principal: el punto de entrada de producción |
| Formas de datos estables (modelos Pydantic) para los agentes |
| Convierte el JSON de GitHub en estas formas estables |
| Confirmación / simulación / lista blanca para herramientas |
| Helpers de paginación para listas ( |
| Registros JSON en stderr (nunca imprime secretos) |
| Copia antigua o experimental; se prefiere |
| Cuaderno de aprendizaje (cómo se construyó el servidor paso a paso) |
| Agente de chat que se conecta al servidor MCP por stdio |
| Comprueba si la IA elige la herramienta correcta para prompts |
| Tus claves privadas (no lo subas al control de versiones) |
| Plantilla que muestra qué claves necesitas |
| Paquetes de Python a instalar |
| Guía de configuración paso a paso para usuarios no técnicos |
Qué puedes hacer con las herramientas
El servidor expone muchas acciones de GitHub. Agrupadas de forma sencilla:
Leer (seguro de explorar)
Listar tus repositorios
Obtener detalles de un repositorio
Listar / obtener issues y pull requests
Obtener las mediante para una PR (diff)
Listar ramas, commits y etiquetas
Buscar código en un repositorio
Leer el contenido de un archivo
Listar ejecuciones de flujos de trabajo de GitHub Actions
Escribir modifica GitHub)
Crear issues, comentarios, pull requests, ramas y etiquetas
Actualizar issues, añadir/eliminar etiquetas
Reabrir issues
Destructivo (puede causar problemas — protegido)
Estas necesitan confirmación extra por defecto:
merge_pull_requestdelete_filecreate_repositorycreate_or_update_fileclose_issue
Para estas, el agente normalmente debe:
Llamarlas con
dry_run=true→ solo previsualizarLlamarlas de nuevo con
confirm=true→ realizar la acción
Puedes hacerlas más o menos estrictas con la configuración de entorno (más abajo).
Respuestas normalizadas (por qué a los agentes les gustan)
Las respuestas de GitHub son enormes y cambian a menudo. Este proyecto devuelve formas estables.
Las herramientas de listado siempre tienen esa pinta:
{
"count": 20,
"items": [ ... ],
"page": 1,
"per_page": 20,
"has_next": true,
"has_prev": false,
"next_page": 2,
"prev_page": null,
"last_page": 5
}Para obtener la página siguiente, vuelve a llamar a la misma herramienta con page=2 (o page=next_page).
Ejemplo de issue:
{
"number": 42,
"title": "Bug in login",
"state": "open",
"author": "some-user",
"labels": ["bug"],
"comments": 3,
"html_url": "https://github.com/...",
"is_pull_request": false
}Además: get_issues filtra los pull requests (la API de issues de GitHub los mezcla con los issues).
Características de seguridad
Característica | Significado |
| Necesario para ejecutar herramientas destructivas (modo por defecto) |
| Muestra lo que ocurriría; no modifica GitHub |
| Anotación MCP para que los clientes conozcan si una herramienta es |
riesgoso | |
Lista de permitidos | Lista opcional de herramientas destructivas que están permitidas |
Modo |
|
Variables de entorno (opcional):
GITHUB_MCP_DESTRUCTIVE_MODE→confirm/allow/denyGITHUB_MCP_DESTRUCTIVE_ALLOWLIST→ nombres de herramientas destructivas separados por comas
Recuerda: nunca compartas secretos en los registros.
Registro (para depuración)
El servidor escribe registros JSON solo a stderr.
¿Por qué stderr? MCP usa stdout para el protocolo. Si impriméramos los registros ahí, la conexión con la IA se rompería.
Los registros incluyen cosas como:
método y ruta de petición
estado HTTP
duración
límite de velocidad restante
Nunca registran:
tu token de GitHub
cabeceras
Authorizationvalores que parecen secretos (PATs, tokens de tipo bearer, etc.)
Ejemplo de una línea de registro:
{"ts":"2026-08-23T12:00:00+00:00","level":"INFO","event":"github_request","method":"GET","path":"/repos/microsoft/vscode/issues","status_code":200,"duration_ms":120.5}El agente de IA (client/agent.py)
El agente:
Inicia el servidor MCP como un subproceso (
notebooks/server.py).Le pide al servidor la lista de herramientas.
Envía tu pregunta y las herramientas a Groq.
Si Groq quiere usar una herramienta, el agente la llama a través de MCP.
Devuelve el resultado de la herramienta a Groq para que dé la respuesta final.
Comandos útiles (desde la carpeta del proyecto, con el entorno virtual activo):
# See all registered tools
python client/agent.py --list-tools
# Only show which tool the AI would pick (no GitHub write)
python client/agent.py --dry-run "list my github repos"
# One real question, then exit
python client/agent.py --once "show open issues for microsoft/vscode"
# Interactive chat
python client/agent.py
# Check tool-picking quality on many sample prompts
python client/test_tool_picking.pyLímites de bucles (opcional):
python client/agent.py --max-rounds 5 --once "..."O en .env:
AGENT_MAX_TOOL_ROUNDS=8
AGENT_MAX_TOOL_CALLS=16
AGENT_MAX_CONSECUTIVE_ERRORS=3Variables de entorno
Obligatorias para el servidor MCP
Variable | Propósito |
| Token de acceso personal para que el servidor hable con |
GitHub | |
| Tu nombre de usuario en GitHub (usado en la validación |
de inicio) | |
| Un nombre de repo por defecto (usado en la validación |
de inicio) |
Obligatorias para el agente (chat / selección de herramientas)
Variable | Propósito |
| Clave de la API de Groq (modelo LLM) |
Opcionales
Variable | Propósito |
| Por defecto: |
|
|
| Lista de herramientas destructivas, en |
mayúsculas separadas por comas | |
| Limite de usos de herramientas por |
mensaje del usuario | |
| Limite de ejecuciones por mensaje |
| Detenerse después de N fallos seguidos |
Copia .env.example → .env y completa con los valores reales. Consulta la SETUP.md para el tutorial completo.
Tecnologías utilizadas (para los curiosos)
Python 3.13+ (el proyecto se desarrolló en 3.13)
MCP (librería
mcp) — protocolo de servidor de herramientashttpx — cliente HTTP para GitHub
Pydantic — esquemas / validación
python-dotenv — cargar
.envCliente compatible con OpenAI → Groq para el agente
Jupyter (opcional) — cuaderno de aprendizaje
Cómo instalarlo y ejecutarlo
Sigue la guía paso a paso:
👉 SETUP.md — instala Python, configura las claves y .env, y prueba tus primeras herramientas.
Versión corta (si ya sabes Python):
cd "path\to\Github-MCP-server"
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env
# edit .env with your tokens
python client/agent.py --list-tools
python client/agent.py --once "list my github repos"Ruta de aprendizaje (recomendada)
Lee este README (ya estás aquí)
Sigue el SETUP.md hasta que funcione
--list-toolsLee docs/ARCHITECTURE_HLD_LLD.md para los flujos de diseño de alto y bajo nivel
Prueba
--dry-runy--oncecon preguntas de solo lecturaEjecuta el plan de pruebas manual de 50 escenarios: tests/MANUAL_TESTING_50_SCENARIOS.md
Selección aleatoria:
python client/run_manual_scenarios.py
Abre
notebooks/01_github_mcp_server.ipynbpara ver cómo se construyó el servidorSolo entonces prueba las herramientas de escritura/destrucción con
dry_runyconfirm
Solución de problemas (rápida)
Problema | Posible solución |
| Activa el entorno virtual |
| |
Error 404 del modelo de Groq | Establece |
Faltan variables de entorno | Define |
Bloqueado por herramienta destructiva | Es lo normal: usa |
El agente se cuelga al salir (Windows) | Es una rareza de stdio; los script de un solo uso forzan la salida |
Recordatorios de seguridad
Nunca subas
.enva Git.Nunca compartas el
GITHUB_TOKENen chats, capturas de pantalla o issues.Usa un token de GitHub con solo los permisos necesarios.
Mantén
GITHUB_MCP_DESTRUCTIVE_MODE=confirmodenysalvo en un entorno completamente confiable.Evita publicar salida de depuración de
server_1.pyque pueda contener datos antiguos; usaserver.py.
Licencia / propiedad
Este es un proyecto personal/de aprendizaje de IA generativa para un servidor MCP de GitHub y un agente de chat. Ajusta la propiedad y la licencia según tus necesidades antes de publicarlo de forma pública.# GitHub MCP Server
Un proyecto que permite a un asistente de IA comunicarse con GitHub usando herramientas seguras y estructuradas.
En palabras sencillas: en lugar de que la IA adivine cómo funciona GitHub, este proyecto le ofrece un menú de acciones claro — como "listar mis repositorios", "mostrar los issues abiertos" o "leer un archivo". La IA elige la acción correcta, este servidor conversa con GitHub y la respuesta regresa en un formato limpio que la IA puede entender.
¿Qué problema resuelve?
Los bots de chat son buenos con el lenguaje, pero no tienen acceso automático en vivo a tu cuenta de GitHub.
Este proyecto construye un puente:
Haces una pregunta en inglés normal ("Mostrar issues abiertos en microsoft/vscode").
Un modelo de IA (a través de Groq) decide qué herramienta de GitHub usar.
El servidor MCP ejecuta esa herramienta contra la API real de GitHub.
Los resultados se limpian (se normalizan) y se devuelven a la IA.
La IA te explica el resultado en un lenguaje sencillo.
MCP significa Model Context Protocol. Piénsalo como un enchufe estándar: cualquier cliente de IA compatible puede conectarse a este servidor y usar sus herramientas.
Visión general (arquitectura)
You
↓
AI Agent (client/agent.py) ← talks to Groq LLM
↓
MCP Server (notebooks/server.py) ← menu of GitHub tools
↓
GitHub Client ← HTTP calls with your token
↓
GitHub REST API
↓
GitHubRegla de diseño (importante)
Las herramientas se mantienen delgadas:
Verificar la entrada (¿el nombre del repositorio es válido?).
Llamar al cliente de GitHub.
Normalizar la respuesta a una forma estable.
Devolver esos datos limpios al agente.
Todos los detalles desordenados de GitHub permanecen dentro de la capa del cliente, no dispersos entre las herramientas.
Carpetas del proyecto (para qué sirve cada parte)
Ruta | Qué es |
| Servidor MCP principal — el punto de entrada de producción |
| Formas de datos estables (modelos Pydantic) para los agentes |
| Convierte el JSON bruto de GitHub en esas formas estables |
| Confirmación / simulación / lista de permitidos para herramientas peligrosas |
| Ayudas de paginación para herramientas de listado ( |
| Registros JSON en stderr (nunca imprime secretos) |
| Copia antigua/experimental — prefiere |
| Cuaderno de aprendizaje (cómo se construyó el servidor paso a paso) |
| Agente de chat que conectatenta al servidor MCP por stdio |
| Comprueba si la IA elige la herramienta correcta para solicitudes de ejemplo |
| Tus claves privadas (nunca subas esto) |
| Plantilla que muestra qué claves necesitas |
| Paquetes de Python que debes instalar |
| Instalación paso a paso para usuarios no técnicos |
Qué puedes hacer con las herramientas
El servidor expone muchas acciones de GitHub. Agrupadas de manera sencilla:
Leer (seguro para explorar)
Listar tus repositorios
Obtener detalles de un repositorio
Listar / obtener issues y solicitudes de cambio
Obtener diferencias de PR
Listar ramas, commits, etiquetas
Buscar código en un repositorio
Leer el contenido de archivos
Listas de ejecuciones de flujo de trabajo de GitHub Actions
Escribir (cambia GitHub)
Crear issues, comentarios, PRs, ramas, etiquetas
Actualizar issues, agregar/eliminar etiquetas
Reabrir issues
Destructivas (pueden dañar cosas — protegidas)
Estas requieren confirmación adicional por defecto:
merge_pull_requestdelete_filecreate_repositorycreate_or_update_fileclose_issue
Para estas, el agente normalmente debería:
Llamar con
dry_run=true→ solo avanceLlamar de nuevo con
confirm=true→ hacerlo de verdad
Puedes ajustar esto con la configuración de entorno (consulta más abajo).
Respuestas normalizadas (por qué los agentes la prefieren)
Las respuestas de GitHub son gigantes y cambian a menudo. Este proyecto devuelve formas estables.
Las herramientas de listado siempre se ven así:
{
"count": 20,
"items": [ ... ],
"page": 1,
"per_page": 20,
"has_next": true,
"has_prev": false,
"next_page": 2,
"prev_page": null,
"last_page": 5
}Para obtener la siguiente página, llama nuevamente a la misma herramienta con page=2 (o page=next_page).
Ejemplo de issue:
{
"number": 42,
"title": "Bug in login",
"state": "open",
"author": "some-user",
"labels": ["bug"],
"comments": 3,
"html_url": "https://github.com/...",
"is_pull_request": false
}Además: get_issues filtra los pull requests (la API de issues de GitHub los mezcla).
Características de seguridad
Característica | Significado |
| Necesario para ejecutar herramientas destructivas (modo predeterminado) |
| Muestra lo que ocurriría; cambia nada en GitHub |
| Anotación MCP para que los clientes sepan que una herramienta es riesgosa |
Allowlist | Lista opcional de herramientas destructivas permitidas |
Modo |
|
Variables de entorno (opcionales):
GITHUB_MCP_DESTRUCTIVE_MODE=confirm
GITHUB_MCP_DESTRUCTIVE_ALLOWLIST=merge_pull_request,delete_fileRegistro (para depurar)
El servidor escribe registros JSON solo en stderr.
`¿Por qué no hacerlo en stdout? MCP** usa stdout para el protocolo. Si imprimiéramos logs ahí, la conexión de la IA se rompería.
Los registros que incluyen cosas como:
método y ruta de la solicitud
estado HTTP
duración
límite de velocidad restante
Nunca registran:
tu token de GitHub
cabeceras de Authorization
valores que parecen secretos (PAT, tokens de portador, etc.)
Ejemplo de línea de registro:
{"ts":"2026-08-23T12:00:00+00:00","level":"INFO","event":"github_request","method":"GET","path":"/repos/microsoft/vscode/issues","status_code":200,"duration_ms":120.5}El agente de IA (client/agent.py)
El agente:
Inicia el servidor MCP como subproceso (
notebooks/server.py).Pide al servidor la lista de herramientas.
Envía tu pregunta + herramientas a Groq.
Si Groq quiere una herramienta, el agente la llama mediante MCP.
Envía el resultado de la herramienta a Groq para una respuesta final.
Comandos útiles (desde la carpeta del proyecto, con el entorno virtual activo):
# See all registered tools
python client/agent.py --list-tools
# Only show which tool the AI would pick (no GitHub write)
python client/agent.py --dry-run "list my github repos"
# One real question, then exit
python client/agent.py --once "show open issues for microsoft/vscode"
# Interactive chat
python client/agent.py
# Check tool-picking quality on many sample prompts
python client/test_tool_picking.pyLímites de bucle (opcionales):
python client/agent.py --max-rounds 5 --once "..."O en .env:
AGENT_MAX_TOOL_ROUNDS=8
AGENT_MAX_TOOL_CALLS=16
AGENT_MAX_CONSECUTIVE_ERRORS=3Variables de entorno
Requeridas para el servidor MCP
Variable | Propósito |
| Token de acceso personal para que el servidor llame a la API de GitHub |
| Tu nombre de usuario rob para validar el inicio |
| Un nombre de repo por defecto (usado para validar el inicio) |
Requeridas para el agente (chat / selección de herramientas)
| Variable | Propósito | |
| ---------------- | --------------------------------- |
| GROQ_API_KEY | Clave de API para Groq (LLM) |
Opcionales
Variable | Propósito |
| Por defecto: |
|
|
| Lista separada por comas de todas las herramientas destructivas |
| Máximo de rondas de herramientas por mensaje del usuario |
| Máximo de ejecuciones de herramientas por mensaje |
| Para después de N fallos seguidos de una herramienta |
copia .env.example → .env y rellena con valores reales. Consulte SETUP.md para el instrucciones completas.
Stack técnico (para los curiosos)
Python 3.13+ (el proyecto se desarrolló en la 3.13)
MCP (
mcppaquete de Python) — protocolo de servidor de herramientashttpx — cliente HTTP para GitHub
Pydantic — esquemas / validación
python-dotenv — cargar
.envCliente compatible con OpenAI → Groq para el agente
Jupyter (opcional) — cuaderno de aprendizaje
Cómo configurar y ejecutar
Sigue la guía paso a paso:
👉 SETUP.md — instala Python, crea claves, configura .env y ejecuta tus primeros comandos.
Versión corta (si ya sabes Python):
cd "path\to\Github-MCP-server"
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
copy .env.example .env
# edit .env with your tokens
python client/agent.py --list-tools
python client/agent.py --once "list my github repos"ruta de aprendizaje (recomendada)
leer este README (estás aquí).
completar SETUP.md hasta que funcione
--list-tools.consulta docs/ARCHITECTURE_HLD_LLD.md para los flujos de ALTA + diseño de bajo nivel.
prueba
--dry-competey--oncecon preguntas sencillas de solo lectura.Ejecuta el plan de pruebas manual de 50 escenarios: tests/MANUAL_TESTING_50_SCENARIOS.md
Selección automática:
python client/run_manual_scenarios.py
Abre
notebooks/01_github_mcp_server.ipynbpara ver cómo se construyó cada salida capa.Solo después intenta probar métodos de escritura/destructivos con
dry_run+confirm.
Soluciones de problemas (rápidas)
Problema | Posible solución |
| Activa |
Error 404 del modelo groq | Configurar |
Variables de entorno vacías | Rellena |
Herramienta destructiva bloqueada | Esperado — usa |
El agente se cuelga al salir (Windows) | Quirk conocido de stdio; los comandos de un uso solo fuerzan la salida. |
Recordatorios de seguridad
Nunca guardes
.env.Nunca pegues tus tokens de GitHub o Groq en chats, capturas de pantalla o issues de GitHub.
Prefiere un token de GitHub con solo los permisos que necesitas.
mantén
GITHUB_MCP_DESTRUCTIVE_MODE=confirm(odeny) a menos que el entorno sea totalmente de confianza.No comparta la salida de depuración de
server_1.pysi alguna vez imprimió tokens en experimentos antiguos — usaserver.py.
Licencia / propiedad
Este es un proyecto personal / de aprendizaje de IA Gen para un GitHub MCP Server / una agencia. Ajusta la propiedad y la licencia; prepáralo antes de publicarlo.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to manage GitHub repositories, branches, issues, pull requests, releases, and actions through natural language.1155MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to perform GitHub operations such as creating repositories, issues, pull requests, and more through natural language.
- FlicenseBqualityDmaintenanceEnables AI assistants to inspect local Git repositories and interact with the GitHub API for reading commits, diffs, files, issues, comments, pull requests, and project boards.10121
- FlicenseBqualityCmaintenanceEnables AI clients to interact with GitHub repositories, issues, pull requests, and code search through the GitHub REST API.12
Related MCP Connectors
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Git-backed platform for skills, tools, and context for AI agents
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Arnab1999india/github-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server