SpinupWP MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.3.3 · published by io.usefulapi
Read SpinupWP servers, sites and events; purge caches, restart services, run git deploys.
19 tools: 9 can delete or cancel things and 10 only read.
Scanned Oct 21, 2026
- Deletes or cancels9Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things0Claude Code: ask
- Only reads10Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http spinupwp https://spinupwp.usefulapi.io/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "spinupwp_purge_page_cache" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "spinupwp_purge_page_cache" says "purge": a word for removing or ending something.
The server marks "spinupwp_purge_object_cache" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "spinupwp_purge_object_cache" says "purge": a word for removing or ending something.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
19 tools
Deletes or cancels 9Claude Code: deny
spinupwp_correct_file_permissionsWRITE: reset a site's files and folders to the permissions and ownership SpinupWP recommends (usually after a manual upload as the wrong user).No findings
Why it is in this group
- The description's first verb is "write": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: reset a site's files and folders to the permissions and ownership SpinupWP recommends (usually after a manual upload as the wrong user). Can take a while on big sites. Asynchronous: returns an event_id. POST /sites/{id}/file-permissions/correct.
Annotations the server declares
- title: Correct file permissions
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
spinupwp_deploy_site_gitWRITE: pull the latest commit of the site's connected git branch and run its deploy script on the server.No findings
Why it is in this group
- The name "spinupwp_deploy_site_git" says "deploy": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: pull the latest commit of the site's connected git branch and run its deploy script on the server. This changes the live site's files (and may run build/migration commands); it fails if git is not connected. Asynchronous: returns an event_id. POST /sites/{id}/git/deploy.
Annotations the server declares
- title: Run site git deploy
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
spinupwp_purge_object_cacheWRITE: flush the Redis object cache of one site (the site must have object caching).1 finding
Why it is in this group
- The name "spinupwp_purge_object_cache" says "purge": a word for removing or ending something.
- The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.
Findings
- Warn
The server marks "spinupwp_purge_object_cache" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "spinupwp_purge_object_cache" says "purge": a word for removing or ending something.
Description, as the server wrote it WRITE: flush the Redis object cache of one site (the site must have object caching). The cache refills on demand. Asynchronous: returns an event_id. POST /sites/{id}/object-cache/purge.
Annotations the server declares
- title: Purge object cache
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
spinupwp_purge_page_cacheWRITE: purge the nginx page cache of one site.1 finding
Why it is in this group
- The name "spinupwp_purge_page_cache" says "purge": a word for removing or ending something.
- The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.
Findings
- Warn
The server marks "spinupwp_purge_page_cache" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "spinupwp_purge_page_cache" says "purge": a word for removing or ending something.
Description, as the server wrote it WRITE: purge the nginx page cache of one site. Pages are rebuilt on the next visit, so the site may be slower for a moment; nothing is lost. Asynchronous: returns an event_id. POST /sites/{id}/page-cache/purge.
Annotations the server declares
- title: Purge page cache
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
spinupwp_reboot_serverWRITE: reboot a whole server.No findings
Why it is in this group
- The description's first verb is "write": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: reboot a whole server. Every site on it is offline for the duration (typically a minute or two). Use it when spinupwp_get_server shows reboot_required. Asynchronous: returns an event_id. POST /servers/{id}/reboot.
Annotations the server declares
- title: Reboot server
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
spinupwp_restart_mysqlWRITE: restart MySQL (database) on one server.No findings
Why it is in this group
- The name "spinupwp_restart_mysql" says "restart": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: restart MySQL (database) on one server. All sites on the server lose database access for a short time; running queries are interrupted. Asynchronous: returns an event_id. POST /servers/{id}/services/mysql/restart.
Annotations the server declares
- title: Restart mysql
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
spinupwp_restart_nginxWRITE: restart nginx (web server) on one server.No findings
Why it is in this group
- The name "spinupwp_restart_nginx" says "restart": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: restart nginx (web server) on one server. Visitors may see a brief interruption. Asynchronous: returns an event_id. POST /servers/{id}/services/nginx/restart.
Annotations the server declares
- title: Restart nginx
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
spinupwp_restart_phpWRITE: restart PHP-FPM (every PHP version) on one server.No findings
Why it is in this group
- The name "spinupwp_restart_php" says "restart": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: restart PHP-FPM (every PHP version) on one server. Running PHP requests can fail or be cut off while it restarts. Asynchronous: returns an event_id. POST /servers/{id}/services/php/restart.
Annotations the server declares
- title: Restart php
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
spinupwp_restart_redisWRITE: restart Redis (object cache) on one server.No findings
Why it is in this group
- The name "spinupwp_restart_redis" says "restart": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: restart Redis (object cache) on one server. Cached objects are lost and rebuilt on demand. Asynchronous: returns an event_id. POST /servers/{id}/services/redis/restart.
Annotations the server declares
- title: Restart redis
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
Only reads 10Claude Code: allow
spinupwp_get_eventOne event by id, with status and command output.No findings
Why it is in this group
- The name "spinupwp_get_event" says "get": a word for reading.
Description, as the server wrote it One event by id, with status and command output. Use it to see whether a purge, restart or deploy (which reply with an event_id) has finished or failed. GET /events/{id}.
Annotations the server declares
- title: Get event
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
spinupwp_get_serverOne server by id: provider, size, disk usage, database server, connection status, reboot/upgrade-required flags and install notes.No findings
Why it is in this group
- The name "spinupwp_get_server" says "get": a word for reading.
Description, as the server wrote it One server by id: provider, size, disk usage, database server, connection status, reboot/upgrade-required flags and install notes. GET /servers/{id}.
Annotations the server declares
- title: Get server
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
spinupwp_get_siteOne site by id with its full settings: domains, PHP version, page cache, HTTPS, nginx options, database reference, backup schedule and storage, WordPress update counts, git repo/br…No findings
Why it is in this group
- The name "spinupwp_get_site" says "get": a word for reading.
Description, as the server wrote it One site by id with its full settings: domains, PHP version, page cache, HTTPS, nginx options, database reference, backup schedule and storage, WordPress update counts, git repo/branch/deploy script, basic-auth username, cron and SpinupWP subdomain. The git deploy-trigger URL is hidden. GET /sites/{id}.
Annotations the server declares
- title: Get site
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
spinupwp_list_eventsList recent events (the activity log: provisioning, restarts, deploys, cache purges) with who started them, status (queued, creating, updating, deleting, deployed, failed) and time…No findings
Why it is in this group
- The name "spinupwp_list_events" says "list": a word for reading.
Description, as the server wrote it List recent events (the activity log: provisioning, restarts, deploys, cache purges) with who started them, status (queued, creating, updating, deleting, deployed, failed) and timestamps. Long command output is shortened; read one event for its full output. GET /events.
Annotations the server declares
- title: List events
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
spinupwp_list_serversList the servers in your SpinupWP team: name, provider, region, size, IP, Ubuntu version, disk space, connection status and whether a reboot or upgrade is required.No findings
Why it is in this group
- The name "spinupwp_list_servers" says "list": a word for reading.
Description, as the server wrote it List the servers in your SpinupWP team: name, provider, region, size, IP, Ubuntu version, disk space, connection status and whether a reboot or upgrade is required. GET /servers.
Annotations the server declares
- title: List servers
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
spinupwp_list_site_domainsThe additional domains of a site, with their redirect settings (enabled, type, destination).No findings
Why it is in this group
- The name "spinupwp_list_site_domains" says "list": a word for reading.
Description, as the server wrote it The additional domains of a site, with their redirect settings (enabled, type, destination). GET /sites/{id}/domains.
Annotations the server declares
- title: List site domains
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
spinupwp_list_site_path_redirectsThe path redirects configured on a site (from, to, type permanent/redirect).No findings
Why it is in this group
- The name "spinupwp_list_site_path_redirects" says "list": a word for reading.
Description, as the server wrote it The path redirects configured on a site (from, to, type permanent/redirect). GET /sites/{id}/path-redirects.
Annotations the server declares
- title: List site path redirects
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
spinupwp_list_sitesList sites across your servers (or one server): domain, PHP version, WordPress flag, HTTPS, page cache, backups, pending WordPress core/theme/plugin updates, git deploy settings an…No findings
Why it is in this group
- The name "spinupwp_list_sites" says "list": a word for reading.
Description, as the server wrote it List sites across your servers (or one server): domain, PHP version, WordPress flag, HTTPS, page cache, backups, pending WordPress core/theme/plugin updates, git deploy settings and status. Deploy-trigger URLs are hidden. GET /sites.
Annotations the server declares
- title: List sites
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
spinupwp_list_storage_providersThe backup storage providers connected to the team (id, service, name).No findings
Why it is in this group
- The name "spinupwp_list_storage_providers" says "list": a word for reading.
Description, as the server wrote it The backup storage providers connected to the team (id, service, name). GET /storage-providers.
Annotations the server declares
- title: List storage providers
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
spinupwp_list_team_ssh_keysThe team's saved SSH public keys (id, name, fingerprint, public key).No findings
Why it is in this group
- The name "spinupwp_list_team_ssh_keys" says "list": a word for reading.
Description, as the server wrote it The team's saved SSH public keys (id, name, fingerprint, public key). Public keys only; read-only. GET /ssh-keys.
Annotations the server declares
- title: List team SSH keys
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.3.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http spinupwp https://spinupwp.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__spinupwp__spinupwp_list_servers",
"mcp__spinupwp__spinupwp_get_server",
"mcp__spinupwp__spinupwp_list_sites",
"mcp__spinupwp__spinupwp_get_site",
"mcp__spinupwp__spinupwp_list_site_domains",
"mcp__spinupwp__spinupwp_list_site_path_redirects",
"mcp__spinupwp__spinupwp_list_events",
"mcp__spinupwp__spinupwp_get_event",
"mcp__spinupwp__spinupwp_list_storage_providers",
"mcp__spinupwp__spinupwp_list_team_ssh_keys"
],
"ask": [],
"deny": [
"mcp__spinupwp__spinupwp_purge_page_cache",
"mcp__spinupwp__spinupwp_purge_object_cache",
"mcp__spinupwp__spinupwp_correct_file_permissions",
"mcp__spinupwp__spinupwp_deploy_site_git",
"mcp__spinupwp__spinupwp_restart_nginx",
"mcp__spinupwp__spinupwp_restart_php",
"mcp__spinupwp__spinupwp_restart_mysql",
"mcp__spinupwp__spinupwp_restart_redis",
"mcp__spinupwp__spinupwp_reboot_server"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as spinupwp. Review it before you use it.