Skip to main content

MCP server for Cloudeka cldkctl CLI integration with automatic environment fallback (Testing Version)

Project description

MCP cldkctl Server (Testing Version)

A Model Context Protocol (MCP) server that provides full access to Cloudeka's cldkctl CLI functionality through Claude Desktop, Cursor, and other MCP-compatible clients. This is the testing version (mcp-cldkctl-t) for development and testing purposes.

Features

  • Smart Authentication: Automatic environment fallback (production -> staging)
  • Auto-Reauthentication: Handles token expiry automatically
  • Complete API Coverage: All cldkctl endpoints available as MCP tools
  • Persistent Caching: JWT tokens cached locally for performance
  • Environment Management: Easy switching between production and staging
  • Full Tool Suite: Kubernetes, billing, VMs, registry, notebooks, and more

Installation

From PyPI (Testing Version)

pip install mcp-cldkctl-t
# or
uvx mcp-cldkctl-t

From Source

git clone https://github.com/cloudeka/mcp-cldkctl.git
cd mcp-cldkctl
pip install -e .
# or
uv sync

Configuration

Environment Variables

Variable Required Default Description
CLDKCTL_TOKEN Yes - Your cldkctl token (starts with cldkctl_)
CLDKCTL_BASE_URL No https://ai.cloudeka.id Base URL (auto-fallback to staging if production fails)
CLDKCTL_DEFAULT_PROJECT_ID No - Default project ID for convenience

Example Setup

Linux/macOS:

export CLDKCTL_TOKEN="cldkctl_your_token_here"
export CLDKCTL_BASE_URL="https://ai.cloudeka.id"
export CLDKCTL_DEFAULT_PROJECT_ID="your_project_id"

Windows:

set CLDKCTL_TOKEN=cldkctl_your_token_here
set CLDKCTL_BASE_URL=https://ai.cloudeka.id
set CLDKCTL_DEFAULT_PROJECT_ID=your_project_id

Usage

Running the Server

# Using uvx (recommended)
uvx mcp-cldkctl-t

# Direct execution
python -m mcp_cldkctl.server

# Using the installed script
mcp-cldkctl-t

Claude Desktop Configuration (Testing Version)

Add this to your Claude Desktop configuration:

{
  "mcpServers": {
    "cldkctl-test": {
      "command": "uvx",
      "args": ["mcp-cldkctl-t"],
      "env": {
        "CLDKCTL_TOKEN": "your_cldkctl_token_here",
        "CLDKCTL_BASE_URL": "https://ai.cloudeka.id"
      }
    }
  }
}

Cursor Configuration (Testing Version)

Add this to your Cursor settings:

{
  "mcpServers": {
    "cldkctl-test": {
      "command": "uvx",
      "args": ["mcp-cldkctl-t"],
      "env": {
        "CLDKCTL_TOKEN": "your_cldkctl_token_here"
      }
    }
  }
}

Testing

The package includes several test files for different aspects:

  • test_auth.py - Basic authentication tests
  • test_production_auth.py - Production environment auth tests
  • test_staging_auth.py - Staging environment auth tests
  • test_api_endpoint.py - API endpoint tests
  • test_package.py - Package functionality tests

To run tests:

# Run all tests
pytest

# Run specific test file
pytest test_auth.py

# Run with verbose output
pytest -v

# Run with coverage
pytest --cov=mcp_cldkctl

Development

For development, install the package with development dependencies:

pip install -e ".[dev]"

Building and Publishing

Use the provided script to build and publish:

python build_and_publish.py

Debugging Tools

Several debugging scripts are available:

  • debug_auth.py - Debug authentication issues
  • debug_production_vs_staging.py - Debug environment switching

Available Tools

Authentication & Environment

  • auth - Authenticate with your cldkctl token
  • switch_environment - Switch between production/staging
  • status - Check current environment and auth status

Balance & Billing

  • balance_detail - Get project balance details
  • billing_daily_cost - Get daily billing costs
  • billing_monthly_cost - Get monthly billing costs
  • billing_history - Get billing history

Kubernetes Management

  • k8s_pods - List Kubernetes pods
  • k8s_deployments - List Kubernetes deployments
  • k8s_services - List Kubernetes services
  • k8s_configmaps - List Kubernetes configmaps
  • k8s_secrets - List Kubernetes secrets

Project & Organization

  • project_list - List all projects
  • project_detail - Get project details
  • org_detail - Get organization details
  • org_members - List organization members
  • profile_detail - Get user profile

Virtual Machines

  • vm_list - List virtual machines
  • vm_detail - Get VM details

Container Registry

  • registry_list - List container registries
  • registry_repositories - List registry repositories

Notebooks

  • notebook_list - List Deka notebooks
  • notebook_create - Create a new notebook

Vouchers & Tokens

  • voucher_list - List available vouchers
  • voucher_apply - Apply a voucher code
  • token_list - List cldkctl tokens
  • token_create - Create a new token
  • token_delete - Delete a token

Logs

  • audit_logs - Get audit logs

Environment Fallback

The MCP server automatically handles environment issues:

  1. Tries production first (https://ai.cloudeka.id)
  2. Detects database errors (missing cldkctl_tokens table)
  3. Auto-fallbacks to staging (https://staging.ai.cloudeka.id)
  4. Caches the working environment for future requests

Manual Environment Switching

# Switch to staging
switch_environment(environment="staging")

# Switch to production
switch_environment(environment="production")

# Check current status
status()

Authentication Flow

  1. Initial Auth: Exchange cldkctl token for JWT
  2. Token Caching: JWT stored locally with 24-hour expiry
  3. Auto-Reauth: Automatically re-authenticate when token expires
  4. Environment Persistence: Remember which environment works

Example Usage

Basic Authentication

# Authenticate (auto-fallback if production fails)
auth(token="cldkctl_your_token_here")

# Check status
status()

Project Management

# List all projects
project_list()

# Get specific project details
project_detail(project_id="your_project_id")

Kubernetes Operations

# List pods in default namespace
k8s_pods(project_id="your_project_id")

# List deployments in specific namespace
k8s_deployments(project_id="your_project_id", namespace="kube-system")

Billing Queries

# Get daily costs
billing_daily_cost(project_id="your_project_id")

# Get billing history
billing_history(
    project_id="your_project_id",
    start_date="2024-01-01",
    end_date="2024-01-31"
)

Troubleshooting

Common Issues

Authentication Failed

  • Check your CLDKCTL_TOKEN is valid
  • Ensure token starts with cldkctl_
  • Try using staging environment manually

Production Database Error

  • This is normal - the server auto-fallbacks to staging
  • Check status to see which environment is active

Token Expired

  • The server auto-reauthenticates
  • Check status to verify authentication

Environment Issues

# Force staging environment
auth(token="your_token", force_staging=True)

# Check current environment
status()

Debug Mode

Run with debug output:

uvx mcp-cldkctl-t 2>&1 | tee debug.log

Version History

Current version: 0.1.36 (Testing)

License

MIT License

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

mcp_cldkctl_t-0.1.2.tar.gz (116.5 kB view details)

Uploaded Source

Built Distribution

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

mcp_cldkctl_t-0.1.2-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

File details

Details for the file mcp_cldkctl_t-0.1.2.tar.gz.

File metadata

  • Download URL: mcp_cldkctl_t-0.1.2.tar.gz
  • Upload date:
  • Size: 116.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for mcp_cldkctl_t-0.1.2.tar.gz
Algorithm Hash digest
SHA256 cdd95451f9e13a87473fb6895cf6addc5cd0452743573f5d18fd4c1a4544be41
MD5 209d35df882dbc1bdccd14d573d0fe69
BLAKE2b-256 266a1b14b1bf016ef2a20c232e737b77dee02963c5c9336404e56afc7ed0cb4d

See more details on using hashes here.

File details

Details for the file mcp_cldkctl_t-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: mcp_cldkctl_t-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 14.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for mcp_cldkctl_t-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c48ae53efd16a9a4f1a368c5d32a0df2402b4e579e67b1b5d79cdc4b985c91ac
MD5 2af6daa1cb5497050e2ac9d19ea7678d
BLAKE2b-256 736503ea5e3f9997f9ffde5046c620ee0be8d1c432839f8814b81b553f3e999c

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