One website and one symptom in; a named cause, the evidence for it, and a fix out. Stay read-only until the cause is stated and the user agrees to the fix.
Calling the operations
- Read the
inputSchemathatsearchreturns before the first call of each operation. If a name below is rejected as unknown,searchfor what the step does (e.g. "ssl status"). - Batch reads with
multi-executeand pass values between steps with$steps.<i>.<path>, e.g."$steps.0.data.0.username". A batch stops at its first failure. - The Hostinger Connector runs each product as its own MCP server (
hosting,wordpress,agency-hosting,domains,dns), so a batch can only chain operations from one server. Whensearchcannot find an operation, that product group is switched off in the Connector — ask the user to enable it.
1. Find the website
Run both lookups, and keep the result for every later call:
hosting_websites_listwithdomain— Shared and Cloud plans. The filter is a substring match, so take the entry whosedomainis exactly the one asked about. Keepusername,order_idandwebsite_type; everyhosting_*andwordpress_*call is keyed onusername+domain.agency-hosting_websites_list-planwithdomain— Agency Plan. Keepdetails.uid(thewebsite_uidof everyagency-hosting_*call),details.type,details.ipv4anddetails.domains.
Neither finds it: the domain is not a website on this account — say so and show where it points (step 2).
2. Look at it from outside
Run these alongside step 1:
curl -sS -o /dev/null -w "%{http_code} ttfb=%{time_starttransfer}s %{redirect_url}\n" https://DOMAIN/
curl -sSI https://DOMAIN/
dig +short NS DOMAIN; dig +short A DOMAIN; dig +short CAA DOMAIN
- Hostinger responses carry
platform: hostingerandpanel: hpanel. Without them, or with DNS pointing elsewhere, traffic is not reaching this hosting — hand over to theconnect-domainskill. - Certificate or TLS errors → SSL.
5xx, a blank page or an error page → By website type.200with old content → cache:hosting_cache_clear-website(also purges the Hostinger CDN; passdirectoryfor WordPress in a subfolder), pluswordpress_litespeed-cache_purge-lite-speedfor WordPress; Agency:agency-hosting_cache_clear-website.- Slow first byte → Slow site. Behind the Hostinger CDN,
x-hcdn-upstream-rtis the origin's own response time in seconds; a small value there means the server is not the bottleneck.
3. By website type
website_type (Shared/Cloud) or details.type (Agency) picks the branch. builder and horizons sites are not managed by these operations — send the user to hPanel.
Node.js (nodejs)
Batch hosting_nodejs_list-builds (per_page: 3), hosting_nodejs_runtime-logs (period: "1h", levels: ["ERROR", "WARN"]) and hosting_nodejs_list-environment-variables (keys only; values always come back masked).
- Latest build
failed: callhosting_nodejs_analyse-failed-buildonce for that build — every call re-runs the analysis and the limit is 5 a minute. When it returns nulls, readhosting_nodejs_build-logs. A wrongly detected framework, output directory or missingentry_fileis the usual cause: comparehosting_nodejs_build-settingswith the project, rebuild with corrected values throughhosting_nodejs_start-build, and store the same values withhosting_nodejs_update-build-settingsso Git pushes build correctly too. - Build
completedbut the app errors: read the runtime logs; entries older thanlast_deployed_atbelong to the previous deploy. A variable the code reads but the key list lacks is fixed with thedeploy-to-hostingskill's environment step.Access denied for user '…'@'::1'means the app connects tolocalhost—DB_HOSTmust be127.0.0.1. - Hung process:
hosting_nodejs_restart-application(restarts without rebuilding).
WordPress (wordpress)
wordpress_installations_list with username and domain gives the install id — the software parameter of every wordpress_* call. Batch wordpress_installations_check-if-are-valid (software_ids: [id], force: true), wordpress_plugins_list-installed and wordpress_maintenance_show-status.
- Invalid install:
validation_errornames the problem. - Broken after a plugin or theme change: deactivate suspects one at a time with
wordpress_plugins_deactivate(queued — allow a few seconds), re-run the step 2 check after each, and reactivate withwordpress_plugins_activateany that were not the cause. - Maintenance page stuck:
wordpress_maintenance_togglewithenabled: false. - "Error establishing a database connection":
hosting_databases_listwithdomain; corrupted tables are fixed byhosting_databases_repair(runs in the background).wp-config.phpcannot be read through the API because files with secrets are refused — for credential checks hand the userhosting_databases_phpmyadmin-link. - Memory or upload-size errors → PHP.
Static or PHP (other)
403or404at/:hosting_files_list-website-and-directorieswithmax_depth: 1.index.htmlorindex.phpmust sit at the document root; finding it one folder down means the archive was packed a level too deep — redeploy it flat with thedeploy-to-hostingskill.- Read
.htaccessor other config withhosting_files_website-content. - PHP errors → PHP.
PHP
hosting_php_get returns every extension and option (around 25 KB), so call it only for PHP problems. hosting_php_update-version switches versions. hosting_php_update-options silently caps values at the plan maximum (max in hosting_php_get), so read the applied value back. Agency: agency-hosting_php_list-options-for-website, then agency-hosting_php_replace-website-options — a full replace, so send every custom option that should stay.
Agency Plan sites
agency-hosting_websites_get shows state and quotas, agency-hosting_websites_list-processes shows failed jobs (SSL setup, backups), and agency-hosting_wordpress_settings shows core version, LiteSpeed, object cache and maintenance mode. When wordpress_installations_list does not return the site, plugins are managed from wp-admin.
SSL
Shared and Cloud, hosting_ssl_status:
not_installedorfailed(last_errorsays why): the domain must resolve to Hostinger, and any CAA record must allowletsencrypt.org, beforehosting_ssl_installcan succeed. Poll the status untilactiveorfailed.installingorwaiting_for_retry: wait — another install request returns 422.- Free
*.hostingersite.comsubdomains use a platform certificate; installing returns 422 by design. - Browser still warns while the certificate is
active: turn on the redirect withhosting_ssl_toggle-https-redirectwhenis_https_redirect_enabledis false, otherwise the page loadshttp://assets (mixed content) that the app has to change.
Agency, agency-hosting_ssl_website-status for each domain: every domain allows three certificate setups per seven days and one request a minute. Check agency-hosting_websites_list-processes before agency-hosting_ssl_install-website or agency-hosting_ssl_reinstall-website, and never retry in a loop.
Slow site
- WordPress:
wordpress_litespeed-cache_show-lite-speed-statusandwordpress_object-cache_show-memcached-status. Turning on Memcached withwordpress_object-cache_toggle-memcachedis the usual quick win. - Other sites: server caching may be off or development mode left on, and neither has a read operation.
hosting_cache_toggle-websitewithenabled: truedoes nothing when caching is already on;hosting_cache_toggle-cachelesswithenabled: falseturns development mode off. - PHP 7.x runs markedly slower than 8.x; propose a supported 8.x version from
hosting_php_getwhen the app allows it. - Agency:
agency-hosting_metrics_list-order-resource-usagewithtime_frame_hours: 24shows CPU, memory and processes per website against the plan quota. - Shared and Cloud have no CPU or memory metrics in the API. When the evidence points at resource limits, send the user to hPanel's resource usage page.
Apply the fix
State the cause, the evidence and the single change proposed, and make it only after the user agrees. Then re-run the step 2 check, polling any queued job first, to show the symptom is gone. When the fix needs something the API cannot do, say so and name the hPanel page.
Not available through the API
- Website backups and restores — hPanel's Backups page.
- CPU, memory and process usage for Shared and Cloud plans.
- PHP error and access logs.