PMOCrazyCoder

Environnement de développement conteneurisé avec assistance IA intégrée — Go, Rust, Python, TypeScript, R, Ruby — et outillage IA local (LM Studio) ou cloud (Claude Pro).

Vision

Un container de développement complet, multi-langages, avec LSP, outils IA et MCP intégrés, utilisable depuis Zed, VS Code ou Cursor, avec persistance par projet.

Ce que contient l'image

Langages et compilateurs

  • Go (dernière version stable via script)
  • Rust (stable + nightly, avec rustfmt, clippy, rust-analyzer, rust-src)
  • Python 3 (avec ruff, fastmcp, ipython, tasklin)
  • Node.js / npm (avec TypeScript, ESLint, Prettier, Pyright, typescript-language-server)
  • Ruby (avec github-linguist)
  • R
  • Clang / LLVM (clangd inclus)

Outils de développement

  • jj (Jujutsu VCS) + jj-lsp
  • gopls, mcp-language-server
  • cargo-edit, cargo-watch, cargo-outdated, cargo-make, cargo-binstall
  • sqlite3, cmake, make, git
  • aichat (client LLM CLI)

MCP Servers installés

Le conteneur inclut plusieurs MCP servers pour l'intégration avec les outils de développement :

MCP Server Utilisation
mcp-language-server LSP pour Go (gopls), Python (pyright-langserver), Rust (rust-analyzer), TypeScript
github-mcp-server Intégration GitHub (repos, issues, PR) via GITHUB_TOKEN
gitea-mcp Intégration Gitea/Forgejo via GITEA_URL et GITEA_TOKEN
mcp-server-commands Exécution de commandes shell depuis l'assistant IA

Assistants IA

  • Claude Code (installé au postCreateCommand)
  • opencode (configuré via l'entrypoint)
  • aichat (configuré via l'entrypoint, connecté au LLM local)

Configuration MCP dans les assistants

Les MCP servers sont automatiquement configurés dans opencode et Claude Code via crazycoder-setup.sh (exécuté en postStartCommand) :

opencode (~/.config/opencode/opencode.json) :

  • LSP pour Go, Python, Rust, TypeScript via mcp-language-server
  • Commandes shell via mcp-server-commands
  • GitHub MCP (si GITHUB_TOKEN défini)
  • Gitea MCP (si GITEA_URL et GITEA_TOKEN définis)

Claude Code (~/.claude/.claude.json) :

  • Même configuration MCP qu'opencode

Les configurations sont générées dynamiquement au démarrage du conteneur avec les variables d'environnement disponibles.

Variables d'environnement (.env)

Le fichier .env (non versionné, ignoré par git) contient les credentials pour les services externes :

Variable Description Exemple
GITHUB_TOKEN Personal Access Token GitHub pour l'accès API ghp_xxxxxxxxxxxxxxxxxxxx
GITEA_URL URL de votre serveur Gitea/Forgejo https://gitea.example.com
GITEA_TOKEN Token d'accès API Gitea xxxxxxxxxxxxxxxxxxxx

Copiez .devcontainer/.env.example vers .env et renseignez vos tokens :

cp .devcontainer/.env.example .env
# Éditer .env avec vos credentials

Ces variables sont utilisées par :

  • Le MCP Server GitHub (pour les opérations repo/issues/PR)
  • Le MCP Server Gitea (intégration avec votre instance)

Utilisation rapide

Ajouter l'environnement à un projet existant

curl -fsSL https://gargoton.petite-maison-orange.fr/eric/PMOCrazycoder/raw/branch/main/setup-devcontainer.sh | bash

Ou avec un endpoint LLM personnalisé :

LOCAL_LLM_API=http://monserveur:1248/v1 bash setup-devcontainer.sh

Le script télécharge les fichiers devcontainer.json et docker-compose.yml directement depuis le dépôt Gitea, crée les répertoires de persistance dans .devcontainer/config/ et met à jour .gitignore.

Ouvrir dans le container

Ouvrir le projet dans VS Code, Zed ou Cursor et choisir "Reopen in Container". L'image est tirée automatiquement depuis le registry.

Authentifier Claude Code

Dans le panneau Claude Agent de Zed, lancer /login et choisir "Log in with Claude.ai" (abonnement Pro/Max).

Persistance par projet

Toutes les données et caches sont persistés dans .devcontainer/config/ (ignoré par git) :

Répertoire Contenu
config/claude/ Sessions et config Claude Code
config/opencode/ Config opencode
config/aichat/ Config aichat
config/ai_index/ Index de code du projet
config/cargo-registry/ Cache crates.io
config/cargo-git/ Cache dépendances git Cargo
config/cargo-bin/ Binaires Rust installés pour le projet
config/go-cache/ Cache modules Go
config/go-bin/ Binaires Go installés pour le projet
config/python-local/ Paquets pip user + gems Ruby
config/npm-cache/ Cache npm
config/r-libs/ Paquets R installés

Installer des binaires persistants

# Rust — persiste dans .devcontainer/config/cargo-bin/
cargo install cargo-nextest

# Go — persiste dans .devcontainer/config/go-bin/
GOBIN=~/go/bin go install github.com/some/tool@latest

# Python — persiste dans .devcontainer/config/python-local/
pip install --user monpaquet

# R — persiste dans .devcontainer/config/r-libs/
R -e 'install.packages("tidyverse")'

Configuration MCP détaillée

opencode

Le fichier ~/.config/opencode/opencode.json est généré à chaque démarrage avec :

  • LSP servers : gopls, pyright-langserver, rust-analyzer, typescript-language-server
  • Shell commands : mcp-server-commands
  • GitHub MCP : activé si GITHUB_TOKEN est défini
  • Gitea MCP : activé si GITEA_URL et GITEA_TOKEN sont définis
  • Provider LM Studio : endpoint local configurable

Claude Code

Le fichier ~/.claude/.claude.json est mis à jour avec la section mcpServers contenant les mêmes serveurs que opencode.

LLM local

L'entrypoint configure automatiquement opencode et aichat pour pointer sur LOCAL_LLM_API (défaut : http://host.docker.internal:1248/v1).

Variables d'environnement disponibles dans le container :

Variable Défaut Description
LOCAL_LLM_API http://host.docker.internal:1248/v1 Endpoint OpenAI-compatible
LLM_MODEL ollama:qwen/qwen3-coder-next@4bit Modèle à utiliser
TEMPERATURE 0.5 Température
NUM_CTX 32768 Taille de contexte
MAXTOKEN 4096 Tokens max en sortie

Construire et publier l'image

# Build natif (local)
make build

# Build multi-arch (amd64 + arm64) + push vers le registry
make all

# Push uniquement (si l'archive OCI existe déjà)
make push

# Lister toutes les targets
make help

L'image est publiée sur niepce.petite-maison-orange.fr/public/pmocrazycoder:latest. Le push utilise skopeo — assurez-vous d'être authentifié sur le registry.

Sources

  • Dépôt git : https://gargoton.petite-maison-orange.fr/eric/PMOCrazycoder
  • Registry OCI : niepce.petite-maison-orange.fr/public/pmocrazycoder:latest

Licence

CECILL-2.1

Description
Comprendre quelque chose au serveur MCP.
Readme 197 KiB
Languages
Python 41.2%
Shell 38.1%
Makefile 12.1%
Dockerfile 8.6%