@mangerik/wordpress-mcp 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/docs/TOOLS.md ADDED
@@ -0,0 +1,1458 @@
1
+ # Tool Reference
2
+
3
+ _This file is auto-generated by `scripts/gen-tools-doc.mjs`. Last regenerated: 96 tools._
4
+
5
+ Each tool ships a JSON Schema; clients (Claude Desktop, Kiro, etc.) read it automatically. This document is a human-readable summary.
6
+
7
+ ## Table of contents
8
+
9
+ - [🏠 Site & discovery](#site-discovery) (6)
10
+ - [📝 Posts](#posts) (6)
11
+ - [📄 Pages](#pages) (5)
12
+ - [🖼️ Media](#media) (6)
13
+ - [💬 Comments](#comments) (5)
14
+ - [🏷️ Taxonomies (categories & tags)](#taxonomies-categories-tags) (10)
15
+ - [👤 Users](#users) (6)
16
+ - [🧰 Generic CPT / plugin namespaces](#generic-cpt-plugin-namespaces) (5)
17
+ - [🛒 WooCommerce](#woocommerce) (19)
18
+ - [📈 SEO (Yoast & Rank Math)](#seo-yoast-rank-math) (6)
19
+ - [🧱 Block themes (WP 5.9+)](#block-themes-wp-59) (12)
20
+ - [🌐 Multisite](#multisite) (7)
21
+ - [📦 Batch operations](#batch-operations) (2)
22
+ - [🔐 JWT diagnostics](#jwt-diagnostics) (1)
23
+
24
+ ## 🏠 Site & discovery
25
+
26
+ ### `wp_site_info`
27
+ **Site info**
28
+
29
+ Get the REST API root index: site name, description, namespaces, and discovered routes. Use this to detect WooCommerce, Yoast, or other plugins exposing REST endpoints.
30
+
31
+ _Hints: read-only, idempotent, network call_
32
+
33
+ _(no arguments)_
34
+
35
+ ### `wp_get_settings`
36
+ **Get site settings**
37
+
38
+ Get WordPress site settings (requires manage_options).
39
+
40
+ _Hints: read-only, idempotent, network call_
41
+
42
+ _(no arguments)_
43
+
44
+ ### `wp_update_settings`
45
+ **Update site settings**
46
+
47
+ Update site settings such as title, description, timezone, or default category. Use with caution.
48
+
49
+ _Hints: network call_
50
+
51
+ | Argument | Type | Required | Description |
52
+ |---|---|---|---|
53
+ | `title` | string | | |
54
+ | `description` | string | | |
55
+ | `url` | string (uri) | | |
56
+ | `email` | string (email) | | |
57
+ | `timezone` | string | | |
58
+ | `date_format` | string | | |
59
+ | `time_format` | string | | |
60
+ | `start_of_week` | number | | |
61
+ | `language` | string | | |
62
+ | `use_smilies` | boolean | | |
63
+ | `default_category` | number | | |
64
+ | `default_post_format` | string | | |
65
+ | `posts_per_page` | number | | |
66
+ | `default_ping_status` | `"open"` \| `"closed"` | | |
67
+ | `default_comment_status` | `"open"` \| `"closed"` | | |
68
+
69
+ ### `wp_get_post_types`
70
+ **List post types**
71
+
72
+ List registered post types (post, page, attachment, plus any custom post types).
73
+
74
+ _Hints: read-only, idempotent, network call_
75
+
76
+ _(no arguments)_
77
+
78
+ ### `wp_get_taxonomies`
79
+ **List taxonomies**
80
+
81
+ List registered taxonomies (category, post_tag, plus custom taxonomies).
82
+
83
+ _Hints: read-only, idempotent, network call_
84
+
85
+ _(no arguments)_
86
+
87
+ ### `wp_search`
88
+ **Search content**
89
+
90
+ Universal search across posts, pages, and other public content via /wp/v2/search.
91
+
92
+ _Hints: read-only, idempotent, network call_
93
+
94
+ | Argument | Type | Required | Description |
95
+ |---|---|---|---|
96
+ | `query` | string | ✓ | |
97
+ | `type` | `"post"` \| `"term"` \| `"post-format"` | | |
98
+ | `subtype` | string | | Post type slug or taxonomy slug |
99
+ | `page` | number | | |
100
+ | `per_page` | number | | |
101
+
102
+ ## 📝 Posts
103
+
104
+ ### `wp_get_posts`
105
+ **List posts**
106
+
107
+ List WordPress posts with filters. Use `_fields` to keep responses small (e.g. 'id,title,slug').
108
+
109
+ _Hints: read-only, idempotent, network call_
110
+
111
+ | Argument | Type | Required | Description |
112
+ |---|---|---|---|
113
+ | `page` | number | | |
114
+ | `per_page` | number | | |
115
+ | `search` | string | | |
116
+ | `status` | `"publish"` \| `"draft"` \| `"private"` \| `"pending"` \| `"future"` \| `"any"` | | |
117
+ | `categories` | number[] | | |
118
+ | `tags` | number[] | | |
119
+ | `author` | number | | |
120
+ | `orderby` | `"date"` \| `"id"` \| `"title"` \| `"modified"` \| `"relevance"` \| `"rand"` \| `"slug"` | | |
121
+ | `order` | `"asc"` \| `"desc"` | | |
122
+ | `after` | string | | ISO8601 lower bound (inclusive) |
123
+ | `before` | string | | ISO8601 upper bound (inclusive) |
124
+ | `slug` | string[] | | |
125
+ | `_fields` | string | | |
126
+ | `_embed` | boolean | | |
127
+ | `context` | `"view"` \| `"edit"` | | |
128
+
129
+ ### `wp_get_post`
130
+ **Get a post**
131
+
132
+ Get a single WordPress post by ID.
133
+
134
+ _Hints: read-only, idempotent, network call_
135
+
136
+ | Argument | Type | Required | Description |
137
+ |---|---|---|---|
138
+ | `id` | number | ✓ | |
139
+ | `context` | `"view"` \| `"edit"` | | |
140
+ | `_fields` | string | | |
141
+ | `_embed` | boolean | | |
142
+
143
+ ### `wp_create_post`
144
+ **Create a post**
145
+
146
+ Create a new WordPress post. Defaults to status=draft for safety. Set `meta` to write custom fields (must be registered server-side).
147
+
148
+ _Hints: network call_
149
+
150
+ | Argument | Type | Required | Description |
151
+ |---|---|---|---|
152
+ | `title` | string | ✓ | |
153
+ | `content` | string | ✓ | |
154
+ | `excerpt` | string | | |
155
+ | `status` | `"publish"` \| `"draft"` \| `"private"` \| `"pending"` \| `"future"` | | |
156
+ | `slug` | string | | |
157
+ | `categories` | number[] | | |
158
+ | `tags` | number[] | | |
159
+ | `featured_media` | number | | |
160
+ | `date` | string | | |
161
+ | `comment_status` | `"open"` \| `"closed"` | | |
162
+ | `ping_status` | `"open"` \| `"closed"` | | |
163
+ | `format` | `"standard"` \| `"aside"` \| `"chat"` \| `"gallery"` \| `"link"` \| `"image"` \| `"quote"` \| `"status"` \| `"video"` \| `"audio"` | | |
164
+ | `sticky` | boolean | | |
165
+ | `author` | number | | |
166
+ | `meta` | object | | |
167
+
168
+ ### `wp_update_post`
169
+ **Update a post**
170
+
171
+ Update an existing WordPress post.
172
+
173
+ _Hints: network call_
174
+
175
+ | Argument | Type | Required | Description |
176
+ |---|---|---|---|
177
+ | `id` | number | ✓ | |
178
+ | `title` | string | | |
179
+ | `content` | string | | |
180
+ | `excerpt` | string | | |
181
+ | `status` | `"publish"` \| `"draft"` \| `"private"` \| `"pending"` \| `"future"` | | |
182
+ | `slug` | string | | |
183
+ | `categories` | number[] | | |
184
+ | `tags` | number[] | | |
185
+ | `featured_media` | number | | |
186
+ | `date` | string | | |
187
+ | `comment_status` | `"open"` \| `"closed"` | | |
188
+ | `ping_status` | `"open"` \| `"closed"` | | |
189
+ | `sticky` | boolean | | |
190
+ | `author` | number | | |
191
+ | `meta` | object | | |
192
+
193
+ ### `wp_delete_post`
194
+ **Delete a post**
195
+
196
+ Move a post to trash, or permanently delete with `force=true`. Force-delete is irreversible.
197
+
198
+ _Hints: ⚠️ destructive, network call_
199
+
200
+ | Argument | Type | Required | Description |
201
+ |---|---|---|---|
202
+ | `id` | number | ✓ | |
203
+ | `force` | boolean | | Permanently delete (skip trash). Default false. |
204
+
205
+ ### `wp_get_post_revisions`
206
+ **List post revisions**
207
+
208
+ List revisions of a given post (audit trail).
209
+
210
+ _Hints: read-only, idempotent, network call_
211
+
212
+ | Argument | Type | Required | Description |
213
+ |---|---|---|---|
214
+ | `id` | number | ✓ | |
215
+ | `per_page` | number | | |
216
+ | `_fields` | string | | |
217
+
218
+ ## 📄 Pages
219
+
220
+ ### `wp_get_pages`
221
+ **List pages**
222
+
223
+ List WordPress pages.
224
+
225
+ _Hints: read-only, idempotent, network call_
226
+
227
+ | Argument | Type | Required | Description |
228
+ |---|---|---|---|
229
+ | `page` | number | | |
230
+ | `per_page` | number | | |
231
+ | `search` | string | | |
232
+ | `status` | `"publish"` \| `"draft"` \| `"private"` \| `"pending"` \| `"any"` | | |
233
+ | `parent` | number | | |
234
+ | `orderby` | `"date"` \| `"id"` \| `"title"` \| `"modified"` \| `"menu_order"` \| `"slug"` | | |
235
+ | `order` | `"asc"` \| `"desc"` | | |
236
+ | `_fields` | string | | |
237
+ | `_embed` | boolean | | |
238
+ | `context` | `"view"` \| `"edit"` | | |
239
+
240
+ ### `wp_get_page`
241
+ **Get a page**
242
+
243
+ Get a single WordPress page by ID.
244
+
245
+ _Hints: read-only, idempotent, network call_
246
+
247
+ | Argument | Type | Required | Description |
248
+ |---|---|---|---|
249
+ | `id` | number | ✓ | |
250
+ | `context` | `"view"` \| `"edit"` | | |
251
+ | `_fields` | string | | |
252
+ | `_embed` | boolean | | |
253
+
254
+ ### `wp_create_page`
255
+ **Create a page**
256
+
257
+ Create a new WordPress page (default status=draft).
258
+
259
+ _Hints: network call_
260
+
261
+ | Argument | Type | Required | Description |
262
+ |---|---|---|---|
263
+ | `title` | string | ✓ | |
264
+ | `content` | string | ✓ | |
265
+ | `excerpt` | string | | |
266
+ | `status` | `"publish"` \| `"draft"` \| `"private"` \| `"pending"` | | |
267
+ | `slug` | string | | |
268
+ | `parent` | number | | |
269
+ | `menu_order` | number | | |
270
+ | `featured_media` | number | | |
271
+ | `template` | string | | |
272
+ | `comment_status` | `"open"` \| `"closed"` | | |
273
+ | `meta` | object | | |
274
+
275
+ ### `wp_update_page`
276
+ **Update a page**
277
+
278
+ Update an existing WordPress page.
279
+
280
+ _Hints: network call_
281
+
282
+ | Argument | Type | Required | Description |
283
+ |---|---|---|---|
284
+ | `id` | number | ✓ | |
285
+ | `title` | string | | |
286
+ | `content` | string | | |
287
+ | `excerpt` | string | | |
288
+ | `status` | `"publish"` \| `"draft"` \| `"private"` \| `"pending"` | | |
289
+ | `slug` | string | | |
290
+ | `parent` | number | | |
291
+ | `menu_order` | number | | |
292
+ | `featured_media` | number | | |
293
+ | `template` | string | | |
294
+ | `meta` | object | | |
295
+
296
+ ### `wp_delete_page`
297
+ **Delete a page**
298
+
299
+ Move a page to trash, or permanently delete with force=true.
300
+
301
+ _Hints: ⚠️ destructive, network call_
302
+
303
+ | Argument | Type | Required | Description |
304
+ |---|---|---|---|
305
+ | `id` | number | ✓ | |
306
+ | `force` | boolean | | |
307
+
308
+ ## 🖼️ Media
309
+
310
+ ### `wp_get_media`
311
+ **List media**
312
+
313
+ List WordPress media items (images, videos, files).
314
+
315
+ _Hints: read-only, idempotent, network call_
316
+
317
+ | Argument | Type | Required | Description |
318
+ |---|---|---|---|
319
+ | `page` | number | | |
320
+ | `per_page` | number | | |
321
+ | `search` | string | | |
322
+ | `media_type` | `"image"` \| `"video"` \| `"audio"` \| `"application"` | | |
323
+ | `mime_type` | string | | |
324
+ | `parent` | number | | |
325
+ | `orderby` | `"date"` \| `"id"` \| `"title"` \| `"modified"` \| `"slug"` | | |
326
+ | `order` | `"asc"` \| `"desc"` | | |
327
+ | `_fields` | string | | |
328
+
329
+ ### `wp_get_media_item`
330
+ **Get a media item**
331
+
332
+ Get a single media item by ID.
333
+
334
+ _Hints: read-only, idempotent, network call_
335
+
336
+ | Argument | Type | Required | Description |
337
+ |---|---|---|---|
338
+ | `id` | number | ✓ | |
339
+
340
+ ### `wp_upload_media_file`
341
+ **Upload media from local file**
342
+
343
+ Upload a media file from an absolute local path.
344
+
345
+ _Hints: network call_
346
+
347
+ | Argument | Type | Required | Description |
348
+ |---|---|---|---|
349
+ | `file_path` | string | ✓ | |
350
+ | `title` | string | | |
351
+ | `alt_text` | string | | |
352
+ | `caption` | string | | |
353
+ | `description` | string | | |
354
+ | `post` | number | | |
355
+
356
+ ### `wp_upload_media_url`
357
+ **Upload media from URL**
358
+
359
+ Download a remote file and upload it to WordPress.
360
+
361
+ _Hints: network call_
362
+
363
+ | Argument | Type | Required | Description |
364
+ |---|---|---|---|
365
+ | `url` | string (uri) | ✓ | |
366
+ | `title` | string | | |
367
+ | `alt_text` | string | | |
368
+ | `caption` | string | | |
369
+ | `description` | string | | |
370
+ | `post` | number | | |
371
+
372
+ ### `wp_update_media`
373
+ **Update media metadata**
374
+
375
+ Update metadata of an existing media item.
376
+
377
+ _Hints: network call_
378
+
379
+ | Argument | Type | Required | Description |
380
+ |---|---|---|---|
381
+ | `id` | number | ✓ | |
382
+ | `title` | string | | |
383
+ | `alt_text` | string | | |
384
+ | `caption` | string | | |
385
+ | `description` | string | | |
386
+ | `post` | number | | |
387
+
388
+ ### `wp_delete_media`
389
+ **Delete media**
390
+
391
+ Permanently delete a media item. WordPress does not trash media; this is irreversible.
392
+
393
+ _Hints: ⚠️ destructive, network call_
394
+
395
+ | Argument | Type | Required | Description |
396
+ |---|---|---|---|
397
+ | `id` | number | ✓ | |
398
+ | `force` | boolean | | |
399
+
400
+ ## 💬 Comments
401
+
402
+ ### `wp_get_comments`
403
+ **List comments**
404
+
405
+ List WordPress comments with filters.
406
+
407
+ _Hints: read-only, idempotent, network call_
408
+
409
+ | Argument | Type | Required | Description |
410
+ |---|---|---|---|
411
+ | `page` | number | | |
412
+ | `per_page` | number | | |
413
+ | `search` | string | | |
414
+ | `post` | number | | |
415
+ | `status` | `"approved"` \| `"hold"` \| `"spam"` \| `"trash"` \| `"any"` | | |
416
+ | `author_email` | string (email) | | |
417
+ | `after` | string | | |
418
+ | `before` | string | | |
419
+ | `orderby` | `"date"` \| `"id"` \| `"post"` | | |
420
+ | `order` | `"asc"` \| `"desc"` | | |
421
+ | `_fields` | string | | |
422
+
423
+ ### `wp_get_comment`
424
+ **Get a comment**
425
+
426
+ Get a single comment by ID.
427
+
428
+ _Hints: read-only, idempotent, network call_
429
+
430
+ | Argument | Type | Required | Description |
431
+ |---|---|---|---|
432
+ | `id` | number | ✓ | |
433
+
434
+ ### `wp_create_comment`
435
+ **Create a comment**
436
+
437
+ Create a comment on a post.
438
+
439
+ _Hints: network call_
440
+
441
+ | Argument | Type | Required | Description |
442
+ |---|---|---|---|
443
+ | `post` | number | ✓ | |
444
+ | `content` | string | ✓ | |
445
+ | `author_name` | string | | |
446
+ | `author_email` | string (email) | | |
447
+ | `parent` | number | | |
448
+
449
+ ### `wp_update_comment`
450
+ **Update / moderate a comment**
451
+
452
+ Update or moderate a comment. Use status to approve / hold / spam / trash.
453
+
454
+ _Hints: network call_
455
+
456
+ | Argument | Type | Required | Description |
457
+ |---|---|---|---|
458
+ | `id` | number | ✓ | |
459
+ | `content` | string | | |
460
+ | `status` | `"approved"` \| `"hold"` \| `"spam"` \| `"trash"` | | |
461
+ | `author_name` | string | | |
462
+ | `author_email` | string (email) | | |
463
+
464
+ ### `wp_delete_comment`
465
+ **Delete a comment**
466
+
467
+ Move a comment to trash, or permanently delete with force=true.
468
+
469
+ _Hints: ⚠️ destructive, network call_
470
+
471
+ | Argument | Type | Required | Description |
472
+ |---|---|---|---|
473
+ | `id` | number | ✓ | |
474
+ | `force` | boolean | | |
475
+
476
+ ## 🏷️ Taxonomies (categories & tags)
477
+
478
+ ### `wp_get_categories`
479
+ **List categories**
480
+
481
+ List WordPress categories.
482
+
483
+ _Hints: read-only, idempotent, network call_
484
+
485
+ | Argument | Type | Required | Description |
486
+ |---|---|---|---|
487
+ | `page` | number | | |
488
+ | `per_page` | number | | |
489
+ | `search` | string | | |
490
+ | `hide_empty` | boolean | | |
491
+ | `parent` | number | | |
492
+ | `orderby` | `"id"` \| `"name"` \| `"slug"` \| `"count"` \| `"term_group"` | | |
493
+ | `order` | `"asc"` \| `"desc"` | | |
494
+ | `_fields` | string | | |
495
+
496
+ ### `wp_get_category`
497
+ **Get a category**
498
+
499
+ Get a single category by ID.
500
+
501
+ _Hints: read-only, idempotent, network call_
502
+
503
+ | Argument | Type | Required | Description |
504
+ |---|---|---|---|
505
+ | `id` | number | ✓ | |
506
+
507
+ ### `wp_create_category`
508
+ **Create a category**
509
+
510
+ Create a new category.
511
+
512
+ _Hints: network call_
513
+
514
+ | Argument | Type | Required | Description |
515
+ |---|---|---|---|
516
+ | `name` | string | ✓ | |
517
+ | `slug` | string | | |
518
+ | `description` | string | | |
519
+ | `parent` | number | | |
520
+
521
+ ### `wp_update_category`
522
+ **Update a category**
523
+
524
+ Update a category.
525
+
526
+ _Hints: network call_
527
+
528
+ | Argument | Type | Required | Description |
529
+ |---|---|---|---|
530
+ | `id` | number | ✓ | |
531
+ | `name` | string | | |
532
+ | `slug` | string | | |
533
+ | `description` | string | | |
534
+ | `parent` | number | | |
535
+
536
+ ### `wp_delete_category`
537
+ **Delete a category**
538
+
539
+ Delete a category. Categories cannot be trashed; force is required.
540
+
541
+ _Hints: ⚠️ destructive, network call_
542
+
543
+ | Argument | Type | Required | Description |
544
+ |---|---|---|---|
545
+ | `id` | number | ✓ | |
546
+ | `force` | boolean | | |
547
+
548
+ ### `wp_get_tags`
549
+ **List tags**
550
+
551
+ List WordPress tags.
552
+
553
+ _Hints: read-only, idempotent, network call_
554
+
555
+ | Argument | Type | Required | Description |
556
+ |---|---|---|---|
557
+ | `page` | number | | |
558
+ | `per_page` | number | | |
559
+ | `search` | string | | |
560
+ | `hide_empty` | boolean | | |
561
+ | `orderby` | `"id"` \| `"name"` \| `"slug"` \| `"count"` | | |
562
+ | `order` | `"asc"` \| `"desc"` | | |
563
+ | `_fields` | string | | |
564
+
565
+ ### `wp_get_tag`
566
+ **Get a tag**
567
+
568
+ Get a single tag by ID.
569
+
570
+ _Hints: read-only, idempotent, network call_
571
+
572
+ | Argument | Type | Required | Description |
573
+ |---|---|---|---|
574
+ | `id` | number | ✓ | |
575
+
576
+ ### `wp_create_tag`
577
+ **Create a tag**
578
+
579
+ Create a new tag.
580
+
581
+ _Hints: network call_
582
+
583
+ | Argument | Type | Required | Description |
584
+ |---|---|---|---|
585
+ | `name` | string | ✓ | |
586
+ | `slug` | string | | |
587
+ | `description` | string | | |
588
+
589
+ ### `wp_update_tag`
590
+ **Update a tag**
591
+
592
+ Update a tag.
593
+
594
+ _Hints: network call_
595
+
596
+ | Argument | Type | Required | Description |
597
+ |---|---|---|---|
598
+ | `id` | number | ✓ | |
599
+ | `name` | string | | |
600
+ | `slug` | string | | |
601
+ | `description` | string | | |
602
+
603
+ ### `wp_delete_tag`
604
+ **Delete a tag**
605
+
606
+ Delete a tag. Tags cannot be trashed; force is required.
607
+
608
+ _Hints: ⚠️ destructive, network call_
609
+
610
+ | Argument | Type | Required | Description |
611
+ |---|---|---|---|
612
+ | `id` | number | ✓ | |
613
+ | `force` | boolean | | |
614
+
615
+ ## 👤 Users
616
+
617
+ ### `wp_get_users`
618
+ **List users**
619
+
620
+ List WordPress users.
621
+
622
+ _Hints: read-only, idempotent, network call_
623
+
624
+ | Argument | Type | Required | Description |
625
+ |---|---|---|---|
626
+ | `page` | number | | |
627
+ | `per_page` | number | | |
628
+ | `search` | string | | |
629
+ | `roles` | string[] | | |
630
+ | `orderby` | `"id"` \| `"include"` \| `"name"` \| `"registered_date"` \| `"slug"` \| `"email"` \| `"url"` | | |
631
+ | `order` | `"asc"` \| `"desc"` | | |
632
+ | `_fields` | string | | |
633
+
634
+ ### `wp_get_user`
635
+ **Get a user**
636
+
637
+ Get a single user by ID.
638
+
639
+ _Hints: read-only, idempotent, network call_
640
+
641
+ | Argument | Type | Required | Description |
642
+ |---|---|---|---|
643
+ | `id` | number | ✓ | |
644
+
645
+ ### `wp_get_current_user`
646
+ **Get current user**
647
+
648
+ Get the currently authenticated user (the WP_USERNAME used to start this server).
649
+
650
+ _Hints: read-only, idempotent, network call_
651
+
652
+ _(no arguments)_
653
+
654
+ ### `wp_create_user`
655
+ **Create a user**
656
+
657
+ Create a new WordPress user. Requires the `create_users` capability.
658
+
659
+ _Hints: network call_
660
+
661
+ | Argument | Type | Required | Description |
662
+ |---|---|---|---|
663
+ | `username` | string | ✓ | |
664
+ | `email` | string (email) | ✓ | |
665
+ | `password` | string | ✓ | |
666
+ | `name` | string | | |
667
+ | `first_name` | string | | |
668
+ | `last_name` | string | | |
669
+ | `url` | string (uri) | | |
670
+ | `description` | string | | |
671
+ | `roles` | string[] | | |
672
+
673
+ ### `wp_update_user`
674
+ **Update a user**
675
+
676
+ Update a user's profile or role.
677
+
678
+ _Hints: network call_
679
+
680
+ | Argument | Type | Required | Description |
681
+ |---|---|---|---|
682
+ | `id` | number | ✓ | |
683
+ | `email` | string (email) | | |
684
+ | `name` | string | | |
685
+ | `first_name` | string | | |
686
+ | `last_name` | string | | |
687
+ | `url` | string (uri) | | |
688
+ | `description` | string | | |
689
+ | `roles` | string[] | | |
690
+ | `password` | string | | |
691
+
692
+ ### `wp_delete_user`
693
+ **Delete a user**
694
+
695
+ Permanently delete a user and reassign their content to another user. Always force-deletes (WP requirement).
696
+
697
+ _Hints: ⚠️ destructive, network call_
698
+
699
+ | Argument | Type | Required | Description |
700
+ |---|---|---|---|
701
+ | `id` | number | ✓ | |
702
+ | `reassign_to` | number | ✓ | User ID to receive the deleted user's content. |
703
+
704
+ ## 🧰 Generic CPT / plugin namespaces
705
+
706
+ ### `wp_list_items`
707
+ **Generic list (any REST route)**
708
+
709
+ List items from any REST collection route (CPT, custom taxonomy, plugin namespace). Pass plugin/CPT-specific params via `query`.
710
+
711
+ _Hints: read-only, idempotent, network call_
712
+
713
+ | Argument | Type | Required | Description |
714
+ |---|---|---|---|
715
+ | `route` | string | ✓ | REST route, e.g. 'wp/v2/product' or 'wc/v3/products' |
716
+ | `query` | object | | Query string parameters as key/value pairs |
717
+
718
+ ### `wp_get_item`
719
+ **Generic get (any REST route)**
720
+
721
+ Get a single item from any REST route by ID.
722
+
723
+ _Hints: read-only, idempotent, network call_
724
+
725
+ | Argument | Type | Required | Description |
726
+ |---|---|---|---|
727
+ | `route` | string | ✓ | |
728
+ | `id` | number | ✓ | |
729
+ | `query` | object | | |
730
+
731
+ ### `wp_create_item`
732
+ **Generic create (any REST route)**
733
+
734
+ Create an item on any REST route. Use `wp_get_post_types` to find supported CPT slugs.
735
+
736
+ _Hints: network call_
737
+
738
+ | Argument | Type | Required | Description |
739
+ |---|---|---|---|
740
+ | `route` | string | ✓ | |
741
+ | `body` | object | ✓ | |
742
+
743
+ ### `wp_update_item`
744
+ **Generic update (any REST route)**
745
+
746
+ Update an item on any REST route by ID.
747
+
748
+ _Hints: network call_
749
+
750
+ | Argument | Type | Required | Description |
751
+ |---|---|---|---|
752
+ | `route` | string | ✓ | |
753
+ | `id` | number | ✓ | |
754
+ | `body` | object | ✓ | |
755
+
756
+ ### `wp_delete_item`
757
+ **Generic delete (any REST route)**
758
+
759
+ Delete an item on any REST route. Many endpoints require force=true.
760
+
761
+ _Hints: ⚠️ destructive, network call_
762
+
763
+ | Argument | Type | Required | Description |
764
+ |---|---|---|---|
765
+ | `route` | string | ✓ | |
766
+ | `id` | number | ✓ | |
767
+ | `force` | boolean | | |
768
+
769
+ ## 🛒 WooCommerce
770
+
771
+ ### `wc_list_products`
772
+ **WC: list products**
773
+
774
+ List WooCommerce products with filters.
775
+
776
+ _Hints: read-only, idempotent, network call_
777
+
778
+ | Argument | Type | Required | Description |
779
+ |---|---|---|---|
780
+ | `page` | number | | |
781
+ | `per_page` | number | | |
782
+ | `search` | string | | |
783
+ | `status` | `"any"` \| `"draft"` \| `"pending"` \| `"private"` \| `"publish"` | | |
784
+ | `type` | `"simple"` \| `"grouped"` \| `"external"` \| `"variable"` | | |
785
+ | `category` | string | | Category slug |
786
+ | `tag` | string | | Tag slug |
787
+ | `sku` | string | | |
788
+ | `featured` | boolean | | |
789
+ | `on_sale` | boolean | | |
790
+ | `min_price` | string | | |
791
+ | `max_price` | string | | |
792
+ | `stock_status` | `"instock"` \| `"outofstock"` \| `"onbackorder"` | | |
793
+ | `orderby` | `"date"` \| `"id"` \| `"include"` \| `"title"` \| `"slug"` \| `"price"` \| `"popularity"` \| `"rating"` | | |
794
+ | `order` | `"asc"` \| `"desc"` | | |
795
+ | `after` | string | | |
796
+ | `before` | string | | |
797
+ | `_fields` | string | | |
798
+
799
+ ### `wc_get_product`
800
+ **WC: get product**
801
+
802
+ Get a single product by ID.
803
+
804
+ _Hints: read-only, idempotent, network call_
805
+
806
+ | Argument | Type | Required | Description |
807
+ |---|---|---|---|
808
+ | `id` | number | ✓ | |
809
+
810
+ ### `wc_create_product`
811
+ **WC: create product**
812
+
813
+ Create a new WooCommerce product.
814
+
815
+ _Hints: network call_
816
+
817
+ | Argument | Type | Required | Description |
818
+ |---|---|---|---|
819
+ | `name` | string | ✓ | |
820
+ | `type` | `"simple"` \| `"grouped"` \| `"external"` \| `"variable"` | | |
821
+ | `regular_price` | string | | |
822
+ | `sale_price` | string | | |
823
+ | `description` | string | | |
824
+ | `short_description` | string | | |
825
+ | `sku` | string | | |
826
+ | `status` | `"draft"` \| `"pending"` \| `"private"` \| `"publish"` | | |
827
+ | `featured` | boolean | | |
828
+ | `catalog_visibility` | `"visible"` \| `"catalog"` \| `"search"` \| `"hidden"` | | |
829
+ | `manage_stock` | boolean | | |
830
+ | `stock_quantity` | number | | |
831
+ | `stock_status` | `"instock"` \| `"outofstock"` \| `"onbackorder"` | | |
832
+ | `weight` | string | | |
833
+ | `dimensions` | object | | |
834
+ | `categories` | object[] | | |
835
+ | `tags` | object[] | | |
836
+ | `images` | object[] | | |
837
+ | `attributes` | object[] | | |
838
+ | `meta_data` | object[] | | |
839
+
840
+ ### `wc_update_product`
841
+ **WC: update product**
842
+
843
+ Update a WooCommerce product.
844
+
845
+ _Hints: network call_
846
+
847
+ | Argument | Type | Required | Description |
848
+ |---|---|---|---|
849
+ | `id` | number | ✓ | |
850
+ | `name` | string | ✓ | |
851
+ | `type` | `"simple"` \| `"grouped"` \| `"external"` \| `"variable"` | | |
852
+ | `regular_price` | string | | |
853
+ | `sale_price` | string | | |
854
+ | `description` | string | | |
855
+ | `short_description` | string | | |
856
+ | `sku` | string | | |
857
+ | `status` | `"draft"` \| `"pending"` \| `"private"` \| `"publish"` | | |
858
+ | `featured` | boolean | | |
859
+ | `catalog_visibility` | `"visible"` \| `"catalog"` \| `"search"` \| `"hidden"` | | |
860
+ | `manage_stock` | boolean | | |
861
+ | `stock_quantity` | number | | |
862
+ | `stock_status` | `"instock"` \| `"outofstock"` \| `"onbackorder"` | | |
863
+ | `weight` | string | | |
864
+ | `dimensions` | object | | |
865
+ | `categories` | object[] | | |
866
+ | `tags` | object[] | | |
867
+ | `images` | object[] | | |
868
+ | `attributes` | object[] | | |
869
+ | `meta_data` | object[] | | |
870
+
871
+ ### `wc_delete_product`
872
+ **WC: delete product**
873
+
874
+ Delete a WooCommerce product. force=true is irreversible (skips trash).
875
+
876
+ _Hints: ⚠️ destructive, network call_
877
+
878
+ | Argument | Type | Required | Description |
879
+ |---|---|---|---|
880
+ | `id` | number | ✓ | |
881
+ | `force` | boolean | | |
882
+
883
+ ### `wc_list_variations`
884
+ **WC: list product variations**
885
+
886
+ List variations of a variable product.
887
+
888
+ _Hints: read-only, idempotent, network call_
889
+
890
+ | Argument | Type | Required | Description |
891
+ |---|---|---|---|
892
+ | `product_id` | number | ✓ | |
893
+ | `page` | number | | |
894
+ | `per_page` | number | | |
895
+ | `_fields` | string | | |
896
+
897
+ ### `wc_create_variation`
898
+ **WC: create product variation**
899
+
900
+ Create a variation under a variable product.
901
+
902
+ _Hints: network call_
903
+
904
+ | Argument | Type | Required | Description |
905
+ |---|---|---|---|
906
+ | `product_id` | number | ✓ | |
907
+ | `regular_price` | string | | |
908
+ | `sale_price` | string | | |
909
+ | `sku` | string | | |
910
+ | `stock_quantity` | number | | |
911
+ | `attributes` | object[] | | |
912
+ | `image` | object | | |
913
+
914
+ ### `wc_list_product_categories`
915
+ **WC: list product categories**
916
+
917
+ List WooCommerce product categories.
918
+
919
+ _Hints: read-only, idempotent, network call_
920
+
921
+ | Argument | Type | Required | Description |
922
+ |---|---|---|---|
923
+ | `page` | number | | |
924
+ | `per_page` | number | | |
925
+ | `search` | string | | |
926
+ | `hide_empty` | boolean | | |
927
+ | `parent` | number | | |
928
+ | `orderby` | `"id"` \| `"include"` \| `"name"` \| `"slug"` \| `"term_group"` \| `"description"` \| `"count"` | | |
929
+ | `order` | `"asc"` \| `"desc"` | | |
930
+
931
+ ### `wc_list_orders`
932
+ **WC: list orders**
933
+
934
+ List WooCommerce orders.
935
+
936
+ _Hints: read-only, idempotent, network call_
937
+
938
+ | Argument | Type | Required | Description |
939
+ |---|---|---|---|
940
+ | `page` | number | | |
941
+ | `per_page` | number | | |
942
+ | `search` | string | | |
943
+ | `status` | `"any"` \| `"pending"` \| `"processing"` \| `"on-hold"` \| `"completed"` \| `"cancelled"` \| `"refunded"` \| `"failed"` \| `"trash"` | | |
944
+ | `customer` | number | | |
945
+ | `product` | number | | |
946
+ | `after` | string | | |
947
+ | `before` | string | | |
948
+ | `orderby` | `"date"` \| `"id"` \| `"include"` \| `"title"` \| `"slug"` | | |
949
+ | `order` | `"asc"` \| `"desc"` | | |
950
+ | `_fields` | string | | |
951
+
952
+ ### `wc_get_order`
953
+ **WC: get order**
954
+
955
+ Get a single order by ID.
956
+
957
+ _Hints: read-only, idempotent, network call_
958
+
959
+ | Argument | Type | Required | Description |
960
+ |---|---|---|---|
961
+ | `id` | number | ✓ | |
962
+
963
+ ### `wc_update_order`
964
+ **WC: update order**
965
+
966
+ Update an order — most commonly used to change status.
967
+
968
+ _Hints: network call_
969
+
970
+ | Argument | Type | Required | Description |
971
+ |---|---|---|---|
972
+ | `id` | number | ✓ | |
973
+ | `status` | `"any"` \| `"pending"` \| `"processing"` \| `"on-hold"` \| `"completed"` \| `"cancelled"` \| `"refunded"` \| `"failed"` \| `"trash"` | | |
974
+ | `customer_note` | string | | |
975
+ | `transaction_id` | string | | |
976
+ | `meta_data` | object[] | | |
977
+
978
+ ### `wc_create_order_note`
979
+ **WC: add note to an order**
980
+
981
+ Add a note (private or customer-facing) to an order.
982
+
983
+ _Hints: network call_
984
+
985
+ | Argument | Type | Required | Description |
986
+ |---|---|---|---|
987
+ | `order_id` | number | ✓ | |
988
+ | `note` | string | ✓ | |
989
+ | `customer_note` | boolean | | If true, visible to customer. |
990
+
991
+ ### `wc_create_refund`
992
+ **WC: create order refund**
993
+
994
+ Create a refund for an order.
995
+
996
+ _Hints: ⚠️ destructive, network call_
997
+
998
+ | Argument | Type | Required | Description |
999
+ |---|---|---|---|
1000
+ | `order_id` | number | ✓ | |
1001
+ | `amount` | string | ✓ | Refund amount as decimal string, e.g. '12.50' |
1002
+ | `reason` | string | | |
1003
+ | `api_refund` | boolean | | Trigger payment gateway refund. |
1004
+ | `line_items` | object[] | | |
1005
+
1006
+ ### `wc_list_customers`
1007
+ **WC: list customers**
1008
+
1009
+ List WooCommerce customers.
1010
+
1011
+ _Hints: read-only, idempotent, network call_
1012
+
1013
+ | Argument | Type | Required | Description |
1014
+ |---|---|---|---|
1015
+ | `page` | number | | |
1016
+ | `per_page` | number | | |
1017
+ | `search` | string | | |
1018
+ | `email` | string (email) | | |
1019
+ | `role` | string | | |
1020
+ | `orderby` | `"id"` \| `"include"` \| `"name"` \| `"registered_date"` | | |
1021
+ | `order` | `"asc"` \| `"desc"` | | |
1022
+
1023
+ ### `wc_get_customer`
1024
+ **WC: get customer**
1025
+
1026
+ Get a single customer by ID.
1027
+
1028
+ _Hints: read-only, idempotent, network call_
1029
+
1030
+ | Argument | Type | Required | Description |
1031
+ |---|---|---|---|
1032
+ | `id` | number | ✓ | |
1033
+
1034
+ ### `wc_list_coupons`
1035
+ **WC: list coupons**
1036
+
1037
+ List WooCommerce coupons.
1038
+
1039
+ _Hints: read-only, idempotent, network call_
1040
+
1041
+ | Argument | Type | Required | Description |
1042
+ |---|---|---|---|
1043
+ | `page` | number | | |
1044
+ | `per_page` | number | | |
1045
+ | `search` | string | | |
1046
+ | `code` | string | | |
1047
+
1048
+ ### `wc_create_coupon`
1049
+ **WC: create coupon**
1050
+
1051
+ Create a new coupon.
1052
+
1053
+ _Hints: network call_
1054
+
1055
+ | Argument | Type | Required | Description |
1056
+ |---|---|---|---|
1057
+ | `code` | string | ✓ | |
1058
+ | `discount_type` | `"percent"` \| `"fixed_cart"` \| `"fixed_product"` | | |
1059
+ | `amount` | string | | |
1060
+ | `individual_use` | boolean | | |
1061
+ | `exclude_sale_items` | boolean | | |
1062
+ | `minimum_amount` | string | | |
1063
+ | `maximum_amount` | string | | |
1064
+ | `usage_limit` | number | | |
1065
+ | `usage_limit_per_user` | number | | |
1066
+ | `date_expires` | string | | |
1067
+ | `product_ids` | number[] | | |
1068
+ | `excluded_product_ids` | number[] | | |
1069
+ | `free_shipping` | boolean | | |
1070
+ | `description` | string | | |
1071
+
1072
+ ### `wc_get_sales_report`
1073
+ **WC: sales report**
1074
+
1075
+ Get a sales summary report.
1076
+
1077
+ _Hints: read-only, idempotent, network call_
1078
+
1079
+ | Argument | Type | Required | Description |
1080
+ |---|---|---|---|
1081
+ | `period` | `"week"` \| `"month"` \| `"last_month"` \| `"year"` | | |
1082
+ | `date_min` | string | | ISO date YYYY-MM-DD |
1083
+ | `date_max` | string | | ISO date YYYY-MM-DD |
1084
+
1085
+ ### `wc_get_top_sellers`
1086
+ **WC: top sellers report**
1087
+
1088
+ Get top-selling products.
1089
+
1090
+ _Hints: read-only, idempotent, network call_
1091
+
1092
+ | Argument | Type | Required | Description |
1093
+ |---|---|---|---|
1094
+ | `period` | `"week"` \| `"month"` \| `"last_month"` \| `"year"` | | |
1095
+ | `date_min` | string | | |
1096
+ | `date_max` | string | | |
1097
+
1098
+ ## 📈 SEO (Yoast & Rank Math)
1099
+
1100
+ ### `seo_get_meta`
1101
+ **Get SEO meta (Yoast / Rank Math)**
1102
+
1103
+ Read SEO meta (title, description, focus keyword, robots, OG, Twitter) for a post or page. Specify which SEO plugin you use.
1104
+
1105
+ _Hints: read-only, idempotent, network call_
1106
+
1107
+ | Argument | Type | Required | Description |
1108
+ |---|---|---|---|
1109
+ | `plugin` | `"yoast"` \| `"rank_math"` | ✓ | |
1110
+ | `post_type` | `"post"` \| `"page"` | | |
1111
+ | `id` | number | ✓ | |
1112
+
1113
+ ### `seo_set_meta`
1114
+ **Set SEO meta (Yoast / Rank Math)**
1115
+
1116
+ Write SEO meta (title, description, focus keyword, robots, OG, Twitter) to a post or page via the chosen SEO plugin's meta keys. NOTE: the meta keys must be exposed via REST (Yoast does this automatically; Rank Math may require enabling REST API in plugin settings).
1117
+
1118
+ _Hints: network call_
1119
+
1120
+ | Argument | Type | Required | Description |
1121
+ |---|---|---|---|
1122
+ | `plugin` | `"yoast"` \| `"rank_math"` | ✓ | |
1123
+ | `post_type` | `"post"` \| `"page"` | | |
1124
+ | `id` | number | ✓ | |
1125
+ | `title` | string | | SEO title tag |
1126
+ | `description` | string | | Meta description |
1127
+ | `focus_keyword` | string | | |
1128
+ | `canonical` | string (uri) | | |
1129
+ | `noindex` | boolean | | |
1130
+ | `nofollow` | boolean | | |
1131
+ | `og_title` | string | | |
1132
+ | `og_description` | string | | |
1133
+ | `og_image` | string (uri) | | |
1134
+ | `twitter_title` | string | | |
1135
+ | `twitter_description` | string | | |
1136
+ | `twitter_image` | string (uri) | | |
1137
+
1138
+ ### `yoast_get_head`
1139
+ **Yoast: get rendered SEO head HTML**
1140
+
1141
+ Use Yoast's /yoast/v1/get_head endpoint to fetch the rendered <head> HTML for a given URL — useful for previewing what search engines will see.
1142
+
1143
+ _Hints: read-only, idempotent, network call_
1144
+
1145
+ | Argument | Type | Required | Description |
1146
+ |---|---|---|---|
1147
+ | `url` | string (uri) | ✓ | |
1148
+
1149
+ ### `yoast_indexable_for_post`
1150
+ **Yoast: get post 'indexable' (computed SEO snapshot)**
1151
+
1152
+ Read the Yoast indexable record (title, description, canonical, breadcrumbs) for a post via /yoast/v1/indexable.
1153
+
1154
+ _Hints: read-only, idempotent, network call_
1155
+
1156
+ | Argument | Type | Required | Description |
1157
+ |---|---|---|---|
1158
+ | `id` | number | ✓ | |
1159
+
1160
+ ### `rankmath_list_redirections`
1161
+ **Rank Math: list redirections**
1162
+
1163
+ List Rank Math redirection rules (requires Rank Math Pro REST API enabled).
1164
+
1165
+ _Hints: read-only, idempotent, network call_
1166
+
1167
+ | Argument | Type | Required | Description |
1168
+ |---|---|---|---|
1169
+ | `page` | number | | |
1170
+ | `per_page` | number | | |
1171
+ | `search` | string | | |
1172
+ | `status` | `"any"` \| `"active"` \| `"inactive"` | | |
1173
+
1174
+ ### `rankmath_create_redirection`
1175
+ **Rank Math: create redirection**
1176
+
1177
+ Create a redirection rule.
1178
+
1179
+ _Hints: network call_
1180
+
1181
+ | Argument | Type | Required | Description |
1182
+ |---|---|---|---|
1183
+ | `sources` | object[] | ✓ | |
1184
+ | `url_to` | string | ✓ | |
1185
+ | `header_code` | `"301"` \| `"302"` \| `"307"` \| `"410"` \| `"451"` | | |
1186
+ | `status` | `"active"` \| `"inactive"` | | |
1187
+
1188
+ ## 🧱 Block themes (WP 5.9+)
1189
+
1190
+ ### `wp_list_templates`
1191
+ **Block themes: list templates**
1192
+
1193
+ List block theme templates (wp_template). IDs look like 'theme//slug'.
1194
+
1195
+ _Hints: read-only, idempotent, network call_
1196
+
1197
+ | Argument | Type | Required | Description |
1198
+ |---|---|---|---|
1199
+ | `theme` | string | | Filter by theme slug |
1200
+ | `area` | string | | Filter by template area (e.g. 'header') |
1201
+ | `post_type` | string | | Filter by post type the template applies to |
1202
+ | `_fields` | string | | |
1203
+
1204
+ ### `wp_get_template`
1205
+ **Block themes: get template**
1206
+
1207
+ Get a single template by 'theme//slug' ID.
1208
+
1209
+ _Hints: read-only, idempotent, network call_
1210
+
1211
+ | Argument | Type | Required | Description |
1212
+ |---|---|---|---|
1213
+ | `id` | string | ✓ | |
1214
+
1215
+ ### `wp_update_template`
1216
+ **Block themes: update template**
1217
+
1218
+ Update a block template by 'theme//slug' ID. Pass content (block markup) and/or title/description.
1219
+
1220
+ _Hints: network call_
1221
+
1222
+ | Argument | Type | Required | Description |
1223
+ |---|---|---|---|
1224
+ | `id` | string | ✓ | |
1225
+ | `content` | string | | |
1226
+ | `title` | string | | |
1227
+ | `description` | string | | |
1228
+ | `status` | `"publish"` \| `"draft"` \| `"auto-draft"` \| `"trash"` | | |
1229
+
1230
+ ### `wp_list_template_parts`
1231
+ **Block themes: list template parts**
1232
+
1233
+ List template parts (wp_template_part), e.g. header / footer fragments.
1234
+
1235
+ _Hints: read-only, idempotent, network call_
1236
+
1237
+ | Argument | Type | Required | Description |
1238
+ |---|---|---|---|
1239
+ | `theme` | string | | |
1240
+ | `area` | string | | |
1241
+ | `_fields` | string | | |
1242
+
1243
+ ### `wp_get_template_part`
1244
+ **Block themes: get template part**
1245
+
1246
+ Get a single template part by 'theme//slug' ID.
1247
+
1248
+ _Hints: read-only, idempotent, network call_
1249
+
1250
+ | Argument | Type | Required | Description |
1251
+ |---|---|---|---|
1252
+ | `id` | string | ✓ | |
1253
+
1254
+ ### `wp_update_template_part`
1255
+ **Block themes: update template part**
1256
+
1257
+ Update a template part by 'theme//slug' ID.
1258
+
1259
+ _Hints: network call_
1260
+
1261
+ | Argument | Type | Required | Description |
1262
+ |---|---|---|---|
1263
+ | `id` | string | ✓ | |
1264
+ | `content` | string | | |
1265
+ | `title` | string | | |
1266
+ | `description` | string | | |
1267
+ | `area` | string | | |
1268
+
1269
+ ### `wp_list_block_patterns`
1270
+ **Block themes: list patterns**
1271
+
1272
+ List block patterns (registered via PHP, theme.json, or pattern directory).
1273
+
1274
+ _Hints: read-only, idempotent, network call_
1275
+
1276
+ _(no arguments)_
1277
+
1278
+ ### `wp_list_block_pattern_categories`
1279
+ **Block themes: list pattern categories**
1280
+
1281
+ List the categories used to group block patterns.
1282
+
1283
+ _Hints: read-only, idempotent, network call_
1284
+
1285
+ _(no arguments)_
1286
+
1287
+ ### `wp_list_block_types`
1288
+ **Block themes: list block types**
1289
+
1290
+ List registered Gutenberg block types.
1291
+
1292
+ _Hints: read-only, idempotent, network call_
1293
+
1294
+ | Argument | Type | Required | Description |
1295
+ |---|---|---|---|
1296
+ | `namespace` | string | | Filter by block namespace, e.g. 'core' |
1297
+
1298
+ ### `wp_get_global_styles`
1299
+ **Block themes: get global styles for a theme**
1300
+
1301
+ Get the active global styles record (theme.json overrides) for a given stylesheet.
1302
+
1303
+ _Hints: read-only, idempotent, network call_
1304
+
1305
+ | Argument | Type | Required | Description |
1306
+ |---|---|---|---|
1307
+ | `stylesheet` | string | ✓ | Theme stylesheet slug, e.g. 'twentytwentyfour' |
1308
+
1309
+ ### `wp_list_menus`
1310
+ **Menus: list**
1311
+
1312
+ List navigation menus.
1313
+
1314
+ _Hints: read-only, idempotent, network call_
1315
+
1316
+ | Argument | Type | Required | Description |
1317
+ |---|---|---|---|
1318
+ | `_fields` | string | | |
1319
+
1320
+ ### `wp_list_menu_items`
1321
+ **Menus: list items**
1322
+
1323
+ List items inside menus, optionally filtered by menu ID.
1324
+
1325
+ _Hints: read-only, idempotent, network call_
1326
+
1327
+ | Argument | Type | Required | Description |
1328
+ |---|---|---|---|
1329
+ | `menus` | number[] | | |
1330
+ | `per_page` | number | | |
1331
+ | `_fields` | string | | |
1332
+
1333
+ ## 🌐 Multisite
1334
+
1335
+ ### `ms_list_sites`
1336
+ **Multisite: list sites**
1337
+
1338
+ List all sites in the network. Requires a Multisite REST plugin to be installed. Returns 404 (rest_no_route) on plain core WP.
1339
+
1340
+ _Hints: read-only, idempotent, network call_
1341
+
1342
+ | Argument | Type | Required | Description |
1343
+ |---|---|---|---|
1344
+ | `page` | number | | |
1345
+ | `per_page` | number | | |
1346
+ | `search` | string | | |
1347
+ | `network` | number | | |
1348
+ | `_fields` | string | | |
1349
+
1350
+ ### `ms_get_site`
1351
+ **Multisite: get site**
1352
+
1353
+ Get a single network site by blog ID.
1354
+
1355
+ _Hints: read-only, idempotent, network call_
1356
+
1357
+ | Argument | Type | Required | Description |
1358
+ |---|---|---|---|
1359
+ | `id` | number | ✓ | |
1360
+
1361
+ ### `ms_create_site`
1362
+ **Multisite: create site**
1363
+
1364
+ Create a new site (subsite) in the network. Field names follow the multisite-rest-api plugin conventions; adjust if your plugin differs.
1365
+
1366
+ _Hints: network call_
1367
+
1368
+ | Argument | Type | Required | Description |
1369
+ |---|---|---|---|
1370
+ | `domain` | string | ✓ | |
1371
+ | `path` | string | | |
1372
+ | `title` | string | | |
1373
+ | `network_id` | number | | |
1374
+ | `meta` | object | | |
1375
+
1376
+ ### `ms_update_site`
1377
+ **Multisite: update site**
1378
+
1379
+ Update a network site by blog ID.
1380
+
1381
+ _Hints: network call_
1382
+
1383
+ | Argument | Type | Required | Description |
1384
+ |---|---|---|---|
1385
+ | `id` | number | ✓ | |
1386
+ | `domain` | string | | |
1387
+ | `path` | string | | |
1388
+ | `title` | string | | |
1389
+ | `meta` | object | | |
1390
+
1391
+ ### `ms_delete_site`
1392
+ **Multisite: delete site**
1393
+
1394
+ Delete a network site. Always destructive — there is no trash for sites.
1395
+
1396
+ _Hints: ⚠️ destructive, network call_
1397
+
1398
+ | Argument | Type | Required | Description |
1399
+ |---|---|---|---|
1400
+ | `id` | number | ✓ | |
1401
+ | `force` | boolean | | |
1402
+
1403
+ ### `ms_list_networks`
1404
+ **Multisite: list networks**
1405
+
1406
+ List networks (multi-network installs). Same plugin requirement as sites.
1407
+
1408
+ _Hints: read-only, idempotent, network call_
1409
+
1410
+ | Argument | Type | Required | Description |
1411
+ |---|---|---|---|
1412
+ | `page` | number | | |
1413
+ | `per_page` | number | | |
1414
+
1415
+ ### `ms_get_network`
1416
+ **Multisite: get network**
1417
+
1418
+ Get a single network by ID.
1419
+
1420
+ _Hints: read-only, idempotent, network call_
1421
+
1422
+ | Argument | Type | Required | Description |
1423
+ |---|---|---|---|
1424
+ | `id` | number | ✓ | |
1425
+
1426
+ ## 📦 Batch operations
1427
+
1428
+ ### `wp_batch_options`
1429
+ **Batch: discover capabilities**
1430
+
1431
+ OPTIONS /batch/v1 — returns the maximum requests per batch and accepted methods.
1432
+
1433
+ _Hints: read-only, idempotent, network call_
1434
+
1435
+ _(no arguments)_
1436
+
1437
+ ### `wp_batch`
1438
+ **Batch: execute write operations in one round-trip**
1439
+
1440
+ POST /batch/v1 — execute multiple write operations in a single request. GET is not supported. Use validation='require-all-validate' to abort the whole batch if any request is invalid.
1441
+
1442
+ _Hints: network call_
1443
+
1444
+ | Argument | Type | Required | Description |
1445
+ |---|---|---|---|
1446
+ | `validation` | `"normal"` \| `"require-all-validate"` | | |
1447
+ | `requests` | object[] | ✓ | Up to ~25 by default; some sites raise the cap. Check wp_batch_options. |
1448
+
1449
+ ## 🔐 JWT diagnostics
1450
+
1451
+ ### `wp_jwt_validate`
1452
+ **JWT: validate current token**
1453
+
1454
+ POST /jwt-auth/v1/token/validate — confirms the JWT in use is valid. Only useful in JWT auth mode.
1455
+
1456
+ _Hints: read-only, idempotent, network call_
1457
+
1458
+ _(no arguments)_