Skip to main content
Glama
hl9020

mcp-all-inkl

by hl9020

mcp-all-inkl

MCP Server for managing All-Inkl.com web hosting via the KAS SOAP API. Gives Claude and other MCP-compatible AI assistants direct access to domains, DNS, email, databases, cronjobs, SSL, and more.

9 tools, 53 actions - full coverage of the KAS API, with all SOAP/XML complexity abstracted into clean JSON responses.

Features

  • Complete KAS API coverage across 9 tool categories

  • Plain-text authentication over HTTPS (secure via TLS)

  • Automatic session token management with re-auth on expiry

  • Flood protection awareness - respects KAS API rate limits

  • Stack-based SOAP/XML parser that correctly handles deeply nested <item> structures

  • Auto-fix for common parameter issues (e.g. missing trailing dot on DNS zone_host)

  • pick and filter params on all tools to reduce response size and token usage

Related MCP server: cPanel MCP Server

Requirements

  • Node.js 22+

  • All-Inkl.com KAS account with API access

  • KAS login (format: w0XXXXXXX) and password

Setup

Claude Desktop / Claude.ai

Add to claude_desktop_config.json:

Windows: %APPDATA%\Claude\claude_desktop_config.json macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "all-inkl": {
      "command": "npx",
      "args": ["-y", "mcp-all-inkl"],
      "env": {
        "KAS_LOGIN": "w0XXXXXXX",
        "KAS_PASSWORD": "your-kas-password"
      }
    }
  }
}

Restart Claude Desktop after saving.

Claude Code

claude mcp add all-inkl \
  -e KAS_LOGIN=w0XXXXXXX \
  -e KAS_PASSWORD=your-kas-password \
  -- npx -y mcp-all-inkl

Or add to .mcp.json in your project root:

{
  "mcpServers": {
    "all-inkl": {
      "command": "npx",
      "args": ["-y", "mcp-all-inkl"],
      "env": {
        "KAS_LOGIN": "w0XXXXXXX",
        "KAS_PASSWORD": "your-kas-password"
      }
    }
  }
}

Cursor

Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):

{
  "mcpServers": {
    "all-inkl": {
      "command": "npx",
      "args": ["-y", "mcp-all-inkl"],
      "env": {
        "KAS_LOGIN": "w0XXXXXXX",
        "KAS_PASSWORD": "your-kas-password"
      }
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

Same JSON format as above.

VS Code + GitHub Copilot

Add to .vscode/mcp.json in your workspace:

{
  "servers": {
    "all-inkl": {
      "command": "npx",
      "args": ["-y", "mcp-all-inkl"],
      "env": {
        "KAS_LOGIN": "w0XXXXXXX",
        "KAS_PASSWORD": "your-kas-password"
      }
    }
  }
}

Cline

Open Cline -> MCP Servers icon -> Edit MCP Settings, then add the same JSON as Claude Desktop.

Continue.dev

Create .continue/mcpServers/all-inkl.json with the same JSON format.

OpenAI Codex CLI

codex mcp add all-inkl \
  --env KAS_LOGIN=w0XXXXXXX \
  --env KAS_PASSWORD=your-kas-password \
  -- npx -y mcp-all-inkl

Zed

Add to Zed settings.json (via Agent Panel -> Settings):

{
  "context_servers": {
    "all-inkl": {
      "command": {
        "path": "npx",
        "args": ["-y", "mcp-all-inkl"],
        "env": {
          "KAS_LOGIN": "w0XXXXXXX",
          "KAS_PASSWORD": "your-kas-password"
        }
      }
    }
  }
}

Compatibility Matrix

Tool

Config Location

Claude Desktop / Claude.ai

claude_desktop_config.json

Claude Code

.mcp.json

Cursor

.cursor/mcp.json

Windsurf

~/.codeium/windsurf/mcp_config.json

VS Code + Copilot

.vscode/mcp.json

Cline

MCP Settings JSON

Continue.dev

.continue/mcpServers/*.json

Zed

settings.json

Codex CLI

.codex/config.toml

Roo Code

MCP Settings JSON

Google Antigravity

~/.gemini/settings.json

Environment Variables

Variable

Required

Default

Description

KAS_LOGIN

Yes

-

KAS account login (format: w0XXXXXXX)

KAS_PASSWORD

Yes

-

KAS account password

Get your KAS login from the KAS admin panel - it's shown in the top right after login.

pick & filter - Response Optimization

All tools support optional pick and filter parameters to reduce token usage on large responses.

pick - Return only specific fields

// Without pick: full DNS records with 8 fields each (~2,000 tokens for 18 records)
{ "action": "list", "params": { "zone_host": "example.com." } }

// With pick: only type and data (~400 tokens)
{ "action": "list", "params": { "zone_host": "example.com." }, "pick": ["record_type", "record_data"] }

filter - Filter array results by field values

// Only MX records
{ "action": "list", "params": { "zone_host": "example.com." }, "filter": { "record_type": "MX" } }

// Only a specific database
{ "action": "list", "filter": { "database_name": "d03f4990" } }

Combined - filter + pick

// MX records with only server and priority
{ "action": "list", "params": { "zone_host": "example.com." }, "filter": { "record_type": "MX" }, "pick": ["record_data", "record_aux"] }
// Returns: [{"record_data": "aspmx.l.google.com.", "record_aux": 1}, ...]

When to use:

  • DNS zones with many records - filter by record_type to get only A, MX, TXT, etc.

  • Mail accounts - pick only mail_login and domain_part instead of full quota details

  • Databases - filter by database_comment or pick only database_name and used_database_space

  • Any list action returning more data than needed

Tools & Actions

kas_dns - DNS Records

Manage A, AAAA, CNAME, MX, TXT, SRV records.

Important: zone_host must end with a trailing dot: "example.com." not "example.com". The server auto-appends it if missing, but best practice is to include it.

Action

Required Params

Description

list

zone_host

List all DNS records of a zone

create

zone_host, record_type, record_name, record_data, record_aux

Create record. record_name="" for zone root. record_aux=0 for most types, MX priority for MX

update

record_id

Update record (get record_id from list)

delete

record_id

Delete a record

reset

zone_host

Reset zone to defaults

kas_domain - Domains

Action

Required Params

Description

list

-

List all domains

list_tlds

-

List available TLDs

create

domain_name, domain_tld

Register a new domain

update

domain_name

Update domain settings (path, redirect, PHP version, etc.)

delete

domain_name

Delete a domain

move

domain_name, source_account, target_account

Move domain to another KAS account

kas_subdomain - Subdomains

Action

Required Params

Description

list

-

List all subdomains

create

subdomain_name, domain_name

Create subdomain (e.g. "www" + "example.com")

update

subdomain_name

Update subdomain settings

delete

subdomain_name

Delete a subdomain

move

subdomain_name, source_account, target_account

Move to another account

kas_database - MySQL Databases

Action

Required Params

Description

list

-

List all databases with size and comments

create

database_password

Create database (name auto-generated by KAS)

update

database_login

Update password, comment, or allowed hosts

delete

database_login

Delete a database

kas_mail - Email

Manages mailboxes, forwards, mailing lists, and filters.

Action

Required Params

Description

list

-

List all mailboxes

create

mail_password, local_part, domain_part

Create mailbox

update

mail_login

Update mailbox settings

delete

mail_login

Delete mailbox

list_forwards

-

List email forwards

create_forward

local_part, domain_part

Create forward

update_forward

mail_forward

Update forward targets

delete_forward

mail_forward

Delete forward

list_lists

-

List mailing lists

create_list

mailinglist_name, mailinglist_domain, mailinglist_password

Create mailing list

update_list

mailinglist_name

Update mailing list

delete_list

mailinglist_name

Delete mailing list

list_filters

-

List mail filters

add_filter

mail_login, filter

Add mail filter

delete_filter

mail_login

Delete mail filter

kas_cronjob - Cronjobs

Action

Required Params

Description

list

-

List all cronjobs

create

protocol, http_url, cronjob_comment, minute, hour, day_of_month, month, day_of_week

Create cronjob. Time values use crontab syntax (* for every)

update

cronjob_id

Update cronjob settings

delete

cronjob_id

Delete a cronjob

kas_ssl - SSL Certificates

Action

Required Params

Description

update

hostname, ssl_certificate_sni_key, ssl_certificate_sni_crt

Install/update SSL certificate

kas_account - Account Management

Action

Required Params

Description

list

-

List all accounts

get_resources

-

Resource limits and current usage

get_settings

-

Account settings

get_server_info

-

Server info (PHP versions, MySQL, OS)

create

account_kas_password, account_ftp_password

Create sub-account

update

account_login, account_kas_password

Update account

update_settings

-

Update account settings

update_superuser

account_login

Update superuser settings

delete

account_login

Delete an account

kas_system - System

Action

Required Params

Description

create_session

-

Create new auth session

get_space

-

Disk space overview

get_space_usage

directory

Detailed space usage for a directory

get_traffic

-

Traffic statistics

Example Responses

DNS Records

[
  {
    "record_zone": "example.com",
    "record_name": null,
    "record_type": "A",
    "record_data": "85.13.151.85",
    "record_aux": 0,
    "record_id": 56652527,
    "record_changeable": "Y",
    "record_deleteable": "Y"
  }
]

Databases

[
  {
    "database_name": "d03f4990",
    "database_login": "d03f4990",
    "database_password": null,
    "database_comment": "My App Database",
    "database_allowed_hosts": "localhost",
    "used_database_space": 44075.3
  }
]

Server Info

[
  { "service": "mysql", "version": "10.11.14", "version_type": "server" },
  { "service": "php", "interface": "cgi-fcgi", "file_extension": "php84", "version": 8.4 },
  { "service": "os", "distribution": "ubuntu", "version": 24 }
]

Architecture

Authentication Flow

  1. SOAP POST to https://kasapi.kasserver.com/soap/KasAuth.php with kas_auth_type: "plain"

  2. Receives session token (valid 60 minutes, auto-refreshes)

  3. All subsequent API calls use kas_auth_type: "session" with the token

  4. On session expiry or invalidation, automatic re-authentication

SOAP XML Parser

The KAS API returns deeply nested SOAP/XML with <item> tags at multiple levels. Standard regex-based parsing fails because greedy matching can't distinguish between nested <item> open/close pairs.

This server uses a stack-based parser that:

  • Tracks <item> tag depth with a counter

  • Only captures top-level items when depth returns to 0

  • Recursively parses ns2:Map objects and SOAP-ENC:Array arrays

  • Handles xsi:nil, xsd:int, xsd:float, and xsd:string types

  • Returns clean JavaScript objects/arrays

API Parameter Format

The KAS API expects parameters as JSON inside a SOAP envelope. One critical detail: the parameter key for request params must be KasRequestParams (CamelCase), not kas_request_params (snake_case). Actions without parameters work with either format, which can mask this bug during development.

Flood Protection

KAS returns a KasFloodDelay value with each response. The server tracks this per action and automatically waits before sending the next request to the same endpoint.

pick & filter

All tools accept optional pick (array of field names) and filter (object with key-value pairs) parameters. These are applied client-side after the API response is parsed - filter removes non-matching entries from arrays, pick strips all fields except the specified ones. Both combine to dramatically reduce token usage: a full DNS zone with 18 records and 8 fields each (~2,000 tokens) can be reduced to just 5 MX records with 2 fields (~100 tokens).

Verify

Start a new conversation and ask:

List all my domains

The AI should call kas_domain with action list and return your domain list as JSON.

Other test queries:

  • "Show me DNS records for example.com" - tests DNS with trailing dot auto-fix

  • "How much disk space is left?" - tests system tools

  • "What PHP versions are available?" - tests server info

Development

git clone https://github.com/hl9020/mcp-all-inkl.git
cd mcp-all-inkl
npm install
npm run build

Testing locally

Create a test file (excluded from git):

// test.mjs
process.env.KAS_LOGIN = "w0XXXXXXX";
process.env.KAS_PASSWORD = "your-password";
const { kasCall } = await import("./dist/kas-client.js");

const result = await kasCall("get_domains");
console.log(result.content[0].text);
node test.mjs

Project Structure

src/
  index.ts          # MCP server setup, tool definitions with descriptions
  kas-client.ts     # SOAP client, auth, XML parser, API caller
  types.ts          # TypeScript interfaces
  tools/
    dns.ts          # DNS records (5 actions)
    domain.ts       # Domains (6 actions)
    subdomain.ts    # Subdomains (5 actions)
    database.ts     # MySQL databases (4 actions)
    mail.ts         # Email, forwards, lists, filters (15 actions)
    cronjob.ts      # Cronjobs (4 actions)
    ssl.ts          # SSL certificates (1 action)
    account.ts      # Account management (9 actions)
    system.ts       # System info (4 actions)

Known Limitations

  • KAS flood protection can cause temporary delays when making rapid successive calls

  • SSL tool only supports update (installing certificates), not listing or deleting

  • The KAS API itself has no pagination - large result sets are returned in full

License

MIT

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

–Maintainers
–Response time
–Release cycle
–Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hl9020/mcp-all-inkl'

If you have feedback or need assistance with the MCP directory API, please join our Discord server