An MCP server for any AI to run your hosting panel
jabali-mcp speaks the open Model Context Protocol. Claude, Codex, Kimicode, OpenCode, and any other MCP-capable assistant can diagnose outages and provision domains, mailboxes, DNS, SSL, and databases — all through the panel's own API, with your permissions and your guardrails.
What is this?
The Model Context Protocol (MCP) is an open standard that lets AI assistants use external tools. jabali-mcp is Jabali Panel's official MCP server: a small open-source binary that exposes the panel's REST API as 75+ tools an assistant can call.
It adds no new attack surface to your panel: it reimplements no auth, no validation, no scoping. Your API token acts as your user, and the panel enforces ownership on every call — exactly as it does for any other API client. A tenant token can only ever touch that tenant's resources.
It works with any MCP client: Claude Code, Claude Desktop, Cursor, Windsurf, Cline, OpenAI Codex, OpenCode, Gemini CLI, and more.
What can you ask?
Six real prompts, and what the assistant does under the hood.
Built for a control plane, not a chatbot demo
Read-only by default
Mutating tools don't exist unless you opt in with JABALI_MCP_ALLOW_WRITE=1.
Destructive actions take two steps
Deletes, restores, and password rotations return a preview and only
execute when re-called with an explicit confirm: true.
An assistant cannot destroy anything in one call.
Dry-run everything
JABALI_MCP_DRY_RUN=1 (or per-call dry_run)
shows the exact request that would be sent, without sending it.
Your token is the boundary
Ownership is enforced server-side by the panel on every endpoint. The MCP server can't reach anything your token can't.
Every tool call is a normal REST request in your panel's audit trail.
Quick start
Four steps, five minutes.
- 1
Install jabali-mcp
Grab the prebuilt binary or install with
go install.# prebuilt binary: https://github.com/shukiv/jabali-mcp/releases/latest go install github.com/shukiv/jabali-mcp/cmd/jabali-mcp@latest - 2
Mint a token in the panel
In your Jabali Panel tenant shell → API Tokens → MCP tab. The wizard generates the client config with your token pre-filled, entirely in the browser.
- 3
Run the setup wizard
Prompts for panel URL + token, verifies the connection, writes the config.
jabali-mcp init - 4
Register with your client
Claude Code needs one command:
claude mcp add jabali -- jabali-mcpClaude Desktop, Cursor, and other clients accept a generic
mcpServersblock:{ "mcpServers": { "jabali": { "command": "jabali-mcp", "env": { "JABALI_PANEL_URL": "https://panel.example:8443/api/v1", "JABALI_API_TOKEN": "jat_…" } } } }Start read-only. Turn on writes later with
JABALI_MCP_ALLOW_WRITE=1, optionally withJABALI_MCP_DRY_RUN=1.
75+ tools
Across domains, DNS, SSL, mail, databases, backups, cron, files, and
diagnostics. Highlights include diagnose_domain
(one-call triage) and report_issue
(file bugs with diagnostics attached).
What should it do next?
The roadmap is open. Drop ideas, use cases, and pain points in the discussion.
Join the discussionFAQ
Do I need to run another daemon?
No. It's a stdio server — your MCP client launches it on demand. There's nothing to keep running.
Which AI clients work?
Any MCP-capable client. Claude Code, Claude Desktop, Cursor, Windsurf, Cline, Codex, OpenCode, and Gemini CLI are documented in the README.
Can the AI delete my domain?
Only if you enabled write mode AND the assistant calls the delete tool twice — the first call returns a preview, the second needs an explicit confirm: true. By default the server is read-only.
Does my panel token go to the AI company?
The token lives in your local MCP client config and is sent only to your panel over TLS. Tool results (domain lists, log lines) do enter the AI conversation — use a tenant token, and don't ask it to read files containing secrets.
Is it free?
Yes — AGPL-3.0, same license as Jabali Panel.
My panel uses a self-signed CA.
Point JABALI_CA_FILE at your CA bundle. TLS verification is always on; there is no way to disable it.