claude-plugin-wordpress-manager 2.3.0 → 2.4.0

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.
Files changed (30) hide show
  1. package/.claude-plugin/plugin.json +8 -3
  2. package/CHANGELOG.md +25 -0
  3. package/agents/wp-distribution-manager.md +98 -0
  4. package/docs/GUIDE.md +126 -10
  5. package/docs/plans/2026-03-01-tier3-wcop-design.md +373 -0
  6. package/docs/plans/2026-03-01-tier3-wcop-implementation.md +915 -0
  7. package/hooks/hooks.json +18 -0
  8. package/package.json +9 -3
  9. package/servers/wp-rest-bridge/build/tools/buffer.d.ts +3 -0
  10. package/servers/wp-rest-bridge/build/tools/buffer.js +205 -0
  11. package/servers/wp-rest-bridge/build/tools/index.js +9 -0
  12. package/servers/wp-rest-bridge/build/tools/mailchimp.d.ts +3 -0
  13. package/servers/wp-rest-bridge/build/tools/mailchimp.js +265 -0
  14. package/servers/wp-rest-bridge/build/tools/sendgrid.d.ts +3 -0
  15. package/servers/wp-rest-bridge/build/tools/sendgrid.js +255 -0
  16. package/servers/wp-rest-bridge/build/types.d.ts +122 -0
  17. package/servers/wp-rest-bridge/build/wordpress.d.ts +9 -0
  18. package/servers/wp-rest-bridge/build/wordpress.js +112 -0
  19. package/skills/wordpress-router/references/decision-tree.md +4 -2
  20. package/skills/wp-content/SKILL.md +1 -0
  21. package/skills/wp-content-repurposing/SKILL.md +1 -0
  22. package/skills/wp-social-email/SKILL.md +152 -0
  23. package/skills/wp-social-email/references/audience-segmentation.md +173 -0
  24. package/skills/wp-social-email/references/buffer-social-publishing.md +124 -0
  25. package/skills/wp-social-email/references/content-to-distribution.md +156 -0
  26. package/skills/wp-social-email/references/distribution-analytics.md +208 -0
  27. package/skills/wp-social-email/references/mailchimp-integration.md +145 -0
  28. package/skills/wp-social-email/references/sendgrid-transactional.md +165 -0
  29. package/skills/wp-social-email/scripts/distribution_inspect.mjs +165 -0
  30. package/skills/wp-webhooks/SKILL.md +1 -0
@@ -0,0 +1,915 @@
1
+ # Tier 3 WCOP Implementation Plan
2
+
3
+ > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
4
+
5
+ **Goal:** Complete the WCOP (WordPress Content Orchestration Platform) transformation by adding Social/Email Connectors (v2.4.0), Google Search Console Integration (v2.5.0), and AI Content Optimization (v2.6.0).
6
+
7
+ **Architecture:** Connector-First approach — new TypeScript tool files in `servers/wp-rest-bridge/src/tools/` for external API integration (Mailchimp, Buffer, SendGrid, GSC), plus Claude-native skill procedures for AI content optimization. Each service has independent auth via SiteConfig extension.
8
+
9
+ **Tech Stack:** TypeScript (WP REST Bridge), Node.js MCP SDK, axios, googleapis (v2.5.0), zod validation
10
+
11
+ ---
12
+
13
+ ## Release 1: v2.4.0 — Social/Email Connectors
14
+
15
+ ### Task 1: Extend TypeScript Types
16
+
17
+ **Files:**
18
+ - Modify: `servers/wp-rest-bridge/src/types.ts` (append after line 271, after `WPNetworkSite`)
19
+
20
+ **Step 1: Add connector types to types.ts**
21
+
22
+ Append these interfaces after the existing `WPNetworkSite` interface:
23
+
24
+ ```typescript
25
+ // ── Social/Email Connector Types ─────────────────────────────────────
26
+
27
+ export interface MCMailchimpAudience {
28
+ id: string;
29
+ name: string;
30
+ member_count: number;
31
+ campaign_defaults: { from_name: string; from_email: string; subject: string };
32
+ stats: { member_count: number; unsubscribe_count: number; open_rate: number; click_rate: number };
33
+ date_created: string;
34
+ }
35
+
36
+ export interface MCCampaign {
37
+ id: string;
38
+ type: string;
39
+ status: string;
40
+ emails_sent: number;
41
+ send_time: string;
42
+ settings: { subject_line: string; from_name: string; reply_to: string };
43
+ report_summary?: { opens: number; unique_opens: number; clicks: number; subscriber_clicks: number };
44
+ }
45
+
46
+ export interface MCCampaignReport {
47
+ id: string;
48
+ campaign_title: string;
49
+ emails_sent: number;
50
+ opens: { opens_total: number; unique_opens: number; open_rate: number };
51
+ clicks: { clicks_total: number; unique_clicks: number; click_rate: number };
52
+ unsubscribed: number;
53
+ bounces: { hard_bounces: number; soft_bounces: number };
54
+ }
55
+
56
+ export interface BufProfile {
57
+ id: string;
58
+ service: string;
59
+ formatted_username: string;
60
+ avatar: string;
61
+ counts: { sent: number; pending: number };
62
+ }
63
+
64
+ export interface BufUpdate {
65
+ id: string;
66
+ text: string;
67
+ profile_id: string;
68
+ status: string;
69
+ sent_at?: number;
70
+ due_at?: number;
71
+ statistics?: { clicks: number; reach: number; impressions: number };
72
+ }
73
+
74
+ export interface SGEmailRequest {
75
+ personalizations: { to: { email: string; name?: string }[]; subject?: string }[];
76
+ from: { email: string; name?: string };
77
+ subject: string;
78
+ content: { type: string; value: string }[];
79
+ template_id?: string;
80
+ }
81
+
82
+ export interface SGTemplate {
83
+ id: string;
84
+ name: string;
85
+ generation: string;
86
+ updated_at: string;
87
+ versions: { id: string; name: string; active: number; subject: string }[];
88
+ }
89
+
90
+ export interface SGStats {
91
+ date: string;
92
+ stats: { metrics: { requests: number; delivered: number; opens: number; clicks: number; bounces: number; spam_reports: number } }[];
93
+ }
94
+ ```
95
+
96
+ **Step 2: Verify file compiles**
97
+
98
+ Run: `cd servers/wp-rest-bridge && npx tsc --noEmit`
99
+ Expected: No errors
100
+
101
+ **Step 3: Commit**
102
+
103
+ ```bash
104
+ git add servers/wp-rest-bridge/src/types.ts
105
+ git commit -m "feat(types): add Mailchimp, Buffer, SendGrid type interfaces"
106
+ ```
107
+
108
+ ---
109
+
110
+ ### Task 2: Extend SiteConfig and wordpress.ts
111
+
112
+ **Files:**
113
+ - Modify: `servers/wp-rest-bridge/src/wordpress.ts`
114
+
115
+ **Step 1: Extend SiteConfig interface (line 4-18)**
116
+
117
+ Add fields after `is_multisite`:
118
+
119
+ ```typescript
120
+ // Social/Email connector API keys (optional)
121
+ mailchimp_api_key?: string; // Format: "key-dc" (e.g., "abc123-us21")
122
+ buffer_access_token?: string; // Buffer OAuth access token
123
+ sendgrid_api_key?: string; // SendGrid API key (starts with "SG.")
124
+ ```
125
+
126
+ **Step 2: Add connector client maps after line 52 (wcSiteClients)**
127
+
128
+ ```typescript
129
+ const mcSiteClients = new Map<string, AxiosInstance>();
130
+ const bufSiteClients = new Map<string, AxiosInstance>();
131
+ const sgSiteClients = new Map<string, AxiosInstance>();
132
+ ```
133
+
134
+ **Step 3: Add init functions for each connector**
135
+
136
+ After `initWcClient()` function (after line 191), add:
137
+
138
+ ```typescript
139
+ /**
140
+ * Initialize a Mailchimp client for a site.
141
+ * API key format: "key-dc" where dc is the data center (e.g., "us21").
142
+ */
143
+ async function initMailchimpClient(id: string, apiKey: string) {
144
+ const dc = apiKey.split('-').pop() || 'us21';
145
+ const client = axios.create({
146
+ baseURL: `https://${dc}.api.mailchimp.com/3.0/`,
147
+ headers: {
148
+ 'Content-Type': 'application/json',
149
+ 'Authorization': `Basic ${Buffer.from(`anystring:${apiKey}`).toString('base64')}`,
150
+ },
151
+ timeout: DEFAULT_TIMEOUT_MS,
152
+ });
153
+ mcSiteClients.set(id, client);
154
+ }
155
+
156
+ /**
157
+ * Initialize a Buffer client for a site.
158
+ */
159
+ async function initBufferClient(id: string, accessToken: string) {
160
+ const client = axios.create({
161
+ baseURL: 'https://api.bufferapp.com/1/',
162
+ headers: {
163
+ 'Content-Type': 'application/json',
164
+ },
165
+ params: { access_token: accessToken },
166
+ timeout: DEFAULT_TIMEOUT_MS,
167
+ });
168
+ bufSiteClients.set(id, client);
169
+ }
170
+
171
+ /**
172
+ * Initialize a SendGrid client for a site.
173
+ */
174
+ async function initSendGridClient(id: string, apiKey: string) {
175
+ const client = axios.create({
176
+ baseURL: 'https://api.sendgrid.com/v3/',
177
+ headers: {
178
+ 'Content-Type': 'application/json',
179
+ 'Authorization': `Bearer ${apiKey}`,
180
+ },
181
+ timeout: DEFAULT_TIMEOUT_MS,
182
+ });
183
+ sgSiteClients.set(id, client);
184
+ }
185
+ ```
186
+
187
+ **Step 4: Call init functions in initWordPress() loop**
188
+
189
+ After the WooCommerce init block (line 109-114), add:
190
+
191
+ ```typescript
192
+ // Initialize Social/Email connector clients
193
+ for (const site of sites) {
194
+ if (site.mailchimp_api_key) {
195
+ await initMailchimpClient(site.id, site.mailchimp_api_key);
196
+ logToStderr(`Initialized Mailchimp for site: ${site.id}`);
197
+ }
198
+ if (site.buffer_access_token) {
199
+ await initBufferClient(site.id, site.buffer_access_token);
200
+ logToStderr(`Initialized Buffer for site: ${site.id}`);
201
+ }
202
+ if (site.sendgrid_api_key) {
203
+ await initSendGridClient(site.id, site.sendgrid_api_key);
204
+ logToStderr(`Initialized SendGrid for site: ${site.id}`);
205
+ }
206
+ }
207
+ ```
208
+
209
+ **Step 5: Add exported request functions and has-checks**
210
+
211
+ After `makeWooCommerceRequest()` (after line 468), add:
212
+
213
+ ```typescript
214
+ // ── Mailchimp Request Interface ──────────────────────────────────
215
+
216
+ export function hasMailchimp(siteId?: string): boolean {
217
+ const id = siteId || activeSiteId;
218
+ return mcSiteClients.has(id);
219
+ }
220
+
221
+ export async function makeMailchimpRequest(
222
+ method: string,
223
+ endpoint: string,
224
+ data?: any,
225
+ siteId?: string
226
+ ): Promise<any> {
227
+ const id = siteId || activeSiteId;
228
+ const client = mcSiteClients.get(id);
229
+ if (!client) {
230
+ throw new Error(
231
+ `Mailchimp not configured for site "${id}". Add mailchimp_api_key to WP_SITES_CONFIG.`
232
+ );
233
+ }
234
+ const limiter = getLimiter(id);
235
+ await limiter.acquire();
236
+ try {
237
+ const response = await client.request({ method, url: endpoint, data: method !== 'GET' ? data : undefined, params: method === 'GET' ? data : undefined });
238
+ return response.data;
239
+ } finally {
240
+ limiter.release();
241
+ }
242
+ }
243
+
244
+ // ── Buffer Request Interface ─────────────────────────────────────
245
+
246
+ export function hasBuffer(siteId?: string): boolean {
247
+ const id = siteId || activeSiteId;
248
+ return bufSiteClients.has(id);
249
+ }
250
+
251
+ export async function makeBufferRequest(
252
+ method: string,
253
+ endpoint: string,
254
+ data?: any,
255
+ siteId?: string
256
+ ): Promise<any> {
257
+ const id = siteId || activeSiteId;
258
+ const client = bufSiteClients.get(id);
259
+ if (!client) {
260
+ throw new Error(
261
+ `Buffer not configured for site "${id}". Add buffer_access_token to WP_SITES_CONFIG.`
262
+ );
263
+ }
264
+ const limiter = getLimiter(id);
265
+ await limiter.acquire();
266
+ try {
267
+ const response = await client.request({ method, url: endpoint, data: method !== 'GET' ? data : undefined, params: method === 'GET' ? data : undefined });
268
+ return response.data;
269
+ } finally {
270
+ limiter.release();
271
+ }
272
+ }
273
+
274
+ // ── SendGrid Request Interface ───────────────────────────────────
275
+
276
+ export function hasSendGrid(siteId?: string): boolean {
277
+ const id = siteId || activeSiteId;
278
+ return sgSiteClients.has(id);
279
+ }
280
+
281
+ export async function makeSendGridRequest(
282
+ method: string,
283
+ endpoint: string,
284
+ data?: any,
285
+ siteId?: string
286
+ ): Promise<any> {
287
+ const id = siteId || activeSiteId;
288
+ const client = sgSiteClients.get(id);
289
+ if (!client) {
290
+ throw new Error(
291
+ `SendGrid not configured for site "${id}". Add sendgrid_api_key to WP_SITES_CONFIG.`
292
+ );
293
+ }
294
+ const limiter = getLimiter(id);
295
+ await limiter.acquire();
296
+ try {
297
+ const response = await client.request({ method, url: endpoint, data: method !== 'GET' ? data : undefined, params: method === 'GET' ? data : undefined });
298
+ return response.data;
299
+ } finally {
300
+ limiter.release();
301
+ }
302
+ }
303
+ ```
304
+
305
+ **Step 6: Verify compilation**
306
+
307
+ Run: `cd servers/wp-rest-bridge && npx tsc --noEmit`
308
+ Expected: No errors
309
+
310
+ **Step 7: Commit**
311
+
312
+ ```bash
313
+ git add servers/wp-rest-bridge/src/wordpress.ts
314
+ git commit -m "feat(bridge): add Mailchimp, Buffer, SendGrid client init and request functions"
315
+ ```
316
+
317
+ ---
318
+
319
+ ### Task 3: Mailchimp MCP Tools
320
+
321
+ **Files:**
322
+ - Create: `servers/wp-rest-bridge/src/tools/mailchimp.ts`
323
+
324
+ **Step 1: Create the tool file**
325
+
326
+ Follow exact pattern of `wc-webhooks.ts`. File exports `mailchimpTools: Tool[]` and `mailchimpHandlers: Record<string, Function>`. Implement 7 tools: `mc_list_audiences`, `mc_get_audience_members`, `mc_create_campaign`, `mc_update_campaign_content`, `mc_send_campaign`, `mc_get_campaign_report`, `mc_add_subscriber`.
327
+
328
+ Each tool:
329
+ - Imports `makeMailchimpRequest` from `../wordpress.js`
330
+ - Uses zod schema for input validation
331
+ - Returns JSON stringified response
332
+ - Checks `hasMailchimp()` before executing
333
+
334
+ **Step 2: Verify compilation**
335
+
336
+ Run: `cd servers/wp-rest-bridge && npx tsc --noEmit`
337
+
338
+ **Step 3: Commit**
339
+
340
+ ```bash
341
+ git add servers/wp-rest-bridge/src/tools/mailchimp.ts
342
+ git commit -m "feat(mc): add 7 Mailchimp MCP tools"
343
+ ```
344
+
345
+ ---
346
+
347
+ ### Task 4: Buffer MCP Tools
348
+
349
+ **Files:**
350
+ - Create: `servers/wp-rest-bridge/src/tools/buffer.ts`
351
+
352
+ **Step 1: Create the tool file**
353
+
354
+ Same pattern. Exports `bufferTools: Tool[]` and `bufferHandlers: Record<string, Function>`. Implement 5 tools: `buf_list_profiles`, `buf_create_update`, `buf_list_pending`, `buf_list_sent`, `buf_get_analytics`.
355
+
356
+ Each tool imports `makeBufferRequest` from `../wordpress.js`.
357
+
358
+ **Step 2: Verify compilation**
359
+
360
+ Run: `cd servers/wp-rest-bridge && npx tsc --noEmit`
361
+
362
+ **Step 3: Commit**
363
+
364
+ ```bash
365
+ git add servers/wp-rest-bridge/src/tools/buffer.ts
366
+ git commit -m "feat(buf): add 5 Buffer MCP tools"
367
+ ```
368
+
369
+ ---
370
+
371
+ ### Task 5: SendGrid MCP Tools
372
+
373
+ **Files:**
374
+ - Create: `servers/wp-rest-bridge/src/tools/sendgrid.ts`
375
+
376
+ **Step 1: Create the tool file**
377
+
378
+ Same pattern. Exports `sendgridTools: Tool[]` and `sendgridHandlers: Record<string, Function>`. Implement 6 tools: `sg_send_email`, `sg_list_templates`, `sg_get_template`, `sg_list_contacts`, `sg_add_contacts`, `sg_get_stats`.
379
+
380
+ Each tool imports `makeSendGridRequest` from `../wordpress.js`.
381
+
382
+ **Step 2: Verify compilation**
383
+
384
+ Run: `cd servers/wp-rest-bridge && npx tsc --noEmit`
385
+
386
+ **Step 3: Commit**
387
+
388
+ ```bash
389
+ git add servers/wp-rest-bridge/src/tools/sendgrid.ts
390
+ git commit -m "feat(sg): add 6 SendGrid MCP tools"
391
+ ```
392
+
393
+ ---
394
+
395
+ ### Task 6: Register Tools in index.ts and Build
396
+
397
+ **Files:**
398
+ - Modify: `servers/wp-rest-bridge/src/tools/index.ts`
399
+
400
+ **Step 1: Add imports**
401
+
402
+ After the `wc-webhooks` import (line 19), add:
403
+
404
+ ```typescript
405
+ import { mailchimpTools, mailchimpHandlers } from './mailchimp.js';
406
+ import { bufferTools, bufferHandlers } from './buffer.js';
407
+ import { sendgridTools, sendgridHandlers } from './sendgrid.js';
408
+ ```
409
+
410
+ **Step 2: Add to allTools array**
411
+
412
+ After `...wcWebhookTools` (line 39), add:
413
+
414
+ ```typescript
415
+ ...mailchimpTools, // 7 tools
416
+ ...bufferTools, // 5 tools
417
+ ...sendgridTools, // 6 tools
418
+ ```
419
+
420
+ **Step 3: Add to toolHandlers object**
421
+
422
+ After `...wcWebhookHandlers` (line 60), add:
423
+
424
+ ```typescript
425
+ ...mailchimpHandlers,
426
+ ...bufferHandlers,
427
+ ...sendgridHandlers,
428
+ ```
429
+
430
+ **Step 4: Build the project**
431
+
432
+ Run: `cd servers/wp-rest-bridge && npx tsc`
433
+ Expected: Build succeeds, new .js and .d.ts files in build/tools/
434
+
435
+ **Step 5: Commit**
436
+
437
+ ```bash
438
+ git add servers/wp-rest-bridge/src/tools/index.ts servers/wp-rest-bridge/build/
439
+ git commit -m "feat(bridge): register Mailchimp, Buffer, SendGrid tools — 85 → 103 total"
440
+ ```
441
+
442
+ ---
443
+
444
+ ### Task 7: Detection Script
445
+
446
+ **Files:**
447
+ - Create: `skills/wp-social-email/scripts/distribution_inspect.mjs`
448
+
449
+ **Step 1: Create detection script**
450
+
451
+ Node.js .mjs script that checks:
452
+ - `WP_SITES_CONFIG` env var for mailchimp_api_key, buffer_access_token, sendgrid_api_key
453
+ - WordPress plugins (Mailchimp for WP, Jetpack, JETWSE)
454
+ - Content volume (number of published posts — indicator of distribution readiness)
455
+ - Outputs JSON: `{ mailchimp: boolean, buffer: boolean, sendgrid: boolean, content_ready: boolean, recommendation: string }`
456
+
457
+ Follow pattern of existing scripts like `repurposing_inspect.mjs` and `webhook_inspect.mjs`.
458
+
459
+ **Step 2: Commit**
460
+
461
+ ```bash
462
+ git add skills/wp-social-email/scripts/distribution_inspect.mjs
463
+ git commit -m "feat(detect): add distribution_inspect.mjs for Mailchimp/Buffer/SendGrid"
464
+ ```
465
+
466
+ ---
467
+
468
+ ### Task 8: Skill wp-social-email (SKILL.md + 6 references)
469
+
470
+ **Files:**
471
+ - Create: `skills/wp-social-email/SKILL.md`
472
+ - Create: `skills/wp-social-email/references/mailchimp-integration.md`
473
+ - Create: `skills/wp-social-email/references/buffer-social-publishing.md`
474
+ - Create: `skills/wp-social-email/references/sendgrid-transactional.md`
475
+ - Create: `skills/wp-social-email/references/content-to-distribution.md`
476
+ - Create: `skills/wp-social-email/references/audience-segmentation.md`
477
+ - Create: `skills/wp-social-email/references/distribution-analytics.md`
478
+
479
+ **Step 1: Create SKILL.md**
480
+
481
+ Frontmatter: name `wp-social-email`, description with trigger keywords (social, email, Mailchimp, Buffer, SendGrid, distribution, newsletter, campaign), version 1.0.0.
482
+
483
+ Structure: Overview, When to Use, Decision Tree (Section 1: Mailchimp, Section 2: Buffer, Section 3: SendGrid, Section 4: Content-to-Distribution workflow, Section 5: Audience segmentation, Section 6: Analytics), Reference Files table, Recommended Agent (`wp-distribution-manager`), Related Skills.
484
+
485
+ **Step 2: Create 6 reference files**
486
+
487
+ Each 80-150 lines with actionable procedures, MCP tool references, and examples.
488
+
489
+ **Step 3: Commit**
490
+
491
+ ```bash
492
+ git add skills/wp-social-email/
493
+ git commit -m "feat(skill): add wp-social-email skill with 6 reference files"
494
+ ```
495
+
496
+ ---
497
+
498
+ ### Task 9: Agent wp-distribution-manager
499
+
500
+ **Files:**
501
+ - Create: `agents/wp-distribution-manager.md`
502
+
503
+ **Step 1: Create agent file**
504
+
505
+ Follow pattern of `wp-ecommerce-manager.md`. Frontmatter: name `wp-distribution-manager`, color `indigo`, description with examples, model `inherit`, tools `Read, Grep, Glob, Bash, WebFetch, WebSearch`.
506
+
507
+ Body: 5 procedures (detect services, fetch WP content, format for channel, publish/schedule, track analytics), report template, safety notes (confirm before send), related skills.
508
+
509
+ **Step 2: Commit**
510
+
511
+ ```bash
512
+ git add agents/wp-distribution-manager.md
513
+ git commit -m "feat(agent): add wp-distribution-manager (indigo)"
514
+ ```
515
+
516
+ ---
517
+
518
+ ### Task 10: Safety Hooks
519
+
520
+ **Files:**
521
+ - Modify: `hooks/hooks.json`
522
+
523
+ **Step 1: Add 2 new hooks**
524
+
525
+ In the PreToolUse array, after the `wc_delete_webhook` entry, add:
526
+
527
+ ```json
528
+ ,
529
+ {
530
+ "matcher": "mcp__wp-rest-bridge__mc_send_campaign",
531
+ "hooks": [
532
+ {
533
+ "type": "prompt",
534
+ "prompt": "The agent is about to SEND a Mailchimp email campaign. This will deliver emails to all subscribers in the target audience. Verify the user explicitly requested this send and has reviewed the campaign content. Respond 'approve' only if the send was clearly intentional."
535
+ }
536
+ ]
537
+ },
538
+ {
539
+ "matcher": "mcp__wp-rest-bridge__sg_send_email",
540
+ "hooks": [
541
+ {
542
+ "type": "prompt",
543
+ "prompt": "The agent is about to SEND an email via SendGrid. Verify the user explicitly requested this email send and the recipient list is correct. Respond 'approve' only if intentional."
544
+ }
545
+ ]
546
+ }
547
+ ```
548
+
549
+ **Step 2: Commit**
550
+
551
+ ```bash
552
+ git add hooks/hooks.json
553
+ git commit -m "feat(hooks): add safety gates for mc_send_campaign and sg_send_email"
554
+ ```
555
+
556
+ ---
557
+
558
+ ### Task 11: Router v11 + Cross-references
559
+
560
+ **Files:**
561
+ - Modify: `skills/wordpress-router/SKILL.md` (version reference)
562
+ - Modify: `skills/wordpress-router/references/decision-tree.md` (add keywords + routing)
563
+ - Modify: `skills/wp-content-repurposing/SKILL.md` (add cross-ref)
564
+ - Modify: `skills/wp-webhooks/SKILL.md` (add cross-ref)
565
+ - Modify: `skills/wp-content/SKILL.md` (add cross-ref)
566
+
567
+ **Step 1: Update decision-tree.md**
568
+
569
+ - Header: change "v10" to "v11", add "+ social/email distribution" to the parenthetical
570
+ - Add keywords in Step 0 operations list: `social publish, schedule post, Buffer, email campaign, Mailchimp, SendGrid, transactional email, content distribution, newsletter send`
571
+ - Add routing entry in Step 2b after multi-language network entry:
572
+ ```
573
+ - **Social/email distribution / publish to social / schedule post / email campaign / Mailchimp / Buffer / SendGrid / newsletter / transactional email / content distribution**
574
+ → `wp-social-email` skill + `wp-distribution-manager` agent
575
+ ```
576
+
577
+ **Step 2: Update cross-references**
578
+
579
+ - `wp-content-repurposing/SKILL.md`: add to Related Skills: `- **wp-social-email** — publish repurposed content to social and email channels`
580
+ - `wp-webhooks/SKILL.md`: add to Related Skills: `- **wp-social-email** — direct publishing to social/email (alternative to webhook-based distribution)`
581
+ - `wp-content/SKILL.md`: add to Related Skills: `- **wp-social-email** — distribute content to social media and email after creation`
582
+
583
+ **Step 3: Commit**
584
+
585
+ ```bash
586
+ git add skills/wordpress-router/ skills/wp-content-repurposing/SKILL.md skills/wp-webhooks/SKILL.md skills/wp-content/SKILL.md
587
+ git commit -m "feat(router): upgrade to v11 with social/email distribution routing"
588
+ ```
589
+
590
+ ---
591
+
592
+ ### Task 12: Version Bump + CHANGELOG + Build
593
+
594
+ **Files:**
595
+ - Modify: `.claude-plugin/plugin.json` (version → 2.4.0, description update)
596
+ - Modify: `package.json` (version → 2.4.0, description update)
597
+ - Modify: `CHANGELOG.md` (add v2.4.0 entry)
598
+
599
+ **Step 1: Update versions and CHANGELOG**
600
+
601
+ plugin.json: version "2.4.0", update description to mention 103 tools, 34 skills, 12 agents, social/email connectors.
602
+ package.json: version "2.4.0", update description.
603
+ CHANGELOG.md: add full v2.4.0 entry with Added (18 tools, 1 skill, 1 agent, 1 detection script, 2 safety hooks) and Changed (router v11, cross-references, tool count 85 → 103).
604
+
605
+ **Step 2: Final build**
606
+
607
+ Run: `cd servers/wp-rest-bridge && npx tsc`
608
+
609
+ **Step 3: Stage, commit, push**
610
+
611
+ ```bash
612
+ git add .claude-plugin/plugin.json package.json CHANGELOG.md servers/wp-rest-bridge/build/
613
+ git commit -m "feat: add Social/Email Connectors (Mailchimp, Buffer, SendGrid) v2.4.0"
614
+ git push origin main
615
+ ```
616
+
617
+ **Step 4: Publish npm + GitHub release**
618
+
619
+ ```bash
620
+ npm config set //registry.npmjs.org/:_authToken=TOKEN
621
+ npm publish --access public
622
+ npm config delete //registry.npmjs.org/:_authToken
623
+ gh release create v2.4.0 --title "v2.4.0 — Social/Email Connectors" --notes "..."
624
+ ```
625
+
626
+ ---
627
+
628
+ ## Release 2: v2.5.0 — Google Search Console Integration
629
+
630
+ ### Task 13: Install googleapis dependency
631
+
632
+ **Files:**
633
+ - Modify: `servers/wp-rest-bridge/package.json`
634
+
635
+ **Step 1: Install**
636
+
637
+ Run: `cd servers/wp-rest-bridge && npm install googleapis`
638
+
639
+ **Step 2: Commit**
640
+
641
+ ```bash
642
+ git add servers/wp-rest-bridge/package.json servers/wp-rest-bridge/package-lock.json
643
+ git commit -m "chore(deps): add googleapis for GSC integration"
644
+ ```
645
+
646
+ ---
647
+
648
+ ### Task 14: Extend SiteConfig for GSC
649
+
650
+ **Files:**
651
+ - Modify: `servers/wp-rest-bridge/src/wordpress.ts`
652
+
653
+ **Step 1: Add GSC fields to SiteConfig**
654
+
655
+ After sendgrid_api_key:
656
+
657
+ ```typescript
658
+ // Google Search Console (optional)
659
+ gsc_service_account_key?: string; // Path to service account JSON key file
660
+ gsc_site_url?: string; // GSC site URL (e.g., "sc-domain:mysite.com")
661
+ ```
662
+
663
+ **Step 2: Add GSC auth module**
664
+
665
+ Create exported function `getGSCAuth(siteId)` that reads the service account JSON key, creates a `google.auth.GoogleAuth` client with `webmasters.readonly` scope, and returns an authenticated searchconsole client.
666
+
667
+ Add `hasGSC(siteId)` check function.
668
+
669
+ **Step 3: Commit**
670
+
671
+ ```bash
672
+ git add servers/wp-rest-bridge/src/wordpress.ts
673
+ git commit -m "feat(bridge): add GSC Service Account auth to SiteConfig"
674
+ ```
675
+
676
+ ---
677
+
678
+ ### Task 15: GSC MCP Tools
679
+
680
+ **Files:**
681
+ - Create: `servers/wp-rest-bridge/src/tools/gsc.ts`
682
+
683
+ **Step 1: Create the tool file**
684
+
685
+ Exports `gscTools: Tool[]` and `gscHandlers: Record<string, Function>`. Implement 8 tools: `gsc_list_sites`, `gsc_search_analytics`, `gsc_inspect_url`, `gsc_list_sitemaps`, `gsc_submit_sitemap`, `gsc_delete_sitemap`, `gsc_top_queries`, `gsc_page_performance`.
686
+
687
+ Uses `googleapis` `searchconsole` and `webmasters` APIs.
688
+
689
+ **Step 2: Register in index.ts**
690
+
691
+ Add import and spread into allTools/toolHandlers.
692
+
693
+ **Step 3: Build and verify**
694
+
695
+ Run: `cd servers/wp-rest-bridge && npx tsc`
696
+
697
+ **Step 4: Commit**
698
+
699
+ ```bash
700
+ git add servers/wp-rest-bridge/src/tools/gsc.ts servers/wp-rest-bridge/src/tools/index.ts servers/wp-rest-bridge/build/
701
+ git commit -m "feat(gsc): add 8 Google Search Console MCP tools"
702
+ ```
703
+
704
+ ---
705
+
706
+ ### Task 16: GSC Detection Script
707
+
708
+ **Files:**
709
+ - Create: `skills/wp-search-console/scripts/search_console_inspect.mjs`
710
+
711
+ **Step 1: Create detection script**
712
+
713
+ Checks: WP_SITES_CONFIG for gsc_service_account_key, sitemap.xml existence (via WebFetch), robots.txt, SEO plugins (Yoast, RankMath, AIOSEO), GSC config readiness.
714
+
715
+ **Step 2: Commit**
716
+
717
+ ```bash
718
+ git add skills/wp-search-console/scripts/search_console_inspect.mjs
719
+ git commit -m "feat(detect): add search_console_inspect.mjs"
720
+ ```
721
+
722
+ ---
723
+
724
+ ### Task 17: Skill wp-search-console (SKILL.md + 5 references)
725
+
726
+ **Files:**
727
+ - Create: `skills/wp-search-console/SKILL.md`
728
+ - Create: `skills/wp-search-console/references/gsc-setup.md`
729
+ - Create: `skills/wp-search-console/references/keyword-tracking.md`
730
+ - Create: `skills/wp-search-console/references/indexing-management.md`
731
+ - Create: `skills/wp-search-console/references/content-seo-feedback.md`
732
+ - Create: `skills/wp-search-console/references/competitor-gap-analysis.md`
733
+
734
+ **Step 1: Create SKILL.md and references**
735
+
736
+ SKILL.md: frontmatter with triggers (Search Console, GSC, keyword tracking, indexing, sitemap), decision tree for 5 sections, reference files table, recommended agent `wp-content-strategist`, related skills.
737
+
738
+ **Step 2: Commit**
739
+
740
+ ```bash
741
+ git add skills/wp-search-console/
742
+ git commit -m "feat(skill): add wp-search-console skill with 5 reference files"
743
+ ```
744
+
745
+ ---
746
+
747
+ ### Task 18: Update wp-content-strategist Agent for GSC
748
+
749
+ **Files:**
750
+ - Modify: `agents/wp-content-strategist.md`
751
+
752
+ **Step 1: Add SEO Feedback Loop section**
753
+
754
+ After the existing Programmatic SEO section, add "## SEO Feedback Loop (GSC)" with the 6-step procedure from the design doc. Add example in frontmatter for GSC-driven optimization.
755
+
756
+ **Step 2: Add cross-references**
757
+
758
+ Update `wp-programmatic-seo/SKILL.md`, `wp-content-attribution/SKILL.md`, `wp-monitoring/SKILL.md` with cross-refs to `wp-search-console`.
759
+
760
+ **Step 3: Commit**
761
+
762
+ ```bash
763
+ git add agents/wp-content-strategist.md skills/wp-programmatic-seo/SKILL.md skills/wp-content-attribution/SKILL.md skills/wp-monitoring/SKILL.md
764
+ git commit -m "feat(agent): add SEO Feedback Loop to wp-content-strategist + cross-refs"
765
+ ```
766
+
767
+ ---
768
+
769
+ ### Task 19: Router v12 + Version Bump + Publish v2.5.0
770
+
771
+ **Files:**
772
+ - Modify: `skills/wordpress-router/references/decision-tree.md` (v11 → v12, add GSC keywords)
773
+ - Modify: `.claude-plugin/plugin.json` (version → 2.5.0)
774
+ - Modify: `package.json` (version → 2.5.0)
775
+ - Modify: `CHANGELOG.md` (add v2.5.0 entry)
776
+
777
+ **Step 1: Update router**
778
+
779
+ Add GSC keywords to Step 0 and routing entry in Step 2b:
780
+ ```
781
+ - **Google Search Console / keyword tracking / indexing status / sitemap submit / search performance / GSC / SERP data**
782
+ → `wp-search-console` skill + `wp-content-strategist` agent
783
+ ```
784
+
785
+ **Step 2: Version bump + CHANGELOG**
786
+
787
+ v2.5.0 entry: 8 GSC tools, 1 skill, detection script, agent update, router v12, googleapis dependency, 103 → 111 total tools.
788
+
789
+ **Step 3: Build, commit, push, publish**
790
+
791
+ ```bash
792
+ cd servers/wp-rest-bridge && npx tsc
793
+ git add -A && git commit -m "feat: add Google Search Console integration v2.5.0"
794
+ git push origin main
795
+ npm publish --access public
796
+ gh release create v2.5.0 --title "v2.5.0 — Google Search Console Integration" --notes "..."
797
+ ```
798
+
799
+ ---
800
+
801
+ ## Release 3: v2.6.0 — AI Content Optimization
802
+
803
+ ### Task 20: Detection Script
804
+
805
+ **Files:**
806
+ - Create: `skills/wp-content-optimization/scripts/content_optimization_inspect.mjs`
807
+
808
+ **Step 1: Create detection script**
809
+
810
+ Checks: content volume (published posts count via REST), content age distribution, SEO plugins, readability plugins (Yoast readability, RankMath), GSC availability (from SiteConfig), WooCommerce availability (for attribution combo).
811
+
812
+ **Step 2: Commit**
813
+
814
+ ```bash
815
+ git add skills/wp-content-optimization/scripts/content_optimization_inspect.mjs
816
+ git commit -m "feat(detect): add content_optimization_inspect.mjs"
817
+ ```
818
+
819
+ ---
820
+
821
+ ### Task 21: Skill wp-content-optimization (SKILL.md + 5 references)
822
+
823
+ **Files:**
824
+ - Create: `skills/wp-content-optimization/SKILL.md`
825
+ - Create: `skills/wp-content-optimization/references/headline-optimization.md`
826
+ - Create: `skills/wp-content-optimization/references/readability-analysis.md`
827
+ - Create: `skills/wp-content-optimization/references/seo-content-scoring.md`
828
+ - Create: `skills/wp-content-optimization/references/meta-optimization.md`
829
+ - Create: `skills/wp-content-optimization/references/content-freshness.md`
830
+
831
+ **Step 1: Create SKILL.md and references**
832
+
833
+ SKILL.md: frontmatter with triggers (optimize content, headline, readability, SEO score, meta description, content freshness, content triage), 6 procedures detailed, decision tree, bulk triage classification table, reference files table, recommended agent `wp-content-strategist`, related skills.
834
+
835
+ **Step 2: Commit**
836
+
837
+ ```bash
838
+ git add skills/wp-content-optimization/
839
+ git commit -m "feat(skill): add wp-content-optimization skill with 5 reference files"
840
+ ```
841
+
842
+ ---
843
+
844
+ ### Task 22: Update wp-content-strategist Agent for AI Optimization
845
+
846
+ **Files:**
847
+ - Modify: `agents/wp-content-strategist.md`
848
+
849
+ **Step 1: Add AI Content Optimization Workflow section**
850
+
851
+ After the SEO Feedback Loop section, add "## AI Content Optimization Workflow" with the 5-step pipeline from the design doc and bulk triage classification table.
852
+
853
+ Add example in frontmatter for content optimization.
854
+
855
+ **Step 2: Add cross-references**
856
+
857
+ Update `wp-content/SKILL.md`, `wp-search-console/SKILL.md`, `wp-content-attribution/SKILL.md`, `wp-programmatic-seo/SKILL.md` with cross-refs to `wp-content-optimization`.
858
+
859
+ **Step 3: Commit**
860
+
861
+ ```bash
862
+ git add agents/wp-content-strategist.md skills/wp-content/SKILL.md skills/wp-search-console/SKILL.md skills/wp-content-attribution/SKILL.md skills/wp-programmatic-seo/SKILL.md
863
+ git commit -m "feat(agent): add AI Content Optimization Workflow to wp-content-strategist"
864
+ ```
865
+
866
+ ---
867
+
868
+ ### Task 23: Router v13 + Version Bump + GUIDE.md + Publish v2.6.0
869
+
870
+ **Files:**
871
+ - Modify: `skills/wordpress-router/references/decision-tree.md` (v12 → v13)
872
+ - Modify: `.claude-plugin/plugin.json` (version → 2.6.0)
873
+ - Modify: `package.json` (version → 2.6.0)
874
+ - Modify: `CHANGELOG.md` (add v2.6.0 entry)
875
+ - Modify: `docs/GUIDE.md` (full update from v2.3.0 to v2.6.0)
876
+
877
+ **Step 1: Update router**
878
+
879
+ Add content optimization keywords to Step 0 and routing entry in Step 2b:
880
+ ```
881
+ - **Content optimization / headline scoring / readability / SEO score / meta optimization / content freshness / content triage / optimize posts**
882
+ → `wp-content-optimization` skill + `wp-content-strategist` agent
883
+ ```
884
+
885
+ **Step 2: Version bump + CHANGELOG**
886
+
887
+ v2.6.0 entry: 0 new tools, 1 skill, detection script, agent update, router v13. Final Tier 3 WCOP metrics: 36 skills, 12 agents, 111 MCP tools.
888
+
889
+ **Step 3: Update GUIDE.md**
890
+
891
+ Full update covering v2.4.0-v2.6.0: new capabilities list, structure tree, routing examples (3 new scenarios), skill tables (Social/Email + GSC + AI Optimization), detection scripts table (+3), glossary terms.
892
+
893
+ **Step 4: Build, commit, push, publish**
894
+
895
+ ```bash
896
+ git add -A && git commit -m "feat: add AI Content Optimization + complete GUIDE.md update v2.6.0"
897
+ git push origin main
898
+ npm publish --access public
899
+ gh release create v2.6.0 --title "v2.6.0 — AI Content Optimization (Tier 3 WCOP Complete)" --notes "..."
900
+ ```
901
+
902
+ ---
903
+
904
+ ### Task 24: Update Memory
905
+
906
+ **Files:**
907
+ - Modify: `/home/vinmor/.claude/projects/-home-vinmor/memory/wordpress-manager.md`
908
+
909
+ **Step 1: Update memory file**
910
+
911
+ Update version to 2.6.0, add Tier 3 skills/agent, update counts (36 skills, 12 agents, 111 tools, 24 detection scripts, 178 references), add version history entries for v2.4.0-v2.6.0, update router version to v13.
912
+
913
+ ---
914
+
915
+ *Implementation plan for Tier 3 WCOP — 24 tasks across 3 releases*