apex-method-mcp
v2.3.0
Published
APEX METHOD — MCP server: let an AI assistant manage the platform's content (exercises, programs, sales pages, site settings, media, recipes, transformations) with RLS-enforced admin login.
Maintainers
Readme
APEX METHOD — MCP pour le contenu du site
Connecte l'assistant IA d'Alex (Claude Desktop, Cursor, Claude Code…) directement au contenu du site : la bibliothèque d'exercices, les programmes et leurs pages de vente, les termes de garantie, la médiathèque, les recettes, les transformations — en masse, en langage naturel.
Installation (laisser l'IA faire)
Ajoute ce bloc à la configuration de ton application IA — Claude Desktop :
Claude Desktop → Réglages → Developer → Edit Config → claude_desktop_config.json
(Cursor : Cursor → Réglages → MCP → Add Server) :
{
"mcpServers": {
"apex-method": {
"command": "npx",
"args": ["-y", "apex-method-mcp"]
}
}
}Aucun mot de passe dans la configuration. Au premier usage, l'IA affiche un lien d'autorisation : tu l'ouvres, tu es reconnu comme administrateur du site (connecte-toi si nécessaire), tu cliques Autoriser, et l'accès est établi. Il dure 90 jours tant qu'il est utilisé — révocable à tout moment depuis le tableau de bord (Admin → Accès IA). Le serveur se télécharge tout seul au premier lancement et se met à jour à chaque nouvelle version.
Variante par identifiants (déconseillée, pour les setups sans navigateur) : ajoute
"env": { "APEX_EMAIL": "…", "APEX_PASSWORD": "…" }au bloc ci-dessus, ou installe le dossierapex-mcp/du repo (npm installpuis"command": "node"versserver.mjs).
Ce que l'IA va faire
Rien d'autre — pas de repo, pas de clone, pas de build, pas de mot de passe à recopier.
Ce que l'IA peut gérer
| Domaine | Tools | Écritures |
|---|---|---|
| Exercices | library_overview, list_exercises, create_exercises, update_exercises, delete_exercises, set_exercise_video | groupe musculaire et sa page (/exercices/<slug du groupe>), équipement, description, vidéos, suppression |
| Programmes | list_programs, get_program, update_programs | prix, paiement en X fois, garantie, hero/CTA, description, actif/inactif |
| Page de vente | get_landing, update_landing_section | remplacement d'une section (par numéro), titre/description de la page |
| Termes du site | get_site_settings, update_site_settings | Garantie Résultat, avertissement résultats, règle d'annulation, lien de réservation |
| Médiathèque | search_media | lecture seule (les envois de fichiers passent par le tableau de bord) |
| Recettes | list_recipes, create_recipes, update_recipes, delete_recipes | slug (celui d’un bloc recipe_card), catégorie, macros, ingrédients, étapes, publication |
| Transformations | list_transformations, update_transformations | histoire, chiffres, photo, ordre |
| Structure | structure_preview_session, structure_build_session | aperçu puis construction d'une séance entière (blocs + exercices placés) dans une semaine existante |
get_program lit aussi la structure d'entraînement (semaines → séances → exercices
placés, cycles, éditions) — en lecture. La construction d'une séance entière passe par les tools structure_* (semaine existante exigée, exercices inconnus en placeholders) ; le réordonnancement fin reste dans les constructeurs du tableau de bord.
Blog
- Écrire, relire (lien d'aperçu), publier, programmer, dépublier et supprimer des articles.
- Quatre formats : article, guide complet, liste (« 7 exercices pour… »), histoire de transformation (uniquement pour les clients qui ont donné leur accord).
- Créer les catégories au besoin, téléverser une photo que tu lui donnes.
- Insérer des graphiques et animations (« embeds ») aux couleurs du site, isolés du reste du site.
- Tout passe par le même contrôle que l'admin : ton, liens, SEO, photo obligatoire.
Sécurité
- L'autorisation passe par le site. Aucun mot de passe dans la configuration : la
première utilisation ouvre
apexmethod.fit, où un administrateur connecté clique sur « Autoriser ». Le jeton ne transite que sur la machine locale (boucle 127.0.0.1) et n'est stocké que sous forme de hash côté serveur. - Chaque appel tourne sous TON identité (JWT court, 1 heure) avec les mêmes règles de
sécurité que le tableau de bord (RLS
is_admin()). Le serveur ne contient aucune clé privilégiée. - Durée et révocation : l'accès dure 90 jours tant qu'il est utilisé (glissant), se voit et se révoque depuis Admin → Accès IA.
- dry_run par défaut : chaque écriture montre d'abord le diff exact ; rien n'est appliqué sans un second appel de confirmation.
- Jetons
{{...}}vérifiés : une section de page de vente qui utiliserait un jeton irrésoluble ({{price}}sur une offre sans prix, faute de frappe…) est REFUSÉE — la même validation que l'éditeur du tableau de bord. - Champs protégés : slugs, identifiants Stripe, liens instance-client — l'IA ne peut pas les toucher.
- Suppression des exercices : refusée si l'exercice est utilisé dans des séances,
sauf
force=trueexplicite. - Piste d'audit : chaque mutation laisse une trace dans
client_mcp_audit.
Développeurs
node e2e.mjs— passe complète signée contre la production (48 vérifications) : crée un admin jetable + des lignes de test, exerce tous les tools, supprime tout. Le lancer après chaque modification deserver.mjs.lib.mjs— config, auth, PostgREST, audit, updater générique.tokens.mjs— port du validateur de jetons (src/lib/landing/tokens.ts) : garder les deux en sync.tools/<domaine>.mjs— un fichier par domaine ; en ajouter un = nouveau fichier + unregisterdansserver.mjs.- Schéma : la migration
20260909120000_mcp_audit_admin_policies.sql(policies + grants surclient_mcp_audit) est appliquée en production et enregistrée dans le ledger.
