mcp-framework/docs/manifest.md

3.6 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"

[profiles]
default = "prod"
known = ["dev", "staging", "prod"]

[bootstrap]
description = "Client MCP interne"

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).
  • [profiles].default : profil recommandé par défaut.
  • [profiles].known : profils connus du projet.
  • [bootstrap].description : description CLI utilisée par le bootstrap.

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"