Woodpresser
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| WOODPRESSER_SITE | No | The site name used to select which site configuration to use when multiple sites live side by side. | |
| WOODPRESSER_USER | Yes | The WordPress username. One of the three required credentials (site URL, username, Application Password). | |
| WOODPRESSER_MODES | No | Comma-separated list of modes to enable: core, php, elementor. Tools from a mode you did not enable are not registered. | |
| WOODPRESSER_CONFIG | No | Path to the configuration file (overrides the default ~/.woodpresser/config.json). | |
| WOODPRESSER_SITE_URL | Yes | The site URL of the WordPress site. One of the three required credentials (site URL, username, Application Password). | |
| WOODPRESSER_BRIDGE_FILE | No | Path to the bridge plugin file. | |
| WOODPRESSER_APP_PASSWORD | Yes | A WordPress Application Password used for Basic auth. One of the three required credentials (site URL, username, Application Password). | |
| WOODPRESSER_BRIDGE_TOKEN | No | The token used to authenticate against the companion bridge plugin (compared with hash_equals on the server). Can also be pinned in wp-config.php via WOODPRESSER_TOKEN. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| wp_site_infoA | Identify the connected site: name, description, URL, REST namespaces, the authenticated user and their capabilities, plus bridge/Elementor/plugin versions. Start here when you inherit a project. |
| wp_health_checkA | Diagnose connectivity in layers: REST reachable, credentials accepted, bridge claimed, Elementor present, permalinks, and debug log size. Use before blaming the code. |
| wp_content_listA | List content with filters. Returns compact rows by default (no full content). Use wp_content_get for the body. |
| wp_content_getB | Fetch a single item by ID or slug, including raw and rendered content plus open Graph-ish fields. |
| wp_content_createC | Create content. Returns the new ID and link. Supports meta, taxonomy terms and page templates. |
| wp_content_updateB | Patch an existing item. Only supplied fields change. For a full Elementor rewrite use wp_el_set instead. |
| wp_content_deleteA | Moves to trash by default. force=true bypasses trash forever and requires confirm:"delete". |
| wp_media_listC | List attachments with optional MIME filter and search. |
| wp_media_uploadB | Upload a local file to the media library. Provide path, or url to sideload a remote file. |
| wp_terms_listC | List categories, tags or any public taxonomy. |
| wp_term_createC | Create a category or tag. |
| wp_users_listC | List users with roles. Requires administrator credentials. |
| wp_plugins_listA | List installed plugins with status and available updates. |
| wp_plugin_actionA | Activate, deactivate, install (from wordpress.org by slug) or delete a plugin. Deletion requires confirm:"delete". Activating an untrusted plugin is a security decision. |
| wp_themes_listA | List installed themes and which one is active. |
| wp_theme_activateA | Switch the active theme. Changing themes on a live site is high-impact; prefer a staging copy. |
| wp_settings_getA | Read the REST-exposed site settings (title, description, timezone, permalinks, front page). |
| wp_settings_setB | Update REST-exposed settings. Arbitrary options need wp_php_run or wp_db_query. |
| wp_searchB | Search across posts, pages and media in one call. Use this to locate content before editing it. |
| wp_bridge_statusB | Report the bridge plugin version, environment (WP/PHP/theme/plugins) and the safety flags that gate PHP, shell, DB writes and file writes. |
| wp_bridge_flagsA | Toggle server-side capabilities: allow_php, allow_shell, allow_db_write, allow_file_write, allow_plugins. Start read-only and widen only when the task demands it. |
| wp_php_runA | Execute PHP inside the live WordPress runtime with WordPress loaded ($wpdb, WP_Query, all plugins available). Output buffering and return values are captured; fatal errors are reported. Use it to inspect real state, not to guess. Requires confirm:"run". |
| wp_db_queryA | Run a single SQL statement against the WordPress database. SELECT/SHOW/EXPLAIN are allowed read-only; writes need allow_db_write. Supports %s/%d placeholders through |
| wp_fsA | list, read, stat, write, append, mkdir or delete files under wp-content. Writes are jailed, extension-limited, and the previous file is backed up under wp-content/woodpresser-backups. |
| wp_snippet_listA | List PHP snippets stored by the bridge. Snippets are versioned PHP blocks with a scope (init, admin_init, wp_head, wp_footer, manual) and an active flag — the safe way to add behaviour without editing theme files. |
| wp_snippet_saveA | Save a snippet. Omit id to create; pass id to update. Keep active=false, test with wp_snippet_run, then activate. |
| wp_snippet_runA | Run one stored snippet immediately and return its output, regardless of active state. Ideal dry-run before activation. |
| wp_snippet_deleteA | Permanently remove a stored snippet. Requires confirm:"delete". |
| wp_post_metaA | Direct access to any post meta key, including keys hidden from REST (SEO plugins, page builders, custom fields). Actions: get (all or one key), set, delete. |
| wp_audit_logA | Recent mutating calls recorded by the bridge, newest first. Check this when you need to know what an agent already changed. |
| wp_el_statusA | Report whether Elementor (and Pro) is active, its version, and whether flexbox containers are enabled. |
| wp_el_widgetsA | Enumerate every registered widget name (widgetType) with its title and category. Call this before building a page so you only reference widgets that actually exist on this site. |
| wp_el_getB | Read the Elementor tree for a page. format=summary gives a compact outline (default); raw returns the full JSON tree for precise edits. |
| wp_el_buildA | Convert a compact section/column/widget spec into Elementor data and (unless dry_run) write it. If post_id is omitted, a new page is created. Always inspect the dry_run output first. Widget settings use Elementor setting keys (e.g. heading: {title, header_size}; button: {text, link:{url}}). |
| wp_el_setA | Replace the whole Elementor tree for a page. Use wp_el_build for authored pages and this only when you already have valid Elementor JSON. Snapshots the previous tree automatically. Requires confirm:"overwrite". |
| wp_el_patchA | Update settings on specific nodes without rewriting the page. Paths come from wp_el_get (format=raw or summary), e.g. "0/1/2". Settings are deep-merged into the node. |
| wp_el_snapshotsA | List the five most recent automatic snapshots for a page (metadata only). |
| wp_el_restoreA | Roll a page back to a snapshot index. The current tree is snapshotted first, so this is reversible. |
| wp_el_clear_cacheA | Regenerate Elementor CSS and flush the object cache. Run after bulk edits if the front end looks stale. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 39 tools
Most tools target clearly distinct resources and actions, especially the content, media, taxonomy, plugin, and Elementor groups. However, some clusters overlap enough to cause hesitation: wp_health_check, wp_bridge_status, and wp_site_info all diagnose the environment; wp_content_update and wp_el_set both rewrite page data; wp_php_run and wp_snippet_run both execute PHP. Descriptions help, but the boundaries are not always immediately obvious.
The set uses a strong, predictable wp_<domain>_<action> snake_case pattern throughout. There are minor inconsistencies such as singular/plural mismatches (wp_plugins_list vs wp_plugin_action, wp_themes_list vs wp_theme_activate) and abbreviations (wp_el, wp_fs) that slightly break the otherwise clean convention.
39 tools is well above the typical appropriate range and creates a large surface for an agent to navigate. While the WordPress + Elementor domain is broad, many operations could be consolidated into action-based tools or grouped more tightly, reducing cognitive load without losing capability.
The surface is very comprehensive: content CRUD, media, terms, plugins, themes, settings, diagnostics, snippets, audit logging, PHP/SQL/FS escape hatches, and substantial Elementor lifecycle support. Gaps remain for common WordPress operations such as comment management, user create/update/delete, menu management, term update/delete, and media edit/delete, though low-level tools can work around them.