tableau-graphql-mcp について
tableau-graphql-mcpは、Tableau Metadata APIのクエリをMCPクライアントに提供し、自然言語でデータリネージを調べるサーバーです。多段階の影響分析、クエリ例、検索範囲の報告に対応し、Tableau ServerとCloudで利用できます。
主な機能
- 01読み取り専用GraphQLクエリの実行
- 02ライブスキーマの確認
- 03厳選クエリテンプレートの参照
- 04フィールドとテーブルの使用箇所解決
- 05多段階の影響と担当者の追跡
- 06範囲報告付きコンテンツ検索
活用シーン
- 01列に依存するワークブックの特定
- 02フィールド変更前のダッシュボード影響調査
- 03テーブル変更時に通知する担当者の特定
- 04名前によるTableauコンテンツ検索
MCP 対応
MCPサーバーはstdioでクライアントと通信し、HTTPS経由で読み取り専用クエリをTableau Metadata APIに転送します。クエリ、スキーマ確認、リネージ、影響分析、コンテンツ検索、接続確認の7つのツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx tableau-graphql-mcpTABLEAU_SERVERhttps://tableau.company.com (Server) or https://<pod>.online.tableau.com (Cloud)TABLEAU_SITE_CONTENT_URLSite content-url slug; empty = Default site (Server only)TABLEAU_PAT_NAMEPersonal Access Token nameTABLEAU_PAT_SECRETシークレットPersonal Access Token secret (the whole string)TABLEAU_LOG_LEVELDEBUG, INFO (default), WARNING or ERROR; DEBUG logs each HTTP call (method + URL) to stderrローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
tableau-graphql-mcp
Tableau Metadata API を通じて、あらゆる MCP クライアントから Tableau のリネージに関する質問をできます。
tableau-graphql-mcp は、Tableau サイトの Metadata API を MCP ツールのセットに変換します。これにより、AI アシスタント(Claude、Cursor、Cline など)が自然な言葉でリネージに関する質問に回答できます。
- 「列
SALESを削除すると、どのワークブックに影響しますか?」 - 「Sales Overview ワークブックはどのテーブルに依存していますか?」
- 「
Profitを参照する計算フィールドはどれで、どのダッシュボードにありますか?」 - 「
DIM_CUSTOMERテーブルを変更する前に、誰に通知すべきですか?」
厳選された7つのツールが含まれています。汎用 GraphQL パススルー、リアルタイムのスキーマイントロスペクション、正確なクエリテンプレートを収録した組み込みライブラリ、堅牢な where_used リゾルバー、複数段階の impact_analysis、部分文字列によるコンテンツ検索、接続プローブです。これらを組み合わせることで、固定された質問メニューに限らず、モデルがあらゆるリネージに関する質問に回答できます。
他との違い
- どんな質問にも、的確に回答します。
graphql_queryは読み取り専用の任意の GraphQL クエリを実行します。introspect_schemaと組み込みのチートシート、28 件の実例により、モデルは正しいクエリを作成できます。 - 正確な影響分析(多段階)。
impact_analysisは依存関係の全経路をたどります(計算フィールドを基にした計算フィールドをさらに基にした列も含まれます)。直接参照だけでなく、影響範囲全体と重複を除いた通知すべき所有者を返します。 - どこでも動作します。 Tableau Server と Cloud の両方に対応します。REST API のバージョンと GraphQL エンドポイント(
/api/metadata/graphql、利用できない場合は/relationship-service-war/graphql)は自動検出されます。 - Catalog がなくても、堅牢なリネージを提供します。
where_usedはコアリネージ(referencedByFields -> sheets -> workbook)を使ってワークブックを特定するため、Data Management アドオンのdownstreamWorkbooksが空でも動作します。 - 結果が黙って切り詰められることはありません。 クエリがノード数の上限に達すると、
graphql_queryはpartial_resultsを示します。また、search_contentはscanned/totalで網羅状況を報告するため、切り詰められた回答を完全な結果と誤認することはありません。 - 小さく、安全です。 読み取り専用、stdio のみ(受信用ポートなし)、シークレットは環境変数からのみ取得し、MCP SDK 以外の依存関係はありません(HTTP 通信には標準ライブラリの
urllibを使用します)。
クイックスタート
uv(curl -LsSf https://astral.sh/uv/install.sh | sh)と Tableau の個人用アクセストークンが必要です。
Claude Code の場合、1 行で設定できます:
claude mcp add tableau-graphql \
-e TABLEAU_SERVER=https://10ax.online.tableau.com \
-e TABLEAU_SITE_CONTENT_URL=YourSite \
-e TABLEAU_PAT_NAME=my-token \
-e TABLEAU_PAT_SECRET=the-full-secret \
-- uvx tableau-graphql-mcp
これで完了です。uvx が PyPI からパッケージを取得し、分離された環境で実行します。クローンやインストールは不要です(git も必要ありません)。その後、Claude にリネージについて質問してください。
設定
設定はすべて環境変数を通じて行います(クライアントの env ブロックに設定し、コマンドラインには設定しないでください)。
| 環境変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
TABLEAU_SERVER | はい | n/a | https://tableau.company.com(Server)または https://<pod>.online.tableau.com(Cloud)。 |
TABLEAU_SITE_CONTENT_URL | いいえ | "" | サイトのスラッグ(/#/site/ の後の部分)。空の場合は Default サイト(Server のみ)です。Cloud には常にサイトがあります。 |
TABLEAU_PAT_NAME | はい¹ | n/a | パーソナルアクセストークンの名前。 |
TABLEAU_PAT_SECRET | はい¹ | n/a | PAT のシークレット:文字列全体を指定してください。: で分割しないでください。 |
TABLEAU_TIMEOUT | いいえ | 60 | リクエストごとのタイムアウト(秒)。 |
TABLEAU_API_VERSION | いいえ | auto | REST API のバージョン。指定しない場合は /api/serverinfo から読み取ります。 |
TABLEAU_METADATA_PATH | いいえ | auto | GraphQL パスを上書きします。指定しない場合は自動検出されます。 |
TABLEAU_ALLOW_HTTP | いいえ | off | 信頼できる内部ネットワーク上の平文 http:// サーバーを許可するには、1 を設定します。それ以外の場合は HTTPS(またはループバック)のみ受け付けられるため、認証情報が暗号化されずに送信されることはありません。 |
TABLEAU_LOG_LEVEL | いいえ | INFO | DEBUG にすると、各 HTTP 呼び出し(メソッドと URL。ヘッダー、本文、シークレットは記録しません)が stderr に記録されます。 |
TABLEAU_AUTH_TOKEN | いいえ | n/a | 高度な設定:事前に取得した X-Tableau-Auth トークン(PAT が無効になっている SSO テナント向け)。 |
TABLEAU_COOKIE | いいえ | n/a | 高度な設定:ブラウザーのセッション Cookie(SSO のフォールバック)。 |
¹ PAT(TABLEAU_PAT_NAME と TABLEAU_PAT_SECRET)または高度な設定の TABLEAU_AUTH_TOKEN/TABLEAU_COOKIE のいずれかを指定してください。
Claude Desktop
claude_desktop_config.json を編集します(macOS:~/Library/Application Support/Claude/、Windows:%APPDATA%\Claude\)。
{
"mcpServers": {
"tableau-graphql": {
"command": "uvx",
"args": ["tableau-graphql-mcp"],
"env": {
"TABLEAU_SERVER": "https://10ax.online.tableau.com",
"TABLEAU_SITE_CONTENT_URL": "YourSite",
"TABLEAU_PAT_NAME": "my-token",
"TABLEAU_PAT_SECRET": "the-full-secret"
}
}
}
}
Claude Desktop を完全に終了して再起動し、ツールメニューを確認してください。
Cursor · Cline · Windsurf
どのクライアントでも、上記と同じ mcpServers スキーマを使用します。同じブロックを次の場所に追加してください。
- Cursor:
~/.cursor/mcp.json(グローバル)または.cursor/mcp.json(プロジェクト)。 - Cline:MCP Servers パネルで Configure を選択し、
cline_mcp_settings.jsonに追加します。 - Windsurf:
~/.codeium/windsurf/mcp_config.json。
Windows で GUI アプリが uvx を見つけられない場合は、絶対パスを使用してください(例:%USERPROFILE%\.local\bin\uvx.exe)。
ツール
| ツール | 機能 | 主な引数 |
|---|---|---|
graphql_query | 任意の読み取り専用 Metadata API GraphQL クエリを実行します。あらゆるデータリネージに関する質問に使う汎用ツールです。 | query, variables |
introspect_schema | スキーマをリアルタイムでイントロスペクションします。エントリーポイントの一覧、または型が持つ正確なフィールドを確認できます。 | type_name |
lineage_examples | スキーマのチートシートと、厳選された質問から GraphQL へのテンプレート 28 件(8 カテゴリ)。 | category |
where_used | 指定した列/フィールド/テーブル名を使用しているワークブック/データソースを検索します(堅牢な 1 ホップのコアリネージ解決)。 | names |
impact_analysis | 列/フィールド/テーブルの推移的なマルチホップ影響範囲をすべて表示します。依存するすべてのフィールドに加え、影響を受けるシート、ダッシュボード、ワークブック、通知すべき所有者を確認できます。 | name |
search_content | ワークブック、データソース、テーブル(任意でフィールド/列も含む)から、名前に指定した語句を含むコンテンツを検索します(大文字と小文字を区別しない部分一致)。カバレッジ数も表示します。 | term, types |
server_info | 接続先のサーバー、サイト、バージョン、エンドポイント、認証方式、および Catalog のリネージが利用可能かどうかを表示します。 | none |
すべてのツールは読み取り専用です。Metadata API には変更操作がありません。
プロンプトの例
接続したら、次のように試してみてください。
- 「server_info を使って、何に接続しているか確認してください。」
- 「名前に『revenue』が含まれるものを検索してください。」
- 「SALES、PROFIT、DISCOUNT の列を使っているワークブックはどれですか? 所有者ごとにまとめてください。」
- 「『Sales Overview』ワークブックのフィールドとソース列の対応表を表示してください。」
- 「そのワークブックにある計算フィールドを、数式とともにすべて一覧表示してください。」
- 「Analytics プロジェクトのワークブックにデータを提供している公開済みデータソースはどれですか? また、未認定のものはどれですか?」
- 「『Profit Ratio』フィールドに対して impact_analysis を実行してください。依存するシート、ダッシュボード、ワークブックをすべて挙げ、通知すべき所有者も示してください。」
- 「DIM_CUSTOMER テーブルを削除した場合の影響範囲はどれくらいですか? ワークブック、シート、通知すべき所有者を挙げてください。」
アーキテクチャ
サーバーはクライアントとは stdio で、Tableau とは HTTPS で MCP 通信を行います。お使いの PAT でサインインして X-Tableau-Auth トークンを取得し(有効期限切れ時は自動更新)、REST API のバージョンと GraphQL エンドポイントを自動検出してから、クエリを Metadata API に転送します。データは保存されず、すべての回答はその時点の情報です。
セキュリティ
- 読み取り専用を徹底。 GraphQL クエリのみを使用し、書き込みやシェル操作はありません。
graphql_queryはmutation/subscription操作を拒否し、Metadata API もいずれにせよクエリ専用です。 - 読み取り専用を明示。 すべてのツールに MCP の
readOnlyHintアノテーションが付いているため、クライアントはコードを読まずに確認できます。 - ローカルかつ stdio 専用。 外部から接続できるネットワークポートは開きません。
- シークレットは環境変数からのみ取得。 ツールの引数として渡されず、ログにも記録されず、出力にも返されません。
- 認証情報の送信先は Tableau ホストのみ。 HTTPS が必須で、証明書を検証し、リダイレクトは拒否します。
- 最小権限。 PAT は Tableau の権限を引き継ぎ、API が返すのは閲覧可能なコンテンツのみです。
- 検証可能なリリース。 GitHub の各リリースには Sigstore 署名と CycloneDX SBOM が付属し、PyPI へのアップロードには Trusted Publishing を使用します。
- 本番環境ではバージョンを固定してください:
uvx tableau-graphql-mcp==0.2.0。
脅威モデル、データの取り扱い、脆弱性の開示ポリシー、リリースの検証方法については、SECURITY.md を参照してください。
トラブルシューティング
| 症状 | 対処方法 |
|---|---|
| サーバーが表示されない | クライアントを完全に終了して再起動し、設定ファイルのパスと JSON の妥当性を確認してください。 |
spawn uvx ENOENT | uv をインストールするか、uvx の絶対パスを使用してください。 |
| サインインに失敗する(401) | PAT の名前/シークレットと TABLEAU_SITE_CONTENT_URL を確認してください。SSO を使用するテナントでは PAT が無効になっている場合があります。その場合は TABLEAU_AUTH_TOKEN/TABLEAU_COOKIE を使用してください。 |
| 「Metadata API に接続できません」 | Tableau Server の場合、管理者が有効にする必要があります:tsm maintenance metadata-services enable。Cloud では常に有効です。 |
downstreamWorkbooks が空 | Data Management アドオンがない場合は想定どおりです。コアのリネージを使って解決する where_used ツールを使用してください。 |
MCP Inspector でサーバーを直接調べることができます。
npx @modelcontextprotocol/inspector uvx tableau-graphql-mcp
開発
git clone https://github.com/tdries/tableau-graphQL-mcp && cd tableau-graphQL-mcp
uv sync --all-extras
uv run tableau-graphql-mcp # run from source
uv run pytest --cov=tableau_graphql_mcp # tests + coverage (offline; no Tableau needed)
uv run ruff check . # lint
uv run ruff format --check . # format
同じチェックが CI でも実行されます(Linux/macOS/Windows、Python 3.10~3.13):ruff check、
ruff format --check、mypy --strict、およびカバレッジの下限を設けた pytest です。このパッケージには PEP 561 の py.typed マーカーが含まれているため、インポートすると型チェッカーで完全な型情報を利用できます。
CodeQL はプッシュごとにスキャンを実行し、週次のファジングジョブ(fuzz/)では読み取り専用ガードを検証します。
コントリビューションを歓迎します。CONTRIBUTING.md と 行動規範 をご覧ください。
ロードマップ
リリース済み:PyPI で公開され、公式の MCP レジストリ に掲載されています。次の予定:
- Data Management を使うオプションの経路:Catalog がある場合に、より詳細な
downstreamWorkbooksを提供 -
lineage_examplesに厳選したクエリテンプレートを追加 - セッション内で同じイントロスペクションを繰り返す場合の、オプションのレスポンスキャッシュ
アイデアや投票は Discussions で歓迎します。
License
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。