mainwp-dashboard agent skill, and ten /mainwp:* workflow commands.
Credentials come from your environment
The plugin carries no credential values. The server it starts inheritsMAINWP_URL, MAINWP_USER, and MAINWP_APP_PASSWORD from the environment Claude Code runs in, so export them in the shell profile (or launcher) that starts Claude Code. A central ~/.config/mainwp-mcp/settings.json works too; see the Configuration Reference.
The same goes for every optional MAINWP_* setting, such as safe mode or tool filters: set them in the environment, not in a config file entry.
If you already added a mainwp server by hand
Claude Code suppresses a plugin MCP server that duplicates a manually configured one, matching on the command and args. A hand-added mainwp entry that runs the standard npx -y @mainwp/mcp wins silently: the plugin’s server never starts, and the plugin still contributes its commands and skill. A manual entry that runs anything else (a pinned version, a local checkout) is not a duplicate, so both servers start and the plugin’s copy reads whatever MAINWP_* values the environment carries, or none.
To switch to the plugin’s server:
- Move everything in the manual entry’s
envblock (credentials and anyMAINWP_*settings such as safe mode or tool filters) into the environment that launches Claude Code. - Remove the manual entry.
env map by design, so its server reads MAINWP_* only from that environment. Skipping step 1 leaves the server running without credentials or with different settings than before.
The agent skill
Themainwp-dashboard skill loads automatically when a task involves managing sites through MainWP. It teaches the agent how this server behaves: the tool catalog comes from your Dashboard at runtime and varies with version, extensions, and filtering; destructive operations stop for user confirmation; safe mode blocks destructive calls at execution, tool filtering can remove tools on purpose, and the agent reports either rather than working around it.
Workflow commands
Commands that act on a specific site take a site ID or name as an argument and resolve it against the Dashboard before doing anything; they stop if the site cannot be found.
