MotherDuck(DuckDB)のMCPサーバーを導入して分析させてみた with Claude Code

MotherDuck(DuckDB)のMCPサーバーを導入して分析させてみた with Claude Code

Clock Icon2025.03.31

はじめに

MCPとは

MCP(Model Context Protocol)はアプリケーションがLLMにコンテキストを提供する方法を 標準化するオープンプロトコルです。 Anthropicが2024/11に公開しました。 USB-Cのように、異なるデータソースやツールをAIモデルに接続するための標準的な方法を提供します。

MCPの構成概要を以下引用して記載します。

sc_2025-03-29_08-37-19_9556
画像引用: Introduction - Model Context Protocol

役割 説明
MCPクライアント ClaudeやIDE、ツールに組み込まれます。
MCPプロトコルを通じて複数のMCPサーバーと接続します。
MCPサーバー MCPクライアントからのリクエストを受けて、
ローカルデータソースやリモートサービスへアクセスする軽量サーバーです。

今回やること

本ブログでは MotherDuckが公式に提供している mcp-server-motherduck を導入 してみます。 このMCPサーバーにより、MotherDuckおよびローカルのDuckDBと統合できます。 SQLを意識しないデータ分析を実現できそうですね。

なお、導入にあたってのMCPクライアントは Claude Code を使いますが、 他のツール(Claude Desktop, Clineなど)でも同様に実装できます。 Claude Code については以下ブログを参照ください。

https://dev.classmethod.jp/articles/claude-code-nyuumon-with-amazon-bedrock/

改めて、今回導入する構成がこちら。

sc_2025-03-29_08-52-55_573

早速やっていきましょう。

MCPサーバーを導入する

mcp-server-motherduck の Getting Started どおりに進めます。

  1. MotherDuckアクセストークンを発行
  2. uvをインストール
  3. MCPクライアントにMCPサーバー接続を追加

MotherDuckアクセストークンを発行

MotherDuckアカウントが無ければ 事前に作成しておきます。 今回はFree Planのアカウントで試していきます。

sc_2025-03-29_16-42-24_2096

MotherDuckコンソールにて [Settings > INTEGRATIONS > Access Tokens] 画面に移動します。 [Create token] を選択します。

sc_2025-03-29_16-44-36_31399
[Settings > INTEGRATIONS > Access Token] → [Create token]

sc_2025-03-29_16-46-00_25791
[Create token] を選択してトークンを発行

発行されたアクセストークンを手元にメモしておきます。

uvをインストール

Pythonパッケージマネージャーである uv が必要です。 自環境は macOS なので以下コマンドで導入しました。

uvのインストール、バージョン確認
brew install uv

which uv
# /opt/homebrew/bin/uv

uv --version
# uv 0.6.9 (Homebrew 2025-03-20)

MCPクライアントにMCPサーバー接続を追加

Claude Code におけるMCPサーバー追加の方法はチュートリアルドキュメントに記載があります。 Getting Started に JSONファイルで設定例が記載されているので、 それに併せて接続を追加します。

以下コマンドでMCPサーバーを追加します。 <YOUR_MOTHERDUCK_TOKEN_HERE> 部分を適宜置き換えてください。

mcp_json=$(cat <<EOF
{
  "command": "uvx",
  "args": [
    "mcp-server-motherduck",
    "--db-path",
    "md:",
    "--motherduck-token",
    "<YOUR_MOTHERDUCK_TOKEN_HERE>"
  ]
}
EOF
)

claude mcp add-json mcp-server-motherduck "${mcp_json}"
# Added MCP server mcp-server-motherduck to local config

これで導入は完了です。

いろいろ試してみる

MCPサーバーの動作確認

Claude Code (執筆時点のバージョン: 0.2.56 ) を起動します。

sc_2025-03-29_17-18-39_24760
起動後、 /mcp を実行してMCPサーバーを確認

試しに MotherDuck クラウド上にあるデータベースやテーブルをリストしてもらいます。

sc_2025-03-29_17-26-37_7966
データベース一覧を持ってきてくれた

sc_2025-03-29_17-32-52_616
3回目のトライでテーブル一覧を持ってきてくれた

ローカルCSVを分析

生成AIに作らせたサンプルCSVをローカルに置きます。

head sales.csv
# id,日付,商品名,カテゴリ,価格,数量,顧客ID,顧客年齢,顧客性別,地域
# 1,2023-01-03,ノートパソコン,電子機器,85000,1,C001,34,男性,東京
# 2,2023-01-04,コーヒーメーカー,家電,12000,2,C002,45,女性,大阪
# 3,2023-01-05,ワイヤレスイヤホン,電子機器,15000,3,C003,28,男性,福岡
# 4,2023-01-06,スマートウォッチ,電子機器,25000,1,C004,52,女性,北海道
# 5,2023-01-07,キーボード,電子機器,8000,2,C005,31,男性,東京
# 6,2023-01-08,マウス,電子機器,5000,4,C006,29,女性,京都
# 7,2023-01-09,ブレンダー,家電,7500,1,C007,41,女性,愛知
# 8,2023-01-10,スピーカー,電子機器,18000,2,C002,45,女性,大阪
# 9,2023-01-11,タブレット,電子機器,45000,1,C008,37,男性,沖縄

wc -l sales.csv
# 101 sales.csv

このCSVに対して分析を指示してみました。

sc_2025-03-29_21-32-00_9351
sales.csvから地域別の総売上を求めてもらう

良い感じですね。

ちなみに Claude Code では -p(--print) オプションで 非インタラクティブな実行も可能です。 以下例です。

claude --allowedTools="mcp__mcp-server-motherduck__query" \
  -p "sales.csvから地域別の総売 上TOP10を求めて。結果はMarkdownテーブルだけ返して"
# | 地域 | 総売上 |
# |:-----|-------:|
# | 東京 | 729800 |
# | 大阪 | 588700 |
# | 福岡 | 406500 |
# | 京都 | 194500 |
# | 神奈川 | 113000 |
# | 名古屋 | 94000 |
# | 北海道 | 57000 |
# | 愛知 | 52500 |
# | 沖縄 | 45000 |
# | 広島 | 42100 |

※ 非インタラクティブな実行では allowedTools パラメータで 明示的に実行できるコマンドを指定する必要があります。 MCPサーバーの機能を使うには mcp__(サーバー名)__(ツール名) を許可してあげます(参考にしたIssue)。

ローカルParquetを分析

次にParquetファイルの分析を試してみます。 クラスメソッドメンバーズ提供のCUR(Cost and Usage Reports)のParquetファイルを ローカルに落としました。 そのCURからAWSコスト分析をしてもらいます。

sc_2025-03-29_22-00-58_5300
やりとり#1(分析してほしい内容を依頼)

sc_2025-03-29_22-03-34_28853
やりとり#2(試行が続きます)

sc_2025-03-29_22-04-16_30432
やりとり#3(求められました!)

最終的に実行されたSQLがこちら。

SELECT
  SUBSTR(CAST(line_item_usage_start_date AS VARCHAR), 1, 10) as usage_date,
  SUM(line_item_unblended_cost) as daily_cost
FROM read_parquet('mcur.snappy.parquet')
GROUP BY SUBSTR(CAST(line_item_usage_start_date AS VARCHAR), 1, 10)
ORDER BY usage_date;

おわりに

MotherDuck(DuckDB)のMCPサーバーを導入してみました。 SQLクエリを書かずにログ/データ分析、レポート作成まで 自動化できる未来が見えました。 熱い。

列名などを調べずに、いきなり答えを求めようとする部分は 事前の指示でなんとかなりそうです。

以上、参考になれば幸いです。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.