GitHub MCP Server
Provides tools for interacting with GitHub’s API, enabling AI agents to create and list repositories, manage issues (create, list, close, and comment), and create commits or update repository files.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GitHub MCP Server create a repo called demo-mcp and open an issue saying 'Add tests'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GitHub MCP Server
MCP Server en Node.js + TypeScript que permite a un agente de IA (Claude) ejecutar operaciones reales en GitHub usando lenguaje natural: crear repositorios, abrir issues, hacer commits y más.
Proyecto Integrador M5 – Henry Full Stack · AutomateHub
¿Qué hace?
Expone 8 tools a través del Model Context Protocol (MCP). Un host compatible (VS Code con Claude) se conecta al server por stdio, el LLM lee las descripciones de los tools y decide cuál usar según lo que pide el usuario.
Usuario: "Creá un repo llamado
demo-mcpy abrile un issue que diga 'Agregar tests'" → Claude llama acreate_repositoryy luego acreate_issue. Las acciones quedan hechas en GitHub.
Related MCP server: mcp-github-issues
¿Por qué es útil?
Automatizar tareas repetitivas: crear repos con README inicial, abrir issues en serie, actualizar archivos sin salir del editor.
Lenguaje natural en lugar de comandos: no hace falta recordar la sintaxis de
gito de la API.Triage rápido: "¿Qué issues abiertos tiene mi repo X?" y cerrarlos o comentarlos desde el chat.
Documentación al vuelo: "Agregá un archivo
CONTRIBUTING.mdcon estas reglas" → commit directo.
Arquitectura
flowchart LR
U[Usuario] -->|prompt en lenguaje natural| H[VS Code<br/>Host]
H <--> L[Claude<br/>LLM / Client]
L -->|tools/call vía JSON-RPC por stdio| S[GitHub MCP Server<br/>este proyecto]
S -->|Octokit + token| G[(GitHub API)]
G -->|respuesta JSON| S
S -->|texto en lenguaje natural| LVS Code (Host) gestiona la sesión y lanza el server como proceso hijo
│
Claude (LLM / Client) lee el prompt, elige el tool y arma los parámetros
│ JSON-RPC por stdio
MCP Server (este repo) valida con Zod → llama a GitHub → traduce errores
│ HTTPS (Octokit)
GitHub API ejecuta la acción y devuelve el resultadoFlujo interno de una llamada:
server.ts → tools/*.ts → schemas (Zod) → github/operations.ts → utils/retry.ts → github/client.ts (Octokit)
↓ si falla
errors/index.ts (mensaje en lenguaje natural)Estructura del proyecto
src/
├── server.ts # Entry point: crea el McpServer, registra tools, conecta por stdio
├── types.ts # Tipos compartidos (RepositorySummary, IssueSummary, ...)
├── tools/ # Un archivo por tool: nombre + descripción + schema + handler
├── schemas/index.ts # Schemas de Zod y helper validateInput()
├── github/
│ ├── client.ts # Crea Octokit con el token (separado para poder mockearlo)
│ └── operations.ts # Lógica de negocio: llamadas a la API de GitHub
├── errors/index.ts # ValidationError, AuthenticationError, GitHubAPIError, NetworkError
└── utils/
├── logging.ts # Logger a stderr que oculta tokens
├── retry.ts # Exponential backoff para rate limit / red
└── response.ts # Arma las respuestas para el LLM
tests/
├── tools.test.ts # Validación de schemas
├── github.test.ts # Operaciones con Octokit mockeado
└── errors.test.ts # Transformación de errores, retry y logsRequisitos
Node.js 18 o superior (
node -v)npm (viene con Node)
Visual Studio Code actualizado
Una de estas dos opciones para usar Claude dentro de VS Code:
Extensión Claude Code (requiere cuenta de Claude con plan pago), o
GitHub Copilot en modo Agent con un modelo Claude seleccionado
Una cuenta de GitHub y un Personal Access Token
Instalación
git clone https://github.com/<dantecaceres92>/github-mcp-server.git
cd github-mcp-server
npm install
npm run build # compila TypeScript a la carpeta dist/Configuración
1. Obtener un GitHub Personal Access Token
Entrá a GitHub → foto de perfil → Settings.
Abajo de todo: Developer settings → Personal access tokens → Tokens (classic).
Generate new token → Generate new token (classic).
Poné un nombre (ej:
mcp-server) y una expiración (ej: 30 días).Marcá los scopes:
Scope | Para qué se usa |
| Crear repos, leer/crear issues, hacer commits (incluye repos privados) |
| Leer el usuario autenticado (para saber el |
| Operar sobre repos de organizaciones |
Generate token y copialo (empieza con
ghp_). GitHub no lo vuelve a mostrar.
⚠️ Nunca subas el token al repositorio. Si se sube por error, revocalo inmediatamente desde la misma pantalla.
2. Configurar .env
cp .env.example .envEditá .env:
GITHUB_TOKEN=ghp_tu_token_real
LOG_LEVEL=info.env está en .gitignore, así que no se commitea.
3. Configurar el MCP server en VS Code
El server se ejecuta con node dist/server.js (por eso hay que hacer npm run build antes). El token se lee del .env automáticamente.
Opción A – Extensión Claude Code (recomendada)
El repo ya incluye .mcp.json en la raíz:
{
"mcpServers": {
"github-mcp": {
"command": "node",
"args": ["dist/server.js"]
}
}
}Instalá la extensión Claude Code desde el Marketplace de VS Code e iniciá sesión.
Abrí la carpeta del proyecto en VS Code (
File → Open Folder).Abrí el panel de Claude Code. La primera vez te pide aprobar el server
github-mcpdel proyecto: aceptá.Escribí
/mcpen el chat para verificar quegithub-mcpaparece conectado con sus 8 tools.
Alternativa por terminal (registra el server con ruta absoluta):
claude mcp add github-mcp -- node /ruta/completa/github-mcp-server/dist/server.js
Opción B – GitHub Copilot (modo Agent) con modelo Claude
El repo ya incluye .vscode/mcp.json:
{
"servers": {
"github-mcp": {
"type": "stdio",
"command": "node",
"args": ["${workspaceFolder}/dist/server.js"],
"envFile": "${workspaceFolder}/.env"
}
}
}Abrí
.vscode/mcp.jsony hacé clic en Start sobregithub-mcp(oCtrl+Shift+P→ MCP: List Servers → Start).Abrí el chat de Copilot, cambiá a modo Agent y elegí un modelo Claude en el selector.
En el ícono de herramientas 🛠️ verificá que aparecen los tools de
github-mcp.
4. Verificar con MCP Inspector (debugging)
npm run build
npm run inspectorSe abre una página en el navegador. Clic en Connect → pestaña Tools → List Tools. Podés ejecutar cada tool a mano y ver la respuesta exacta que recibiría el LLM.
Tools
Todos los parámetros owner son opcionales: si no se indican se usa el usuario dueño del token.
1. create_repository
Crea un repositorio nuevo en la cuenta autenticada (con README inicial).
Parámetro | Tipo | Requerido | Detalle |
| string | ✅ | 3–100 caracteres; letras, números, |
| string | – | Máx. 350 caracteres |
| boolean | – | Por defecto |
Prompt de ejemplo: "Creá un repositorio privado llamado api-turnos con la descripción 'API de turnos para clínicas'."
2. list_repositories
Lista los repositorios del usuario autenticado.
Parámetro | Tipo | Requerido | Detalle |
| number | – | 1–100, por defecto 10 |
|
| – | Por defecto |
Prompt de ejemplo: "Mostrame mis últimos 5 repositorios actualizados."
3. create_issue
Abre un issue en un repositorio existente.
Parámetro | Tipo | Requerido | Detalle |
| string | – | Usuario u organización |
| string | ✅ | Nombre del repositorio |
| string | ✅ | 1–256 caracteres |
| string | – | Acepta Markdown |
Prompt de ejemplo: "En el repo api-turnos abrí un issue 'Validar email en registro' explicando que hoy se aceptan emails sin @."
4. list_issues
Lista los issues abiertos de un repositorio (excluye pull requests).
Parámetro | Tipo | Requerido | Detalle |
| string | – | |
| string | ✅ | |
| number | – | 1–100, por defecto 10 |
Prompt de ejemplo: "¿Qué issues abiertos tiene api-turnos?"
5. create_commit
Crea un archivo nuevo o reemplaza el contenido de uno existente, generando un commit.
Parámetro | Tipo | Requerido | Detalle |
| string | – | |
| string | ✅ | |
| string | ✅ | Ruta relativa, ej |
| string | ✅ | Contenido completo del archivo |
| string | ✅ | Mensaje del commit |
| string | – | Por defecto la rama principal |
Prompt de ejemplo: "En api-turnos creá CONTRIBUTING.md con tres reglas para contribuir y commitealo con el mensaje 'docs: agrega guía de contribución'."
Extra credit
Tool | Qué hace | Parámetros | Prompt de ejemplo |
| Lista commits recientes |
| "Mostrame los últimos 3 commits de |
| Cierra un issue |
| "Cerrá el issue #1 de |
| Comenta un issue |
| "Comentá en el issue #1 de |
Ejemplo de flujo completo (usa todos los tools)
"Listá mis repositorios." →
list_repositories"Creá un repo público
demo-mcp-henrycon descripción 'Demo del PI'." →create_repository"Agregale un archivo
index.jscon un console.log de hola mundo." →create_commit"Abrí un issue 'Agregar tests' en ese repo." →
create_issue"¿Qué issues abiertos tiene?" →
list_issues"Comentá en el issue #1 'En progreso' y después cerralo." →
add_comment_to_issue+close_issue"Mostrame los últimos commits." →
list_commits
Manejo de errores
Situación | Tipo | Mensaje que recibe el LLM |
Parámetro inválido |
| "name: El nombre del repositorio debe tener al menos 3 caracteres" |
Falta el token / token inválido (401) |
| "El token de GitHub es inválido o expiró..." |
Token sin permisos (403) |
| "El token no tiene permisos... scopes 'repo', 'user' y 'admin:org'" |
Repo inexistente (404) |
| "El repositorio X no fue encontrado. Verifica el nombre e intenta de nuevo." |
Rate limit (429 / 403 con remaining=0) |
| Se reintenta con backoff (1s, 2s, 4s); si persiste: "Se alcanzó el límite..." |
Sin internet |
| "No se pudo conectar con GitHub..." |
Los logs van a stderr (nunca a stdout, que está reservado para el protocolo MCP) y los tokens se ocultan (ghp_***).
Tests
npm test27 tests unitarios con Vitest, sin llamadas reales a GitHub (Octokit se mockea con vi.mock()):
tests/tools.test.ts– schemas de Zod: inputs válidos pasan, inválidos fallan con mensajes claros.tests/github.test.ts– operaciones con Octokit mockeado: parámetros enviados, mapeo de respuestas, 401, 404, 422.tests/errors.test.ts– transformación de errores, retry con backoff y ocultamiento de tokens.
Otros scripts:
Script | Qué hace |
| Compila TypeScript a |
| Ejecuta el server desde |
| Ejecuta |
| Chequeo de tipos con |
| Abre MCP Inspector contra el server |
Troubleshooting
Problema | Causa probable | Solución |
El server no aparece / "failed to start" | No se compiló |
|
| Ruta incorrecta o falta build | Verificá que exista |
"No se encontró la variable de entorno GITHUB_TOKEN" | Falta |
|
"El token de GitHub es inválido o expiró" (401) | Token mal copiado o vencido | Generá uno nuevo |
"no tiene permisos" (403) | Faltan scopes | Editá el token y marcá |
"El repositorio X no fue encontrado" (404) | Nombre u owner mal escrito | Pedile a Claude que liste tus repos primero |
"GitHub rechazó los datos" (422) | El repo ya existe | Usá otro nombre |
El server se desconecta solo | Algún | Usá |
Claude no usa los tools | Server desconectado o no aprobado |
|
Licencia
Available Tools
8 toolsadd_comment_to_issueA
Agrega un comentario a un issue existente de un repositorio de GitHub. Úsalo cuando el usuario pida comentar, responder o dejar una nota en un issue.
Inputs: body (required), repo (required), issueNumber (required), owner.
close_issueA
Cierra un issue abierto de un repositorio de GitHub a partir de su número. Úsalo cuando el usuario diga que un issue está resuelto o pida cerrarlo.
Inputs: repo (required), issueNumber (required), owner.
create_commitA
Hace un commit en un repositorio EXISTENTE de GitHub creando un archivo nuevo o reemplazando el contenido de uno existente. Úsalo cuando el usuario pida agregar, crear, modificar o actualizar un archivo en un repositorio. El parámetro 'content' debe ser el contenido COMPLETO del archivo.
Inputs: path (required), repo (required), content (required), message (required), +2 more.
create_issueA
Abre un nuevo issue (reporte de bug, tarea o mejora) en un repositorio EXISTENTE de GitHub, con título y descripción. Úsalo cuando el usuario pida reportar un problema, crear una tarea o abrir un issue.
Inputs: repo (required), title (required), body, owner.
create_repositoryA
Crea un NUEVO repositorio de GitHub en la cuenta del usuario autenticado. Úsalo cuando el usuario pida crear, iniciar o armar un repositorio nuevo. El repositorio se crea con un README inicial.
Inputs: name (required), isPrivate, description.
list_commitsA
Lista los commits más recientes de un repositorio de GitHub (sha corto, mensaje, autor y fecha). Úsalo cuando el usuario quiera ver el historial o los últimos cambios de un repositorio.
Inputs: repo (required), owner, perPage.
list_issuesA
Lista los issues ABIERTOS de un repositorio específico de GitHub (número, título, autor y URL). Úsalo cuando el usuario pregunte qué issues, bugs o tareas pendientes tiene un repositorio.
Inputs: repo (required), owner, perPage.
list_repositoriesA
Lista los repositorios del usuario autenticado en GitHub (nombre, descripción, visibilidad y URL). Úsalo cuando el usuario pregunte qué repositorios tiene, o para averiguar el nombre exacto de un repo antes de usar otro tool.
Inputs: sort, perPage.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
Each tool targets a distinct resource+action pair: repositories (create/list), issues (create/list/close/comment), and commits (create/list). Boundaries are clean and descriptions reinforce the intent, so an agent can reliably select the right tool. No two tools overlap in purpose.
All tools follow a consistent snake_case verb_noun pattern (create_repository, list_issues, close_issue, add_comment_to_issue). The style is uniform throughout with only a natural length variation for the compound comment action.
Eight tools is well-scoped for a focused GitHub workflow server. Every tool earns its place covering the core repo/issue/commit flows without redundancy or filler.
Covers the main lifecycle: create+list repos, create+list+close+comment on issues, and create+list commits. Minor gaps remain—no update/delete repo, no edit/reopen issue, no single-record get—but core workflows are achievable with workarounds.
Maintenance
Related MCP Connectors
Operate GitHub from your AI assistant: repos, PRs, issues, Actions. Previews and read-only mode.
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Access the GitHub API, enabling file operations, repository management, search functionality, and…
GitHub Copilot MCP: code, repo, PR, workflow tools for AI assistants.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceEnables LLMs to interact with GitHub via the Model Context Protocol, providing tools for repository management and other GitHub operations.31Apache 2.0- AlicenseAqualityDmaintenanceEnables LLMs to list, create, and comment on GitHub issues using your own GitHub identity via stdio transport.3MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to perform full CRUD operations on GitHub, including repositories, issues, pull requests, branches, comments, reviews, and merges through the Model Context Protocol.-
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to manage GitHub repositories, issues, files, branches, and pull requests through the Model Context Protocol.-