Conectar por MCP
El servidor MCP de D2B está en https://d2b.dev/mcp/ (Streamable HTTP). Hay dos formas de autenticarse: el inicio de sesión del host (OAuth 2.1: apruebas en el navegador y el host renueva solo un token de una hora) o un header Bearer con PAT. Las herramientas son la misma superficie que REST / CLI / SDK, cada una con esquema tipado para tool calling (la lista de herramientas de tu host siempre es la vigente).
Las normas vienen del servidor
Sección titulada «Las normas vienen del servidor»Al conectar, la respuesta de inicialización lleva instructions: las normas de uso (qué herramienta y cuándo, traer archivos por referencia, derivar con transforms, releer ante 409, commit_snapshot en los hitos, delete_workbook para limpiar …). Si su host recorta instructions, el mismo texto se lee como recurso d2b://guide. En el repositorio basta con la conexión y la elección de vía (Usar D2B desde un agente de código).
La provisión de workspaces también funciona por MCP (provision_workspace / delete_workspace; requiere una clave de toda la cuenta con los scopes workspaces:create / workspaces:delete; una clave fijada a un workspace no puede crear hermanos).
Inicio de sesión (OAuth)
Sección titulada «Inicio de sesión (OAuth)»Registra solo la URL: el host descubre el servidor de autorización a partir del 401 de https://d2b.dev/mcp/ y abre en el navegador la página de consentimiento de D2B. Muestra el nombre de la app, el host al que vuelve, los permisos que recibe (read / write / delete sobre workbooks más cloud-files:read) y con qué cuenta actúa (tu cuenta predeterminada o una de tus cuentas de desarrollador). El token de acceso dura una hora; el host lo renueva con un refresh token. Aparece en Configuración > Tokens de la consola como oauth:<nombre de la app>, así que cada conexión se revoca por separado.
El nombre de la app lo declara el host; D2B no lo verifica. Rechaza una página de consentimiento que no esperabas. Para hosts sin OAuth y para entornos desatendidos como CI, sigue usando el header Bearer con PAT.
Configuración por host
Sección titulada «Configuración por host»claude mcp add d2b --transport http https://d2b.dev/mcp/Registrado sin header, el host pide iniciar sesión en el primer uso. Los entornos desatendidos pasan un PAT:
claude mcp add d2b --transport http https://d2b.dev/mcp/ \ --header "Authorization: Bearer $D2B_PAT"~/.cursor/mcp.json (o .cursor/mcp.json del proyecto). Solo con la URL, Cursor pide iniciar sesión; añade headers para fijar un PAT:
{ "mcpServers": { "d2b": { "url": "https://d2b.dev/mcp/", "headers": { "Authorization": "Bearer d2b_pat_..." } } }}.vscode/mcp.json. Solo con la URL, VS Code pide iniciar sesión (añade headers para 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 con https://d2b.dev/mcp/. Deja el valor por defecto «Iniciar sesión ahora» (el navegador abre la página de consentimiento de D2B). Para conectar con un PAT, elige «Sin inicio de sesión» y define el header Authorization: Bearer d2b_pat_.... En versiones sin ninguna de las dos opciones, pasa por mcp-remote:
{ "mcpServers": { "d2b": { "command": "npx", "args": ["-y", "mcp-remote", "https://d2b.dev/mcp/", "--header", "Authorization: Bearer d2b_pat_..."] } }}Si usas un PAT, que sea de mínimo privilegio — acotado a un workbook, con límite de tasa (Inicio rápido §1).
Mapa de herramientas
Sección titulada «Mapa de herramientas»| Propósito | Herramientas |
|---|---|
| Descubrir | list_my_data / get_schema(include_json_schema) / profile_table / get_lineage / get_downstream / search |
| Leer | read_table / query_sql / validate_sql |
| Revisar | review_table / review_workbook (hallazgos con evidencia: las fórmulas del archivo de origen, las invariantes de la tabla, etiquetas frente a definiciones; mode="agent" devuelve un trabajo: síguelo con get_job) |
| Traer datos (referencia primero) | ingest_url / request_upload → ingest_upload / list_cloud_files → import_cloud_file / track_onedrive_file / ingest_file |
| Inspeccionar estructura / revise fiel | analyze_source / get_parse_spec / update_parse_spec / materialize_source / revise_source |
| Contenedores (workbooks, workspaces) | list_my_workspaces / create_workbook / delete_workbook / provision_workspace / delete_workspace |
| Crear y corregir | create_table / add_transform / list_transforms / upsert_rows / delete_rows / write_a1 / put_sheet / get_sheet / list_sheets |
| Esquema | add_column / rename_column / retype_column / drop_column / rename_table |
| Fórmulas y descripciones | set_formula_column / list_formula_columns / clear_formula_column / set_artifact_description / set_column_description / set_table_style / get_table_style |
| Historial | list_snapshots / commit_snapshot / restore_snapshot / diff_snapshots / recompute_stale / list_ops / undo_op |
| Conflictos, sincronización, entrega | list_conflicts / resolve_conflict / export_tables / bind_external_sheet / list_sync_bindings / unbind_external_sheet / list_file_links / sync_file_link |
Las entradas están estrictamente tipadas (enums / modelos estructurados; un harness puede rechazar valores inválidos al generar). La única entrada dependiente de los datos, upsert_rows.rows, se puede restringir en tiempo de ejecución con el JSON Schema por fila de get_schema(name, include_json_schema=true).
Los errores usan el mismo vocabulario problem+json que REST (con suggested_fix) — Leer errores.
El transporte es streamable HTTP sin estado: no se mantiene sesión en el servidor; cada petición es autocontenida (segura para reintentos y escalado horizontal).