Safe Kaggle MCP について
Safe Kaggle MCPは、ClaudeとKaggleのコンペ、データセット、カーネル、モデルを接続するMCPサーバーです。エージェントによる操作を想定し、不可逆操作はプレビューと確認を必須とし、投稿上限を示して返却テキストをインジェクションから保護します。
主な機能
- 01提出、削除、公開前のプレビューと確認
- 02コンペごとの提出予算の表示
- 03データセットとコンペのローカルEDA
- 04ディスカッションテキストのインジェクション対策
- 05リーダーボード変動と操作の監査
- 06コンペ開始とカーネル実行
活用シーン
- 01締切や評価指標でコンペを選別
- 02データを取得して学習・テストのスキーマを確認
- 03予算内で提出しスコアを確認
- 04リーダーボードの順位変動を追跡
MCP 対応
このMCPサーバーは、ClaudeなどのクライアントにKaggleのコンペ、データセット、カーネル、モデル、ディスカッション用ツールと、リソースやプロンプトを提供します。提出などの不可逆操作にはプレビュートークンによる確認が必要で、予算の制限も適用されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx safe-kaggle-mcpKAGGLE_USERNAMEKaggle account username (legacy scheme; pair with KAGGLE_KEY). Optional — read-only tools work without credentials.KAGGLE_KEYシークレットKaggle API key, the 40-char 'key' from kaggle.json (legacy scheme; pair with KAGGLE_USERNAME).KAGGLE_API_TOKENシークレットModern Kaggle KGAT_... token (alternative to KAGGLE_USERNAME/KAGGLE_KEY). Optional.KAGGLE_MCP_ENABLE_DESTRUCTIVESet to 1 to expose delete tools. Default 0 (off).KAGGLE_MCP_ENABLE_PUBLISHSet to 1 to allow making datasets/kernels public. Default 0 (off).KAGGLE_MCP_SUBMISSION_CAPDaily per-competition submission budget. Default 5.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
kaggle-mcp
Claude(Desktop/Code)をKaggleのコンペティション、データセット、カーネル(ノートブック)、モデルに接続する、安全性を最優先したModel Context Protocolサーバーです。
safe-kaggle-mcpは、安全性を最優先に構築された唯一のKaggle MCPです。 取り消せない操作(提出、削除、公開)はすべて、プレビュー→確定の2段階呼び出しと確認トークンによって保護され、コンペティションごとの提出予算がすべての応答に表示されます。また、破壊的な操作のフラグはデフォルトで無効になっており、Kaggleから返されたテキストはすべて
<untrusted-content>で囲まれ、認証情報がモデルのコンテキストに入ることもありません。他のサーバーはツール数を追求しており、公式リモートサーバーはインストール不要という利便性に優れています。しかし、公式を含め、破壊的な呼び出しをひとつでも保護したり、提出回数に上限を設けたり、プロンプトインジェクションへの対策を強化したりするサーバーはありません。 提供範囲の広さよりも、Kaggleアカウントを使う自律型エージェントに本当に必要なことを優先しています。つまり、日々の提出回数をひそかに使い切ったり、キーを漏らしたり、非公開の作業を公開したり、悪意あるディスカッションスレッドに乗っ取られたりすることはありません。
claude mcp add --transport stdio kaggle -- uvx --from safe-kaggle-mcp kaggle-mcp
比較
| 機能 | safe-kaggle-mcp | 一般的なコミュニティサーバー | 公式リモートサーバー/Composio |
|---|---|---|---|
| 2段階のプレビュー→確定確認トークン(提出/削除/公開) | ✅ あり | ❌ なし(1回で完了) | ❌ なし(1回で完了) |
| コンペティションごとの提出予算をエージェントに提示 | ✅ あり(デフォルトで1日5回) | ❌ なし | ❌ なし(サーバー側の割り当ては不透明) |
プロンプトインジェクション対策(<untrusted-content> による隔離) | ✅ あり | ❌ なし | ❌ なし |
| デフォルトで非公開+破壊的操作/公開フラグはデフォルトで無効 | ✅ あり | ⚠️ オプションの is_private パラメーター | ❌ なし |
チャット内の authenticate() なし+40桁の16進数の認証情報を秘匿 | ✅ あり | ❌ 認証キーがコンテキストに漏れるものもあります | ⚠️ OAuth で認証キーは保護されますが、秘匿処理はありません |
| Zip-slip 対策済み/サンドボックス化されたダウンロード | ✅ あり | ❌ なし | ❌ ローカルへの書き込みをサンドボックス化できません |
| 呼び出し可能なローカル EDA ツール(コンパクトな pandas ダイジェスト。生の行データは出力しません) | ✅ あり(データセット+コンペティション) | ❌ 最大でも EDA プロンプト | ❌ なし |
| コンペティションの train/test スキーマ差分+ターゲットの自動検出 | ✅ あり | ❌ なし | ❌ なし |
| コンペティションの 全体像のトリアージ(残り日数、予算、評価指標) | ✅ あり | ❌ 生データの一覧のみ | ❌ 生のフィールドのみで、ダイジェストなし |
| 提出結果のベストスコアのダイジェスト(評価指標に応じた最高値/推移/失敗) | ✅ あり | ❌ 生データの一覧のみ | ❌ 生データの一覧のみ |
| リーダーボードの差分追跡(ローカルスナップショット+順位変動) | ✅ あり | ❌ なし | ❌ API エンドポイントもありません |
| 変更操作のセッション 監査台帳(秘匿処理済み) | ✅ あり | ❌ なし | ❌ なし |
| 読み取り専用の ディスカッション+提出レポートのダイジェスト、インジェクション対策済み | ✅ あり(信頼できないコンテンツを隔離) | ⚠️ あり。ただし 隔離されていません(Galaxy-Dawn) | ⚠️ 隔離されていません |
| コンペティション開始を1回の呼び出しで実行(データ+EDA+ベースライン計画) | ✅ あり | ❌ なし | ❌ なし |
| 出力の整形(順位付き/上限付きテーブル、ページネーション、上位N件) | ✅ あり | ❌ ドキュメントに記載なし | ❌ クライアント側で対応 |
最新の KGAT_ トークン+従来のユーザー名/キー認証 | ✅ 両方 | ⚠️ 主に従来方式のみ | ✅ OAuth 2.0 |
| インストール | ローカル stdio(PyPI+git、uvx) | ローカル(pip/uv) | ✅ インストール不要のリモート |
| 生のツール数 | 41 個(ベンチマークの一覧表示なし — API が公開していません) | 最大約 51 個 | 約 35〜57 個 |
他を上回っていない点として正直に挙げられるのは2つです。公式リモートサーバーはインストール不要であり、最も幅広いコミュニティサーバー(Galaxy-Dawn、約 51 個のツール)は、生のエンドポイント数が多くなっています(ベンチマークなど)。相手がフォーラム用ツールを約10個、隔離なしで提供する一方、こちらは読み取り専用のディスカッション検索+読み取りを提供し、すべての本文を <untrusted-content> として隔離しています。また、投稿ツールはありません。API にその機能がないためです。
できること
Claude とのチャットで、Kaggle のワークフロー全体を自然な言葉で操作できます。
| Claude に頼むこと… | 内部で行われる処理 |
|---|---|
| 「開催中のコンペを、賞金、評価指標、残り日数で整理して。」 | kaggle_competition_landscape(期限順に整理したレポートを一括生成) |
| 「titanic のデータをダウンロードして、ターゲットを推定し、EDA をして。」 | kaggle_eda_competition → 訓練/テストのスキーマ差分(ターゲットを自動検出)+ pandas の簡潔な要約 |
| 「良さそうな Titanic データセットを見つけて、どんなデータか見せて。」 | kaggle_search_datasets → kaggle_dataset_preview(件数を制限し、信頼できないデータとして隔離した行を表示) |
| 「iris データセットを要約して。」 | kaggle_eda_dataset → 形状、データ型、欠損状況、ターゲット分布、上位の相関 |
| 「predictions.csv を titanic に提出して、スコアを教えて。」 | kaggle_preview_submission → kaggle_submit_to_competition(トークン+予算によるゲート) → kaggle_get_submission_score |
| 「試行を続ける価値はある? これまでの最高スコアは?」 | kaggle_submission_best_score(評価指標に応じた最高スコア/推移/失敗と、今日の予算) |
| 「前回確認してから、リーダーボードで誰かに追い越された?」 | kaggle_leaderboard_track(スナップショットとの差分と、追い越したユーザー) |
| 「このコンペで、どんな手法が話題になっている?」 | kaggle_search_discussions → kaggle_get_discussion(読み取り専用で、すべての投稿を信頼できないデータとして隔離) |
| 「このコンペの上位入賞者による解法記事を見つけて。」 | kaggle_search_writeups → kaggle_get_discussion |
| 「このコンペを始めて。」 | kaggle_competition_kickoff — 1 回の呼び出しで、評価指標+ルール+データのダウンロード+訓練/テストの EDA(ターゲットを自動検出)+ベースライン計画+予算を処理 |
| 「このセッションで行った変更操作を教えて。」 | kaggle_audit_log(提出/作成/削除の全操作を記録した、機密情報を除去済みの台帳) |
| 「Kaggle の無料 GPU でこのノートブックを実行して、出力を取得して。」 | kaggle_push_kernel → kaggle_kernel_status → kaggle_kernel_output |
| 「作成した特徴量を、非公開のデータセットバージョンとして保存して。」 | kaggle_version_dataset — デフォルトでは非公開 |
エージェントが自ら連携させる高次のワークフロー: 自律的なコンペの反復ループ(ダウンロード → 訓練 → 提出 → スコア確認 → 反復。1 日の予算内で実行)、リモートの GPU/TPU バックエンドとしての Kaggle の利用、非公開のデータセットバージョンを介した実行間のメモリ。取り消せない操作にはすべてゲートを設けているため、アカウントを危険にさらすことなく、エージェントを自律的に実行できます。
対応しないこと(正直な制約)
公開 Kaggle API では実際には実現できない機能を宣伝する競合ツールもあります。当プロジェクトでは、実態のない機能を提供しません。
- フォーラム/ディスカッションへの投稿はできません。 API にはトピックの読み取り機能はありますが、作成/返信/投票用のエンドポイントはありません。そのため、対応しているように装うことはありません。
- 非公開リーダーボードや最終順位の予測はできません。 非公開スコアは締切まで公開されません。当ツールではスコアを公開分のみと表示します。
- Kaggle の過去のリーダーボードは取得できません。 そのようなエンドポイントはありません。
kaggle_leaderboard_trackは、ユーザー自身がローカルに保存したスナップショットと差分を比較し、その旨を明示します。 - 非公開のテストラベル/分割データは取得できません。 コンペで公開されているファイルのみを提供します。
インストール
# fastest: install + register with Claude Code
claude mcp add --transport stdio kaggle -- uvx --from safe-kaggle-mcp kaggle-mcp
# or straight from this repo (no PyPI):
claude mcp add --transport stdio kaggle -- uvx --from git+https://github.com/parkseokjune/kaggle-mcp kaggle-mcp
# or for development
uv sync --extra dev && uv run kaggle-mcp
PyPI の配布名は
safe-kaggle-mcpです(kaggle-mcpという名前はすでに使用されているためです)。インストールされるコマンドは引き続きkaggle-mcpなので、uvx --from safe-kaggle-mcp kaggle-mcpで起動してください。
https://www.kaggle.com/settings → API → Create New Token からトークンを取得してください。どちらの方式も使用でき、記載順に解決されます。
# 1) legacy username/key (env or ~/.kaggle/kaggle.json)
export KAGGLE_USERNAME=your_user
export KAGGLE_KEY=your_40_char_key
# 2) current API token (KGAT_...): the client reads it automatically
mkdir -p ~/.kaggle && echo "KGAT_..." > ~/.kaggle/access_token && chmod 600 ~/.kaggle/access_token
Claude Desktop — claude_desktop_config.json を編集してから、完全に再起動してください。
{ "mcpServers": { "kaggle": {
"command": "uvx", "args": ["--from", "safe-kaggle-mcp", "kaggle-mcp"],
"env": { "KAGGLE_USERNAME": "your_user", "KAGGLE_KEY": "your_key" } } } }
安全スイッチ(デフォルトはオフ → 読み取り専用/プライベートの状態)
| 環境変数 | デフォルト | 1 の場合の効果 |
|---|---|---|
KAGGLE_MCP_ENABLE_DESTRUCTIVE | 0 | kaggle_delete_dataset / kaggle_delete_model を公開します |
KAGGLE_MCP_ENABLE_PUBLISH | 0 | 公開データセットの作成を許可します |
KAGGLE_MCP_SUBMISSION_CAP | 5 | コンペティションごとの1日あたりの提出予算 |
有効にした場合でも、破壊的な呼び出しにはそれぞれ、*_preview_* ツールで取得する1回限りの confirm_token が必要であり、kaggle_audit_log に記録されます。
ツール
アカウント、コンペティション、データセット、ディスカッション、カーネル、モデルにまたがる41 個のツールに加え、kaggle:// リソース(メタデータ、リーダーボード、ルール)と /kaggle-eda、/kaggle-submit-checklist、/kaggle-landscape、/kaggle-solution-research プロンプトを提供します。kaggle_status を実行すると、認証情報と提出予算を確認できます。
両方の認証方式で Kaggle API(kaggle 2.2.2)に対してライブ検証済みです。オフラインテスト53件と読み取り専用のライブテスト6件が合格しています。
開発
uv run pytest # offline unit + integration tests
KAGGLE_LIVE=1 uv run pytest tests/test_live_readonly.py # live read-only smoke (needs creds)
uv run mcp dev src/kaggle_mcp/server.py # MCP Inspector
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。