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.9.tar.gz (120.6 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.9-py3-none-any.whl (16.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mcp_cldkctl_t-0.1.9.tar.gz
  • Upload date:
  • Size: 120.6 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.9.tar.gz
Algorithm Hash digest
SHA256 f8aa3d13d44fe8d833cb515a05acf55e634f719c6a716e6dd5dfc54b4ae41fcc
MD5 d326968f37c3123023225bcc15429f23
BLAKE2b-256 cb2082cb5604132ef719088f1455aada248bdc62c1c1bab97eb3d50cc4740be3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mcp_cldkctl_t-0.1.9-py3-none-any.whl
  • Upload date:
  • Size: 16.4 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.9-py3-none-any.whl
Algorithm Hash digest
SHA256 e86f9b9dfcb52654188671e68e2973ebdfc40f27ee69e9eebeba1387c2c4bede
MD5 00b2e3612271b1b0359dbec19ef59589
BLAKE2b-256 b669cbe88ba0f705719ebd0c35ddceba20ca6e6a2f8f538f71390994128dbef9

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