Permettre l'accès aux données colibre via ChatGPT et Claude.ai #114

Closed
opened 2026-07-13 08:30:08 +02:00 by ColinMaudry · 1 comment
ColinMaudry commented 2026-07-13 08:30:08 +02:00 (Migrated from github.com)

Actuellement le connecteur MCP de colibre n'est accessible que via certains agents qui acceptent une authentification plus simple : Claude Code, Mistral et Gemini CLI, entre autres.

ChatGPT et Claude.ai requierent une authentification plus complexe via le protocole OAuth pour que colibre soit utilisé comme "application", ce qui demande des développements supplémentaires. Plus d'infos : https://help.openai.com/fr-fr/articles/11487775-apps-in-chatgpt

Actuellement le connecteur MCP de colibre n'est accessible que via certains agents qui acceptent une authentification plus simple : Claude Code, Mistral et Gemini CLI, entre autres. ChatGPT et Claude.ai requierent une authentification plus complexe via le protocole OAuth pour que colibre soit utilisé comme "application", ce qui demande des développements supplémentaires. Plus d'infos : https://help.openai.com/fr-fr/articles/11487775-apps-in-chatgpt
ColinMaudry commented 2026-07-13 13:32:06 +02:00 (Migrated from github.com)

Approche retenue (design)

Design complet : docs/superpowers/specs/2026-07-13-mcp-oauth-scope-b2-design.md (commit f63c08f).

En résumé, on fait de colibre son propre serveur d'autorisation OAuth 2.1, conforme à la spec MCP (2025-06-18 / 2025-11-25), afin que Claude.ai, Claude Desktop/mobile et ChatGPT se connectent au connecteur MCP sans copier-coller de jeton. Le chemin « jeton statique » (scope B, clients CLI : Claude Code, Gemini, Mistral) est conservé sans régression — les deux coexistent sur /_mcp.

Décisions clés :

  • colibre = serveur d'autorisation ET resource server sur le même Flask ; l'étape de consentement réutilise la session flask_login existante.
  • authlib (déjà en dépendance) + stockage SQLite maison (pas de SQLAlchemy).
  • Tokens d'accès opaques validés par lookup haché, liés en audience (resource, RFC 8707). Pas de JWT/JWKS.
  • DCR (RFC 7591) comme baseline (clients publics none + PKCE S256). CIMD reporté.
  • Découverte : PRM (RFC 9728) + AS metadata (RFC 8414) + openid-configuration, avec 401 → WWW-Authenticate: resource_metadata=….
  • Refresh avec rotation (client public) ; offline_access annoncé. Access 1 h / refresh 60 j.
  • Gate abonnement bloquant tôt à /authorize, ET re-vérifié à chaque requête /_mcp et à chaque refresh → aucun droit acquis : un token cesse de fonctionner dès que l'abonnement manque.
  • Détection d'usage (niveau 1) : table mcp_usage journalisant chaque requête /_mcp authentifiée (socle d'un futur quota/rate-limiting).
  • MAJ de /compte/mcp : instructions réelles pour Claude.ai et ChatGPT (ajout par URL https://colibre.fr/_mcp).

Hors-périmètre (itérations futures) : CIMD, oauth_anthropic_creds, JWT/mTLS, rate-limiting actif (429), soumission au directory de connecteurs.

Sources : spec MCP authorization, doc connecteurs Claude, OpenAI Apps SDK auth.

## Approche retenue (design) Design complet : `docs/superpowers/specs/2026-07-13-mcp-oauth-scope-b2-design.md` (commit f63c08f). En résumé, on fait de colibre son **propre serveur d'autorisation OAuth 2.1**, conforme à la spec MCP (2025-06-18 / 2025-11-25), afin que **Claude.ai, Claude Desktop/mobile et ChatGPT** se connectent au connecteur MCP sans copier-coller de jeton. Le chemin « jeton statique » (scope B, clients CLI : Claude Code, Gemini, Mistral) est **conservé sans régression** — les deux coexistent sur `/_mcp`. **Décisions clés :** - **colibre = serveur d'autorisation ET resource server** sur le même Flask ; l'étape de consentement réutilise la **session flask_login existante**. - **authlib** (déjà en dépendance) + stockage **SQLite maison** (pas de SQLAlchemy). - **Tokens d'accès opaques** validés par lookup haché, **liés en audience** (`resource`, RFC 8707). Pas de JWT/JWKS. - **DCR (RFC 7591)** comme baseline (clients publics `none` + **PKCE S256**). CIMD reporté. - **Découverte** : PRM (RFC 9728) + AS metadata (RFC 8414) + `openid-configuration`, avec `401 → WWW-Authenticate: resource_metadata=…`. - **Refresh** avec rotation (client public) ; `offline_access` annoncé. Access 1 h / refresh 60 j. - **Gate abonnement bloquant tôt à `/authorize`**, ET **re-vérifié à chaque requête** `/_mcp` et à chaque refresh → **aucun droit acquis** : un token cesse de fonctionner dès que l'abonnement manque. - **Détection d'usage (niveau 1)** : table `mcp_usage` journalisant chaque requête `/_mcp` authentifiée (socle d'un futur quota/rate-limiting). - MAJ de `/compte/mcp` : instructions réelles pour Claude.ai et ChatGPT (ajout par URL `https://colibre.fr/_mcp`). **Hors-périmètre (itérations futures) :** CIMD, `oauth_anthropic_creds`, JWT/mTLS, rate-limiting actif (429), soumission au directory de connecteurs. Sources : [spec MCP authorization](https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization), [doc connecteurs Claude](https://claude.com/docs/connectors/building/authentication), [OpenAI Apps SDK auth](https://developers.openai.com/apps-sdk/build/auth).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: colin/colibre#114