5.1 KiB
5.1 KiB
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 :
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 parupdate.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/repoougroup/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: sitrue, 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: sitrue, 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é quandbackend_policy = "bitwarden-cli". Par défaut, le cache est activé si le champ est absent. Mettrefalsepour 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 parmcp-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: sitrue, 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 :
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é :
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"