mcp-framework/docs/generate.md

3.5 KiB

Génération depuis mcp.toml

La commande mcp-framework generate génère la glue Go dérivée du manifeste racine d'un projet existant.

Usage

Depuis la racine du projet consommateur :

mcp-framework generate

La commande lit ./mcp.toml, valide son contenu avec le package manifest, et génère :

mcpgen/
  manifest.go
  metadata.go
  update.go
  secretstore.go

Le package généré expose le loader de manifeste :

func LoadManifest(startDir string) (manifest.File, string, error)

Cette fonction appelle manifest.LoadDefaultOrEmbedded. En développement, un mcp.toml présent sur disque reste prioritaire. Pour un binaire copié seul, elle utilise le contenu du manifeste embarqué au moment de la génération.

Il expose aussi des helpers dérivés du manifeste :

const BinaryName = "my-mcp"
const DefaultDescription = "..."
const DocsURL = "..."

func BootstrapInfo(startDir string) (manifest.BootstrapMetadata, string, error)
func ScaffoldInfo(startDir string) (manifest.ScaffoldMetadata, string, error)

Pour l'auto-update :

func UpdateOptions(version string, stdout io.Writer) (update.Options, error)
func UpdateOptionsFrom(startDir string, version string, stdout io.Writer) (update.Options, error)
func RunUpdate(ctx context.Context, args []string, version string, stdout io.Writer) error
func RunUpdateFrom(ctx context.Context, args []string, startDir string, version string, stdout io.Writer) error

RunUpdate parse les flags de la commande update, refuse les arguments positionnels, charge le manifeste via LoadManifest, puis appelle update.Run.

Pour les secrets :

type SecretStoreOptions struct {
	ServiceName string
	LookupEnv   func(string) (string, bool)
}

func OpenSecretStore(options SecretStoreOptions) (secretstore.Store, error)
func DescribeSecretRuntime(options SecretStoreOptions) (secretstore.RuntimeDescription, error)
func PreflightSecretStore(options SecretStoreOptions) (secretstore.PreflightReport, error)

SecretStoreOptions contient aussi les options techniques du package secretstore (KWalletAppID, KWalletFolder, BitwardenCommand, BitwardenDebug, Shell, ExecutableResolver). Si ServiceName est vide, le nom du binaire déclaré dans le manifeste est utilisé.

Flags

  • --manifest : chemin du mcp.toml à lire. Par défaut, ./mcp.toml.
  • --package-dir : répertoire du package généré. Par défaut, mcpgen.
  • --package-name : nom du package Go généré. Par défaut, dérivé du dossier.
  • --check : mode CI, échoue si les fichiers générés sont absents ou obsolètes.

Exemple CI :

mcp-framework generate --check

Migration d'un wrapper manuel

Pour remplacer un wrapper local du type internal/manifest :

  1. Déplacer le manifeste projet vers mcp.toml à la racine.
  2. Lancer mcp-framework generate.
  3. Remplacer les imports du wrapper local par le package généré, par exemple example.com/my-mcp/mcpgen.
  4. Remplacer les appels manifest.Load(...) du wrapper par mcpgen.LoadManifest(...).
  5. Remplacer les reconstructions locales d'options update par mcpgen.UpdateOptions(...) ou mcpgen.RunUpdate(...).
  6. Remplacer les wrappers secret store qui ne font que brancher le loader par mcpgen.OpenSecretStore, mcpgen.DescribeSecretRuntime et mcpgen.PreflightSecretStore.
  7. Supprimer l'ancien wrapper manuel.

Après génération, un simple go build ./... suffit. La compilation ne dépend pas de la commande mcp-framework.