mcpField
T
tableau-graphql-mcp

tableau-graphql-mcp

ローカル
github.com/tdriesデータ・分析12 週間前に更新

tableau-graphql-mcp について

tableau-graphql-mcpは、Tableau Metadata APIのクエリをMCPクライアントに提供し、自然言語でデータリネージを調べるサーバーです。多段階の影響分析、クエリ例、検索範囲の報告に対応し、Tableau ServerとCloudで利用できます。

主な機能

  1. 01読み取り専用GraphQLクエリの実行
  2. 02ライブスキーマの確認
  3. 03厳選クエリテンプレートの参照
  4. 04フィールドとテーブルの使用箇所解決
  5. 05多段階の影響と担当者の追跡
  6. 06範囲報告付きコンテンツ検索

活用シーン

  1. 01列に依存するワークブックの特定
  2. 02フィールド変更前のダッシュボード影響調査
  3. 03テーブル変更時に通知する担当者の特定
  4. 04名前によるTableauコンテンツ検索

MCP 対応

MCPサーバーはstdioでクライアントと通信し、HTTPS経由で読み取り専用クエリをTableau Metadata APIに転送します。クエリ、スキーマ確認、リネージ、影響分析、コンテンツ検索、接続確認の7つのツールを提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"tdries-tableau-graphql": {
"command": "uvx",
"args": [
"tableau-graphql-mcp"
],
"env": {
"TABLEAU_SERVER": "<TABLEAU_SERVER>",
"TABLEAU_SITE_CONTENT_URL": "<TABLEAU_SITE_CONTENT_URL>",
"TABLEAU_PAT_NAME": "<TABLEAU_PAT_NAME>",
"TABLEAU_PAT_SECRET": "<TABLEAU_PAT_SECRET>",
"TABLEAU_LOG_LEVEL": "<TABLEAU_LOG_LEVEL>"
}
}
}
}
起動コマンドuvx tableau-graphql-mcp
設定が必要な環境変数
TABLEAU_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 name
TABLEAU_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypitableau-graphql-mcp0.2.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

tableau-graphql-mcp

tableau-graphql-mcp

Tableau Metadata API を通じて、あらゆる MCP クライアントから Tableau のリネージに関する質問をできます。

CI CodeQL OpenSSF Best Practices OpenSSF Scorecard Ruff PyPI Python versions MCP compatible MIT License Server + Cloud Minimal dependencies

Cursor に追加

Claude でリネージに関する質問をする様子


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/ahttps://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/aPAT のシークレット:文字列全体を指定してください。: で分割しないでください。
TABLEAU_TIMEOUTいいえ60リクエストごとのタイムアウト(秒)。
TABLEAU_API_VERSIONいいえautoREST API のバージョン。指定しない場合は /api/serverinfo から読み取ります。
TABLEAU_METADATA_PATHいいえautoGraphQL パスを上書きします。指定しない場合は自動検出されます。
TABLEAU_ALLOW_HTTPいいえoff信頼できる内部ネットワーク上の平文 http:// サーバーを許可するには、1 を設定します。それ以外の場合は HTTPS(またはループバック)のみ受け付けられるため、認証情報が暗号化されずに送信されることはありません。
TABLEAU_LOG_LEVELいいえINFODEBUG にすると、各 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 ENOENTuv をインストールするか、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

MIT © Tim Dries. Built at Biztory.

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。