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.14.tar.gz (119.3 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.14-py3-none-any.whl (15.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mcp_cldkctl_t-0.1.14.tar.gz
  • Upload date:
  • Size: 119.3 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.14.tar.gz
Algorithm Hash digest
SHA256 bb05e138dfcf0896e4286f9c5d1a754e1a459d9980ba0ef3e252b987db1818e2
MD5 ad5b11a10fe730b260ebaf1f8ecaac5b
BLAKE2b-256 07a800410c5ff3098190e1a961c6f1a6b6a6652816dcc194ba101a41c86f884e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mcp_cldkctl_t-0.1.14-py3-none-any.whl
  • Upload date:
  • Size: 15.1 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.14-py3-none-any.whl
Algorithm Hash digest
SHA256 7c452454ef3ee86fe3d6e0fb5c0c1410ef1cbb7ff5db789c21e3bf080b90f736
MD5 a389c86b7801782a0b58e95dd81b885b
BLAKE2b-256 d99208eb5748621e9bc392b4e7d5522f4cd2401ae2f08fc0a1507ed80c2386ba

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