@imenam/mcp-github
v1.1.50
Published
Un serveur MCP GitHub contrôlé et sécurisé pour les agents IA.
Downloads
689
Readme
Restricted GitHub MCP Server
Un serveur MCP (Model Context Protocol) spécialisé pour automatiser le workflow Git local vers GitHub, avec délégation des compilations/tests soit à un serveur distant via SSH, soit directement en local sur la même machine. Conçu pour être minimaliste et sécurisé.
🚀 Outils disponibles
Git local → GitHub
commit: Exécutegit add .puis crée un commit avec le message fourni. Ne pousse pas vers le remote.push: Pousse la branche actuelle versTARGET_BRANCH. Ne fait pas de commit.commit_and_push: Enchaînegit add ., commit et push versTARGET_BRANCH.pull_request: Crée une Pull Request GitHub deTARGET_BRANCHversBASE_BRANCH.clone: CloneTARGET_REPOdansCLONE_DIR/<TARGET_BRANCH>/. Crée la branche distante si elle n'existe pas encore.get_info: Affiche la configuration active (dépôt, branches, chemins) sans exposer les secrets.get_logs: Récupère les dernières lignes du fichier de log serveur. Argument optionnel :lines(défaut : 50).
Déploiement & test (serveur distant ou local)
Selon la configuration active, ces outils s'exécutent soit sur un serveur distant via SSH, soit directement en local sur la machine du serveur MCP (interrupteur LOCAL_DEPLOY).
deploy: Exécutegit fetch --all,git checkout TARGET_BRANCH,git pulldansSSH_REMOTE_PATH. Le repo doit être préalablement cloné à cet emplacement (sur le serveur distant, ou en local).test: ExécuteTEST_COMMAND(cwd =SSH_REMOTE_PATH) et renvoie stdout, stderr et exit code. Stocke la sortie pourtest_logs.test_logs: Renvoie la sortie du derniertestexécuté sans relancer la commande.
Mode local (
LOCAL_DEPLOY) : quand il est activé, aucune connexion SSH n'est ouverte — la commande est lancée directement dans le shell de la machine, dans le dossierSSH_REMOTE_PATH(interprété comme un chemin local). Pratique lorsque le serveur MCP tourne sur le serveur de déploiement lui-même.
Flux typique agent
clone → (modifier des fichiers) → commit_and_push → deploy → test
↑ |
└─── (corriger) ────────┘ (si exit code ≠ 0)🖥️ Interface de Configuration (GUI)
Le serveur lance automatiquement une interface graphique au démarrage (si PROXY_URL est défini). Elle permet de :
- Gérer plusieurs configurations nommées (multi-projets).
- Sélectionner le dépôt et les branches via des menus déroulants GitHub.
- Configurer le déploiement par projet : serveur SSH (hôte, utilisateur, port, clé privée) et commande de test, ou bascule en déploiement local sans SSH.
- Visualiser la configuration active en temps réel.
Le formulaire est organisé en sections repliables : Dépôt & branches (toujours dépliée, cœur de l'usage), Options et Déploiement & test (repliées par défaut, le paramétrage serveur n'étant fait qu'une fois). Activer l'interrupteur Déployer en local masque automatiquement les champs de connexion SSH devenus inutiles.
Proxy dynamique : La GUI s'enregistre auprès du reverse proxy défini dans
PROXY_URLet reçoit un port dynamique. Elle est alors accessible viahttp://[PROXY_URL][GUI_PATH]/.
⚙️ Configuration
Les variables globales (token, dossiers, proxy) sont définies dans un fichier .env ou dans la section env du client MCP. Les paramètres par projet (dépôt, branches, déploiement SSH ou local…) sont gérés dans l'interface GUI et stockés dans configs.json.
Variables GitHub
| Variable | Description | Exemple |
| :--- | :--- | :--- |
| GITHUB_TOKEN | Personal Access Token GitHub (PAT) | github_pat_... |
| MCP_DATA_DIR | Dossier contenant configs.json (multi-configs) | ./data |
| CLONE_DIR | Dossier racine dans lequel les branches seront clonées | ./cloned_repos |
Les configurations par projet (dépôt, branches, mode lecture seule…) sont gérées dans l'interface GUI et stockées dans
configs.json.
Paramètres de déploiement (outils deploy / test)
Ces paramètres sont définis par projet dans l'interface GUI et stockés dans configs.json (et non dans le .env global). Chaque configuration peut donc viser un serveur — et une clé — différents, ou basculer en mode local.
| Paramètre | Description | Exemple |
| :--- | :--- | :--- |
| LOCAL_DEPLOY | Si activé, exécution locale sans SSH (la machine du serveur MCP) | false |
| SSH_HOST | Adresse IP ou hostname du serveur distant | mon-serveur.example.com |
| SSH_USER | Utilisateur SSH | deploy |
| SSH_PORT | Port SSH (défaut : 22) | 22 |
| SSH_KEY_PATH | Chemin absolu vers la clé privée SSH | C:/Users/.../.ssh/id_ed25519 |
| SSH_REMOTE_PATH | Chemin du repo (distant en mode SSH, local si LOCAL_DEPLOY) | /var/www/mon-projet |
| TEST_COMMAND | Commande de test à exécuter | npx tsc --noEmit --pretty |
En mode local, seuls
SSH_REMOTE_PATH(qui doit exister sur le disque) etTEST_COMMANDsont utilisés ; les champs de connexion SSH sont ignorés.
Note : Pour
tsc, utilisez--prettypour obtenir la sortie complète avec contexte de code (sans cette option,tscpasse en format compact une ligne par erreur quand il n'y a pas de TTY).
Migration : ces clés peuvent aussi être fournies via le
.envou la sectionenvdu client MCP. Elles ne sont alors lues qu'une seule fois au premier démarrage (siconfigs.jsonn'existe pas encore) pour amorcer la configuration par défaut ; ensuite, c'est la GUI qui fait foi.
Variables GUI / Proxy
| Variable | Description | Exemple |
| :--- | :--- | :--- |
| PROXY_URL | URL du reverse proxy central | http://localhost:3000 |
| GUI_PATH | Chemin d'accès via le proxy | /github-mcp (défaut) |
| GUI_NAME | Nom affiché dans le proxy | GitHub MCP Config (défaut) |
| AGENT_NAME | Nom de l'agent affiché dans la GUI | Agent Zero |
📝 Journalisation (Logs)
- Windows :
C:\var\log\restricted-github-mcp\server.log - Linux/macOS :
/var/log/restricted-github-mcp/server.log
Le dossier est créé automatiquement. Les logs du processus principal ([MASTER]) et de la GUI ([GUI]) sont centralisés dans le même fichier.
🖥️ Exemple de Configuration MCP
Via npx (Recommandé)
{
"mcpServers": {
"@imenam/mcp-github": {
"command": "npx",
"args": ["-y", "@imenam/mcp-github"],
"env": {
"GITHUB_TOKEN": "votre_token_github_ici",
"CLONE_DIR": "/chemin/vers/dossier-de-clonage",
"MCP_DATA_DIR": "./data",
"PROXY_URL": "http://localhost:3000",
"GUI_PATH": "/github-mcp",
"GUI_NAME": "GitHub MCP Config",
"AGENT_NAME": "Mon Agent",
"SSH_HOST": "mon-serveur.example.com",
"SSH_USER": "ubuntu",
"SSH_PORT": "22",
"SSH_KEY_PATH": "/chemin/vers/.ssh/id_ed25519",
"SSH_REMOTE_PATH": "/var/www/mon-projet",
"TEST_COMMAND": "npx tsc --noEmit --pretty"
}
}
}
}Les variables
PROXY_URL,GUI_*etAGENT_NAMEsont optionnelles selon votre usage. Les variables SSH (SSH_HOST,SSH_USER,SSH_PORT,SSH_KEY_PATH,SSH_REMOTE_PATH,TEST_COMMAND) ainsi queLOCAL_DEPLOYsont désormais gérées par projet via la GUI ; les inclure ici ne sert qu'à amorcer la configuration par défaut au premier démarrage (voir la note Migration ci-dessus).
Via installation locale
{
"mcpServers": {
"@imenam/mcp-github": {
"command": "node",
"args": ["C:/chemin/vers/gitHubMCP/dist/index.js"],
"env": {
"GITHUB_TOKEN": "votre_token_github_ici",
"CLONE_DIR": "./cloned_repos"
}
}
}
}🛠️ Installation locale & build
git clone https://github.com/votre-pseudo/gitHubMCP.git
cd gitHubMCP
npm install
cp .env.example .env
# Éditez .env avec vos valeurs
npm run build📦 Publication Automatisée
Ce projet est configuré pour être publié sur npm via GitHub Actions à chaque nouvelle Release :
- Mettez à jour la version dans
package.json. - Poussez sur GitHub et créez une Release.
- Le workflow OIDC publie automatiquement sur npm.
📄 Licence
ISC
