# Manifeste `mcp.toml` Le package `manifest` cherche automatiquement `mcp.toml` dans le répertoire courant puis remonte les répertoires parents jusqu'à trouver le fichier. Pour un binaire installé (par exemple dans `~/.local/bin`), il peut aussi charger un fallback embarqué via `LoadDefaultOrEmbedded`. Exemple minimal : ```toml binary_name = "my-mcp" docs_url = "https://docs.example.com/my-mcp" [update] source_name = "Gitea releases" driver = "gitea" repository = "org/repo" base_url = "https://gitea.example.com" asset_name_template = "{binary}-{os}-{arch}{ext}" checksum_asset_name = "{asset}.sha256" checksum_required = true signature_asset_name = "{asset}.sig" signature_required = false signature_public_key_env_names = ["MY_MCP_RELEASE_ED25519_PUBLIC_KEY"] token_header = "Authorization" token_prefix = "token" token_env_names = ["GITEA_TOKEN"] [environment] known = ["MY_MCP_PROFILE", "MY_MCP_URL", "MY_MCP_TOKEN"] [secret_store] backend_policy = "auto" # Optionnel : mettre false pour désactiver le cache Bitwarden. bitwarden_cache = true [profiles] default = "prod" known = ["dev", "staging", "prod"] [bootstrap] description = "Client MCP interne" [[config.fields]] name = "base_url" flag = "base-url" env = "MY_MCP_URL" config_key = "base_url" type = "url" label = "Base URL" required = true sources = ["flag", "env", "config"] [[config.fields]] name = "api_token" flag = "api-token" env = "MY_MCP_TOKEN" secret_key_template = "profile/{profile}/api-token" type = "secret" label = "API token" required = true sources = ["flag", "env", "secret"] ``` Champs supportés : - `binary_name` : nom du binaire (utilisable par le bootstrap/scaffolding). - `docs_url` : URL de documentation projet. - `[update]` : source de release consommée par `update`. - `source_name` : nom humain de la source de release, utilisé dans certains messages d'erreur. - `driver` : driver de forge (`gitea`, `gitlab`, `github`) pour déduire automatiquement l'endpoint latest. - `repository` : dépôt cible (`org/repo` ou `group/subgroup/repo`). - `base_url` : base de la forge ou du service de release. - `latest_release_url` : URL complète qui retourne la release la plus récente (prioritaire sur le driver). - `asset_name_template` : template de nom d'asset (`{binary}`, `{os}`, `{arch}`, `{ext}`). - `checksum_asset_name` : nom d'asset checksum, avec placeholder optionnel `{asset}`. - `checksum_required` : si `true`, l'update échoue quand l'asset checksum est absent. - `signature_asset_name` : nom d'asset signature Ed25519 (détachée), avec placeholder optionnel `{asset}`. - `signature_required` : si `true`, l'update échoue si la signature ou la clé publique manquent, ou si la signature est invalide. - `signature_public_key` : clé publique Ed25519 (hex ou base64) utilisée pour vérifier la signature. - `signature_public_key_env_names` : variables d'environnement candidates contenant la clé publique Ed25519. - `token_header` : header HTTP à utiliser pour l'authentification. - `token_prefix` : préfixe appliqué devant le token (`Bearer`, `token`, ...). - `token_env_names` : liste de variables d'environnement candidates pour retrouver le token. - `[environment].known` : variables d'environnement connues du projet. - `[secret_store].backend_policy` : politique de secret store (`auto`, `kwallet-only`, `keyring-any`, `env-only`, `bitwarden-cli`). - `[secret_store].bitwarden_cache` : active le cache Bitwarden mémoire et disque chiffré quand `backend_policy = "bitwarden-cli"`. Par défaut, le cache est activé si le champ est absent. Mettre `false` pour le désactiver. - `[profiles].default` : profil recommandé par défaut. - `[profiles].known` : profils connus du projet. - `[bootstrap].description` : description CLI utilisée par le bootstrap. - `[[config.fields]]` : champs de configuration déclaratifs consommés par `mcp-framework generate`. - `name` : identifiant stable du champ. - `flag` : nom du flag CLI, sans `--`. - `env` : variable d'environnement associée. - `config_key` : clé dans la config fichier du projet. - `secret_key_template` : clé de secret, avec `{profile}` remplacé par le profil courant dans le code généré. - `type` : type de setup (`string`, `url`, `secret`, `bool`, `list`). - `label` : libellé humain utilisé pendant le setup. - `default` : valeur par défaut optionnelle. - `required` : si `true`, la résolution échoue quand aucune source ne fournit de valeur. - `sources` : ordre de résolution spécifique au champ (`flag`, `env`, `config`, `secret`). Toutes ces sections (hors `[update]` selon les besoins de l'application) sont optionnelles. Exemple de chargement : ```go file, path, err := manifest.LoadDefault(".") if err != nil { return err } fmt.Printf("manifest loaded from %s\n", path) source := file.Update.ReleaseSource() bootstrapInfo := file.BootstrapInfo() scaffoldInfo := file.ScaffoldInfo() _ = bootstrapInfo _ = scaffoldInfo _ = source ``` Fallback fichier puis embarqué : ```go file, source, err := manifest.LoadDefaultOrEmbedded(".", embeddedManifest) if err != nil { return err } fmt.Printf("manifest source: %s\n", source) // chemin du fichier ou "embedded:mcp.toml" ```