# How to integrate Kaggle MCP with OpenAI Agents SDK

```json
{
  "title": "How to integrate Kaggle MCP with OpenAI Agents SDK",
  "toolkit": "Kaggle",
  "toolkit_slug": "kaggle",
  "framework": "OpenAI Agents SDK",
  "framework_slug": "open-ai-agents-sdk",
  "url": "https://composio.dev/toolkits/kaggle/framework/open-ai-agents-sdk",
  "markdown_url": "https://composio.dev/toolkits/kaggle/framework/open-ai-agents-sdk.md",
  "updated_at": "2026-05-12T10:16:40.031Z"
}
```

## Introduction

This guide walks you through connecting Kaggle to the OpenAI Agents SDK using the Composio tool router. By the end, you'll have a working Kaggle agent that can download data files for the titanic competition, create a new version of your covid-19 dataset, check processing status of your uploaded dataset through natural language commands.
This guide will help you understand how to give your OpenAI Agents SDK agent real control over a Kaggle account through Composio's Kaggle MCP server.
Before we dive in, let's take a quick look at the key ideas and tools involved.

## Also integrate Kaggle with

- [ChatGPT](https://composio.dev/toolkits/kaggle/framework/chatgpt)
- [Claude Agent SDK](https://composio.dev/toolkits/kaggle/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/kaggle/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/kaggle/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/kaggle/framework/codex)
- [Cursor](https://composio.dev/toolkits/kaggle/framework/cursor)
- [VS Code](https://composio.dev/toolkits/kaggle/framework/vscode)
- [OpenCode](https://composio.dev/toolkits/kaggle/framework/opencode)
- [OpenClaw](https://composio.dev/toolkits/kaggle/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/kaggle/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/kaggle/framework/cli)
- [Google ADK](https://composio.dev/toolkits/kaggle/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/kaggle/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/kaggle/framework/ai-sdk)
- [Mastra AI](https://composio.dev/toolkits/kaggle/framework/mastra-ai)
- [LlamaIndex](https://composio.dev/toolkits/kaggle/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/kaggle/framework/crew-ai)

## TL;DR

Here's what you'll learn:
- Get and set up your OpenAI and Composio API keys
- Install the necessary dependencies
- Initialize Composio and create a Tool Router session for Kaggle
- Configure an AI agent that can use Kaggle as a tool
- Run a live chat session where you can ask the agent to perform Kaggle operations

## What is OpenAI Agents SDK?

The OpenAI Agents SDK is a lightweight framework for building AI agents that can use tools and maintain conversation state. It provides a simple interface for creating agents with hosted MCP tool support.
Key features include:
- Hosted MCP Tools: Connect to external services through hosted MCP endpoints
- SQLite Sessions: Persist conversation history across interactions
- Simple API: Clean interface with Agent, Runner, and tool configuration
- Streaming Support: Real-time response streaming for interactive applications

## What is the Kaggle MCP server, and what's possible with it?

The Kaggle MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Kaggle account. It provides structured and secure access to your Kaggle datasets, competitions, and configurations, so your agent can perform actions like downloading competition data, creating datasets, submitting entries, and managing dataset versions on your behalf.
- Competition data access and download: Let your agent fetch and download competition datasets quickly by specifying a competition ID, so you always have the latest files for analysis.
- Automated dataset creation and management: Have your agent create new Kaggle datasets, update metadata, and publish new dataset versions seamlessly, streamlining the process of sharing your work with the community.
- Competition entry submission: Empower your agent to submit competition entries automatically once your solution is ready and uploaded, helping you participate in challenges without manual hassle.
- Configuration management and setup: Allow your agent to initialize, locate, and update Kaggle API configuration files and keys, ensuring smooth and authenticated operations every time.
- Dataset status monitoring: Ask your agent to check the status of uploaded datasets or processing jobs, so you always know when your data is ready for use or public sharing.

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `KAGGLE_COMPETITION_DOWNLOAD_FILES` | Download competition data files | Downloads all data files for a Kaggle competition as a single zip archive. Returns the local file path where the zip was saved. Note: You must have accepted the competition's rules on Kaggle's website before downloading (403 error if not accepted). |
| `KAGGLE_COMPETITION_SUBMIT` | Submit Competition Entry | Submit an entry to a Kaggle competition using a previously uploaded file. Prerequisites: 1. You must have accepted the competition rules on Kaggle's website 2. You must have uploaded your submission file and obtained a blob_file_tokens (use Kaggle's file upload API endpoint first) This action performs the final submission step after file upload. The blob token identifies your uploaded file and associates it with your competition submission. |
| `KAGGLE_CONFIG_DIR` | Get Kaggle Config Directory | Tool to retrieve the directory of the Kaggle API configuration file. Use when you need to locate the directory containing your kaggle.json credentials. |
| `KAGGLE_CONFIG_INIT` | Initialize Kaggle Configuration | Initialize Kaggle API client configuration. This action sets up the necessary configuration file for Kaggle API access by first attempting to use the Kaggle CLI's 'kaggle config init' command. If the CLI is unavailable, it falls back to creating a kaggle.json file at ~/.kaggle/kaggle.json (or $KAGGLE_CONFIG_DIR/kaggle.json if that environment variable is set). The action is idempotent - if configuration already exists, it will not overwrite it. No parameters are required; the action uses environment variables and metadata when available. Run this before other Kaggle actions when credentials are missing or when KAGGLE_CONFIG_VIEW returns empty/error output. |
| `KAGGLE_CONFIG_KEYS` | List Kaggle Configuration Keys | Tool to list local Kaggle API configuration keys. Use when you need to see which configuration options are set without revealing values. |
| `KAGGLE_CONFIG_PATH` | Get Kaggle Config Path | Tool to retrieve local Kaggle API configuration file path. Use when you need to know the location of the Kaggle config before operations. |
| `KAGGLE_CONFIG_RESET` | Reset Kaggle Configuration | Tool to reset local Kaggle CLI configuration to defaults. Clears CLI-managed keys ('competition', 'path', 'proxy'). |
| `KAGGLE_CONFIG_SET` | Set Kaggle Configuration | Tool to set a Kaggle CLI configuration parameter. Use when updating local CLI settings such as default download path or proxy. Ensure Kaggle CLI is installed. |
| `KAGGLE_CONFIG_UNSET` | Unset Kaggle Configuration | Tool to unset a Kaggle CLI configuration parameter. Use when removing local CLI settings such as default download path or proxy. Ensure Kaggle CLI is installed. |
| `KAGGLE_CONFIG_VIEW` | View Kaggle Configuration | View local Kaggle API credentials and configuration settings. This action reads Kaggle configuration from local sources (does NOT make API calls to Kaggle). Configuration is retrieved in the following precedence order: 1. kaggle.json file (from KAGGLE_CONFIG_DIR env var, ~/.config/kaggle/, or ~/.kaggle/) 2. 'kaggle config view' CLI output (for proxy/path settings) 3. Environment variables (KAGGLE_USERNAME, KAGGLE_KEY) 4. Authorization header from metadata Use this action to: - Verify Kaggle credentials are configured before making API calls - Check current proxy settings - Debug authentication issues Returns empty strings for username/key if no credentials are found; use KAGGLE_CONFIG_INIT to set up credentials first. Note: username and key are independent — an empty username field does not indicate missing or invalid credentials. WARNING: This action returns sensitive API key data in plain text. |
| `KAGGLE_DATASET_CREATE` | Dataset Create | Create a new Kaggle dataset with metadata. IMPORTANT: Dataset creation requires at least one data file. Ensure files are uploaded before calling this action. The 'id' field must use your authenticated Kaggle username as the owner. Returns the creation status and any message from the Kaggle API. |
| `KAGGLE_DATASET_INIT` | Kaggle Dataset Init | Tool to initialize a dataset-metadata.json file in a local folder. Use when preparing a dataset folder before uploading to Kaggle. |
| `KAGGLE_DATASET_LIST_FILES` | List Kaggle Dataset Files | Tool to list files in a Kaggle dataset. Use when you need to retrieve paginated file listings by owner and dataset slugs, with optional version and paging controls. |
| `KAGGLE_DATASET_STATUS` | Get Dataset Status | Check the processing status of a Kaggle dataset after creation or version update. This endpoint is used to monitor datasets that are currently being processed by Kaggle's servers. It returns status information for datasets that are actively uploading, processing, or experiencing errors. For already-published datasets, this endpoint typically returns 404 (Not Found), which is expected behavior. Use this tool immediately after creating a new dataset (KAGGLE_DATASET_CREATE) or updating an existing dataset version (KAGGLE_DATASET_VERSION) to check when the dataset becomes ready. Poll this endpoint periodically until the status indicates completion or error. |
| `KAGGLE_DATASET_VERSION` | Create Dataset Version | Create a new version of an existing Kaggle dataset. Prerequisites: - You must own the dataset or have edit permissions - Files must be uploaded first to obtain upload tokens (required for the 'files' parameter) Use this when you have updated files or metadata and need to publish a new version of an existing dataset. |
| `KAGGLE_DOWNLOAD_COMPETITION_FILE` | Download competition file | Tool to download a specific data file from a Kaggle competition. Use when you need to retrieve a single file from a competition by specifying the competition slug and filename. Note: You must have accepted the competition's rules on Kaggle's website before downloading. |
| `KAGGLE_DOWNLOAD_COMPETITION_LEADERBOARD` | Download competition leaderboard | Tool to download the entire competition leaderboard as a CSV file packaged in a ZIP archive. Use when you need to analyze or review competition standings and scores. |
| `KAGGLE_DOWNLOAD_DATASET` | Download Kaggle Dataset | Tool to download all files from a Kaggle dataset as a zip archive. Supports downloading specific versions by providing the dataset_version_number parameter. |
| `KAGGLE_DOWNLOAD_DATASET_FILE` | Download Kaggle Dataset File | Tool to download a specific file from a Kaggle dataset. Use when you need to retrieve a single file from a dataset by specifying the owner, dataset, and filename. |
| `KAGGLE_GENERATE_COMPETITION_SUBMISSION_URL` | Generate Competition Submission URL | Tool to generate a pre-signed URL for uploading competition submission files. Use this before uploading your submission file to Kaggle. This action generates a temporary upload URL and token for submitting to a competition. You must provide the competition ID, file size, and last modified timestamp. After obtaining the URL, upload your submission file to the createUrl, then use the token to finalize the submission. |
| `KAGGLE_GET_DATASET_METADATA` | Get Dataset Metadata | Tool to get comprehensive metadata for a Kaggle dataset including title, description, licenses, and tags. Use when you need detailed information about a dataset's structure, schema, or properties. |
| `KAGGLE_GET_MODEL` | Get Model Details | Tool to get a Kaggle model's details including metadata and description. Use when you need information about a specific model on Kaggle. |
| `KAGGLE_GET_MODEL_INSTANCE` | Get Model Instance Details | Tool to get details for a specific Kaggle model instance (variation). Returns metadata including overview, usage instructions, download URL, version information, and license details. Use when you need to inspect or retrieve information about a specific model variation before downloading or using it. |
| `KAGGLE_KERNEL_INIT` | Kaggle Kernel Init | Initialize a kernel-metadata.json template file in a specified folder. This file is required before pushing/uploading a kernel to Kaggle. The template includes default values for kernel configuration (language, kernel_type, GPU settings, etc.) that can be customized before pushing. Use this when setting up a new Kaggle kernel locally. |
| `KAGGLE_KERNEL_OUTPUT` | Download kernel output | Tool to download the output of a Kaggle kernel. Use when needing the latest kernel results locally. |
| `KAGGLE_KERNELS_STATUS` | Get Kernel Status | Get the execution status of a Kaggle kernel (notebook). Returns current status (running, complete, error), timestamps, and output URL. Use this to monitor kernel execution after pushing/submitting a kernel. Note: You need permission to access the kernel - typically only your own kernels or public kernels you have access to. |
| `KAGGLE_LIST_COMPETITION_FILES` | List competition data files | Tool to list all data files available for a Kaggle competition. Use when you need to retrieve file names, sizes, and metadata for competition datasets before downloading. |
| `KAGGLE_LIST_COMPETITIONS` | List Kaggle Competitions | Tool to list available Kaggle competitions with filters and pagination. Use when you need to discover competitions, search by keywords, or filter by category, group, and sorting options. |
| `KAGGLE_LIST_DATASETS` | List Kaggle Datasets | Tool to list Kaggle datasets with filters and pagination. Use after authenticating with Kaggle API key. |
| `KAGGLE_LIST_KERNEL_OUTPUT_FILES` | List Kernel Output Files | Tool to list output files for a specific kernel run. Use when you need to retrieve paginated file listings by kernel owner and slug. |
| `KAGGLE_LIST_KERNELS` | List Kaggle Kernels | Tool to list Kaggle kernels (notebooks and scripts) with filters and pagination. Use to discover kernels by search terms, user, language, type, competition, or dataset. |
| `KAGGLE_LIST_MODEL_INSTANCE_VERSION_FILES` | List Model Instance Version Files | Tool to list files for a specific version of a model variation. Use when you need to retrieve files for a particular model framework instance version by owner, model, framework, variation, and version. |
| `KAGGLE_LIST_MODELS` | List Kaggle Models | Tool to list Kaggle models with optional filters for owner, sorting, search, and pagination. Use to discover available models on Kaggle's platform. |
| `KAGGLE_PULL_KERNEL` | Pull Kernel Code | Tool to pull (download) the source code of a Kaggle kernel to local storage. Use when you need to retrieve a kernel's notebook, script, or metadata files. Optionally include metadata JSON file with kernel configuration details. |
| `KAGGLE_VIEW_COMPETITION_LEADERBOARD` | View competition leaderboard | Tool to view competition leaderboard information showing rankings and scores of participants. Use when you need to check competition standings, team scores, or analyze leaderboard positions. |

## Supported Triggers

None listed.

## Creating MCP Server - Stand-alone vs Composio SDK

The Kaggle MCP server is an implementation of the Model Context Protocol that connects your AI agent to Kaggle. It provides structured and secure access so your agent can perform Kaggle operations on your behalf through a secure, permission-based interface.
With Composio's managed implementation, you don't have to create your own developer app. For production, if you're building an end product, we recommend using your own credentials. The managed server helps you prototype fast and go from 0-1 faster.

## Step-by-step Guide

### 1. Prerequisites

Before starting, make sure you have:
- Composio API Key and OpenAI API Key
- Primary know-how of OpenAI Agents SDK
- A live Kaggle project
- Some knowledge of Python or Typescript

### 1. Getting API Keys for OpenAI and Composio

OpenAI API Key
- Go to the [OpenAI dashboard](https://platform.openai.com/settings/organization/api-keys) and create an API key. You'll need credits to use the models, or you can connect to another model provider.
- Keep the API key safe.
Composio API Key
- Log in to the [Composio dashboard](https://dashboard.composio.dev?utm_source=toolkits&utm_medium=framework_docs).
- Go to Settings and copy your API key.

### 2. Install dependencies

Install the Composio SDK and the OpenAI Agents SDK.
```python
pip install composio_openai_agents openai-agents python-dotenv
```

```typescript
npm install @composio/openai-agents @openai/agents dotenv
```

### 3. Set up environment variables

Create a .env file and add your OpenAI and Composio API keys.
```bash
OPENAI_API_KEY=sk-...your-api-key
COMPOSIO_API_KEY=your-api-key
USER_ID=composio_user@gmail.com
```

### 4. Import dependencies

What's happening:
- You're importing all necessary libraries.
- The Composio and OpenAIAgentsProvider classes are imported to connect your OpenAI agent to Composio tools like Kaggle.
```python
import asyncio
import os
from dotenv import load_dotenv

from composio import Composio
from composio_openai_agents import OpenAIAgentsProvider
from agents import Agent, Runner, HostedMCPTool, SQLiteSession
```

```typescript
import 'dotenv/config';
import { Composio } from '@composio/core';
import { OpenAIAgentsProvider } from '@composio/openai-agents';
import { Agent, hostedMcpTool, run, OpenAIConversationsSession } from '@openai/agents';
import * as readline from 'readline';
```

### 5. Set up the Composio instance

No description provided.
```python
load_dotenv()

api_key = os.getenv("COMPOSIO_API_KEY")
user_id = os.getenv("USER_ID")

if not api_key:
    raise RuntimeError("COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key")

# Initialize Composio
composio = Composio(api_key=api_key, provider=OpenAIAgentsProvider())
```

```typescript
dotenv.config();

const composioApiKey = process.env.COMPOSIO_API_KEY;
const userId = process.env.USER_ID;

if (!composioApiKey) {
  throw new Error('COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key');
}
if (!userId) {
  throw new Error('USER_ID is not set');
}

// Initialize Composio
const composio = new Composio({
  apiKey: composioApiKey,
  provider: new OpenAIAgentsProvider(),
});
```

### 6. Create a Tool Router session

What is happening:
- You give the Tool Router the user id and the toolkits you want available. Here, it is only kaggle.
- The router checks the user's Kaggle connection and prepares the MCP endpoint.
- The returned session.mcp.url is the MCP URL that your agent will use to access Kaggle.
- This approach keeps things lightweight and lets the agent request Kaggle tools only when needed during the conversation.
```python
# Create a Kaggle Tool Router session
session = composio.create(
    user_id=user_id,
    toolkits=["kaggle"]
)

mcp_url = session.mcp.url
```

```typescript
// Create Tool Router session for Kaggle
const session = await composio.create(userId as string, {
  toolkits: ['kaggle'],
});
const mcpUrl = session.mcp.url;
```

### 7. Configure the agent

No description provided.
```python
# Configure agent with MCP tool
agent = Agent(
    name="Assistant",
    model="gpt-5",
    instructions=(
        "You are a helpful assistant that can access Kaggle. "
        "Help users perform Kaggle operations through natural language."
    ),
    tools=[
        HostedMCPTool(
            tool_config={
                "type": "mcp",
                "server_label": "tool_router",
                "server_url": mcp_url,
                "headers": {"x-api-key": api_key},
                "require_approval": "never",
            }
        )
    ],
)
```

```typescript
// Configure agent with MCP tool
const agent = new Agent({
  name: 'Assistant',
  model: 'gpt-5',
  instructions:
    'You are a helpful assistant that can access Kaggle. Help users perform Kaggle operations through natural language.',
  tools: [
    hostedMcpTool({
      serverLabel: 'tool_router',
      serverUrl: mcpUrl,
      headers: { 'x-api-key': composioApiKey },
      requireApproval: 'never',
    }),
  ],
});
```

### 8. Start chat loop and handle conversation

No description provided.
```python
print("\nComposio Tool Router session created.")

chat_session = SQLiteSession("conversation_openai_toolrouter")

print("\nChat started. Type your requests below.")
print("Commands: 'exit', 'quit', or 'q' to end\n")

async def main():
    try:
        result = await Runner.run(
            agent,
            "What can you help me with?",
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")
    except Exception as e:
        print(f"Error: {e}\n")

    while True:
        user_input = input("You: ").strip()
        if user_input.lower() in {"exit", "quit", "q"}:
            print("Goodbye!")
            break

        result = await Runner.run(
            agent,
            user_input,
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")

asyncio.run(main())
```

```typescript
// Keep conversation state across turns
const conversationSession = new OpenAIConversationsSession();

// Simple CLI
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  prompt: 'You: ',
});

console.log('\nComposio Tool Router session created.');
console.log('\nChat started. Type your requests below.');
console.log("Commands: 'exit', 'quit', or 'q' to end\n");

try {
  const first = await run(agent, 'What can you help me with?', { session: conversationSession });
  console.log(`Assistant: ${first.finalOutput}\n`);
} catch (e) {
  console.error('Error:', e instanceof Error ? e.message : e, '\n');
}

rl.prompt();

rl.on('line', async (userInput) => {
  const text = userInput.trim();

  if (['exit', 'quit', 'q'].includes(text.toLowerCase())) {
    console.log('Goodbye!');
    rl.close();
    process.exit(0);
  }

  if (!text) {
    rl.prompt();
    return;
  }

  try {
    const result = await run(agent, text, { session: conversationSession });
    console.log(`\nAssistant: ${result.finalOutput}\n`);
  } catch (e) {
    console.error('Error:', e instanceof Error ? e.message : e, '\n');
  }

  rl.prompt();
});

rl.on('close', () => {
  console.log('\n👋 Session ended.');
  process.exit(0);
});
```

## Complete Code

```python
import asyncio
import os
from dotenv import load_dotenv

from composio import Composio
from composio_openai_agents import OpenAIAgentsProvider
from agents import Agent, Runner, HostedMCPTool, SQLiteSession

load_dotenv()

api_key = os.getenv("COMPOSIO_API_KEY")
user_id = os.getenv("USER_ID")

if not api_key:
    raise RuntimeError("COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key")

# Initialize Composio
composio = Composio(api_key=api_key, provider=OpenAIAgentsProvider())

# Create Tool Router session
session = composio.create(
    user_id=user_id,
    toolkits=["kaggle"]
)
mcp_url = session.mcp.url

# Configure agent with MCP tool
agent = Agent(
    name="Assistant",
    model="gpt-5",
    instructions=(
        "You are a helpful assistant that can access Kaggle. "
        "Help users perform Kaggle operations through natural language."
    ),
    tools=[
        HostedMCPTool(
            tool_config={
                "type": "mcp",
                "server_label": "tool_router",
                "server_url": mcp_url,
                "headers": {"x-api-key": api_key},
                "require_approval": "never",
            }
        )
    ],
)

print("\nComposio Tool Router session created.")

chat_session = SQLiteSession("conversation_openai_toolrouter")

print("\nChat started. Type your requests below.")
print("Commands: 'exit', 'quit', or 'q' to end\n")

async def main():
    try:
        result = await Runner.run(
            agent,
            "What can you help me with?",
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")
    except Exception as e:
        print(f"Error: {e}\n")

    while True:
        user_input = input("You: ").strip()
        if user_input.lower() in {"exit", "quit", "q"}:
            print("Goodbye!")
            break

        result = await Runner.run(
            agent,
            user_input,
            session=chat_session
        )
        print(f"Assistant: {result.final_output}\n")

asyncio.run(main())
```

```typescript
import 'dotenv/config';
import { Composio } from '@composio/core';
import { OpenAIAgentsProvider } from '@composio/openai-agents';
import { Agent, hostedMcpTool, run, OpenAIConversationsSession } from '@openai/agents';
import * as readline from 'readline';

const composioApiKey = process.env.COMPOSIO_API_KEY;
const userId = process.env.USER_ID;

if (!composioApiKey) {
  throw new Error('COMPOSIO_API_KEY is not set. Create a .env file with COMPOSIO_API_KEY=your_key');
}
if (!userId) {
  throw new Error('USER_ID is not set');
}

// Initialize Composio
const composio = new Composio({
  apiKey: composioApiKey,
  provider: new OpenAIAgentsProvider(),
});

async function main() {
  // Create Tool Router session
  const session = await composio.create(userId as string, {
    toolkits: ['kaggle'],
  });
  const mcpUrl = session.mcp.url;

  // Configure agent with MCP tool
  const agent = new Agent({
    name: 'Assistant',
    model: 'gpt-5',
    instructions:
      'You are a helpful assistant that can access Kaggle. Help users perform Kaggle operations through natural language.',
    tools: [
      hostedMcpTool({
        serverLabel: 'tool_router',
        serverUrl: mcpUrl,
        headers: { 'x-api-key': composioApiKey },
        requireApproval: 'never',
      }),
    ],
  });

  // Keep conversation state across turns
  const conversationSession = new OpenAIConversationsSession();

  // Simple CLI
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    prompt: 'You: ',
  });

  console.log('\nComposio Tool Router session created.');
  console.log('\nChat started. Type your requests below.');
  console.log("Commands: 'exit', 'quit', or 'q' to end\n");

  try {
    const first = await run(agent, 'What can you help me with?', { session: conversationSession });
    console.log(`Assistant: ${first.finalOutput}\n`);
  } catch (e) {
    console.error('Error:', e instanceof Error ? e.message : e, '\n');
  }

  rl.prompt();

  rl.on('line', async (userInput) => {
    const text = userInput.trim();

    if (['exit', 'quit', 'q'].includes(text.toLowerCase())) {
      console.log('Goodbye!');
      rl.close();
      process.exit(0);
    }

    if (!text) {
      rl.prompt();
      return;
    }

    try {
      const result = await run(agent, text, { session: conversationSession });
      console.log(`\nAssistant: ${result.finalOutput}\n`);
    } catch (e) {
      console.error('Error:', e instanceof Error ? e.message : e, '\n');
    }

    rl.prompt();
  });

  rl.on('close', () => {
    console.log('\nSession ended.');
    process.exit(0);
  });
}

main().catch((err) => {
  console.error('Fatal error:', err);
  process.exit(1);
});
```

## Conclusion

This was a starter code for integrating Kaggle MCP with OpenAI Agents SDK to build a functional AI agent that can interact with Kaggle.
Key features:
- Hosted MCP tool integration through Composio's Tool Router
- SQLite session persistence for conversation history
- Simple async chat loop for interactive testing
You can extend this by adding more toolkits, implementing custom business logic, or building a web interface around the agent.

## How to build Kaggle MCP Agent with another framework

- [ChatGPT](https://composio.dev/toolkits/kaggle/framework/chatgpt)
- [Claude Agent SDK](https://composio.dev/toolkits/kaggle/framework/claude-agents-sdk)
- [Claude Code](https://composio.dev/toolkits/kaggle/framework/claude-code)
- [Claude Cowork](https://composio.dev/toolkits/kaggle/framework/claude-cowork)
- [Codex](https://composio.dev/toolkits/kaggle/framework/codex)
- [Cursor](https://composio.dev/toolkits/kaggle/framework/cursor)
- [VS Code](https://composio.dev/toolkits/kaggle/framework/vscode)
- [OpenCode](https://composio.dev/toolkits/kaggle/framework/opencode)
- [OpenClaw](https://composio.dev/toolkits/kaggle/framework/openclaw)
- [Hermes](https://composio.dev/toolkits/kaggle/framework/hermes-agent)
- [CLI](https://composio.dev/toolkits/kaggle/framework/cli)
- [Google ADK](https://composio.dev/toolkits/kaggle/framework/google-adk)
- [LangChain](https://composio.dev/toolkits/kaggle/framework/langchain)
- [Vercel AI SDK](https://composio.dev/toolkits/kaggle/framework/ai-sdk)
- [Mastra AI](https://composio.dev/toolkits/kaggle/framework/mastra-ai)
- [LlamaIndex](https://composio.dev/toolkits/kaggle/framework/llama-index)
- [CrewAI](https://composio.dev/toolkits/kaggle/framework/crew-ai)

## Related Toolkits

- [Composio](https://composio.dev/toolkits/composio) - Composio is an integration platform that connects AI agents with hundreds of business tools. It streamlines authentication and lets you trigger actions across services—no custom code needed.
- [Composio search](https://composio.dev/toolkits/composio_search) - Composio search is a unified web search toolkit spanning travel, e-commerce, news, financial markets, images, and more. It lets you and your apps tap into up-to-date web data from a single, easy-to-integrate service.
- [Perplexityai](https://composio.dev/toolkits/perplexityai) - Perplexityai delivers natural, conversational AI models for generating human-like text. Instantly get context-aware, high-quality responses for chat, search, or complex workflows.
- [Browser tool](https://composio.dev/toolkits/browser_tool) - Browser tool is a virtual browser integration that lets AI agents interact with the web programmatically. It enables automated browsing, scraping, and action-taking from any AI workflow.
- [Ai ml api](https://composio.dev/toolkits/ai_ml_api) - Ai ml api is a suite of AI/ML models for natural language and image tasks. It provides fast, scalable access to advanced AI capabilities for your apps and workflows.
- [Aivoov](https://composio.dev/toolkits/aivoov) - Aivoov is an AI-powered text-to-speech platform offering 1,000+ voices in over 150 languages. Instantly turn written content into natural, human-like audio for any application.
- [All images ai](https://composio.dev/toolkits/all_images_ai) - All-Images.ai is an AI-powered image generation and management platform. It helps you create, search, and organize images effortlessly with advanced AI capabilities.
- [Anthropic administrator](https://composio.dev/toolkits/anthropic_administrator) - Anthropic administrator is an API for managing Anthropic organizational resources like members, workspaces, and API keys. It helps you automate admin tasks and streamline resource management across your Anthropic organization.
- [Api labz](https://composio.dev/toolkits/api_labz) - Api labz is a platform offering a suite of AI-driven APIs and workflow tools. It helps developers automate tasks and build smarter, more efficient applications.
- [Apipie ai](https://composio.dev/toolkits/apipie_ai) - Apipie ai is an AI model aggregator offering a single API for accessing top AI models from multiple providers. It helps developers build cost-efficient, latency-optimized AI solutions without juggling multiple integrations.
- [Astica ai](https://composio.dev/toolkits/astica_ai) - Astica ai provides APIs for computer vision, NLP, and voice synthesis. Integrate advanced AI features into your app with a single API key.
- [Bigml](https://composio.dev/toolkits/bigml) - BigML is a machine learning platform that lets you build, train, and deploy predictive models from your data. Its intuitive interface and robust API make machine learning accessible and efficient.
- [Botbaba](https://composio.dev/toolkits/botbaba) - Botbaba is a platform for building, managing, and deploying conversational AI chatbots across messaging channels. It streamlines chatbot automation, making it easier to integrate AI into customer interactions.
- [Botpress](https://composio.dev/toolkits/botpress) - Botpress is an open-source platform for building, deploying, and managing chatbots. It helps teams automate conversations and deliver rich, interactive messaging experiences.
- [Chatbotkit](https://composio.dev/toolkits/chatbotkit) - Chatbotkit is a platform for building and managing AI-powered chatbots using robust APIs and SDKs. It lets you easily add conversational AI to your apps for better user engagement.
- [Cody](https://composio.dev/toolkits/cody) - Cody is an AI assistant built for businesses, trained on your company's knowledge and data. It delivers instant answers and insights, tailored for your team.
- [Context7 MCP](https://composio.dev/toolkits/context7_mcp) - Context7 MCP delivers live, version-specific code docs and examples right from the source. It helps developers and AI agents instantly retrieve authoritative programming info—no more out-of-date docs.
- [Customgpt](https://composio.dev/toolkits/customgpt) - CustomGPT.ai lets you build and deploy chatbots tailored to your own data and business needs. Get precise and context-aware AI conversations without writing code.
- [Datarobot](https://composio.dev/toolkits/datarobot) - Datarobot is a machine learning platform that automates model development, deployment, and monitoring. It empowers organizations to quickly gain predictive insights from large datasets.
- [Deepgram](https://composio.dev/toolkits/deepgram) - Deepgram is an AI-powered speech recognition platform for accurate audio transcription and understanding. It enables fast, scalable speech-to-text with advanced audio intelligence features.

## Frequently Asked Questions

### What are the differences in Tool Router MCP and Kaggle MCP?

With a standalone Kaggle MCP server, the agents and LLMs can only access a fixed set of Kaggle tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Kaggle and many other apps based on the task at hand, all through a single MCP endpoint.

### Can I use Tool Router MCP with OpenAI Agents SDK?

Yes, you can. OpenAI Agents SDK fully supports MCP integration. You get structured tool calling, message history handling, and model orchestration while Tool Router takes care of discovering and serving the right Kaggle tools.

### Can I manage the permissions and scopes for Kaggle while using Tool Router?

Yes, absolutely. You can configure which Kaggle scopes and actions are allowed when connecting your account to Composio. You can also bring your own OAuth credentials or API configuration so you keep full control over what the agent can do.

### How safe is my data with Composio Tool Router?

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Kaggle data and credentials are handled as safely as possible.

---
[See all toolkits](https://composio.dev/toolkits) · [Composio docs](https://docs.composio.dev/llms.txt)
