133 lines
5.1 KiB
Markdown
133 lines
5.1 KiB
Markdown
# 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"
|
|
```
|