Connection
Unable to connect to MainWP Dashboard
Unable to connect to MainWP Dashboard
SSL certificate problem
SSL certificate problem
UNABLE_TO_VERIFY_LEAF_SIGNATURE or similar. For production, fix the certificate: install the full chain, match the domain, check expiration. For local development with self-signed certificates only, set "skipSslVerify": true.dashboardUrl uses HTTP which transmits credentials in plain text
dashboardUrl uses HTTP which transmits credentials in plain text
"allowHttp": true.ECONNREFUSED or ETIMEDOUT
ECONNREFUSED or ETIMEDOUT
Authentication
403 Forbidden
403 Forbidden
Bearer token not working
Bearer token not working
MAINWP_TOKEN bearer authentication fails against the WordPress Abilities API, which authenticates through native WordPress. Configure MAINWP_USER and MAINWP_APP_PASSWORD with an Application Password instead.Tool errors
Tool not found
Tool not found
list_sites_v1, not list-sites-v1). If the name is right, the tool may be hidden by your allowedTools/blockedTools configuration, or the ability may not exist on your Dashboard version.SAFE_MODE_BLOCKED
SAFE_MODE_BLOCKED
"safeMode": false.Confirmation required
Confirmation required
"requireUserConfirmation": false.Confirmation flow
PREVIEW_REQUIRED
PREVIEW_REQUIRED
CONFIRMATION_REQUIRED with preview: null
CONFIRMATION_REQUIRED with preview: null
PREVIEW_EXPIRED
PREVIEW_EXPIRED
CONFLICTING_PARAMETERS
CONFLICTING_PARAMETERS
user_confirmed: true and dry_run: true together. They mean opposite things (execute vs. preview only); it should send one or the other.CONFIRMATION_UNSUPPORTED: Destructive operation cannot be confirmed
CONFIRMATION_UNSUPPORTED: Destructive operation cannot be confirmed
confirm parameter, so the confirmation flow cannot run and the server refuses to execute. The built-in deletion tools all declare confirm and never hit this. If a third-party ability triggers it, fix its annotations on the Dashboard side, or manage it explicitly with allowedTools/blockedTools.Resource limits
RESOURCE_EXHAUSTED: Session data limit exceeded
RESOURCE_EXHAUSTED: Session data limit exceeded
maxSessionData. Restart the MCP server to reset the counter, raise the limit, or use narrower queries and pagination.Response too large
Response too large
maxResponseSize. Raise the limit or reduce the response with filters (status filters, lower per_page).Rate limit exceeded
Rate limit exceeded
rateLimit. Setting it to 0 disables limiting and is not recommended in production.Configuration
Configuration file not found
Configuration file not found
./settings.json (its working directory), then ~/.config/mainwp-mcp/settings.json. Confirm the file is where the server runs from and is valid JSON: cat settings.json | jq .Environment variables not working
Environment variables not working
export MAINWP_URL="https://..."), names are case-sensitive, and values should not carry nested quotes. Remember that per-tool env blocks in your AI tool’s config override settings.json values.Your AI tool doesn't show the MainWP tools
Your AI tool doesn't show the MainWP tools
~/.claude.json; for VS Code, you need version 1.101+, an open workspace (not a lone file), and Agent Mode enabled. Config locations for every client are on Connect Your AI Client.If you only see mainwp_get_setup_status and mainwp_configure, the server started without a Dashboard URL or credentials and is in setup mode. See First-run setup.The assistant says setup will not replace my credentials
The assistant says setup will not replace my credentials
mainwp_configure refused with a message saying the server already has credentials loaded.This is deliberate, not a bug. Chat-based setup connects a server that has no connection yet; it never overwrites one you configured yourself. The full reasoning is on the Configuration Reference, but the short version is that an assistant acts on text it is given, and text can carry instructions from places you did not intend, so a server that can be repointed from a conversation is a server that can be repointed at someone else’s Dashboard.What to do depends on why the connection is failing.The Dashboard was down, restarting, or briefly unreachable. Ask your assistant to check the connection again, which calls mainwp_get_setup_status. That retries with the credentials the server already has and connects as soon as the Dashboard answers. Nothing else is needed.The stored password is wrong, most often because you rotated it. Retrying will not help here, because it reuses the same password the Dashboard is already refusing. Update it yourself:- In WordPress, go to your profile page and create an Application Password, or copy the new one you already created.
- Put it wherever this server reads its credentials from. That is either the
envblock of the server’s entry in your MCP client config, or~/.config/mainwp-mcp/settings.json. If both exist, the environment wins. - Restart your MCP client so the server picks it up.
Debugging
For hands-on debugging, run the server directly and watch stderr:npm run inspect opens the MCP Inspector, a web interface for listing tools, executing them with custom arguments, and viewing raw request/response data.
Still stuck? Open an issue on GitHub with the stderr output and your configuration (with credentials removed).