Conectar via MCP
O servidor MCP do D2B fica em https://d2b.dev/mcp/ (Streamable HTTP). Há duas formas de autenticação: o login do host (OAuth 2.1 — aprova no browser e o host renova sozinho um token de uma hora) ou um header Bearer com PAT. As ferramentas são a mesma superfície do REST / CLI / SDK, cada uma com schema tipado para tool calling (a lista de ferramentas do seu host é sempre a atual).
As normas vêm do servidor
Seção intitulada “As normas vêm do servidor”Ao conectar, a resposta de inicialização traz instructions: as normas de uso (qual ferramenta quando, trazer arquivos por referência, derivar com transforms, reler em 409, commit_snapshot nos marcos, delete_workbook para limpar …). Se o host truncar instructions, o mesmo texto pode ser lido como o recurso d2b://guide. No repositório bastam a conexão e a escolha do caminho (Usar o D2B a partir de um agente de código).
O provisionamento de workspaces também funciona via MCP (provision_workspace / delete_workspace; exige uma chave de toda a conta com os scopes workspaces:create / workspaces:delete — uma chave fixada a um workspace não cria irmãos).
Login (OAuth)
Seção intitulada “Login (OAuth)”Registe apenas o URL: o host descobre o servidor de autorização a partir do 401 de https://d2b.dev/mcp/ e abre no browser a página de consentimento do D2B. Ela mostra o nome da app, o host para onde volta, as permissões concedidas (read / write / delete em workbooks mais cloud-files:read) e em nome de que conta a app age (a sua conta predefinida ou uma das suas contas de programador). O token de acesso dura uma hora; o host renova-o com um refresh token. Aparece em Definições > Tokens na consola como oauth:<nome da app>, pelo que cada ligação se revoga separadamente.
O nome da app é declarado pelo host; o D2B não o verifica. Recuse uma página de consentimento inesperada. Para hosts sem OAuth e ambientes sem operador, como CI, mantenha o header Bearer com PAT.
Setup por host
Seção intitulada “Setup por host”claude mcp add d2b --transport http https://d2b.dev/mcp/Registado sem header, o host pede login na primeira utilização. Ambientes sem operador passam um PAT:
claude mcp add d2b --transport http https://d2b.dev/mcp/ \ --header "Authorization: Bearer $D2B_PAT"~/.cursor/mcp.json (ou .cursor/mcp.json do projeto). Só com o URL, o Cursor pede login; acrescente headers para fixar um PAT:
{ "mcpServers": { "d2b": { "url": "https://d2b.dev/mcp/", "headers": { "Authorization": "Bearer d2b_pat_..." } } }}.vscode/mcp.json. Só com o URL, o VS Code pede login (acrescente headers para um 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 com https://d2b.dev/mcp/. Mantenha a predefinição «Iniciar sessão agora» (o browser abre a página de consentimento do D2B). Para ligar com um PAT, escolha «Sem login» e defina o header Authorization: Bearer d2b_pat_.... Em versões sem nenhuma das opções, passe por mcp-remote:
{ "mcpServers": { "d2b": { "command": "npx", "args": ["-y", "mcp-remote", "https://d2b.dev/mcp/", "--header", "Authorization: Bearer d2b_pat_..."] } }}Se usar um PAT, que seja de privilégio mínimo — limitado a um workbook, com limite de taxa (Início rápido §1).
Mapa das ferramentas
Seção intitulada “Mapa das ferramentas”| Finalidade | Ferramentas |
|---|---|
| Descobrir | list_my_data / get_schema(include_json_schema) / profile_table / get_lineage / get_downstream / search |
| Ler | read_table / query_sql / validate_sql |
| Revisar | review_table / review_workbook (apontamentos com evidência: as fórmulas do arquivo de origem, as invariantes da tabela, rótulos vs. definições; mode="agent" devolve um job — acompanhe com get_job) |
| Trazer dados (referência primeiro) | ingest_url / request_upload → ingest_upload / list_cloud_files → import_cloud_file / track_onedrive_file / ingest_file |
| Inspecionar estrutura / revise fiel | analyze_source / get_parse_spec / update_parse_spec / materialize_source / revise_source |
| Contêineres (workbooks, workspaces) | list_my_workspaces / create_workbook / delete_workbook / provision_workspace / delete_workspace |
| Criar e corrigir | create_table / add_transform / list_transforms / upsert_rows / delete_rows / write_a1 / put_sheet / get_sheet / list_sheets |
| Schema | add_column / rename_column / retype_column / drop_column / rename_table |
| Fórmulas e descrições | set_formula_column / list_formula_columns / clear_formula_column / set_artifact_description / set_column_description / set_table_style / get_table_style |
| Histórico | list_snapshots / commit_snapshot / restore_snapshot / diff_snapshots / recompute_stale / list_ops / undo_op |
| Conflitos, sincronização, entrega | list_conflicts / resolve_conflict / export_tables / bind_external_sheet / list_sync_bindings / unbind_external_sheet / list_file_links / sync_file_link |
Tipagem
Seção intitulada “Tipagem”As entradas são estritamente tipadas (enums / modelos estruturados; um harness pode rejeitar valores inválidos na geração). A única entrada dependente dos dados, upsert_rows.rows, pode ser restringida em tempo de execução com o JSON Schema por linha de get_schema(name, include_json_schema=true).
Os erros usam o mesmo vocabulário problem+json do REST (com suggested_fix) — Lendo erros.
O transporte é streamable HTTP sem estado — nenhuma sessão é mantida no servidor; cada requisição é autocontida (segura para retentativas e escala horizontal).