Un serveur Model Context Protocol qui connecte GitHub à Claude Desktop
- 📁 Repositories — Lister, consulter et rechercher parmi tous vos dépôts
- 🐛 Issues — Parcourir les issues ouvertes/fermées, lire les détails, en créer de nouvelles
- 🗂️ Fichiers — Naviguer dans l'arborescence et lire le contenu des fichiers
- 🔒 Dépôts privés — Fonctionne avec un token authentifié, y compris les repos privés
- ⚡ Sans configuration — Un simple
GITHUB_TOKENsuffit
| Couche | Technologie |
|---|---|
| Langage | TypeScript 5.x |
| Runtime | Node.js 18+ |
| MCP | @modelcontextprotocol/sdk |
| Validation | zod |
| Build | tsc + tsc-alias |
| Tests | Jest + ts-jest |
- Node.js 18 ou supérieur
- Un token d'accès personnel GitHub (classic)
- Scopes requis :
repo,read:user
- Scopes requis :
git clone https://github.com/KitetsuK/my_MCPServer.git
cd my_MCPServernpm installCréer un fichier .env à la racine :
GITHUB_TOKEN=ghp_votre_token_ici
npm run buildOuvrir C:\Users\{vous}\AppData\Roaming\Claude\claude_desktop_config.json et ajouter :
{
"mcpServers": {
"my_MCPServer": {
"command": "node",
"args": ["C:\\chemin\\vers\\my_MCPServer\\build\\index.js"],
"env": {
"GITHUB_TOKEN": "ghp_votre_token_ici"
}
}
}
}Relancer Claude Desktop — les outils seront disponibles immédiatement.
📖 Guide complet : documentation/configuration-claude-desktop.md
| Outil | Description |
|---|---|
list_repositories |
Liste tous les repositories de l'utilisateur authentifié |
get_repository |
Détails d'un repository (ex : KitetsuK/my_MCPServer) |
search_repositories |
Recherche par requête (ex : language:typescript stars:>100) |
list_issues |
Liste les issues d'un repository, filtrable par état |
get_issue |
Détails d'une issue par numéro |
create_issue |
Crée une nouvelle issue sur un repository |
list_files |
Liste les fichiers d'un répertoire |
get_file_content |
Lit le contenu d'un fichier spécifique |
Ce projet suit l'architecture hexagonale (Ports & Adaptateurs) avec les principes du Domain-Driven Design.
Claude Desktop
│
▼ MCP (stdio)
┌─────────────────────────────────────┐
│ Couche Interface │
│ McpServerBootstrap + *McpTools │ ← adaptateurs primaires (entrants)
└─────────────────┬───────────────────┘
│
┌─────────────────▼───────────────────┐
│ Couche Application │
│ Use Cases (execute) │ ← orchestration
└─────────────────┬───────────────────┘
│ ports (interfaces)
┌─────────────────▼───────────────────┐
│ Couche Domaine │
│ Entités · Value Objects · Ports │ ← logique métier pure, sans dépendances
└─────────────────┬───────────────────┘
│ implémente les ports
┌─────────────────▼───────────────────┐
│ Couche Infrastructure │
│ Adaptateurs · Mappers · HttpClient │ ← adaptateurs secondaires (sortants)
└─────────────────┬───────────────────┘
│
▼ HTTPS
GitHub REST API
Claude Desktop → *McpTools → UseCase.execute() → Port → Adapter → GitHub API
│
Formatter → texte lisible → Claude Desktop
src/
├── shared/ # Transversal — utilisé par toutes les couches
│ ├── exceptions/ # Hiérarchie ApplicationException
│ └── logger/ # Port ILogger + ConsoleLogger (stderr uniquement)
│
├── github/
│ ├── domain/ # Logique métier pure — aucune dépendance externe
│ │ ├── entities/ # Repository, Issue, File, FileContent
│ │ ├── value-objects/ # IssueState, FileType
│ │ ├── ports/ # IRepositoryPort, IIssuePort, IFilePort
│ │ └── exceptions/ # GitHubApiException
│ │
│ ├── infrastructure/ # Adaptateurs sortants
│ │ ├── dto/ # Types bruts des réponses de l'API GitHub
│ │ ├── http/ # GitHubHttpClient + config
│ │ ├── mappers/ # DTO → entité domaine
│ │ └── adapters/ # Implémentations des ports
│ │
│ └── application/
│ └── use-cases/ # ListRepositories, GetIssue, CreateIssue…
│
└── interface/
└── mcp/
├── tools/ # Enregistrement des outils MCP (adaptateurs entrants)
├── formatters/ # Entité domaine → texte lisible
└── McpServerBootstrap.ts
# Tests unitaires uniquement
npm run test:unit
# Tests d'intégration (nécessite .env avec GITHUB_TOKEN)
npm run test:integrationLes tests utilisent Jest + ts-jest en mode ESM. Les ports sont mockés avec jest.fn() — l'HTTP n'est jamais mocké directement.
tests/
├── unit/
│ ├── domain/models/ # Comportement des entités
│ ├── infrastructure/mappers/ # Conversion DTO → entité
│ └── application/use-cases/ # Orchestration des use cases
└── integration/
└── github/ # Appels HTTP réels vers l'API GitHub