Serveur MCP des données colibre, conditionné à l'abonnement #111

Closed
opened 2026-07-09 11:42:32 +02:00 by ColinMaudry · 1 comment
ColinMaudry commented 2026-07-09 11:42:32 +02:00 (Migrated from github.com)

Objectif

Exposer les données publiées par colibre via le protocole MCP (Model Context Protocol), de façon à ce que les utilisateurs puissent interroger les DECP directement depuis leur agent IA (Claude, Claude Code, Cursor…), sous réserve de posséder un abonnement colibre.

Prérequis

  • Dépend de #101 : le serveur MCP de Dash est disponible à partir de Dash 4.3.0. Cette issue ne peut démarrer qu'une fois la migration Dash 4.x terminée.

Ce que fournit Dash nativement

  • enable_mcp=True sur le constructeur Dash démarre un serveur MCP sur /_mcp.
  • Par défaut il expose layout, pages et callbacks comme tools. Pour un accès données propre, privilégier le décorateur mcp_enabled (from dash.mcp import ...) afin d'exposer des fonctions Python métier ciblées (ex. « rechercher des marchés », « stats d'un acheteur ») plutôt que les callbacks d'UI.
  • configure_mcp_server(...) permet de restreindre ce qui est exposé (include_pages=False, etc.).
  • Réf. doc : https://dash.plotly.com/dash-mcp — décorateur : https://dash.plotly.com/dash-mcp/decorator

Le point dur : l'authentification / conditionnement à l'abonnement

Citation doc : « Dash implements the MCP server but not authentication. » Les options :

C'est le gros du travail : monter (ou ponter) un serveur d'autorisation OAuth 2.0 conforme MCP, et refuser la connexion / limiter les tools aux utilisateurs disposant d'un abonnement actif.

Points de vigilance sécurité (d'après la doc)

  • Les noms de fonctions des callbacks/tools exposés sont visibles des agents (ex. get_data_from_s3) → nommer proprement.
  • Ne pas se reposer sur la « sécurité par obscurité » d'un input : l'agent découvre facilement les valeurs possibles. Toute règle d'accès (dont l'abonnement) doit être appliquée explicitement, pas juste masquée dans l'UI.

Tâches (esquisse)

  • Décider du périmètre exposé (quelles fonctions de recherche/données comme tools MCP)
  • Exposer ces fonctions via mcp_enabled (pas les callbacks d'UI)
  • Implémenter le flow OAuth 2.0 MCP self-hosted
  • Brancher la vérification d'abonnement (module auth / subscriptions) sur l'autorisation
  • Documenter la connexion côté client (claude mcp add …)

Références

  • Discussion d'origine : voir aussi #101 (migration Dash 4.x, prérequis)
## Objectif Exposer les données publiées par colibre via le **protocole MCP** (Model Context Protocol), de façon à ce que les utilisateurs puissent interroger les DECP directement depuis leur agent IA (Claude, Claude Code, Cursor…), **sous réserve de posséder un abonnement colibre**. ## Prérequis - Dépend de #101 : le serveur MCP de Dash est disponible **à partir de Dash 4.3.0**. Cette issue ne peut démarrer qu'une fois la migration Dash 4.x terminée. ## Ce que fournit Dash nativement - `enable_mcp=True` sur le constructeur `Dash` démarre un serveur MCP sur `/_mcp`. - Par défaut il expose layout, pages et callbacks comme *tools*. Pour un accès données propre, privilégier le décorateur `mcp_enabled` (`from dash.mcp import ...`) afin d'exposer des **fonctions Python métier ciblées** (ex. « rechercher des marchés », « stats d'un acheteur ») plutôt que les callbacks d'UI. - `configure_mcp_server(...)` permet de restreindre ce qui est exposé (`include_pages=False`, etc.). - Réf. doc : https://dash.plotly.com/dash-mcp — décorateur : https://dash.plotly.com/dash-mcp/decorator ## Le point dur : l'authentification / conditionnement à l'abonnement Citation doc : *« Dash implements the MCP server but not authentication. »* Les options : - **Plotly Cloud** : gère l'OAuth automatiquement — ❌ non applicable (colibre est auto-hébergé). - **Dash Enterprise** : *« Authenticated MCP connections are not yet supported »* — ❌. - **Self-hosted (notre cas)** : implémenter le **flow OAuth 2.0** décrit dans la spec MCP (2025-06-18), puis brancher la vérification d'abonnement sur le module auth existant (table `subscriptions`). - Réf. : https://dash.plotly.com/dash-mcp/auth - Spec : https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization C'est le gros du travail : monter (ou ponter) un serveur d'autorisation OAuth 2.0 conforme MCP, et refuser la connexion / limiter les tools aux utilisateurs disposant d'un abonnement actif. ## Points de vigilance sécurité (d'après la doc) - Les **noms de fonctions** des callbacks/tools exposés sont visibles des agents (ex. `get_data_from_s3`) → nommer proprement. - Ne pas se reposer sur la « sécurité par obscurité » d'un input : l'agent découvre facilement les valeurs possibles. Toute règle d'accès (dont l'abonnement) doit être **appliquée explicitement**, pas juste masquée dans l'UI. ## Tâches (esquisse) - [x] Décider du périmètre exposé (quelles fonctions de recherche/données comme tools MCP) - [x] Exposer ces fonctions via `mcp_enabled` (pas les callbacks d'UI) - [ ] Implémenter le flow OAuth 2.0 MCP self-hosted - [x] Brancher la vérification d'abonnement (module auth / `subscriptions`) sur l'autorisation - [x] Documenter la connexion côté client (`claude mcp add …`) ## Références - Discussion d'origine : voir aussi #101 (migration Dash 4.x, prérequis)
ColinMaudry commented 2026-07-13 13:32:13 +02:00 (Migrated from github.com)

Le flux OAuth 2.0 MCP self-hosted (tâche restante « Implémenter le flow OAuth 2.0 MCP self-hosted ») est traité comme scope B2 dans #114 — il apporte le support des clients grand public (Claude.ai, Claude Desktop/mobile, ChatGPT) qui exigent OAuth, en complément du jeton statique (scope B) pour les clients CLI.

Design : docs/superpowers/specs/2026-07-13-mcp-oauth-scope-b2-design.md. Voir #114 pour le résumé de l'approche.

Le flux OAuth 2.0 MCP self-hosted (tâche restante « Implémenter le flow OAuth 2.0 MCP self-hosted ») est traité comme **scope B2** dans #114 — il apporte le support des clients grand public (Claude.ai, Claude Desktop/mobile, ChatGPT) qui exigent OAuth, en complément du jeton statique (scope B) pour les clients CLI. Design : `docs/superpowers/specs/2026-07-13-mcp-oauth-scope-b2-design.md`. Voir #114 pour le résumé de l'approche.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: colin/colibre#111