mcp-wordpress 2.3.0 → 2.4.1
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/README.md +511 -0
- package/dist/client/api.d.ts +90 -0
- package/dist/client/api.d.ts.map +1 -1
- package/dist/client/api.js +90 -0
- package/dist/client/api.js.map +1 -1
- package/dist/tools/media.d.ts +43 -4
- package/dist/tools/media.d.ts.map +1 -1
- package/dist/tools/media.js +43 -4
- package/dist/tools/media.js.map +1 -1
- package/dist/tools/posts.d.ts +225 -4
- package/dist/tools/posts.d.ts.map +1 -1
- package/dist/tools/posts.js +225 -4
- package/dist/tools/posts.js.map +1 -1
- package/docs/DOCKER_PUBLISHING_TROUBLESHOOTING.md +233 -0
- package/docs/PUBLISHING-TROUBLESHOOTING.md +227 -0
- package/docs/api/README.md +53 -11
- package/docs/api/openapi.json +10 -10
- package/docs/api/summary.json +1 -1
- package/docs/api/tools/wp_create_post.md +9 -3
- package/docs/api/tools/wp_delete_post.md +2 -3
- package/docs/api/tools/wp_get_current_user.md +7 -1
- package/docs/api/tools/wp_get_post.md +2 -3
- package/docs/api/tools/wp_get_post_revisions.md +1 -1
- package/docs/api/tools/wp_list_posts.md +10 -3
- package/docs/api/tools/wp_list_users.md +8 -1
- package/docs/api/tools/wp_search_site.md +8 -1
- package/docs/api/tools/wp_test_auth.md +8 -1
- package/docs/api/tools/wp_update_post.md +2 -3
- package/docs/examples/docker-production.md +801 -0
- package/docs/examples/multi-site-setup.md +575 -0
- package/docs/examples/single-site-setup.md +390 -0
- package/docs/examples/use-case-workflows.md +469 -0
- package/package.json +12 -2
- package/src/client/api.ts +90 -0
- package/src/tools/media.ts +43 -4
- package/src/tools/posts.ts +225 -4
|
@@ -0,0 +1,575 @@
|
|
|
1
|
+
# Multi-Site Configuration Examples
|
|
2
|
+
|
|
3
|
+
This guide provides comprehensive examples for managing multiple WordPress sites with a single MCP WordPress server instance.
|
|
4
|
+
|
|
5
|
+
## Basic Multi-Site Configuration
|
|
6
|
+
|
|
7
|
+
### Configuration File Structure
|
|
8
|
+
|
|
9
|
+
Create `mcp-wordpress.config.json` in your project root:
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"sites": [
|
|
14
|
+
{
|
|
15
|
+
"id": "main-site",
|
|
16
|
+
"name": "Main Company Website",
|
|
17
|
+
"config": {
|
|
18
|
+
"WORDPRESS_SITE_URL": "https://company.com",
|
|
19
|
+
"WORDPRESS_USERNAME": "admin",
|
|
20
|
+
"WORDPRESS_APP_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx",
|
|
21
|
+
"WORDPRESS_AUTH_METHOD": "app-password"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "blog",
|
|
26
|
+
"name": "Company Blog",
|
|
27
|
+
"config": {
|
|
28
|
+
"WORDPRESS_SITE_URL": "https://blog.company.com",
|
|
29
|
+
"WORDPRESS_USERNAME": "editor",
|
|
30
|
+
"WORDPRESS_APP_PASSWORD": "yyyy yyyy yyyy yyyy yyyy yyyy",
|
|
31
|
+
"WORDPRESS_AUTH_METHOD": "app-password"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Claude Desktop Configuration
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"mcpServers": {
|
|
43
|
+
"mcp-wordpress": {
|
|
44
|
+
"command": "npx",
|
|
45
|
+
"args": ["-y", "mcp-wordpress"]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Agency Configuration Examples
|
|
52
|
+
|
|
53
|
+
### Digital Marketing Agency Setup
|
|
54
|
+
|
|
55
|
+
**Scenario**: Managing 10+ client websites with different access levels
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"sites": [
|
|
60
|
+
{
|
|
61
|
+
"id": "agency-main",
|
|
62
|
+
"name": "Agency Website",
|
|
63
|
+
"config": {
|
|
64
|
+
"WORDPRESS_SITE_URL": "https://digitalagency.com",
|
|
65
|
+
"WORDPRESS_USERNAME": "admin",
|
|
66
|
+
"WORDPRESS_APP_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx",
|
|
67
|
+
"CACHE_ENABLED": "true",
|
|
68
|
+
"PERFORMANCE_MONITORING": "true"
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "client-restaurant",
|
|
73
|
+
"name": "Restaurant Client",
|
|
74
|
+
"config": {
|
|
75
|
+
"WORDPRESS_SITE_URL": "https://bestrestaurant.com",
|
|
76
|
+
"WORDPRESS_USERNAME": "content-manager",
|
|
77
|
+
"WORDPRESS_APP_PASSWORD": "yyyy yyyy yyyy yyyy yyyy yyyy",
|
|
78
|
+
"CACHE_TTL": "300"
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "client-ecommerce",
|
|
83
|
+
"name": "E-commerce Client",
|
|
84
|
+
"config": {
|
|
85
|
+
"WORDPRESS_SITE_URL": "https://onlinestore.com",
|
|
86
|
+
"WORDPRESS_USERNAME": "shop-manager",
|
|
87
|
+
"WORDPRESS_APP_PASSWORD": "zzzz zzzz zzzz zzzz zzzz zzzz",
|
|
88
|
+
"RATE_LIMIT_ENABLED": "true"
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "client-law-firm",
|
|
93
|
+
"name": "Law Firm Client",
|
|
94
|
+
"config": {
|
|
95
|
+
"WORDPRESS_SITE_URL": "https://lawfirm.com",
|
|
96
|
+
"WORDPRESS_USERNAME": "legal-editor",
|
|
97
|
+
"WORDPRESS_APP_PASSWORD": "aaaa aaaa aaaa aaaa aaaa aaaa",
|
|
98
|
+
"SECURITY_MONITORING": "true"
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "client-healthcare",
|
|
103
|
+
"name": "Healthcare Practice",
|
|
104
|
+
"config": {
|
|
105
|
+
"WORDPRESS_SITE_URL": "https://medicalpractice.com",
|
|
106
|
+
"WORDPRESS_USERNAME": "medical-admin",
|
|
107
|
+
"WORDPRESS_APP_PASSWORD": "bbbb bbbb bbbb bbbb bbbb bbbb",
|
|
108
|
+
"CACHE_ENABLED": "true",
|
|
109
|
+
"SECURITY_MONITORING": "true"
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Freelancer Portfolio Setup
|
|
117
|
+
|
|
118
|
+
**Scenario**: Managing personal portfolio plus client projects
|
|
119
|
+
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"sites": [
|
|
123
|
+
{
|
|
124
|
+
"id": "portfolio",
|
|
125
|
+
"name": "Personal Portfolio",
|
|
126
|
+
"config": {
|
|
127
|
+
"WORDPRESS_SITE_URL": "https://johndeveloper.com",
|
|
128
|
+
"WORDPRESS_USERNAME": "john",
|
|
129
|
+
"WORDPRESS_APP_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx",
|
|
130
|
+
"DEBUG": "true",
|
|
131
|
+
"PERFORMANCE_MONITORING": "true"
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "client-startup",
|
|
136
|
+
"name": "Startup Client",
|
|
137
|
+
"config": {
|
|
138
|
+
"WORDPRESS_SITE_URL": "https://innovativestartup.com",
|
|
139
|
+
"WORDPRESS_USERNAME": "startup-editor",
|
|
140
|
+
"WORDPRESS_APP_PASSWORD": "yyyy yyyy yyyy yyyy yyyy yyyy"
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"id": "client-nonprofit",
|
|
145
|
+
"name": "Non-Profit Client",
|
|
146
|
+
"config": {
|
|
147
|
+
"WORDPRESS_SITE_URL": "https://helpingothers.org",
|
|
148
|
+
"WORDPRESS_USERNAME": "volunteer-coordinator",
|
|
149
|
+
"WORDPRESS_APP_PASSWORD": "zzzz zzzz zzzz zzzz zzzz zzzz",
|
|
150
|
+
"CACHE_ENABLED": "true"
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Development Environment Setup
|
|
158
|
+
|
|
159
|
+
### Local Development with Multiple Sites
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"sites": [
|
|
164
|
+
{
|
|
165
|
+
"id": "local-main",
|
|
166
|
+
"name": "Local Development Site",
|
|
167
|
+
"config": {
|
|
168
|
+
"WORDPRESS_SITE_URL": "http://localhost:8080",
|
|
169
|
+
"WORDPRESS_USERNAME": "admin",
|
|
170
|
+
"WORDPRESS_APP_PASSWORD": "local-dev-password",
|
|
171
|
+
"DEBUG": "true",
|
|
172
|
+
"NODE_ENV": "development"
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"id": "staging",
|
|
177
|
+
"name": "Staging Environment",
|
|
178
|
+
"config": {
|
|
179
|
+
"WORDPRESS_SITE_URL": "https://staging.mysite.com",
|
|
180
|
+
"WORDPRESS_USERNAME": "staging-admin",
|
|
181
|
+
"WORDPRESS_APP_PASSWORD": "staging-password",
|
|
182
|
+
"CACHE_ENABLED": "false",
|
|
183
|
+
"DEBUG": "true"
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"id": "production",
|
|
188
|
+
"name": "Production Site",
|
|
189
|
+
"config": {
|
|
190
|
+
"WORDPRESS_SITE_URL": "https://mysite.com",
|
|
191
|
+
"WORDPRESS_USERNAME": "prod-admin",
|
|
192
|
+
"WORDPRESS_APP_PASSWORD": "secure-prod-password",
|
|
193
|
+
"CACHE_ENABLED": "true",
|
|
194
|
+
"SECURITY_MONITORING": "true",
|
|
195
|
+
"DEBUG": "false"
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
]
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Authentication Method Combinations
|
|
203
|
+
|
|
204
|
+
### Mixed Authentication Methods
|
|
205
|
+
|
|
206
|
+
```json
|
|
207
|
+
{
|
|
208
|
+
"sites": [
|
|
209
|
+
{
|
|
210
|
+
"id": "modern-site",
|
|
211
|
+
"name": "Modern WordPress Site",
|
|
212
|
+
"config": {
|
|
213
|
+
"WORDPRESS_SITE_URL": "https://modern.com",
|
|
214
|
+
"WORDPRESS_USERNAME": "admin",
|
|
215
|
+
"WORDPRESS_APP_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx",
|
|
216
|
+
"WORDPRESS_AUTH_METHOD": "app-password"
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"id": "jwt-site",
|
|
221
|
+
"name": "JWT Enabled Site",
|
|
222
|
+
"config": {
|
|
223
|
+
"WORDPRESS_SITE_URL": "https://jwtsite.com",
|
|
224
|
+
"WORDPRESS_USERNAME": "api-user",
|
|
225
|
+
"WORDPRESS_PASSWORD": "secure-password",
|
|
226
|
+
"WORDPRESS_AUTH_METHOD": "jwt"
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"id": "legacy-site",
|
|
231
|
+
"name": "Legacy Site (Basic Auth)",
|
|
232
|
+
"config": {
|
|
233
|
+
"WORDPRESS_SITE_URL": "https://legacy.com",
|
|
234
|
+
"WORDPRESS_USERNAME": "legacy-admin",
|
|
235
|
+
"WORDPRESS_PASSWORD": "legacy-password",
|
|
236
|
+
"WORDPRESS_AUTH_METHOD": "basic"
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
]
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## Performance-Optimized Multi-Site
|
|
244
|
+
|
|
245
|
+
### High-Traffic Sites Configuration
|
|
246
|
+
|
|
247
|
+
```json
|
|
248
|
+
{
|
|
249
|
+
"sites": [
|
|
250
|
+
{
|
|
251
|
+
"id": "high-traffic-news",
|
|
252
|
+
"name": "News Website",
|
|
253
|
+
"config": {
|
|
254
|
+
"WORDPRESS_SITE_URL": "https://newssite.com",
|
|
255
|
+
"WORDPRESS_USERNAME": "news-editor",
|
|
256
|
+
"WORDPRESS_APP_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx",
|
|
257
|
+
"CACHE_ENABLED": "true",
|
|
258
|
+
"CACHE_TTL": "600",
|
|
259
|
+
"CACHE_MAX_ITEMS": "2000",
|
|
260
|
+
"RATE_LIMIT_ENABLED": "true",
|
|
261
|
+
"PERFORMANCE_MONITORING": "true"
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"id": "ecommerce-store",
|
|
266
|
+
"name": "E-commerce Store",
|
|
267
|
+
"config": {
|
|
268
|
+
"WORDPRESS_SITE_URL": "https://store.com",
|
|
269
|
+
"WORDPRESS_USERNAME": "store-manager",
|
|
270
|
+
"WORDPRESS_APP_PASSWORD": "yyyy yyyy yyyy yyyy yyyy yyyy",
|
|
271
|
+
"CACHE_ENABLED": "true",
|
|
272
|
+
"CACHE_TTL": "300",
|
|
273
|
+
"RATE_LIMIT_ENABLED": "true",
|
|
274
|
+
"API_TIMEOUT": "15000"
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"id": "corporate-site",
|
|
279
|
+
"name": "Corporate Website",
|
|
280
|
+
"config": {
|
|
281
|
+
"WORDPRESS_SITE_URL": "https://corporation.com",
|
|
282
|
+
"WORDPRESS_USERNAME": "corporate-admin",
|
|
283
|
+
"WORDPRESS_APP_PASSWORD": "zzzz zzzz zzzz zzzz zzzz zzzz",
|
|
284
|
+
"CACHE_ENABLED": "true",
|
|
285
|
+
"CACHE_TTL": "900",
|
|
286
|
+
"SECURITY_MONITORING": "true"
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
]
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
### Memory-Efficient Configuration
|
|
294
|
+
|
|
295
|
+
```json
|
|
296
|
+
{
|
|
297
|
+
"sites": [
|
|
298
|
+
{
|
|
299
|
+
"id": "small-blog-1",
|
|
300
|
+
"name": "Personal Blog 1",
|
|
301
|
+
"config": {
|
|
302
|
+
"WORDPRESS_SITE_URL": "https://blog1.com",
|
|
303
|
+
"WORDPRESS_USERNAME": "blogger",
|
|
304
|
+
"WORDPRESS_APP_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx",
|
|
305
|
+
"CACHE_ENABLED": "true",
|
|
306
|
+
"CACHE_MAX_ITEMS": "100",
|
|
307
|
+
"CACHE_MAX_MEMORY_MB": "20"
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"id": "small-blog-2",
|
|
312
|
+
"name": "Personal Blog 2",
|
|
313
|
+
"config": {
|
|
314
|
+
"WORDPRESS_SITE_URL": "https://blog2.com",
|
|
315
|
+
"WORDPRESS_USERNAME": "blogger",
|
|
316
|
+
"WORDPRESS_APP_PASSWORD": "yyyy yyyy yyyy yyyy yyyy yyyy",
|
|
317
|
+
"CACHE_ENABLED": "true",
|
|
318
|
+
"CACHE_MAX_ITEMS": "100",
|
|
319
|
+
"CACHE_MAX_MEMORY_MB": "20"
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
]
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## Industry-Specific Configurations
|
|
327
|
+
|
|
328
|
+
### Healthcare Practice Management
|
|
329
|
+
|
|
330
|
+
```json
|
|
331
|
+
{
|
|
332
|
+
"sites": [
|
|
333
|
+
{
|
|
334
|
+
"id": "main-practice",
|
|
335
|
+
"name": "Main Medical Practice",
|
|
336
|
+
"config": {
|
|
337
|
+
"WORDPRESS_SITE_URL": "https://medicalpractice.com",
|
|
338
|
+
"WORDPRESS_USERNAME": "medical-admin",
|
|
339
|
+
"WORDPRESS_APP_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx",
|
|
340
|
+
"SECURITY_MONITORING": "true",
|
|
341
|
+
"CACHE_ENABLED": "true",
|
|
342
|
+
"DEBUG": "false"
|
|
343
|
+
}
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"id": "specialist-clinic",
|
|
347
|
+
"name": "Specialist Clinic",
|
|
348
|
+
"config": {
|
|
349
|
+
"WORDPRESS_SITE_URL": "https://specialistclinic.com",
|
|
350
|
+
"WORDPRESS_USERNAME": "clinic-manager",
|
|
351
|
+
"WORDPRESS_APP_PASSWORD": "yyyy yyyy yyyy yyyy yyyy yyyy",
|
|
352
|
+
"SECURITY_MONITORING": "true"
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
]
|
|
356
|
+
}
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### Educational Institution
|
|
360
|
+
|
|
361
|
+
```json
|
|
362
|
+
{
|
|
363
|
+
"sites": [
|
|
364
|
+
{
|
|
365
|
+
"id": "university-main",
|
|
366
|
+
"name": "University Main Site",
|
|
367
|
+
"config": {
|
|
368
|
+
"WORDPRESS_SITE_URL": "https://university.edu",
|
|
369
|
+
"WORDPRESS_USERNAME": "web-admin",
|
|
370
|
+
"WORDPRESS_APP_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx",
|
|
371
|
+
"CACHE_ENABLED": "true",
|
|
372
|
+
"PERFORMANCE_MONITORING": "true"
|
|
373
|
+
}
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
"id": "student-portal",
|
|
377
|
+
"name": "Student Portal",
|
|
378
|
+
"config": {
|
|
379
|
+
"WORDPRESS_SITE_URL": "https://students.university.edu",
|
|
380
|
+
"WORDPRESS_USERNAME": "student-services",
|
|
381
|
+
"WORDPRESS_APP_PASSWORD": "yyyy yyyy yyyy yyyy yyyy yyyy",
|
|
382
|
+
"RATE_LIMIT_ENABLED": "true"
|
|
383
|
+
}
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"id": "faculty-blog",
|
|
387
|
+
"name": "Faculty Blog Network",
|
|
388
|
+
"config": {
|
|
389
|
+
"WORDPRESS_SITE_URL": "https://faculty.university.edu",
|
|
390
|
+
"WORDPRESS_USERNAME": "faculty-coordinator",
|
|
391
|
+
"WORDPRESS_APP_PASSWORD": "zzzz zzzz zzzz zzzz zzzz zzzz"
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
]
|
|
395
|
+
}
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
## Using Multi-Site Configuration
|
|
399
|
+
|
|
400
|
+
### Command Examples
|
|
401
|
+
|
|
402
|
+
```bash
|
|
403
|
+
# List all configured sites
|
|
404
|
+
npx mcp-wordpress --list-sites
|
|
405
|
+
|
|
406
|
+
# Test connection to specific site
|
|
407
|
+
npx mcp-wordpress --test-site="main-site"
|
|
408
|
+
|
|
409
|
+
# Use specific site in Claude
|
|
410
|
+
"List all posts from the blog site"
|
|
411
|
+
# Uses: wp_list_posts --site="blog"
|
|
412
|
+
|
|
413
|
+
"Create a new user on the main-site"
|
|
414
|
+
# Uses: wp_create_user --site="main-site" --username="newuser" --email="user@example.com"
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### Claude Desktop Usage
|
|
418
|
+
|
|
419
|
+
```text
|
|
420
|
+
💬 "List all posts from my blog site"
|
|
421
|
+
💬 "Create a new page on the main-site with title 'About Us'"
|
|
422
|
+
💬 "Upload an image to the restaurant client site"
|
|
423
|
+
💬 "Check performance metrics for the ecommerce site"
|
|
424
|
+
💬 "Show me recent comments from all sites"
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
## Security Considerations
|
|
428
|
+
|
|
429
|
+
### Site Isolation
|
|
430
|
+
|
|
431
|
+
Each site in the configuration maintains complete isolation:
|
|
432
|
+
|
|
433
|
+
- Separate authentication credentials
|
|
434
|
+
- Independent cache systems
|
|
435
|
+
- Isolated performance monitoring
|
|
436
|
+
- Individual security settings
|
|
437
|
+
|
|
438
|
+
### Access Control
|
|
439
|
+
|
|
440
|
+
```json
|
|
441
|
+
{
|
|
442
|
+
"sites": [
|
|
443
|
+
{
|
|
444
|
+
"id": "public-site",
|
|
445
|
+
"name": "Public Website",
|
|
446
|
+
"config": {
|
|
447
|
+
"WORDPRESS_SITE_URL": "https://public.com",
|
|
448
|
+
"WORDPRESS_USERNAME": "editor",
|
|
449
|
+
"WORDPRESS_APP_PASSWORD": "limited-permissions-password"
|
|
450
|
+
}
|
|
451
|
+
},
|
|
452
|
+
{
|
|
453
|
+
"id": "admin-site",
|
|
454
|
+
"name": "Administrative Site",
|
|
455
|
+
"config": {
|
|
456
|
+
"WORDPRESS_SITE_URL": "https://admin.company.com",
|
|
457
|
+
"WORDPRESS_USERNAME": "super-admin",
|
|
458
|
+
"WORDPRESS_APP_PASSWORD": "full-permissions-password",
|
|
459
|
+
"SECURITY_MONITORING": "true",
|
|
460
|
+
"RATE_LIMIT_ENABLED": "true"
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
]
|
|
464
|
+
}
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
## Configuration Management
|
|
468
|
+
|
|
469
|
+
### Environment-Based Configuration
|
|
470
|
+
|
|
471
|
+
**Development**
|
|
472
|
+
|
|
473
|
+
```json
|
|
474
|
+
{
|
|
475
|
+
"sites": [
|
|
476
|
+
{
|
|
477
|
+
"id": "dev-site",
|
|
478
|
+
"name": "Development Site",
|
|
479
|
+
"config": {
|
|
480
|
+
"WORDPRESS_SITE_URL": "http://localhost:8080",
|
|
481
|
+
"WORDPRESS_USERNAME": "admin",
|
|
482
|
+
"WORDPRESS_APP_PASSWORD": "dev-password",
|
|
483
|
+
"DEBUG": "true",
|
|
484
|
+
"CACHE_ENABLED": "false"
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
]
|
|
488
|
+
}
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
**Production**
|
|
492
|
+
|
|
493
|
+
```json
|
|
494
|
+
{
|
|
495
|
+
"sites": [
|
|
496
|
+
{
|
|
497
|
+
"id": "prod-site",
|
|
498
|
+
"name": "Production Site",
|
|
499
|
+
"config": {
|
|
500
|
+
"WORDPRESS_SITE_URL": "https://production.com",
|
|
501
|
+
"WORDPRESS_USERNAME": "prod-admin",
|
|
502
|
+
"WORDPRESS_APP_PASSWORD": "secure-prod-password",
|
|
503
|
+
"DEBUG": "false",
|
|
504
|
+
"CACHE_ENABLED": "true",
|
|
505
|
+
"SECURITY_MONITORING": "true"
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
]
|
|
509
|
+
}
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
## Troubleshooting Multi-Site Issues
|
|
513
|
+
|
|
514
|
+
### Common Problems
|
|
515
|
+
|
|
516
|
+
1. **Site ID not found**
|
|
517
|
+
- Verify the `id` field matches exactly
|
|
518
|
+
- Check for typos in site parameter
|
|
519
|
+
|
|
520
|
+
2. **Authentication fails for specific site**
|
|
521
|
+
- Test each site's credentials individually
|
|
522
|
+
- Regenerate application passwords if needed
|
|
523
|
+
|
|
524
|
+
3. **Performance issues with many sites**
|
|
525
|
+
- Enable caching for frequently used sites
|
|
526
|
+
- Adjust cache limits based on available memory
|
|
527
|
+
|
|
528
|
+
### Debug Commands
|
|
529
|
+
|
|
530
|
+
```bash
|
|
531
|
+
# List all configured sites
|
|
532
|
+
npm run status
|
|
533
|
+
|
|
534
|
+
# Test specific site
|
|
535
|
+
npm run status -- --site="site-id"
|
|
536
|
+
|
|
537
|
+
# Validate configuration file
|
|
538
|
+
npm run test:config
|
|
539
|
+
|
|
540
|
+
# Test all sites
|
|
541
|
+
npm run test:multisite
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### Validation Script
|
|
545
|
+
|
|
546
|
+
```bash
|
|
547
|
+
#!/bin/bash
|
|
548
|
+
# validate-config.sh
|
|
549
|
+
|
|
550
|
+
echo "Validating multi-site configuration..."
|
|
551
|
+
|
|
552
|
+
# Check if config file exists
|
|
553
|
+
if [ ! -f "mcp-wordpress.config.json" ]; then
|
|
554
|
+
echo "❌ Configuration file not found"
|
|
555
|
+
exit 1
|
|
556
|
+
fi
|
|
557
|
+
|
|
558
|
+
# Validate JSON syntax
|
|
559
|
+
if ! cat mcp-wordpress.config.json | jq . > /dev/null 2>&1; then
|
|
560
|
+
echo "❌ Invalid JSON syntax"
|
|
561
|
+
exit 1
|
|
562
|
+
fi
|
|
563
|
+
|
|
564
|
+
# Test each site
|
|
565
|
+
sites=$(cat mcp-wordpress.config.json | jq -r '.sites[].id')
|
|
566
|
+
for site in $sites; do
|
|
567
|
+
echo "Testing site: $site"
|
|
568
|
+
npm run status -- --site="$site"
|
|
569
|
+
done
|
|
570
|
+
|
|
571
|
+
echo "✅ Multi-site configuration validated"
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
This comprehensive multi-site setup allows you to manage unlimited WordPress sites
|
|
575
|
+
efficiently through a single Claude Desktop configuration.
|