mittwald
Use this skill for mittwald mStudio / Kundencenter production-platform work: project inventory, app/runtime inspection, deployment readiness, databases, domains/DNS/SSL/ingress, mail resources, backups, files, containers, SSH/SFTP users, and marketplace/license readouts.
Default Workflow
- Read first. Use
mittwald.cjsto generate allowlistedhttp_requestpayloads and pass only the emittedhttpRequestvalue to the built-inhttp_requesttool. - Treat
MITTWALD_API_TOKENas a SecretRef only. The helper setsbearerSecretName: "MITTWALD_API_TOKEN"so the gateway injectsAuthorization: Bearer ...server-side. Never ask the user to paste the token, inspect it, or write rawAuthorizationheaders. - For prompt/user testing, stop after
planor helperhttp-requestpayload generation. Do not callhttp_requestunless live mittwald data is needed for the user's request. - For live calls, stop after the first 401 or 403. Report a credential or API
role setup problem and ask the operator to verify
MITTWALD_API_TOKENin this order: browser admin at the active/admin/secretsroute,/secret set MITTWALD_API_TOKEN "<mittwald-api-token>"in browser/chator TUI, then local console fallbackhybridclaw secret set MITTWALD_API_TOKEN "<mittwald-api-token>". - For 429 responses, report rate-limit guidance from
Retry-After,X-RateLimit-Reset,X-RateLimit-Remaining, andX-RateLimit-Limitwhen present. Do not start retry loops. - For guarded writes, require exact F8/F14 operator approval for the named
target and pass
--operator-grantonly after that approval. The helper includes the target resource id inapproval.requiredGrant. - Account for eventual consistency after writes: mutating responses may return
an
etagevent id. Run the emittedevent-follow-upcommand with--event-id <etag>so the read usesif-event-reachedbefore reporting completion. - Do not use
curlas the normal execution path whenhttp_requestis available.
The helper is read-first. Guarded write operations exist only for allowlisted mittwald API shapes and require exact F8/F14 approval: service actions, database creation, app installation creation, cronjob creation, domain project/nameserver/deletion changes, backup restore, delivery box creation, license-key validation, and extension ordering. App installation runtime actions are intentionally not exposed because the current mittwald OpenAPI marks that endpoint deprecated and non-functional. Do not create API tokens or use unlisted marketplace mutations.
Command Contract
node skills/mittwald/mittwald.cjs --help
Build core read requests:
node skills/mittwald/mittwald.cjs --format json http-request whoami
node skills/mittwald/mittwald.cjs --format json http-request projects --limit 50
node skills/mittwald/mittwald.cjs --format json http-request project --project-id <project-id>
node skills/mittwald/mittwald.cjs --format json http-request apps --project-id <project-id> --limit 50
node skills/mittwald/mittwald.cjs --format json http-request domains --project-id <project-id> --limit 50
node skills/mittwald/mittwald.cjs --format json http-request backups --project-id <project-id> --limit 50
Build database and runtime requests:
node skills/mittwald/mittwald.cjs --format json http-request databases --project-id <project-id>
node skills/mittwald/mittwald.cjs --format json http-request app-status --app-installation-id <app-installation-id>
node skills/mittwald/mittwald.cjs --format json http-request services --project-id <project-id> --limit 50
node skills/mittwald/mittwald.cjs --format json http-request service-logs --stack-id <stack-id> --service-id <service-id> --tail 200
Build operational inventory requests:
node skills/mittwald/mittwald.cjs --format json http-request dns-zones --project-id <project-id>
node skills/mittwald/mittwald.cjs --format json http-request ingresses --project-id <project-id>
node skills/mittwald/mittwald.cjs --format json http-request cronjobs --project-id <project-id> --limit 50
node skills/mittwald/mittwald.cjs --format json http-request mail-addresses --project-id <project-id> --limit 50
node skills/mittwald/mittwald.cjs --format json http-request ssh-users --project-id <project-id> --limit 50
node skills/mittwald/mittwald.cjs --format json http-request sftp-users --project-id <project-id> --limit 50
node skills/mittwald/mittwald.cjs --format json http-request directory --project-id <project-id> --directory /html --max-depth 1
Plan a deployment readiness sweep:
node skills/mittwald/mittwald.cjs --format json plan deploy-check --project-id <project-id>
Build guarded write requests after exact operator approval:
node skills/mittwald/mittwald.cjs --format json http-request create-redis-database \
--project-id <project-id> --description cache-prod --version 7.0 --operator-grant
node skills/mittwald/mittwald.cjs --format json http-request create-mysql-database \
--project-id <project-id> --description app-prod --version 8.4 \
--password-secret MITTWALD_MYSQL_PASSWORD --operator-grant
node skills/mittwald/mittwald.cjs --format json http-request service-action \
--stack-id <stack-id> --service-id <service-id> --action restart --operator-grant
node skills/mittwald/mittwald.cjs --format json http-request update-domain-nameservers \
--domain-id <domain-id> --nameserver ns1.example.com --nameserver ns2.example.com \
--operator-grant
node skills/mittwald/mittwald.cjs --format json http-request restore-backup-path \
--backup-id <backup-id> --source-path /html --target-path /html-restore \
--operator-grant
node skills/mittwald/mittwald.cjs --format json http-request order-extension \
--extension-id <extension-id> \
--body-json '{"projectId":"<project-id>","consentedScopes":[]}' \
--operator-grant
After a live write returns an etag header, build the consistency read:
node skills/mittwald/mittwald.cjs --format json event-follow-up service-action \
--stack-id <stack-id> --service-id <service-id> --event-id <etag>
Classify saved or live http_request failures:
node skills/mittwald/mittwald.cjs --format json classify-response \
--status 429 \
--headers-json '{"X-RateLimit-Remaining":"0","X-RateLimit-Reset":"10"}'
Working Rules
- The mStudio v2 API base URL is
https://api.mittwald.de/v2/. - The helper only builds allowlisted endpoint shapes. Do not add arbitrary path passthrough for operator convenience.
databasesemits twohttpRequestsitems: MySQL databases and Redis databases. Send each item throughhttp_request, then merge the results in the response.- Use
domains,dns-zones, andingressestogether when checking domain/DNS/SSL/ingress state. - Use
apps,app-status,app-system-software,services,stacks, andservice-logsto summarize runtime health. Keep logs bounded with--tail. - Use
backups,backup-path, andbackup-database-dumpsfor backup readiness. Backup restore operations are red and require exact target approval. - Use
extension-orders,extension-instances, andlicensesfor marketplace and license visibility.order-extensionand license-key validation are guarded mutations and require exact F8/F14 approval. - For mutating operations that need complex request bodies, use
--body-jsononly on that allowlisted operation.create-app-installationrequiresappVersionId,description,updatePolicy, anduserInputs[].create-cronjobrequiresdescription,interval, andtarget.restore-backuprequirespathRestoreordatabaseRestores[].order-extensionrequiresconsentedScopes[]plus exactly one ofprojectIdorcustomerId. - Use
<secret:NAME>-style placeholders via flags such as--password-secretand--license-key-secret; never put raw credentials in command arguments. - Optional companion workflows: the official mittwald CLI, SDKs, Terraform provider, and mittwald MCP docs can inform operator guidance, but they are not runtime dependencies for this bundled skill.
Validation
python3 skills/skill-creator/scripts/quick_validate.py skills/mittwald
node skills/mittwald/mittwald.cjs --help