Skip to content

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.

Deletes · 9

19 tools: 9 can delete or cancel things and 10 only read.

Scanned Oct 21, 2026

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/mcp

Findings

Matches of fixed checks, with the text they matched.

2 warn
  • The server marks "spinupwp_purge_page_cache" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched 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.

    What this check looks for
  • The server marks "spinupwp_purge_object_cache" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".

    Matched 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.

    What this check looks for

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".

      Matched 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.

      What this check looks for
    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".

      Matched 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.

      What this check looks for
    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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.