From 5b7074529c9f1ca7852d399b48a8a7c142910799 Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Thu, 9 Jul 2026 20:50:14 +0200 Subject: [PATCH] feat(mcp): activer le serveur MCP via DASH_MCP_ENABLED (scope A #111) --- .template.env | 6 ++++++ src/app.py | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/.template.env b/.template.env index 3191ca6..d73bdf9 100644 --- a/.template.env +++ b/.template.env @@ -72,3 +72,9 @@ FRISBII_WEBHOOK_SECRET= # secret de signature des webhooks # Accès gratuit temporaire TOUS_ABONNES=false # true = ouvre gratuitement les fonctionnalités d'abonné à tout compte + +# Serveur MCP (issue #111). Laisser à false tant que l'authentification +# (OAuth + gate abonnement, scope B) n'est pas en place : sinon le serveur MCP +# est ouvert sans contrôle d'accès. Prérequis Matomo pour le tracking des appels : +# créer un Custom Dimension slot 1 (scope Action). +DASH_MCP_ENABLED=false diff --git a/src/app.py b/src/app.py index fdcf7a9..d04a342 100644 --- a/src/app.py +++ b/src/app.py @@ -74,6 +74,8 @@ cache.init_app( }, ) +_mcp_enabled = os.getenv("DASH_MCP_ENABLED") == "true" + app: Dash = Dash( server=server, # name="src" (et non "src.app") pour que use_pages enregistre les pages sous @@ -87,6 +89,7 @@ app: Dash = Dash( use_pages=True, suppress_callback_exceptions=True, compress=True, + enable_mcp=_mcp_enabled, meta_tags=META_TAGS, ) @@ -108,6 +111,19 @@ from src.api import init_api # noqa: E402 # inline: src.db.conn must be ready init_api(app.server) +# Serveur MCP (issue #111, scope A) : n'expose QUE les fonctions @mcp_enabled, +# jamais les callbacks/layout/pages d'UI. Activé via DASH_MCP_ENABLED=true. +if _mcp_enabled: + from dash.mcp import configure_mcp_server # noqa: E402 + + configure_mcp_server( + include_layout=False, + include_callbacks=False, + include_pages=False, + include_clientside_callbacks=False, + ) + import src.mcp.tools # noqa: E402,F401 # l'import enregistre les @mcp_enabled + from src.subscriptions.setup import init_subscriptions # noqa: E402 init_subscriptions(app.server)