mcp-all-inkl
v1.0.3
Published
MCP Server for All-Inkl.com hosting via KAS API
Readme
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)
pickandfilterparams on all tools to reduce response size and token usage
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-inklOr 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-inklZed
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_typeto get only A, MX, TXT, etc. - Mail accounts - pick only
mail_loginanddomain_partinstead of full quota details - Databases - filter by
database_commentor pick onlydatabase_nameandused_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_hostmust 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
- SOAP POST to
https://kasapi.kasserver.com/soap/KasAuth.phpwithkas_auth_type: "plain" - Receives session token (valid 60 minutes, auto-refreshes)
- All subsequent API calls use
kas_auth_type: "session"with the token - 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:Mapobjects andSOAP-ENC:Arrayarrays - Handles
xsi:nil,xsd:int,xsd:float, andxsd:stringtypes - 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 domainsThe 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 buildTesting 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.mjsProject 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
Links
License
MIT
