parkseokjune/kaggle-mcp

GitHub: parkseokjune/kaggle-mcp

一个将 Claude 连接到 Kaggle 的安全优先型 MCP 服务器,在驱动竞赛、数据集、kernels 和模型工作流的同时通过确认令牌、配额限制和注入防护确保账号安全。

Stars: 0 | Forks: 0

# kaggle-mcp [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/9c6eec629e013422.svg)](https://github.com/parkseokjune/kaggle-mcp/actions/workflows/ci.yml) [![PyPI](https://img.shields.io/pypi/v/safe-kaggle-mcp)](https://pypi.org/project/safe-kaggle-mcp/) [![smithery](https://smithery.ai/badge/parkseokjune/kaggle-mcp)](https://smithery.ai/server/parkseokjune/kaggle-mcp) [![Python](https://img.shields.io/pypi/pyversions/safe-kaggle-mcp)](https://pypi.org/project/safe-kaggle-mcp/) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) 一个将 Claude (Desktop / Code) 连接到 [Kaggle](https://www.kaggle.com) 的**安全优先** [Model Context Protocol](https://modelcontextprotocol.io) 服务器 —— 涵盖竞赛、数据集、kernels (notebooks) 和模型。 ``` claude mcp add --transport stdio kaggle -- uvx --from safe-kaggle-mcp kaggle-mcp ``` ## 功能对比 | 功能 | **safe-kaggle-mcp** | 典型的社区服务器 | 官方远程 / Composio | |---|---|---|---| | 针对提交/删除/发布采用两次调用的预览→提交确认 token | ✅ **是** | ❌ 否(单次执行) | ❌ 否(单次执行) | | 向 agent 展示每个竞赛的提交配额 | ✅ **是**(默认 5次/天) | ❌ 否 | ❌ 否(服务器配额不透明) | | 提示词注入防护(`` 隔离) | ✅ **是** | ❌ 否 | ❌ 否 | | 默认私有 + 默认关闭破坏性/发布标志 | ✅ **是** | ⚠️ 可选的 `is_private` 参数 | ❌ 否 | | 无聊天内 `authenticate()` + 40位十六进制凭证脱敏 | ✅ **是** | ❌ 部分会将密钥泄露到上下文 | ⚠️ OAuth 会使密钥不可见,但不进行脱敏 | | 防范 Zip-slip / 沙盒化下载 | ✅ **是** | ❌ 否 | ❌ 无法对本地写入进行沙盒化 | | 可调用的本地 **EDA** 工具(精简的 pandas 摘要,绝不返回原始行) | ✅ **是**(数据集 + 竞赛) | ❌ 最多只有 EDA *提示词* | ❌ 否 | | 竞赛 **训练/测试 schema 差异比对** + 自动检测目标 | ✅ **是** | ❌ 否 | ❌ 否 | | 竞赛**全局概览**筛选(剩余天数、配额、评估指标) | ✅ **是** | ❌ 仅提供简陋的原始列表 | ❌ 原始字段,无摘要 | | **提交最佳得分**摘要(感知评估指标的最佳得分/趋势/失败情况) | ✅ **是** | ❌ 原始列表 | ❌ 原始列表 | | **排行榜名次追踪**(本地快照 + 排名变化) | ✅ **是** | ❌ 否 | ❌ 也无对应 API endpoint | | 会话**变更操作审计日志**(已脱敏) | ✅ **是** | ❌ 否 | ❌ 否 | | 只读的**讨论 + 方案摘要**,带注入隔离 | ✅ **是**(不可信内容隔离) | ⚠️ 是,但**未隔离** (Galaxy-Dawn) | ⚠️ 未隔离 | | **一键启动竞赛**(数据 + EDA + 基线方案) | ✅ **是** | ❌ 否 | ❌ 否 | | 输出规范(排序/限制表格、分页、Top-N) | ✅ **是** | ❌ 未记录 | ❌ 取决于客户端 | | 现代化的 `KGAT_` token + 传统的用户名/密钥认证 | ✅ **均支持** | ⚠️ 多数仅支持传统方式 | ✅ OAuth 2.0 | | 安装 | 本地 stdio(PyPI + git,`uvx`) | 本地 (pip/uv) | ✅ 零安装远程 | | 原始工具覆盖广度 | 41 个工具(无基准测试列表 —— API 未提供) | 最高约 51 个 | 约 35–57 个 | 我们并未在两个方面取得领先,这是客观事实:**官方**的远程服务器是零安装的,而覆盖面最广的**社区**服务器(Galaxy-Dawn,约 51 个工具)拥有更多的原始 endpoint(例如基准测试)。当它们在*未隔离*的状态下暴露了约 10 个论坛工具时,我们只提供只读的讨论**搜索 + 阅读**功能,并且每一条正文都被隔离为 `` —— 而且没有提供发帖工具,因为[该 API 根本没有这个功能](#what-it-wont-do-honest-limits)。 ## 您可以用它做什么 只需使用自然语言,即可在 Claude 对话中驱动您的整个 Kaggle 工作流: | 对 Claude 说…… | 底层发生了什么 | |---|---| | *“筛选活跃竞赛 —— 奖金、指标、剩余天数。”* | `kaggle_competition_landscape`(一份经过摘要处理的、按截止日期排序的报告) | | *“下载 titanic 数据,推断目标变量,并进行 EDA。”* | `kaggle_eda_competition` → 训练/测试 schema 差异比对(自动锁定目标)+ 精简的 pandas 摘要 | | *“找一个不错的 Titanic 数据集,给我看看里面是什么样的。”* | `kaggle_search_datasets` → `kaggle_dataset_preview`(有数量上限、不可信内容已隔离的数据行) | | *“总结一下 iris 数据集。”* | `kaggle_eda_dataset` → 维度、数据类型、缺失值情况、目标分布、最高相关系数 | | *“将 predictions.csv 提交到 titanic 并告诉我得分。”* | `kaggle_preview_submission` → `kaggle_submit_to_competition`(包含 token + 配额限制)→ `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` —— 一次调用搞定:指标 + 规则 + 数据下载 + 训练/测试 EDA(自动锁定目标)+ 基线方案 + 配额 | | *“本次会话中我执行了哪些变更操作?”* | `kaggle_audit_log`(记录每一次提交/创建/删除的脱敏日志) | | *“在 Kaggle 的免费 GPU 上运行这个 notebook 并获取输出结果。”* | `kaggle_push_kernel` → `kaggle_kernel_status` → `kaggle_kernel_output` | | *“将我加工过的特征保存为私有数据集版本。”* | `kaggle_version_dataset` —— **默认私有** | **agent 自动衔接的高阶工作流:** 自主竞赛循环(下载 → 训练 → 提交 → 查看得分 → 迭代,全程限制在每日配额内),将 Kaggle 作为远程 GPU/TPU 后端,以及通过私有数据集版本实现跨会话记忆。每一个不可逆的步骤都设有门控,因此 agent 可以在自主运行的同时确保您的账号安全无虞。 ## 它做不到的事(客观存在的限制) 一些竞品会宣传公共 Kaggle API 实际上无法实现的功能。我们拒绝提供名不副实的空壳功能: - **无法在论坛/讨论中发帖。** API 可以*读取*主题,但没有创建/回复/投票的 endpoint —— 因此我们不会假装拥有该功能。 - **不预测私有排行榜或最终排名。** 私有得分会在截止日期前锁定封存;我们的工具会明确将得分标注为**仅限公开**。 - **不提供 Kaggle 的历史排行榜。** 因为根本没有这种 endpoint —— `kaggle_leaderboard_track` 只能与*您*在本地保存的快照进行差异对比,并如实向您说明这一点。 - **不提供隐藏的测试集标签/私有数据划分。** 我们只提供竞赛本身公开的文件。 ## 安装 ``` # 最快方式:安装 + 注册至 Claude Code claude mcp add --transport stdio kaggle -- uvx --from safe-kaggle-mcp kaggle-mcp # 或直接从此 repo 安装(非 PyPI): claude mcp add --transport stdio kaggle -- uvx --from git+https://github.com/parkseokjune/kaggle-mcp kaggle-mcp # 或用于开发 uv sync --extra dev && uv run kaggle-mcp ``` 前往 → **API** → **Create New Token** 获取 token。两种认证方式均可(按以下顺序解析): ``` # 1) 传统用户名/key(env 或 ~/.kaggle/kaggle.json) export KAGGLE_USERNAME=your_user export KAGGLE_KEY=your_40_char_key # 2) 当前 API token(KGAT_...):client 会自动读取 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` | 每个竞赛的每日提交配额 | 即使开启了相关功能,每一次破坏性调用仍然需要从对应的 `*_preview_*` 工具中获取一次性的 `confirm_token`,并且该操作会被记录在 `kaggle_audit_log` 中。 ## 工具 涵盖账号、竞赛、数据集、讨论、kernels 和模型的 **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 ``` ## License MIT
标签:AI安全防护, Kaggle, MCP服务器, Python, 大语言模型工具, 数据科学, 无后门, 资源验证, 逆向工具