Skip to main content

A full-featured MCP server wrapping the Kaggle API — 21 tools across competitions, datasets, kernels, models, and discussions

Project description

kaggle-mcp

A full-featured MCP server wrapping the Kaggle API — 21 tools across competitions, datasets, kernels, models, and discussions.

Prerequisites

A Kaggle API token is required. You can authenticate using either method:

Option A: API Token (recommended)

  1. Go to https://www.kaggle.com/settings → API → Create New API Token
  2. Set the environment variable:
export KAGGLE_API_TOKEN="KGAT_xxxxxxxxxxxx"

Option B: kaggle.json

Download the token file from Kaggle settings, it will be saved to ~/.kaggle/kaggle.json:

{"username": "your_username", "key": "your_api_key"}

Installation

Using uvx (recommended)

No installation needed. uvx runs the server directly:

uvx kaggle-mcp-server

Using pip

pip install kaggle-mcp-server

Then run:

python -m kaggle_mcp.server

From source

git clone https://github.com/Galaxy-Dawn/kaggle-mcp.git
cd kaggle-mcp
uv sync
uv run kaggle-mcp-server

Configuration

Claude Desktop

Add to your claude_desktop_config.json:

Using uvx (recommended)
{
  "mcpServers": {
    "kaggle": {
      "command": "uvx",
      "args": ["kaggle-mcp-server"],
      "env": {
        "KAGGLE_API_TOKEN": "KGAT_xxxxxxxxxxxx"
      }
    }
  }
}
Using pip
{
  "mcpServers": {
    "kaggle": {
      "command": "python",
      "args": ["-m", "kaggle_mcp.server"],
      "env": {
        "KAGGLE_API_TOKEN": "KGAT_xxxxxxxxxxxx"
      }
    }
  }
}

Claude Code

claude mcp add kaggle -- uvx kaggle-mcp-server

Or add to your project's .mcp.json:

{
  "mcpServers": {
    "kaggle": {
      "command": "uvx",
      "args": ["kaggle-mcp-server"],
      "env": {
        "KAGGLE_API_TOKEN": "KGAT_xxxxxxxxxxxx"
      }
    }
  }
}

VS Code

Install with UV in VS Code Install with UV in VS Code Insiders

Add to .vscode/mcp.json:

{
  "servers": {
    "kaggle": {
      "command": "uvx",
      "args": ["kaggle-mcp-server"],
      "env": {
        "KAGGLE_API_TOKEN": "KGAT_xxxxxxxxxxxx"
      }
    }
  }
}

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "kaggle": {
      "command": "uvx",
      "args": ["kaggle-mcp-server"],
      "env": {
        "KAGGLE_API_TOKEN": "KGAT_xxxxxxxxxxxx"
      }
    }
  }
}

Tip: If you already have KAGGLE_API_TOKEN in your shell environment, you can omit the "env" block.

Tools (21)

Competitions (6)

  1. competitions_list — Search and list Kaggle competitions.

    • Inputs:
      • search (string, optional): Search term to filter competitions.
      • category (string, optional): Filter by category (e.g. featured, research, playground).
      • sort_by (string, optional): Sort order (latestDeadline, numberOfTeams, recentlyCreated).
      • page (integer, optional): Page number for pagination. Default 1.
    • Returns: List of competitions with title, ref, category, deadline, and team count.
  2. competition_files — List data files for a competition.

    • Inputs:
      • competition (string, required): Competition URL suffix (e.g. titanic).
    • Returns: List of file names and sizes.
  3. competition_download — Download competition data files. Returns download URL.

    • Inputs:
      • competition (string, required): Competition URL suffix.
      • file_name (string, optional): Specific file to download. Empty for all files.
    • Returns: Download URL.
  4. competition_submit — Submit predictions to a competition.

    • Inputs:
      • competition (string, required): Competition URL suffix.
      • blob_file_tokens (string, required): Blob file token from upload.
      • message (string, required): Submission description message.
    • Returns: Submission result details.
  5. competition_submissions — View submission history for a competition.

    • Inputs:
      • competition (string, required): Competition URL suffix.
    • Returns: List of submissions with date, score, status, and description.
  6. competition_leaderboard — View competition leaderboard (top 20).

    • Inputs:
      • competition (string, required): Competition URL suffix.
    • Returns: Top 20 team names and scores.

Datasets (6)

  1. datasets_list — Search and list Kaggle datasets.

    • Inputs:
      • search (string, optional): Search term.
      • sort_by (string, optional): Sort order (hottest, votes, updated, active).
      • file_type (string, optional): Filter by file type (csv, json, sqlite, etc).
      • page (integer, optional): Page number. Default 1.
    • Returns: List of datasets with title, ref, size, and download count.
  2. dataset_files — List files in a dataset.

    • Inputs:
      • owner (string, required): Dataset owner username.
      • dataset_slug (string, required): Dataset slug name.
    • Returns: List of file names and sizes.
  3. dataset_download — Download dataset files. Returns download URL.

    • Inputs:
      • owner (string, required): Dataset owner username.
      • dataset_slug (string, required): Dataset slug name.
      • file_name (string, optional): Specific file. Empty for all.
    • Returns: Download URL.
  4. dataset_metadata — Get dataset metadata.

    • Inputs:
      • owner (string, required): Dataset owner username.
      • dataset_slug (string, required): Dataset slug name.
    • Returns: Dataset metadata dictionary.
  5. dataset_create — Create a new dataset. Use file_upload first to get file tokens.

    • Inputs:
      • owner (string, required): Owner username.
      • slug (string, required): Dataset slug.
      • title (string, required): Dataset title.
      • file_tokens (string, optional): Comma-separated file tokens from file_upload.
      • license_name (string, optional): License (e.g. CC0-1.0, CC-BY-SA-4.0). Default CC0-1.0.
      • is_private (boolean, optional): Whether dataset is private. Default true.
    • Returns: Creation result details.
  6. file_upload — Upload a file to Kaggle and get a token for dataset_create.

    • Inputs:
      • file_name (string, required): File name (e.g. data.csv, config.json).
      • content (string, required): File content as text.
    • Returns: File token string.

Kernels (3)

  1. kernels_list — Search and list Kaggle notebooks/kernels.

    • Inputs:
      • search (string, optional): Search term.
      • competition (string, optional): Filter by competition.
      • dataset (string, optional): Filter by dataset.
      • sort_by (string, optional): Sort order (hotness, commentCount, dateCreated, dateRun, relevance, voteCount).
      • page (integer, optional): Page number. Default 1.
    • Returns: List of kernels with title, ref, votes, and language.
  2. kernel_pull — Get a notebook's source code.

    • Inputs:
      • user_name (string, required): Kernel owner username.
      • kernel_slug (string, required): Kernel slug name.
    • Returns: Kernel metadata and source code.
  3. kernel_push — Push/save a notebook to Kaggle.

    • Inputs:
      • title (string, required): Notebook title.
      • text (string, required): Notebook source code.
      • language (string, optional): Language (python, r). Default python.
      • kernel_type (string, optional): Type (notebook, script). Default notebook.
      • is_private (boolean, optional): Whether notebook is private. Default true.
    • Returns: Push result details.

Models (2)

  1. models_list — Search and list Kaggle models.

    • Inputs:
      • search (string, optional): Search term.
      • owner (string, optional): Filter by owner.
      • sort_by (string, optional): Sort order (hotness, downloadCount, createTime, updateTime).
      • page_size (integer, optional): Number of results per page. Default 20.
    • Returns: List of models with title and ref.
  2. model_get — Get detailed information about a specific model.

    • Inputs:
      • owner (string, required): Model owner username.
      • model_slug (string, required): Model slug/name.
    • Returns: Model metadata dictionary.

Discussions (4)

  1. discussions_search — Search Kaggle discussions.

    • Inputs:
      • query (string, required): Search query string.
      • page_size (integer, optional): Number of results (max 50). Default 20.
    • Returns: List of discussions with ID, title, and votes.
  2. discussions_list — List discussions for a competition or dataset.

    • Inputs:
      • competition (string, optional): Competition slug to filter.
      • dataset (string, optional): Dataset ref to filter.
      • page_size (integer, optional): Number of results (max 50). Default 20.
    • Returns: List of discussions with ID, title, and votes.
  3. discussion_detail — Get discussion content by ID.

    • Inputs:
      • discussion_id (integer, required): Numeric discussion ID.
    • Returns: Discussion title, author, votes, forum, and body content.
  4. discussion_comments — Get comments for a discussion.

    • Inputs:
      • discussion_id (integer, required): Numeric discussion ID.
    • Returns: Link to discussion comments page.

Debugging

You can use the MCP Inspector to debug the server:

npx @modelcontextprotocol/inspector uvx kaggle-mcp-server

The Inspector will provide a URL to access debugging tools in your browser.

Development

git clone https://github.com/Galaxy-Dawn/kaggle-mcp.git
cd kaggle-mcp
uv sync
uv run kaggle-mcp-server

Contributing

Contributions are welcome! Please open an issue or submit a pull request on the GitHub repository.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kaggle_mcp_server-0.1.0.tar.gz (50.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kaggle_mcp_server-0.1.0-py3-none-any.whl (13.3 kB view details)

Uploaded Python 3

File details

Details for the file kaggle_mcp_server-0.1.0.tar.gz.

File metadata

  • Download URL: kaggle_mcp_server-0.1.0.tar.gz
  • Upload date:
  • Size: 50.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for kaggle_mcp_server-0.1.0.tar.gz
Algorithm Hash digest
SHA256 117e093fd00f3a88acbeb245f05f9b3961181586372ef44d6e8680a9ead086b5
MD5 6dd3bdd4f3c122df0841806730591bcf
BLAKE2b-256 ed8c5a1b624c5254b43715e50b63c48910a7361ef274f91b63fa4d4b6ca7ae04

See more details on using hashes here.

File details

Details for the file kaggle_mcp_server-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: kaggle_mcp_server-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 13.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for kaggle_mcp_server-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3f1fd11ba21bf66fb69308ad02bb2cad36ab9e854092fefc545b6e4355af1a5d
MD5 a37be9d03e29e65931042c33a6b969bf
BLAKE2b-256 b0b63f2a39368feae451fc796ca24eb62a64f40940aeb691c53cda9df7b7ced0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page