ClaudeとDataHubを連携する方法 — OAuth接続とカタログ操作ツールの範囲
DataHubのMCPサーバーにClaudeをOAuthで接続する手順と、検索・リネージ・SQL下書きなどの読み取りツール、タグや所有者を書き換える変更系ツールの境界をまとめます。
ClaudeからDataHubのデータカタログを検索し、リネージ(データの流れ)をたどるには、DataHubが提供するMCPサーバーに接続します。接続先は https://mcp.datahub.com/mcp で、OAuthでユーザー本人としてサインインします。
DataHubはAcryl Data, Inc.が提供するメタデータ基盤で、Claudeのコネクタディレクトリでは「Data & analytics」に分類され、サインインが必須です。この記事では、接続手順、認証の選び方、読み取りツールと変更系ツールの境界、Claude Code側で書き込みを止める設定を順に扱います。
接続先は3種類ある
DataHubのMCPサーバーには、利用形態の異なる3つの入口があります。最初に自分の環境がどれに当たるかを決めると、あとの手順が迷いません。
| 入口 | 対象 | 認証 | 向く場面 |
|---|---|---|---|
| マネージド(OAuth) | 対象DataHub Cloud v1.0.2以上 | 認証OAuth2とDCR | 向く場面人が対話的に使う |
| マネージド(アクセストークン) | 対象DataHub Cloud v0.3.12以上 | 認証個人アクセストークン | 向く場面古いCloud、非OAuthクライアント |
| セルフホスト | 対象DataHub CoreとCloud | 認証環境変数のトークン | 向く場面Coreを使う、自前運用 |
DataHub Coreにはマネージド版がありません。Coreを使うなら、オープンソースの mcp-server-datahub を自分で動かす経路になります。
ClaudeのWebとデスクトップから接続する
ClaudeのUIからは、カスタムコネクタとして追加します。ドキュメントの手順は次のとおりです。
カスタムコネクタでDataHubを追加する流れ
- 1
コネクタ画面を開く
CustomizeのConnectorsを開きます。TeamやEnterpriseでは、オーナーがOrganization settingsのConnectorsから追加し、メンバーは各自で接続します。
- 2
カスタムコネクタを追加する
「+」からAdd custom connectorを選び、名前に
DataHub、リモートMCPサーバーのURLにhttps://mcp.datahub.com/mcpを入れます。 - 3
詳細設定は空のままにする
Advanced settingsは空にします。DataHub側がDCR(動的クライアント登録)でClaudeを自動登録するためです。
- 4
接続してサインインする
AddのあとConnectを押し、求められたDataHubのドメイン(例:
<tenant>)を入力してサインインし、承認します。
mcp.datahub.com/mcp は全テナント共通のURLです。入力したドメインから、OAuthの流れがテナントのログイン画面へ移ります。ドメインの入力画面を省きたいなら、テナント直通の https://<tenant>.acryl.io/mcp を指定する方法もあります。オンプレミスのDataHub Cloudでは、自社のFQDNを使って https://datahub.example.com/mcp の形にします。
リモートMCPコネクタはClaudeのUIで設定するものです。DataHubのドキュメントは、claude_desktop_config.json がローカルのstdioサーバー用だと注記しています。リモートMCP非対応の古いClaude Desktopでは、個人アクセストークンと mcp-remote 経由の構成に落とします。
Claude Codeから接続する
Claude CodeはOAuth付きのリモートMCPを標準で扱えます。追加コマンドは1行です。
claude mcp add --transport http datahub https://mcp.datahub.com/mcp最初にDataHubのツールを呼ぶと、サーバーは401を返します。Claude Codeはそのサーバーを「要認証」として扱うので、セッション内で /mcp を実行し、Authenticateを選びます。ブラウザでDataHubのドメインを入力してサインインすれば、トークンが保存され、以後は自動更新されます。
テナント直通で使うなら、URLだけ差し替えます。
claude mcp add --transport http datahub https://<tenant>.acryl.io/mcpClaude Code側のコマンド体系は claude mcp add --transport http <name> <url> で、ここで付けた名前(上の例では datahub)が、後述する許可・拒否ルールのサーバー名になります。
アクセストークンで接続する場合
OAuthを使わない場面は、DataHubのドキュメントが3つ挙げています。
- サービスアカウントや無人のエージェント処理(CI/CD、定期ジョブ)
- DataHub Cloud v1.0.2未満、またはDataHub Core
- OAuth式のリモートMCPに未対応のクライアント
トークンは Authorization: Bearer <token> ヘッダーで渡します。URLの ?token= クエリは400で拒否されます。URLのトークンはプロキシやCDNのログ、ブラウザ履歴、Refererヘッダーに残るためです。ヘッダーを設定できないクライアントでは、mcp-remote の --header で代用します。
Claude Codeなら、ヘッダー付きで追加します。
claude mcp add --transport http datahub-cloud \
"https://<tenant>.acryl.io/mcp" \
--header "Authorization: Bearer <token>"トークンの文字列をコマンド履歴に残したくない場合は、短寿命の認証ヘッダーを都度生成するheadersHelperの使い方も選択肢です。
無人処理にはサービスアカウントを使う
自律的に動くエージェントには、個人トークンでなくサービスアカウントが推奨されています。作成場所はSettingsのUsers & GroupsにあるService Accountsで、そこでアクセストークンを発行します。
サービスアカウントにはDefault Viewを設定できます(DataHub Cloud v1.0.0以上、DataHub Core v1.6.0以上)。設定すると、そのトークンによるMCPサーバーの検索は、選んだビューの範囲に絞られます。ドキュメントの例は、本番のSnowflakeデータセットだけを見せる「Snowflake Production」ビューです。
使えるツールは読み取りと変更に分かれる
DataHubのMCPサーバーのツールは、読み取り専用と変更系に分かれます。全ツールにMCP標準のヒント(readOnlyHint、destructiveHint、idempotentHint)が付いているので、Claudeのような対応クライアントは、カタログを書き換えるツールを見分けて確認を挟めます。
読み取り専用ツールの4分野
探索と詳細取得
search、get_entities、list_schema_fields、get_me、search_documents、grep_documentsなど。データセットやダッシュボードの検索、メタデータの取得、スキーマの確認、保存済みドキュメントの検索に使います。リネージ
get_lineageは上流・下流をテーブル単位と列単位でたどり、ホップ数も制御できます。get_lineage_paths_betweenは2つの資産間の経路を、途中の変換やSQL情報つきで返します。SQLとクエリ
get_dataset_queriesは対象を参照する実際のSQLを取得し、find_sql_contextとdraft_sql_for_tablesは、カタログ上の使われ方に基づく下書きを助けます。ガバナンスと用語集
list_pending_proposalsで承認待ちの変更提案を一覧します。用語集の版管理はget_glossary_term_versionsとcompare_glossary_term_versions、ライフサイクル段階はlist_lifecycle_stagesです。
search_documents と grep_documents は、カタログにドキュメントが無いと自動で隠れます。ツール一覧に出ないときは、DataHub側にドキュメントが登録されていないことを疑ってください。
変更系ツールは何を書き換えるか
変更系は、メタデータ編集、用語集の作成、提案(承認制)の3系統です。
| 系統 | ツール | 変えるもの |
|---|---|---|
| メタデータ編集 | ツールadd_tags / remove_tags | 変えるものタグ(列単位も可) |
ツールadd_terms / remove_terms | 変えるもの用語集の用語 | |
ツールadd_owners / remove_owners | 変えるもの所有者 | |
ツールset_domains / remove_domains | 変えるものドメイン(1資産に1つ) | |
ツールupdate_description | 変えるもの説明文(追記や削除も可) | |
ツールadd_structured_properties / remove_structured_properties | 変えるもの構造化プロパティ | |
ツールset_lifecycle_stage、save_document | 変えるもの段階の直接設定、ナレッジのドキュメント保存 | |
| 用語集の作成 | ツールcreate_glossary_term、create_glossary_term_version、add_related_terms | 変えるもの用語の新規作成、版、関連づけ |
| 提案 | ツールpropose_create_glossary_term、propose_lifecycle_stage、accept_or_reject_proposals | 変えるもの承認待ちの申請と、その承認・却下 |
提案系は、直接書き込まずに「申請」として出す経路です。ドキュメントは、エージェントに提案だけさせたい場面で使えると説明しています。
変更系ツールの有効化条件は、ドキュメントでは mcp-server-datahub v0.5.0以上とDataHub Cloud v0.3.17以上で、環境変数 TOOLS_IS_MUTATION_ENABLED=true を設定すると示されています。Claudeのコネクタ詳細ページは、変更系を含む34ツールを掲載しています。ページに載るツール名が、そのまま自分のテナントで有効とは限りません。接続後にClaudeへツール一覧を尋ねるか、/mcp で実際に見えるツールを確かめるのが確実です。
落とし穴
コネクタページにあるツールとドキュメントの表が一致しない
コネクタ詳細ページの一覧には note_metadata_observation がありますが、DataHubのドキュメントのツール表には載っていません。名前から役割を推測せず、使う前に実際の説明文を読んでください。
Claude Codeで書き込みを止める設定例
カタログの閲覧だけをさせたいなら、変更系ツールを拒否ルールで外します。Claude Codeの権限ルールは、MCPツールを mcp__<サーバー名>__<ツール名> で指定します。サーバー名は先ほどの claude mcp add で付けた datahub です。
次は、権限ルールの書き方に沿った設定の例です。
{
"permissions": {
"deny": [
"mcp__datahub__add_*",
"mcp__datahub__remove_*",
"mcp__datahub__set_*",
"mcp__datahub__update_*",
"mcp__datahub__create_*",
"mcp__datahub__propose_*",
"mcp__datahub__accept_*",
"mcp__datahub__save_*",
"mcp__datahub__note_metadata_observation"
]
}
}この例は、上の表の変更系ツールを接頭辞のグロブで一括して拒否します。add_* は add_tags や add_terms など、propose_* は propose_create_glossary_term などを覆い、グロブで拾えない note_metadata_observation だけ名前で書いています。拒否したツールはClaudeの文脈から外れます。拒否ルールでも、サーバー名を固定してその後ろにワイルドカードを置くこの形が使えます(接頭辞の後ろにしか書けないという制限は許可ルール側だけです)。一方、読み取り系は get_ / search / list_ などで始まるため、このグロブには掛かりません。
読み取りだけを自動許可する書き方もあります。
{
"permissions": {
"allow": [
"mcp__datahub__get_*",
"mcp__datahub__search",
"mcp__datahub__list_*"
]
}
}もう1つの歯止めは、DataHub側の権限です。OAuthで接続すると操作はサインインしたユーザーの権限に従うため、閲覧専用のユーザーやサービスアカウントで接続すれば、Claudeの設定を誤っても書き込みは通りません。
会話の使いどころと、CLAUDE.mdに書く規約
DataHubのドキュメントが挙げる質問例は、次のような内容です。
- 本番でPIIを含むデータセットはどれか
analytics.revenue_tableのリネージを見せてほしい- LookerのRevenue Dashboardの所有者は誰か
- マーケティングドメインのデータセットを列挙してほしい
user_eventsテーブルのスキーマは何か
検索はワイルドカード(revenue_*)、フィールド指定(tag:PII)、論理演算((sales OR revenue) AND quarterly)を受け付けます。
Claude Codeで繰り返し使うなら、プロジェクトのCLAUDE.mdに運用規約を置くと、毎回の指示を省けます。次は書き方の一例です。
## DataHub の使い方
- テーブルを参照するSQLを書く前に、get_dataset_queries で既存クエリの結合条件を確かめる
- スキーマ変更の影響を答えるときは、get_lineage で下流を列挙してから結論を書く
- タグ・所有者・説明の変更は、実行前に対象と変更内容を一覧で示して承認を待つこの規約は、リネージ確認を挟まない回答や、確認なしの書き込みを減らす狙いです。効き具合は使うモデルやプロンプト次第なので、最初は読み取りだけで試し、挙動を見てから変更系を許可する順序が安全です。
セルフホストで動かす場合
DataHub Coreでは、uvx で mcp-server-datahub を起動します。認証は環境変数の DATAHUB_GMS_URL(GMSのエンドポイント)と DATAHUB_GMS_TOKEN(個人アクセストークン)です。Claude Codeなら次のコマンドです。
claude mcp add datahub \
-e DATAHUB_GMS_URL="<your-datahub-url>" \
-e DATAHUB_GMS_TOKEN="<your-datahub-token>" \
-- uvx mcp-server-datahub@latestClaude Desktopでは claude_desktop_config.json の mcpServers に同じ内容を書きます。このとき command には、which uvx で調べたフルパスを入れます。spawn uvx ENOENT というエラーが出たら、uvx をフルパスに置き換えるのが公式の対処です。
チームで1つのサーバーを共有するなら、HTTPのエントリポイントを使います。
mcp-server-datahubv0.7.0以上が必要で、それ以前のHTTPトランスポートはリクエストごとの認証が無く、共有に向きません- 各ユーザーが自分のトークンを
Authorization: Bearerで送るため、権限・検索結果・監査上の記録がユーザー単位に保たれます - 共有デプロイでは
DATAHUB_GMS_TOKENを設定してはいけません。設定されているとサーバーが起動を拒否します - DataHub側は
METADATA_SERVICE_AUTH_ENABLED=trueで動かす必要があります
他のデータ基盤コネクタとの使い分け
DataHubが扱うのはテーブルの中身でなく、メタデータです。何があり、誰が持ち、どこから流れてきたかを答える層になります。実データに対してSQLを走らせたい場合は、データ基盤側のコネクタが別に必要です。レイクハウス側の接続はDremioとStarburstの連携、クラウド全般のMCP接続の認証方式はAWS MCPサーバーの連携に整理しています。
コンプライアンス業務の側から使うなら、Sprintoの連携のような管理系コネクタと並べて、DataHubで資産の所有者や分類を引く使い方もあります。
なお、コネクタディレクトリには「Only use connectors from developers you trust」という注意書きがあります。Anthropicは各開発者が公開するツールを管理しておらず、動作の保証もできないという趣旨です。変更系ツールを含むコネクタでは、この注意が実際の運用判断に直結します。
まとめ
人が使うならOAuthでのカスタムコネクタ、無人処理ならサービスアカウントのトークン、Coreならセルフホスト、と入口は用途で決まります。いちばん差が出るのは、変更系ツールをどこまで開けるかです。まず読み取りだけで検索とリネージの精度を見て、タグや所有者の変更は、拒否ルールとDataHub側の権限の二重で絞ってから任せるのが無理のない順序です。