Current version: 1.0.0
OpenClaw plugin for full ISPConfig server management via the Remote JSON API.
- Session-based API client with auto-reconnect
- 292 tools covering the entire ISPConfig Remote API
- Full CRUD for: Clients, Sites, DNS, Mail, Databases, FTP, Shell, Cron, WebDAV, OpenVZ
- Advanced: Spam filters, mail policies, fetchmail, relay domains, APS packages, system config
/ispconfigchat command for quick help and tool reference- Safety guards via
readOnlyandallowedOperations - Live integration tests against a real ISPConfig host
This plugin uses the JSON endpoint format:
- URL:
https://server:8080/remote/json.php?method_name - Method is passed as query string, not in JSON body
- Body format:
- login:
{ "username": "...", "password": "..." } - normal calls:
{ "session_id": "...", ...params } - logout:
{ "session_id": "..." }
- login:
clawhub install openclaw-ispconfignpm install @elvatis_com/openclaw-ispconfig- In ISPConfig, create a Remote User.
- Grant required API permissions.
- Copy endpoint URL and credentials.
- Configure plugin in OpenClaw.
openclaw.plugin.json config keys:
apiUrl(required): ISPConfig JSON API URLusername(required): remote userpassword(required, secret): remote passwordserverId(default1): default server iddefaultServerIp(optional): fallback IP for provisioning DNS A recordreadOnly(defaultfalse): block write toolsallowedOperations(default[]): whitelist of tool namesverifySsl(defaulttrue): TLS certificate verification
Type /ispconfig in any connected chat to display the full list of available tools, the plugin version, and the connected ISPConfig hostname (credentials are never shown).
Example output:
π₯οΈ ISPConfig Plugin
Version 0.4.0 | Connected to isp.elvatis.com
π Read (17)
β’ isp_system_info - Server-Info
β’ isp_client_list - Alle Clients
...
βοΈ Write (20+)
β’ isp_client_add / _update / _delete - Clients
...
π Provisioning
β’ isp_provision_site - Domain + DNS + Mail + DB in einem Schritt
This plugin uses the modern OpenClaw Plugin API (api.*) instead of the legacy (runtime, config) registration pattern.
The entry point exports a default plugin object with a register(api) function:
export default {
manifest: pluginManifest,
register(api: PluginApi): void {
// Register tools
api.registerTool({ name, description, parameters, execute });
// Register chat commands
api.registerCommand({ name, description, usage, handler });
},
};Key API methods used:
api.registerTool({ name, description, parameters, execute })- exposes an AI-callable tool with JSON Schema parametersapi.registerCommand({ name, description, usage, handler })- registers a/commandfor chatapi.pluginConfig- typed plugin configuration fromopenclaw.jsonapi.logger- structured logger (info, warn, error)
isp_system_info- params: noneisp_methods_list- params: noneisp_client_list- params: optional filter fieldsisp_client_get- params:client_idisp_sites_list- params: optional filters accepted bysites_web_domain_getisp_site_get- params:primary_id(orsite_id,domain_id)isp_domains_list- params: noneisp_dns_zone_list- params: user-related filter paramsisp_dns_zone_get- params:primary_id(orzone_id)isp_dns_record_list- params:zone_idisp_mail_domain_list- params: optional filtersisp_mail_user_list- params: optional filtersisp_mail_alias_list- params: optional filtersisp_mail_forward_list- params: optional filtersisp_db_list- params: user-related filtersisp_db_get- params:primary_idisp_db_user_get- params:primary_idisp_ftp_user_get- params:primary_idisp_shell_user_get- params:primary_idisp_ssl_status- params: noneisp_quota_check- params:client_idisp_cron_list- params: optional filters
isp_client_add- params: ISPConfigclient_addpayloadisp_client_update- params:client_id,paramsobject with fields to updateisp_client_delete- params:client_idisp_site_add- params: ISPConfigsites_web_domain_addpayloadisp_site_update- params:client_id,primary_id,paramsobject with fields to updateisp_site_delete- params:primary_idisp_domain_add- alias forisp_site_addisp_dns_zone_add- params: ISPConfigdns_zone_addpayloadisp_dns_zone_update- params:client_id,primary_id,params(ns, mbox, refresh, retry, expire, minimum, ttl, active)isp_dns_zone_delete- params:primary_idisp_dns_record_add- params: includetype(A,AAAA,MX,TXT,CNAME,SRV,CAA,NS,PTR) and matching payloadisp_dns_record_update- params:type,primary_id,paramsobject with fields to updateisp_dns_record_delete- params: includetypeand matching delete payloadisp_mail_domain_add- params: ISPConfigmail_domain_addpayloadisp_mail_domain_update- params:client_id,primary_id,paramsobject with fields to updateisp_mail_domain_delete- params:primary_idisp_mail_user_add- params: ISPConfigmail_user_addpayloadisp_mail_user_update- params:client_id,primary_id,params(password, quota, etc.)isp_mail_user_delete- params:primary_idisp_mail_alias_add- params: ISPConfigmail_alias_addpayloadisp_mail_alias_update- params:client_id,primary_id,paramsobject with fields to updateisp_mail_alias_delete- params:primary_idisp_mail_forward_add- params: ISPConfigmail_forward_addpayloadisp_mail_forward_update- params:client_id,primary_id,paramsobject with fields to updateisp_mail_forward_delete- params:primary_idisp_db_add- params: ISPConfigsites_database_addpayloadisp_db_update- params:client_id,primary_id,paramsobject with fields to updateisp_db_delete- params:primary_idisp_db_user_add- params: ISPConfigsites_database_user_addpayloadisp_db_user_update- params:client_id,primary_id,paramsobject with fields to updateisp_db_user_delete- params:primary_idisp_shell_user_add- params: ISPConfigsites_shell_user_addpayloadisp_shell_user_update- params:client_id,primary_id,paramsobject with fields to updateisp_shell_user_delete- params:primary_idisp_ftp_user_add- params: ISPConfigsites_ftp_user_addpayloadisp_ftp_user_update- params:client_id,primary_id,paramsobject with fields to updateisp_ftp_user_delete- params:primary_idisp_cron_add- params: ISPConfigsites_cron_addpayloadisp_cron_update- params:client_id,primary_id,paramsobject with fields to updateisp_cron_delete- params:primary_idisp_backup_list- params: none (returns skipped if API method unavailable)
isp_provision_site- Required params:
domainclientNameclientEmail
- Optional params:
serverIpcreateMail(defaulttrue)createDb(defaulttrue)serverId(default from config)
Workflow:
- Create client
- Create site with SSL and Let's Encrypt enabled
- Create DNS zone
- Add DNS records (
A,CNAME, SPF TXT, DMARC TXT) - Optionally create mail domain and
info@+admin@mailboxes - Optionally create DB user and database
- Ensure SSL flags are enabled on the site
Total: 292 tools covering the entire ISPConfig Remote API.
readOnly=trueblocks all write and provisioning toolsallowedOperations=[...]allows only named tools
npm run build
npm testFor live tests, provide environment variables:
ISPCONFIG_API_URLISPCONFIG_USERISPCONFIG_PASS
For automation that creates GitHub issues, use src/templates/github-issue-helper.ts.
It provides isValidIssueRepoSlug(), resolveIssueRepo(), and buildGhIssueCreateCommand().
See CHANGELOG.md for the full history.
Full ISPConfig API coverage: 292 tools.
- Phase 1 (Core): Clients, Server, Web Domain backups, Quota/Traffic, Monitoring (+32)
- Phase 2 (DNS): All DNS record types (DNAME, DS, HINFO, LOC, NAPTR, RP, SSHFP, TLSA, ALIAS), slaves, templates, DNSSEC (+54)
- Phase 3 (Mail): Alias domains, catchall, mailing lists, filters, fetchmail, transport, relay, spam (+66)
- Phase 4 (Web): VHost aliases/subdomains, web folders, WebDAV (+29)
- Phase 5 (System): Config, APS packages, domain registry, permissions (+25)
- Phase 6 (OpenVZ): Templates, IPs, VMs with full lifecycle (+22)
MIT