広告・EC・SEOのデータを、MCPでClaudeや業務AIへ。
← コラム一覧へ
BigQuery・AI分析

Claude DesktopとBigQueryを接続する方法【Mac】|MCP設定・売上分析を実演

執筆:中都智仁公開 更新 18分で読めます

Claude DesktopとBigQueryをMacでMCP接続する手順を実演画像で解説。Node.js・権限・鍵・JSON設定から初回取得、売上レポートと曜日別グラフの読み方まで紹介します。

こんにちは、中都です。

BigQueryにデータはある。でも、「売上を曜日別に見たい」「新規とリピーターを分けたい」と思うたびに、SQLを書ける人へ集計を頼む。そんな状態から一歩進む方法が、Claude DesktopとBigQueryのMCP接続です。

接続すると、Claudeがデータの構造を調べ、質問に必要なSQLを作って実行し、結果を会話へ返せるようになります。僕も実際に設定して、売上レポートや曜日別のグラフまで出してみました。自然言語で聞いたら自然言語で返ってくる。これ、めちゃめちゃいいですよね。

この記事ではMacでのローカルMCP設定と、接続できた後の質問・数字の確認まで説明します。設定画面だけでなく、返ってきたレポートとグラフも見ていきましょう。

動画でも解説しています

集計を頼むたびに止まる状態から、自分で数字を確かめられる状態へ

こんな場面で使えます

  • 定型レポートにない切り口を見たい。 商品別、曜日別、購入回数別など、気になったところを追加で調べたい。
  • AIへ渡すデータを毎回切り出している。 CSVを用意する前に、BigQueryから必要な集計を取り出したい。
  • 接続設定で止まっている。 サービスアカウント、鍵ファイル、Macのパスがどうつながるのか分からない。

この記事でできるようになること

  • MacにMCPサーバーを用意し、Claude Desktopへ登録する。
  • 自分のBigQueryのデータセット・テーブルを確認し、小さな集計を1回取得する。
  • 売上レポートや曜日別グラフを依頼し、期間・対象注文・金額の定義を確認する。

BigQueryに読み取れるデータがすでにあることが前提です。データを入れるところから始める方は、BigQueryのCSV取り込みと集計の入門記事を先に進めてください。接続設定だけで、存在しないデータが増えたり、分析結果が正しくなったりするわけではありません。

最初のゴールは立派なレポートを作ることより、自分のデータから返った数字を1つ照合できることです。

接続前に確認するものと、この方法の位置づけ

今回使うのは、Macで動かす公開MCPサーバーergut/mcp-bigquery-serverです。Claudeがこのサーバーを経由してBigQueryを読みます。取得した結果はClaudeへ渡るので、社内で利用が認められたデータを対象にしてください。

  • MacとClaude Desktop: アプリのインストールとローカル設定の変更ができる環境。
  • Google Cloudのプロジェクト: 分析対象のBigQueryデータセットとテーブルがあること。
  • 設定する権限: サービスアカウントの作成、IAMの変更、対象データセットの共有設定を行えること。権限がなければ管理者へ依頼します。
  • 料金: Claudeの利用上限と、BigQueryのクエリ・保存料金は別に考えます。

元動画は2025年10月公開のMacでの実演です。画面の配置や提供条件は変わるため、この記事の設定例は現在の配布元資料で補っています。Web版からGoogle公式のリモートMCPへ接続する方法は、Web版ClaudeとBigQueryの接続記事で説明しています。

僕が試したときはClaudeの無料プランで、レポートとグラフまで出せました。「これ、フリーで結構使えるんだな」と驚いたところです。ただ、何度も分析すればClaudeの利用上限に当たることがありますし、BigQuery側も無料とは限りません。BigQueryの料金はクエリ処理量や保存量などに応じて決まります。

手順1.MacでNode.jsを使える状態にする

Node.jsは、今回のMCPサーバーを動かすための実行環境です。Macでアプリケーション→ユーティリティ→ターミナルを開き、次を実行します。

node -v
npm -v
npx -v

それぞれバージョン番号が出れば、インストール済みです。実演では小池に手順を教わりながら進め、僕も「ここが1個のチェックポイントですね」と確認していました。途中の完了状態を一つずつ確かめると、接続できないときに戻る場所が分かります。

Node.js・npm・npxのバージョン確認コマンドを示す手順書
インストール済みかを先に確認します。画像は撮影時のNode.js 22の案内です。

command not foundと出る場合は、Node.js公式のダウンロードページでLTS版・macOSを選び、Macの種類に合うインストーラーを実行してください。Macの「このMacについて」で、AppleシリコンかIntelかを確認できます。インストール後にターミナルを開き直し、同じ3行でバージョンを確認します。

動画ではHomebrew経由でNode.js 22を導入しています。ここでは、初めての方も選びやすい公式インストーラーを案内しています。すでにNode.jsを管理している方は、既存の環境をむやみに上書きせず、利用中の管理方法に合わせてください。

手順2.BigQueryを読む権限と鍵を用意する

プロジェクトとBigQuery APIを確認する

Google Cloudコンソールへログインし、画面上部のプロジェクト選択で分析対象を開きます。APIとサービス→有効なAPIとサービスでBigQuery APIを確認してください。有効ならそのまま進み、未有効の場合だけライブラリからBigQuery APIを有効にします。新規プロジェクトでは通常有効になっています。Google公式の初期設定も確認できます。

サービスアカウントを作り、読む範囲を決める

  1. IAMと管理→サービスアカウント→サービスアカウントを作成を開きます。
  2. 用途が分かる名前を入れ、生成されるサービスアカウントIDを確認してから作成します。IDは作成後に変更できないため、この段階で確認してください。
  3. クエリを実行するプロジェクトで、BigQueryジョブユーザーを付与します。これは集計ジョブを実行する権限です。
  4. 作成したサービスアカウントのメールアドレスを控えます。BigQuery Studioで対象データセットを選び、共有→権限からプリンシパルにそのアドレスを追加し、BigQueryデータ閲覧者を付与します。
  5. 権限一覧に、対象サービスアカウントとロールがあることを確認します。
サービスアカウント作成中のBigQueryロール選択画面
動画ではBigQueryユーザーとデータ閲覧者を選択。本文ではジョブ実行と対象データの閲覧に権限を分けます。

動画ではプロジェクトに「BigQueryユーザー」と「BigQueryデータ閲覧者」を付けています。ここでは現在の権限定義に沿って、ジョブ実行はプロジェクト、データ閲覧は必要なデータセットに分けています。別プロジェクトのテーブルを読む場合は、そのデータ側の閲覧権限も必要です。

JSON鍵を作成する

  1. 作成したサービスアカウントを開き、鍵タブへ進みます。
  2. キーを追加→新しい鍵を作成を選びます。
  3. JSONを選んで作成し、ダウンロードされたファイルを確認します。
サービスアカウントの秘密鍵をJSON形式で作成する画面
「鍵」から「キーを追加」→「新しい鍵を作成」を開き、JSONを選びます。

鍵ファイルは、このアカウントとしてアクセスするための認証情報です。中身をClaudeの会話に貼らず、GitHubや共有フォルダにも入れないでください。組織の設定で鍵を作れない場合は、この方式を進める前に管理者へ利用可能な認証方式を確認します。組織ポリシーを自分の判断で解除する手順にはしません。条件はGoogleの鍵作成ガイドにまとまっています。

手順3.Claude DesktopとMCPサーバーを配置する

Claudeをインストールし、設定フォルダを開く

  1. Claudeの公式ダウンロードページでmacOS版を選び、アプリをインストールします。
  2. Claudeを起動し、利用するアカウントでログインします。
  3. MacのメニューバーからClaude→設定→開発者→設定を編集を開きます。claude_desktop_config.jsonの場所を確認します。これは会話内のアカウント設定とは別の、アプリの設定です。
Claude公式サイトのmacOSアプリのダウンロード画面
Mac版をダウンロードし、インストール後にClaudeへログインします。

Macでの設定ファイルは、次の場所です。Finderの移動→フォルダへ移動に、フォルダ部分を入力しても開けます。MCP公式のローカル接続手順でも案内されています。

~/Library/Application Support/Claude/claude_desktop_config.json

Claudeフォルダ内に「keys」というフォルダを作り、先ほどのJSON鍵を移動します。Finderでファイルが見えれば配置完了です。後で使うのは鍵の本文ではなく、このファイルへのパスです。

Claudeの設定フォルダにkeysフォルダを作るFinder画面
Claudeフォルダ内にkeysを作り、ダウンロードした鍵ファイルを移します。

公開サーバーをダウンロードしてビルドする

  1. ergut/mcp-bigquery-serverを開き、Code→Download ZIPでダウンロードします。
  2. ZIPを展開し、フォルダ名をmcp-bigquery-serverにします。
  3. そのフォルダを、先ほどのClaudeフォルダ直下へ移します。keysと並ぶ場所です。
ergutのmcp-bigquery-serverでDownload ZIPを選ぶ画面
配布元を確認し、「Code」→「Download ZIP」からソースを取得します。

ターミナルで、次を1行ずつ実行します。最初の行で目的のフォルダへ移動し、2行目で必要なパッケージ、3行目で実行用ファイルを作ります。途中でエラーが出たら、その行を解消してから次へ進んでください。

cd "$HOME/Library/Application Support/Claude/mcp-bigquery-server"
npm install
npm run build
MCPサーバーのフォルダ移動とnpm install・buildの手順
サーバーのフォルダで依存パッケージを入れ、実行用のdistフォルダを作ります。

Finderでmcp-bigquery-server→dist→index.jsがあることを確認します。ターミナルで確認するなら、次のコマンドです。

ls "$HOME/Library/Application Support/Claude/mcp-bigquery-server/dist/index.js"

パスが表示されればビルド結果があります。No such file or directoryなら、フォルダ名・配置場所・ビルド時のエラーを確認してください。

手順4.Claudeの設定ファイルへ接続先を登録する

プロジェクトIDとロケーションを控える

Google CloudでBigQuery Studioを開き、左のエクスプローラから対象データセットを選びます。データセット情報のIDはプロジェクトID.データセット名の形です。ピリオドより前が今回使うプロジェクトIDです。同じ画面のデータのロケーションも控えます。

BigQueryのデータセット情報にあるIDとデータのロケーション
データセットIDの先頭がプロジェクトIDです。ロケーションは接続先の実際の値を使います。

画像ではUSですが、自分のデータが東京にあるなら、そのデータセットに表示される値を使います。表示名とプロジェクトIDを取り違えたり、別リージョンの値をコピーしたりしないようにしましょう。

JSON設定例を、自分の環境の値へ置き換える

まずターミナルで次を実行し、Node.jsの場所とMacのユーザー名を確認します。

command -v node
whoami

command -v nodeで出た絶対パスを、下のcommandへ入れます。YOUR_MAC_USERはwhoamiの結果、YOUR_PROJECT_IDとYOUR_DATASET_LOCATIONはBigQueryで控えた値、YOUR_KEY_FILE.jsonはkeysへ移した鍵の実際のファイル名に置き換えてください。

Claudeの開発者→設定を編集で開いたJSONファイルへ登録します。すでに他のMCP設定があれば、ファイル全体を置き換えず、mcpServersの中にmy_bigquery_connectionを追加してください。編集前に設定ファイルのコピーを残しておくと戻せます。

Claude DesktopのMCP設定にプロジェクトIDや鍵のパスを入れる画面
動画はnpxで起動する設定。本文の設定例は、現在の配布元資料に沿ってnodeでdist/index.jsを直接起動します。

以下は、配布元の現在のローカルビルド例をもとにした設定例です。画像のnpx経由とは異なり、Node.jsでビルド済みのindex.jsを直接起動します。鍵ファイルの中身をこのJSONへコピーする必要はありません。

{
  "mcpServers": {
    "my_bigquery_connection": {
      "command": "/ABSOLUTE/PATH/TO/node",
      "args": [
        "/Users/YOUR_MAC_USER/Library/Application Support/Claude/mcp-bigquery-server/dist/index.js",
        "--project-id",
        "YOUR_PROJECT_ID",
        "--location",
        "YOUR_DATASET_LOCATION",
        "--key-file",
        "/Users/YOUR_MAC_USER/Library/Application Support/Claude/keys/YOUR_KEY_FILE.json",
        "--maximum-bytes-billed",
        "1000000000"
      ]
    }
  }
}

1000000000は、1回のクエリに設定する課金対象バイト数の上限です。月額予算の上限ではありません。超過するクエリは失敗するため、まず対象期間・列を絞りましょう。上限を上げる場合はBigQueryの処理量と費用を先に確認します。

ファイルを保存したら、Claudeを⌘Qで終了してから起動し直します。ウィンドウを閉じただけでは設定が読み直されないことがあります。

手順5.起動確認と、BigQueryからの初回取得を分けて確認する

開発者設定でサーバーの状態を見る

Claudeの設定→開発者を開き、登録したサーバーが起動しているか確認します。実演ではmy_bigquery_connectionにrunningと表示されました。

Claudeの開発者設定にMCPサーバーのrunningが表示された状態
runningはローカルサーバーの起動確認です。続けて、BigQueryからデータを読めるか確認します。

この表示は、Mac上でMCPサーバーが動いているという意味です。BigQueryの権限やデータ取得まで成功したとは限らないので、新しい会話で確かめます。

データの所在を聞き、小さな集計を返してもらう

会話のツール/コネクタ一覧で、追加した接続を有効にします。利用許可が表示されたら、接続先と実行内容を確認して許可してください。最初は次のように聞いてみます。対象名は自分のものへ置き換えます。

接続したBigQueryの「YOUR_PROJECT_ID」には、どんなデータセットとテーブルがありますか。
まず名前と列構成を確認し、売上に使えそうなテーブルを教えてください。
顧客名やメールアドレスなど、個人の明細は取得しないでください。
BigQueryにどんなデータがあるかという質問にClaudeが回答する画面
データセット名が会話へ返ってきた場面。この後にテーブルや列を確認します。

僕も最初は「BigQueryにどんなデータがありますか?」と聞きました。何が入っているかが返ってくると、つながった実感があります。本来はClaudeからのぞきに行けなかった場所を、会話から確認できるようになるわけです。

次は、注文テーブルの候補と日付列・金額列を確認したうえで、完了した1日など、小さな範囲を集計します。

対象テーブル、注文日・注文ID・金額・注文状態の列を先に示してください。
2026年9月20日(日本時間)の注文件数と売上を確認したいです。
キャンセル・返品と税の扱いを私に確認してから、読み取りだけで集計してください。
使ったSQL、対象期間、件数、金額の単位を結果と一緒に示してください。

上の質問は自分のデータで試すための例です。その日にデータがなければ、実際に記録のある日付へ変えてください。実行されたSQLをBigQueryで確認し、同じ条件の集計と数字が一致するところまで進めれば、初回取得の確認になります。

止まった場所最初に確認するもの
サーバーが起動しないJSONのカンマ・かっこ、Node.jsの絶対パス、dist/index.jsの存在、アプリの再起動。
認証エラー鍵ファイルの場所、ファイル名、鍵が無効化されていないか。鍵の本文をチャットへ貼らない。
権限エラー実行プロジェクトのジョブ権限と、参照データセットの閲覧権限。
データが見つからないプロジェクトID、データセット名、ロケーション、指定期間。
処理量の上限エラー必要な期間と列へ絞れるか。LIMITだけではスキャン量が減らない場合があるため、期間条件も確認。

売上レポートから、曜日・顧客の違いへ掘り下げる

ざっくり聞いて全体像をつかむ

接続後は「BigQueryのデータを見てレポートを出して」と、まずざっくり頼んでみました。売上・注文数・商品別ランキング・顧客の内訳まで、複数の切り口が返ってきています。

ClaudeがBigQueryから集計した売上・注文数のレポート
実演では総売上3,013,220円、総注文数1,177件などが表示されました。AIの出力例であり、正しさを保証する数値ではありません。

実演の出力には、3年間の総売上約301万円、顧客数497名、総注文数1,177件などが並びました。さらに購入回数別の顧客集計まで出てきます。新規と既存を分けるような集計は、既存ツールのダッシュボードだけでは見たい形に出ないこともあるので、追加で聞けるのがいいところです。

Claudeのレポートに表示された顧客属性と購入回数別の集計
商品別の数字から顧客の切り口へ。購入回数の定義や集計対象を確かめながら読みます。

ただ、画面には総注文数1,177件と「適切な注文」1,018件が併記されています。何を除いたのか分からないまま、平均単価やリピート率を判断に使うのは避けたいですね。レポートの形が整っていても、分母と除外条件が分からなければ、施策を決める前に聞き直しましょう。

いまのレポートで、総注文数と集計対象の注文数が違う理由を教えてください。
キャンセル、返品、重複、未購入の顧客をどう扱いましたか。
売上、平均注文単価、リピート率について、計算式と分母を示してください。
データで確かめられない条件は、推測で補わず不明としてください。

曜日別の違いを、在庫や販促を考える材料にする

全体像が返ってきたので、僕はさらに「曜日ごとの売上の違いを可視化して」と聞いてみました。売れる曜日が分かれば、その前に在庫を準備したり、販促を考えたりできるのでは、と思ったからです。

Claudeの曜日別売上グラフで月曜日が最も高く表示された結果
実演の表示では月曜日454,900円が最大。曜日ごとの日数や対象注文もそろえて判断します。

この実演では月曜日が最も高いグラフが返り、時間帯別のデータまで出してくれました。ここは「賢いな」と感じたところです。数字を一つ出して終わらず、見たい切り口を会話の続きで増やせるのは面白いですね。

一方、曜日別の合計だけでは、集計期間内の月曜日が何日あったか、セールが重なったかは分かりません。「月曜が売れる」で止めず、1日あたりの売上と注文数も見て、在庫判断に使える差かを確かめましょう。

2026年8月1日〜8月31日の注文を、日本時間の曜日別に比較してください。
売上合計、注文数、対象日数、1日あたり売上を表とグラフで示してください。
欠損日と売上0の日を区別し、キャンセル・返品の扱いも書いてください。
その結果から、在庫や販促について次に調べる仮説を3つ挙げてください。
過去の集計だけで、来月も同じ売れ方をすると断定しないでください。

この質問も追加で試すための例です。必要な列や期間がなければ、取得できる範囲を確認してから進めます。以前、僕たちはコンサルティングの前と期間中を分けて、AIに効果を見てもらったこともありました。忖度なく返ってくるのが面白かったんですよね。ただし、前後の差だけで施策の効果が証明されるわけではないので、季節性や広告費など他の変化も合わせて考えます。

分析したい表がすでにスプレッドシートにまとまっている方は、集計表をSynapse MCPにつなぐ方法も選べます。

まとめ:まず接続し、自分の数字で問いを一つ試す

正直、設定は結構大変でした。Node.js、権限、鍵、設定ファイルと、普段の分析では触らないものが出てきます。それでも、接続できた後に自然言語でデータを取り出し、売上の違いまで見られたのは手応えがありました。

  1. 設定の完了を区切る。 Node.jsの動作、ビルド、MCP起動、BigQueryの初回取得を順に確かめる。
  2. 全体像から気になる切り口へ進む。 売上レポートを起点に、曜日や顧客などを掘り下げる。
  3. 判断に使う前に条件を見る。 期間、対象注文、金額・率の定義を確認する。

最初から全部の分析を済ませようとせず、まず自分のBigQueryにあるテーブルを一つ確認してみてください。自分のデータにつなぐと、次に何を聞きたいかも変わってくると思います。

Synapse MCPで、普段使う集計表の数字をAIに聞く

最終的に知りたいのは、「どの商品を用意するか」「どの曜日を掘り下げるか」といった、仕事の判断ですよね。売上がスプレッドシートにまとまっているなら、その表をAIの参照先にする方法もあります。

私たちが提供するSynapse MCPでは、GoogleスプレッドシートやGA4など、普段使っているツールのデータをClaude・ChatGPTから聞けるようにします。表の数字を取り出す作業から、気になった差について追加で質問するところまで、同じ会話で進められます。

BigQueryのデータを使う場合は、必要な集計表を先にGoogleスプレッドシートへ用意します。BigQueryとスプレッドシートを連携する手順も参考にしてください。ここで紹介するSynapse MCPの接続対象は、そのスプレッドシートです。BigQueryのSQL実行やシートの更新は、この接続の機能には含めていません。

集計表をつなぎ、列と最初の5行を取得する

  1. Synapse MCPへログインし、対象の店舗・案件を開きます。
  2. 媒体を追加→Googleスプレッドシートを選び、閲覧権限を持つGoogleアカウントで認証します。ファイル選択画面で、分析する集計表を選びます。
  3. 接続画面のMCPリンクから利用するAI向けのリンクを発行し、AIのMCP/カスタムコネクタ設定へ登録して認証します。リンクは会話本文へ貼りません。
  4. 新しい会話でその接続を有効にし、まずファイル名・タブ名・小さな範囲の値を取得します。

詳しくはスプレッドシートの接続・初回取得ガイドと、Claude・ChatGPTへのMCP登録手順をご覧ください。後者はGA4の例なので、媒体の選択ではGoogleスプレッドシートを選びます。

接続済みのスプレッドシートとタブを一覧で教えてください。
私が指定した売上集計表の「日別売上」タブからA1:E6を読み、
ファイル名、取得範囲、見出し、先頭5行の値をそのまま示してください。
列の意味が分かるまでは、集計やグラフ作成をしないでください。

「日別売上」とA1:E6は例です。自分の表に合わせて変え、返った見出し・値を元のセルと照合します。ここまで一致すれば、自分のデータの初回取得を確認できます。

必要な範囲をそろえて、曜日の違いや売上減少を聞く

最初の5行だけで月全体を分析したことにはしません。集計に必要な行を追加で取得してから、次のように質問します。

この売上集計表の2026年8月1日〜8月31日を含む範囲を確認し、必要な行を取得してください。
全31日がそろっているか、欠損と重複がないかを先に確認してください。
日付・売上・注文数の列を使って、曜日別の合計と1日あたり売上を比べてください。
集計条件が不明なら計算前に聞いてください。結果は表とグラフで示してください。
いま取得した期間の中で、売上が低い日の注文数と平均注文単価を確認してください。
数字から言えることと、原因として考えられる仮説を分けてください。
商品別や流入元別のデータが必要なら、足りない項目を教えてください。

返る表やグラフは、接続先から取得できた列と範囲によって変わります。商品別の列がない表から、売れなかった商品を特定することはできません。

接続・回答・グラフは、どのように返ってくるか

以下は、公開済みのGA4・Search Consoleの週次レポート記事で紹介している別の実演です。売上表の質問例の実行結果ではありませんが、普段のツールをつないで、回答を受け取り、グラフへ進む流れを見られます。

Synapse MCPでGA4とSearch Consoleを接続した画面
補足例①:同じサイトのGA4とSearch Consoleを接続した状態。画像は撮影時の画面です。 出典:週次レポート記事。

接続先がそろったら、AIからそのデータを参照できます。上の例ではGA4とSearch Console、今回の売上分析ならGoogleスプレッドシートを選びます。

Search Consoleのクリック数と表示回数などが日別の表で返った画面
補足例②:Search Consoleの7月22日〜29日のクリック数・表示回数・CTR・平均掲載順位。売上データの表ではありません。 出典:週次レポート記事。

表が返ってくるので、対象期間と数値を元の管理画面と照合できます。確認後に「推移を見たい」と質問を続けます。

GA4のセッション数・ユーザー数・PVの日別グラフ
補足例③:GA4の7月24日〜31日の日別推移。取得した値をグラフにして確認しています。 出典:週次レポート記事。

グラフから気になる日が見つかったら、追加の内訳を聞く。売上表でも同じように、取得した数字を出発点に、次の確認へ進めます。

売上の集計表をつないで、AIに数字を聞く →

ログイン後はGoogleスプレッドシートを追加し、まず列名と先頭5行を取得してみてください。Synapse MCPの新規フリー契約は14日間、3サービス・各媒体1アカウントまでで、自動課金はありません。料金と利用条件をご確認ください。AI側の外部接続機能は、利用プランや組織の設定に従います。