Skill: jordymeow/wordpress-mcp (version 3.3.4)

--- name: wordpress-mcp description: Manage WordPress sites via MCP (Model Context Protocol) through AI Engine. Use for creating/editing posts, SEO analysis, analytics, media management, taxonomy operations, social media scheduling, multilingual content (Polylang), and any WordPress admin task. Requires AI Engine plugin (free) with MCP Server enabled. Also use when asked about WordPress site management, content workflows, or WP-related tasks. --- # WordPress MCP Manage WordPress sites through AI Engine's MCP Server. AI Engine is a free WordPress plugin that exposes a comprehensive MCP interface. ## Setup The user needs: 1. **AI Engine** plugin installed (free: https://wordpress.org/plugins/ai-engine/) 2. MCP Server enabled in AI Engine → Settings → MCP 3. A **Bearer Token** set in MCP settings Connection details should be stored in the user's `TOOLS.md`: ``` ## WordPress MCP - **URL:** https://example.com/wp-json/mcp/v1/http - **Bearer Token:** <token from AI Engine MCP settings> ``` ## How to Call MCP Tools All calls use JSON-RPC 2.0 over HTTP POST: ```bash curl -s -X POST <MCP_URL> \ -H "Authorization: Bearer <TOKEN>" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"<tool_name>","arguments":{...}}}' ``` ### Discovery List available tools (varies by enabled features): ```json {"jsonrpc":"2.0","id":1,"method":"tools/list"} ``` Always start with `tools/list` to discover what's enabled on this site. ### Connectivity Check ```json {"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"mcp_ping","arguments":{}}} ``` ## MCP Features (Modular) Tools are grouped into features that the site admin enables in AI Engine → Settings → MCP Features. **Only WordPress core is enabled by default.** Always use `tools/list` to discover what's available. | Feature | Default | Description | |---------|---------|-------------| | **WordPress** | ✅ On | Posts, pages, comments, users, media, taxonomies, settings | | **Plugins** | Off | Install, activate, update, and modify plugins | | **Themes** | Off | Install, activate, switch, and customize themes | | **Database** | Off | Execute SQL queries on the WordPress database | | **Polylang** | Off | Multilingual content (requires Polylang plugin) | | **WooCommerce** | Off | Products, orders, customers (requires WooCommerce) | | **SEO Engine** | Off | SEO analysis, analytics (requires SEO Engine plugin) | | **Social Engine** | Off | Social media scheduling (requires Social Engine plugin) | | **Dynamic REST** | Off | Raw access to WordPress REST API | See `references/features.md` for tool details per feature. ## Common Workflows ### Content Audit (WordPress + SEO Engine) 1. `mwseo_get_seo_statistics` — Overall site health 2. `mwseo_get_posts_needing_seo` — Posts with SEO problems 3. Loop: `mwseo_do_seo_scan` per post → fix with `mwseo_set_seo_title`, `mwseo_set_seo_excerpt` ### Publish a Post (WordPress core) 1. `wp_create_post` with `post_title`, `post_content`, `post_status: "draft"` 2. Optionally set SEO metadata if SEO Engine is enabled 3. `wp_update_post` with `post_status: "publish"` when ready ### Translation Workflow (Polylang) 1. `pll_translation_status` — See coverage gaps 2. [REDACTED_SECRET] with target language 3. `pll_create_translation` — Create translated post linked to original ### Multi-Site Management Store multiple sites in `TOOLS.md` and select by name: ``` ### My Blog - **URL:** https://blog.example.com/wp-json/mcp/v1/http - **Token:** abc123 ### My Shop - **URL:** https://shop.example.com/wp-json/mcp/v1/http - **Token:** xyz789 ``` ## Tips - Use `wp_get_post_snapshot` instead of multiple calls — gets post + meta + terms in one request - Use `wp_alter_post` for search-replace edits instead of re-uploading entire content - `wp_get_posts` returns no full content by default — use `wp_get_post` for content - Analytics date params use `start_date` / `end_date` (not camelCase) - Always run `tools/list` first — available tools depend on which features the admin enabled

path: references/dev-tools.md
content: # Developer Tools Reference

Theme and plugin file management, and direct database queries.

## Theme Management

### wp_list_themes
List installed themes with status.

### wp_switch_theme
- `stylesheet` (string, required): Theme directory name

### wp_create_theme
Create a new theme from scratch.
- `name` (string, required)
- `template` (string): Parent theme for child themes

### wp_copy_theme
- `source` (string, required): Source theme slug
- `name` (string, required): New theme name

### wp_rename_theme
- `old_name` (string, required)
- `new_name` (string, required)

### wp_delete_theme
- `stylesheet` (string, required)

### wp_theme_mkdir
Create a directory in a theme.
- `theme` (string, required)
- `path` (string, required)

### wp_theme_list_dir
List files in a theme directory.
- `theme` (string, required)
- `path` (string): Subdirectory (default: root)

### wp_theme_get_file
Read a theme file's contents.
- `theme` (string, required)
- `path` (string, required)

### wp_theme_put_file
Write/create a file in a theme.
- `theme` (string, required)
- `path` (string, required)
- `content` (string, required)

### wp_theme_alter_file
Search-replace in a theme file.
- `theme` (string, required)
- `path` (string, required)
- `search` (string, required)
- `replace` (string, required)

### wp_theme_delete_path
Delete a file/directory in a theme.
- `theme` (string, required)
- `path` (string, required)

### wp_theme_set_screenshot
Set theme screenshot image.
- `theme` (string, required)
- `url` (string, required): Image URL

## Plugin Management

### wp_list_plugins_detailed
Detailed plugin list with file paths, versions, active status.

### wp_activate_plugin
- `plugin` (string, required): Plugin file path (e.g. "ai-engine/ai-engine.php")

### wp_deactivate_plugin
- `plugin` (string, required)

### wp_create_plugin
Create a new plugin.
- `name` (string, required)
- `slug` (string)

### wp_copy_plugin
- `source` (string, required)
- `name` (string, required)

### wp_rename_plugin
- `old_name` (string, required)
- `new_name` (string, required)

### wp_delete_plugin
- `plugin` (string, required)

### wp_plugin_mkdir
- `plugin` (string, required): Plugin slug
- `path` (string, required)

### wp_plugin_list_dir
- `plugin` (string, required)
- `path` (string)

### wp_plugin_get_file
- `plugin` (string, required)
- `path` (string, required)

### wp_plugin_put_file
- `plugin` (string, required)
- `path` (string, required)
- `content` (string, required)

### wp_plugin_alter_file
- `plugin` (string, required)
- `path` (string, required)
- `search` (string, required)
- `replace` (string, required)

### wp_plugin_delete_path
- `plugin` (string, required)
- `path` (string, required)

## Database

### wp_db_query
Run a direct SQL query. **Use with extreme caution.**
- `query` (string, required): SQL query
- Returns results for SELECT queries, affected rows for UPDATE/INSERT/DELETE.

⚠️ **Safety**: Only use for read queries unless explicitly asked. Never DROP tables or modify core WP tables without confirmation.


path: references/woocommerce-tools.md
content: # WooCommerce Tools Reference

Requires **WooCommerce** plugin. Available when AI Engine detects WooCommerce.

## Products

### wc_list_products
List products with filters.
- `status` (string): "publish", "draft", "any"
- `category` (string): Category slug
- `search` (string)
- `per_page` (int)
- `orderby` (string): "date", "title", "price"

### wc_get_product
- `id` (int, required)

### wc_create_product
- `name` (string, required)
- `type` (string): "simple", "variable", "grouped"
- `regular_price` (string)
- `sale_price` (string)
- `description` (string)
- `short_description` (string)
- `status` (string): "draft", "publish"
- `categories` (array): `[{"id": 1}]`
- `images` (array): `[{"src": "url"}]`
- `sku` (string)
- `manage_stock` (bool)
- `stock_quantity` (int)

### wc_update_product
- `id` (int, required)
- Plus any fields from create

### wc_delete_product
- `id` (int, required)
- `force` (bool)

### wc_alter_product
Search-and-replace in product description.
- `id` (int, required)
- `field` (string)
- `search` (string, required)
- `replace` (string, required)

## Orders

### wc_list_orders
- `status` (string): "processing", "completed", "on-hold", etc.
- `per_page` (int)
- `after` / `before` (string): ISO date filters

### wc_get_order
- `id` (int, required)

### wc_update_order_status
- `id` (int, required)
- `status` (string, required): "processing", "completed", "cancelled"

### wc_add_order_note
- `id` (int, required)
- `note` (string, required)
- `customer_note` (bool): Visible to customer?

### wc_create_refund
- `order_id` (int, required)
- `amount` (string)
- `reason` (string)

### wc_get_orders_by_customer
- `customer_id` (int, required)

## Stock

### wc_update_stock
- `product_id` (int, required)
- `stock_quantity` (int, required)

### wc_get_low_stock_products
- `threshold` (int): Stock level threshold

### wc_get_stock_report
Overview of stock status across products.

### wc_bulk_update_stock
- `updates` (array, required): `[{"product_id": 1, "stock_quantity": 10}]`

## Reports

### wc_get_sales_report
- `period` (string): "week", "month", "year"
- `date_min` / `date_max` (string)

### wc_get_top_sellers
- `period` (string)

### wc_get_revenue_stats
Revenue overview and trends.

## Customers

### wc_list_customers
- `per_page` (int)
- `search` (string)
- `role` (string)

### wc_get_customer
- `id` (int, required)

### wc_update_customer
- `id` (int, required)
- `fields` (object)

## Reviews

### wc_list_reviews
- `product_id` (int): Filter by product
- `status` (string): "approved", "hold"

### wc_approve_review
- `id` (int, required)

### wc_delete_review
- `id` (int, required)
- `force` (bool)


path: references/core-tools.md
content: # Core WordPress Tools Reference

## Posts & Pages

### wp_get_posts
List posts. Returns: ID, title, status, excerpt, link (no full content).
- `post_type` (string): "post", "page", etc. Default: "post"
- `post_status` (string): "publish", "draft", "any"
- `posts_per_page` (int): Number of results. Default: 10
- `orderby` (string): "date", "title", "modified"
- `order` (string): "DESC" or "ASC"
- `category` (string): Category slug filter
- `tag` (string): Tag slug filter
- `search` (string): Search keyword

### wp_get_post
Get a single post by ID. Returns full content.
- `id` (int, required): Post ID

### wp_get_post_snapshot
Get complete post data in ONE call: all fields, all meta, all terms/taxonomies.
- `id` (int, required): Post ID
- Best for getting complete post context efficiently.

### wp_create_post
Create a post or page.
- `post_title` (string, required)
- `post_content` (string): Markdown accepted
- `post_status` (string): "draft" (default), "publish", "private"
- `post_type` (string): "post", "page"
- `post_excerpt` (string)
- `post_author` (int): User ID
- `meta` (object): Custom fields `{"key": "value"}`
- `terms` (object): Taxonomies `{"category": [1,2], "post_tag": [3]}`

### wp_update_post
Update post fields and/or meta.
- `id` (int, required): Post ID
- `fields` (object): Any post fields (`post_title`, `post_content`, `post_status`, etc.)
- `meta` (object): Custom fields to update

### wp_delete_post
Delete or trash a post.
- `id` (int, required)
- `force` (bool): Skip trash, permanent delete

### wp_alter_post
Search-and-replace inside a post field without re-uploading entire content.
- `id` (int, required)
- `field` (string): Field to alter (default: "post_content")
- `search` (string, required): Text to find
- `replace` (string, required): Replacement text

### wp_count_posts
Count posts by status.
- `post_type` (string): Default "post"

## Media

### wp_get_media
List media items.
- `posts_per_page` (int)
- `mime_type` (string): Filter e.g. "image/jpeg"
- `search` (string)

### wp_upload_media
Upload media from URL.
- `url` (string, required): Image/file URL
- `title` (string)
- `alt_text` (string)
- `caption` (string)

### wp_upload_request
Upload a local file via temporary upload endpoint.
- Returns an upload URL and instructions.

### wp_update_media
Update attachment metadata.
- `id` (int, required)
- `fields` (object): `alt_text`, `title`, `caption`, `description`

### wp_delete_media
Delete an attachment.
- `id` (int, required)
- `force` (bool): Permanent delete

### wp_set_featured_image
Set or remove featured image.
- `post_id` (int, required)
- `media_id` (int): Set to 0 to remove

## Post Meta

### wp_get_post_meta
- `id` (int, required): Post ID
- `key` (string): Specific meta key, or omit for all

### wp_update_post_meta
- `id` (int, required)
- `meta` (object): `{"key": "value"}` — update multiple fields at once

### wp_delete_post_meta
- `id` (int, required)
- `key` (string, required)
- `value` (string): Specific value to remove (omit to remove all)

## Taxonomies & Terms

### wp_get_taxonomies
- `post_type` (string): List taxonomies for a post type

### wp_get_terms
- `taxonomy` (string, required): e.g. "category", "post_tag"
- `search` (string)
- `hide_empty` (bool)

### wp_create_term
- `taxonomy` (string, required)
- `name` (string, required)
- `slug` (string)
- `parent` (int)

### wp_get_post_terms
- `id` (int, required): Post ID
- `taxonomy` (string, required)

### wp_add_post_terms
- `id` (int, required)
- `taxonomy` (string, required)
- `terms` (array): Term IDs
- `append` (bool): true = add to existing, false = replace

## Users

### wp_get_users
- `role` (string): Filter by role
- `number` (int): Limit

### wp_create_user
- `user_login` (string, required)
- `user_email` (string, required)
- `user_pass` (string): Random if omitted
- `role` (string)

### wp_update_user
- `id` (int, required)
- `fields` (object): `user_email`, `display_name`, etc.

## Options

### wp_get_option
- `key` (string, required)

### wp_update_option
- `key` (string, required)
- `value` (mixed, required)

## Plugins

### wp_list_plugins
No parameters. Returns: `[{Name, Version}]`


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: suspicious | SkillSpector: suspicious (CRITICAL)