diff --git a/README.md b/README.md index e0e8f1c..9554e19 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # mcp-framework -Bibliotheque Go pour construire des binaires MCP avec : +Bibliothèque Go pour construire des binaires MCP avec : -- resolution de profils CLI +- résolution de profils CLI - stockage JSON de configuration dans `os.UserConfigDir()` - stockage de secrets dans le wallet natif selon l'OS -- lecture d'un manifeste `mcp.toml` a la racine du projet +- lecture d'un manifeste `mcp.toml` à la racine du projet - pipeline d'auto-update via endpoint de release configurable -Le framework est volontairement petit. Il fournit des briques reutilisables, -pas une application MCP complete. +Le framework est volontairement petit. Il fournit des briques réutilisables, +pas une application MCP complète. ## Installation @@ -19,26 +19,26 @@ go get gitea.lclr.dev/AI/mcp-framework ## Packages -- `cli` : helpers pour resoudre un profil, valider une URL et demander des valeurs a l'utilisateur. -- `config` : lecture/ecriture atomique d'une config JSON versionnee dans `os.UserConfigDir()`. -- `manifest` : lecture de `mcp.toml` a la racine du projet et conversion vers `update.ReleaseSource`. -- `secretstore` : lecture/ecriture de secrets dans le wallet natif. -- `update` : telechargement et remplacement du binaire courant depuis un endpoint de release. +- `cli` : helpers pour résoudre un profil, valider une URL et demander des valeurs à l'utilisateur. +- `config` : lecture/écriture atomique d'une config JSON versionnée dans `os.UserConfigDir()`. +- `manifest` : lecture de `mcp.toml` à la racine du projet et conversion vers `update.ReleaseSource`. +- `secretstore` : lecture/écriture de secrets dans le wallet natif. +- `update` : téléchargement et remplacement du binaire courant depuis un endpoint de release. -## Usage Type +## Utilisation type -Le flux typique cote application est : +Le flux typique côté application est : -1. Resoudre le profil actif avec `cli`. -2. Charger la config versionnee avec `config`. +1. Résoudre le profil actif avec `cli`. +2. Charger la config versionnée avec `config`. 3. Lire les secrets avec `secretstore`. 4. Charger `mcp.toml` avec `manifest`. -5. Executer l'auto-update avec `update` si necessaire. +5. Exécuter l'auto-update avec `update` si nécessaire. ## Manifeste `mcp.toml` -Le package `manifest` cherche automatiquement `mcp.toml` dans le repertoire -courant puis remonte les repertoires parents jusqu'a trouver le fichier. +Le package `manifest` cherche automatiquement `mcp.toml` dans le répertoire +courant puis remonte les répertoires parents jusqu'à trouver le fichier. Exemple minimal : @@ -51,12 +51,12 @@ token_header = "Authorization" token_env_names = ["GITEA_TOKEN"] ``` -Champs supportes dans `[update]` : +Champs supportés dans `[update]` : -- `source_name` : nom humain de la source de release, utilise dans certains messages d'erreur. +- `source_name` : nom humain de la source de release, utilisé dans certains messages d'erreur. - `base_url` : base de la forge ou du service de release. -- `latest_release_url` : URL complete qui retourne la release la plus recente. -- `token_header` : header HTTP a utiliser pour l'authentification. +- `latest_release_url` : URL complète qui retourne la release la plus récente. +- `token_header` : header HTTP à utiliser pour l'authentification. - `token_env_names` : liste de variables d'environnement candidates pour retrouver le token. Exemple de chargement : @@ -73,7 +73,7 @@ source := file.Update.ReleaseSource() ## Config JSON -Le package `config` stocke une structure generique par profil dans un JSON prive +Le package `config` stocke une structure générique par profil dans un JSON privé pour l'utilisateur courant. Exemple : @@ -108,14 +108,14 @@ fmt.Printf("config saved to %s\n", path) Notes : -- le fichier est cree avec des permissions `0600` -- le repertoire parent est force en `0700` -- l'ecriture est atomique via un fichier temporaire puis `rename` -- si le fichier n'existe pas, `Load` et `LoadDefault` retournent une config vide par defaut +- le fichier est créé avec des permissions `0600` +- le répertoire parent est forcé en `0700` +- l'écriture est atomique via un fichier temporaire puis `rename` +- si le fichier n'existe pas, `Load` et `LoadDefault` retournent une config vide par défaut ## Secrets -Le package `secretstore` s'appuie sur le wallet natif du systeme : +Le package `secretstore` s'appuie sur le wallet natif du système : - macOS : Keychain - Linux : Secret Service ou KWallet selon l'environnement @@ -146,7 +146,7 @@ default: } ``` -## CLI Helpers +## Helpers CLI `cli` fournit des helpers simples pour les assistants interactifs : @@ -169,11 +169,11 @@ if err != nil { ## Auto-Update -Le package `update` ne deduit pas la forge ni l'authentification. -L'application cliente fournit l'URL de release, le header d'auth eventuel et, -si besoin, les variables d'environnement a consulter. +Le package `update` ne déduit pas la forge ni l'authentification. +L'application cliente fournit l'URL de release, le header d'auth éventuel et, +si besoin, les variables d'environnement à consulter. -Le format attendu pour la reponse `latest release` est actuellement : +Le format attendu pour la réponse `latest release` est actuellement : ```json { @@ -210,10 +210,10 @@ if err != nil { Contraintes actuelles : -- le `latest_release_url` doit etre renseigne explicitement -- les assets supportes sont `darwin/amd64`, `darwin/arm64`, `linux/amd64` et `windows/amd64` -- le remplacement du binaire n'est pas supporte sur Windows -- le nom de l'asset est derive de `BinaryName`, `GOOS` et `GOARCH` +- le `latest_release_url` doit être renseigné explicitement +- les assets supportés sont `darwin/amd64`, `darwin/arm64`, `linux/amd64` et `windows/amd64` +- le remplacement du binaire n'est pas supporté sur Windows +- le nom de l'asset est dérivé de `BinaryName`, `GOOS` et `GOARCH` ## Exemple Minimal @@ -254,6 +254,6 @@ func run(ctx context.Context, flagProfile string) error { ## Limites Actuelles -- le manifeste gere uniquement la section `[update]` +- le manifeste gère uniquement la section `[update]` - le framework ne fournit pas encore d'interface unique de bootstrap - l'auto-update reste volontairement simple et ne supporte pas encore de scripts externes