Skip to main content
Glama

Upload a WordPress plugin or theme

wp_upload_extension
Destructive

Install the builder's own plugin or theme on a live WordPress site from an uploaded archive (the uploadId of an upload made with this serviceId, after its PUT). The archive is built from inside the plugin or theme folder (tar -czf extension.tgz -C .). A plugin needs a PHP file at the root with a Plugin Name: header, a theme a style.css with Theme Name:. A folder of the same slug is replaced. Refusals: invalid-argument, not-a-target, invalid-archive, too-large, not-live, migration-open, deploy-open, busy, failed.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "serviceId": "<serviceId>",
      "uploadId": "<uploadId>",
      "type": "<type>",
      "slug": "<slug>"
    },
    "name": "wp_upload_extension"
  }
}

Input Schema

NameRequiredDescriptionDefault
slugYesthe folder name it installs as, for example my-plugin
typeYes
activateNoswitch it on after installing
uploadIdYesthe uploadId of an upload made with this serviceId, after its PUT
serviceIdYesthe id of a service on this account

Output Schema

NameRequiredDescriptionDefault
okYes
dataNo
errorNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / serviceId / description
      Previous value: -"the service id from list_services"New value: +"the id of a service on this account"
    • changedInput schema / properties / uploadId / description
      Previous value: -"from request_upload called with this serviceId, after the PUT"New value: +"the uploadId of an upload made with this serviceId, after its PUT"
  2. First observed

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive and non-read-only; the description adds real behavioral context beyond them, notably that a folder with the same slug is replaced and the full set of refusal reasons. It doesn't disclose the result of a successful install or whether activation requires separate permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and its prerequisites, with zero filler. The parenthetical build command and the trailing refusal list make it dense, but every clause carries operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an existing output schema and annotations, the description covers the inputs' provenance, archive format, replacement behavior, and failure modes. The main gap is that it never positions the tool relative to its plugin/theme management siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the baseline is 3; the description adds lifecycle meaning for uploadId (must be from an upload tied to the same serviceId, after its PUT), the archive layout requirement, and the structural difference between plugin and theme archives. It does not explain the activate flag beyond what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: installing the builder's own plugin/theme on a live WordPress site from an uploaded archive. Clear, but it never explicitly contrasts with the sibling tools wp_plugin/wp_theme, so the agent must infer why this exists alongside them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete prerequisites — the uploadId must come from an upload made with this serviceId and follow its PUT — which tells the agent the required ordering with request_upload. It still doesn't state when to prefer this over wp_plugin/wp_theme.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources