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-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
Environment Variables
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.
kas_domain - Domains
kas_subdomain - Subdomains
kas_database - MySQL Databases
kas_mail - Email
Manages mailboxes, forwards, mailing lists, and filters.
kas_cronjob - Cronjobs
kas_ssl - SSL Certificates
kas_account - Account Management
kas_system - System
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 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
Links
License
MIT