Se connecter via MCP
Le serveur MCP de D2B est https://d2b.dev/mcp/ (Streamable HTTP). Deux authentifications possibles : la connexion de l’hôte (OAuth 2.1 — vous approuvez dans le navigateur et l’hôte renouvelle seul un jeton d’une heure) ou un header Bearer portant le PAT. Les outils sont la même surface que REST / CLI / SDK, chacun avec un schéma typé pour le tool calling (la liste d’outils de votre hôte est toujours à jour).
Les règles viennent du serveur
Section intitulée « Les règles viennent du serveur »À la connexion, la réponse d’initialisation porte instructions : les règles d’usage (quel outil quand, importer les fichiers par référence, dériver par transforms, relire sur 409, commit_snapshot aux jalons, delete_workbook pour nettoyer …). Si votre hôte tronque instructions, le même texte se lit comme ressource d2b://guide. Le dépôt n’a besoin que de la connexion et du choix de la voie (Utiliser D2B depuis un agent de code).
Le provisionnement de workspaces fonctionne aussi via MCP (provision_workspace / delete_workspace ; nécessite une clé de compte avec les scopes workspaces:create / workspaces:delete — une clé épinglée à un workspace ne peut pas créer de frères).
Connexion (OAuth)
Section intitulée « Connexion (OAuth) »Enregistrez seulement l’URL : l’hôte découvre le serveur d’autorisation via le 401 de https://d2b.dev/mcp/ et ouvre dans le navigateur la page de consentement de D2B. Elle affiche le nom de l’app, l’hôte de retour, les permissions accordées (read / write / delete sur les workbooks plus cloud-files:read) et pour quel compte l’app agit (votre compte par défaut ou l’un de vos comptes développeur). Le jeton d’accès dure une heure ; l’hôte le renouvelle avec un refresh token. Il apparaît dans Paramètres > Jetons de la console sous oauth:<nom de l'app>, chaque connexion se révoque donc séparément.
Le nom de l’app est déclaré par l’hôte ; D2B ne le vérifie pas. Refusez une page de consentement inattendue. Pour les hôtes sans OAuth et les environnements sans opérateur comme la CI, gardez le header Bearer avec PAT.
Configuration par hôte
Section intitulée « Configuration par hôte »claude mcp add d2b --transport http https://d2b.dev/mcp/Enregistré sans header, l’hôte demande la connexion au premier usage. Les environnements sans opérateur passent un PAT :
claude mcp add d2b --transport http https://d2b.dev/mcp/ \ --header "Authorization: Bearer $D2B_PAT"~/.cursor/mcp.json (ou .cursor/mcp.json du projet). L’URL seule fait demander la connexion à Cursor ; ajoutez headers pour fixer un PAT :
{ "mcpServers": { "d2b": { "url": "https://d2b.dev/mcp/", "headers": { "Authorization": "Bearer d2b_pat_..." } } }}.vscode/mcp.json. L’URL seule fait demander la connexion à VS Code (ajoutez headers pour un PAT) :
{ "servers": { "d2b": { "type": "http", "url": "https://d2b.dev/mcp/", "headers": { "Authorization": "Bearer ${input:d2b_pat}" } } }, "inputs": [{ "id": "d2b_pat", "type": "promptString", "password": true, "description": "D2B PAT" }]}Settings → Connectors → Add custom connector avec https://d2b.dev/mcp/. Gardez la valeur par défaut « Se connecter maintenant » (le navigateur ouvre la page de consentement de D2B). Pour un PAT, choisissez « Sans connexion » et définissez le header Authorization: Bearer d2b_pat_.... Sur les versions sans ces options, passez par mcp-remote :
{ "mcpServers": { "d2b": { "command": "npx", "args": ["-y", "mcp-remote", "https://d2b.dev/mcp/", "--header", "Authorization: Bearer d2b_pat_..."] } }}Si vous utilisez un PAT, prenez-le à privilèges minimaux — limité à un workbook, avec quota (Démarrage rapide §1).
Carte des outils
Section intitulée « Carte des outils »| Objectif | Outils |
|---|---|
| Découvrir | list_my_data / get_schema(include_json_schema) / profile_table / get_lineage / get_downstream / search |
| Lire | read_table / query_sql / validate_sql |
| Vérifier | review_table / review_workbook (constats étayés : les formules du fichier source, les invariants de la table, libellés vs définitions ; mode="agent" renvoie une tâche — à suivre avec get_job) |
| Importer des données (référence d’abord) | ingest_url / request_upload → ingest_upload / list_cloud_files → import_cloud_file / track_onedrive_file / ingest_file |
| Inspecter la structure / revise fidèle | analyze_source / get_parse_spec / update_parse_spec / materialize_source / revise_source |
| Conteneurs (workbooks, workspaces) | list_my_workspaces / create_workbook / delete_workbook / provision_workspace / delete_workspace |
| Créer et corriger | create_table / add_transform / list_transforms / upsert_rows / delete_rows / write_a1 / put_sheet / get_sheet / list_sheets |
| Schéma | add_column / rename_column / retype_column / drop_column / rename_table |
| Formules et descriptions | set_formula_column / list_formula_columns / clear_formula_column / set_artifact_description / set_column_description / set_table_style / get_table_style |
| Historique | list_snapshots / commit_snapshot / restore_snapshot / diff_snapshots / recompute_stale / list_ops / undo_op |
| Conflits, synchronisation, livraison | list_conflicts / resolve_conflict / export_tables / bind_external_sheet / list_sync_bindings / unbind_external_sheet / list_file_links / sync_file_link |
Les entrées sont strictement typées (enums / modèles structurés ; un harnais peut rejeter les valeurs invalides à la génération). La seule entrée dépendante des données, upsert_rows.rows, peut être contrainte à l’exécution avec le JSON Schema par ligne de get_schema(name, include_json_schema=true).
Les erreurs utilisent le même vocabulaire problem+json que REST (avec suggested_fix) — Lire les erreurs.
Le transport est du streamable HTTP sans état : aucune session n’est conservée côté serveur ; chaque requête est autonome (sûr pour les reprises et la montée en charge horizontale).