| name | import-kaggle-resource |
| description | Kaggle MCPでCompetition、Dataset、Model、Notebook出力、Notebookソースを取得し、リポジトリの./input配下へ安全に配置する。ユーザーが「コンペを開始」「COMPETITIONのデータを取得」、またはKaggleのDataset・Model・Notebookを「import」「download」「inputへ追加」するよう依頼したときに使う。 |
Import Kaggle Resource
Kaggle MCPでリソースを取得し、種別・所有者・slugを保持して./inputへ配置する。
Kaggle CLI、Kaggle Python API、KaggleHub、tools/download_dataset.pyは使わない。
配置規則
| 種別 | handle | 保存先 |
|---|
| Competition | $COMPETITION | input/competitions/{competition}/ |
| Dataset | {owner}/{dataset} | input/datasets/{owner}/{dataset}/ |
| Model | {owner}/{model}/{framework}/{variation}/{version} | input/models/{owner}/{model}/{framework}/{variation}/{version}/ |
| Notebook出力 | {owner}/{notebook} | input/notebook-outputs/{owner}/{notebook}/ |
| Notebookソース | {owner}/{notebook} | input/notebooks/{owner}/{notebook}/ |
Kaggle Notebook本体はDatasetやNotebook出力をInputパネルへattachし、Modelを/kaggle/input/{model}/{framework}/{variation}/{version}へmountする。
このリポジトリでは衝突防止と取得元の追跡のため、さらに種別とownerをパスへ含める。
種別判定
- Competitionの依頼では、リポジトリルートのプロセス環境変数
COMPETITIONだけをslugとして使う。空なら停止して設定を依頼し、.env.exampleや文脈から推測しない。
- その他はURLまたはhandleから種別とslugを抽出する。
owner/slugだけではDatasetとNotebookを区別できないため、依頼文で確定できなければKaggle MCPのmetadataを確認する。
- 「NotebookをInputへ追加」「Notebookをimport」はNotebook出力として扱う。
.ipynb、script、code、sourceの取得が明示された場合だけNotebookソースとして扱う。
- Modelはvariationとversionが必要。version省略時は
get_model_variationで最新versionを確定する。
事前確認
- Kaggle MCPで正規handle、公開範囲、version、容量を確認する。
- Competition:
get_competition、get_competition_data_files_summary
- Dataset:
get_dataset_info、get_dataset_files_summary
- Model:
get_model、get_model_variation
- Notebook:
get_notebook_info、出力ならlist_notebook_files
- CompetitionではMCPのslugが
COMPETITIONと一致し、user_has_entered == trueであることを確認する。
- 未参加ならコンペURLを提示して停止し、Kaggle上での規約同意を依頼する。参加済みと偽らない。
- 認証エラーならKaggle MCPの認証を案内し、認証後に再確認する。
- 対応する保存先を組み立て、
./input外へ出ないことを確認する。
- 必要容量と空きディスクを比較する。
- 保存先が空でなければ上書きせず、既存内容とversionを報告して確認を求める。
- private、同意必須、認証切れで取得できない場合は、Kaggle MCPの認証を案内する。
取得
Competition
download_competition_data_files(competitionName=COMPETITION)を呼ぶ。
- 返された一時URLからZIPを一時領域へ取得する。
- archive内に絶対パスや
..がないことを確認し、既存ファイルを上書きせずinput/competitions/{COMPETITION}/へ展開する。
Dataset
download_dataset(ownerSlug, datasetSlug, datasetVersionNumber, raw=false)を呼ぶ。
- 返された一時URLからZIPを一時領域へ取得する。
- archive内に絶対パスや
..がないことを確認し、input/datasets/{owner}/{dataset}/へ展開する。
例: ravaghi/wellbore-geology-prediction-artifactsは
input/datasets/ravaghi/wellbore-geology-prediction-artifacts/へ置く。
Model
get_model_variationでcanonical framework、variation、versionを確定する。
download_model_variation_versionを呼ぶ。
- 返されたtar.gzのentryを検査し、
input/models/{owner}/{model}/{framework}/{variation}/{version}/へ展開する。
- framework名はKaggleのcanonical URLに現れる表記を使い、MCP enum文字列をディレクトリ名にしない。
ModelはKaggle Notebookでもversionがパスに含まれるため、省略しない。
Notebook出力
get_notebook_infoで正規handleとversionを確認する。
list_notebook_filesをpage tokenがなくなるまで呼び、期待ファイルを記録する。
download_notebook_outputを呼び、返されたZIPをinput/notebook-outputs/{owner}/{notebook}/へ展開する。
Inputとして使えるのは保存済みNotebook実行の出力であり、.ipynbソースではない。
Notebookソース
get_notebook_infoのblob.sourceを取得する。
kernel_type == notebookならJSON妥当性を確認し、input/notebooks/{owner}/{notebook}/{notebook}.ipynbへ保存する。
- scriptならlanguageに対応する拡張子で
input/notebooks/{owner}/{notebook}/{notebook}.{ext}へ保存する。
共通の安全策
- KaggleへのアクセスはKaggle MCPだけを使う。MCPが返す署名付きURLの取得には
curl --fail --location --retry 3などを使ってよい。
- 署名付きURLを回答、ファイル、ログへ残さない。
- ZIP/tar.gzは一時領域へ保存し、検証成功後に削除する。
- archiveを既存ディレクトリへ直接上書き展開しない。
- version違いを同じ保存先へ混在させない。
- DatasetやNotebook出力の明示versionを取得しても、ユーザー指定の安定パスを維持する。置換前に確認する。
検証
- CompetitionとDatasetはMCPの
total_file_countと展開後ファイル数を比較する。
- Modelはarchiveの安全なfile entry数と展開後ファイル数を比較する。
- Notebook出力は
list_notebook_filesの全ページと展開後の相対パスを比較する。
- Notebookソースは
.ipynbのJSON妥当性、またはscriptが空でないことを確認する。
- 不一致なら成功扱いにせず、欠落数と再試行方針を示す。
- 完了時に種別、正規handle、version、保存先、ファイル数、容量を報告する。
公式根拠