@respira/wordpress-mcp-server 3.3.6 → 4.0.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 +41 -4
- package/dist/config.d.ts +22 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +217 -175
- package/dist/config.js.map +1 -1
- package/dist/discovery/abilities.js +2 -2
- package/dist/discovery/abilities.js.map +1 -1
- package/dist/divi-context.d.ts +2 -2
- package/dist/divi-context.d.ts.map +1 -1
- package/dist/divi-context.js +10 -7
- package/dist/divi-context.js.map +1 -1
- package/dist/divi-prompts.d.ts +1 -1
- package/dist/divi-prompts.d.ts.map +1 -1
- package/dist/divi-prompts.js +21 -10
- package/dist/divi-prompts.js.map +1 -1
- package/dist/index.d.ts +2 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -25
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +7 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +149 -19
- package/dist/server.js.map +1 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +112 -3
- package/dist/setup.js.map +1 -1
- package/dist/smithery.d.ts +54 -0
- package/dist/smithery.d.ts.map +1 -0
- package/dist/smithery.js +76 -0
- package/dist/smithery.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/wordpress-client.d.ts +12 -4
- package/dist/wordpress-client.d.ts.map +1 -1
- package/dist/wordpress-client.js +210 -4
- package/dist/wordpress-client.js.map +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
| Inventory and stock tools | Yes (add-on) | No |
|
|
63
63
|
| Sales reports and inventory intelligence | Yes (add-on) | No |
|
|
64
64
|
|
|
65
|
-
### Tool Inventory (
|
|
65
|
+
### Tool Inventory (v4.0)
|
|
66
66
|
|
|
67
67
|
- `82` always-on `wordpress_*` tools
|
|
68
68
|
- `21` conditional `woocommerce_*` tools (only when WooCommerce add-on is installed and licensed)
|
|
@@ -116,6 +116,8 @@ WooCommerce add-on details: [respira.press/addons/woocommerce](https://respira.p
|
|
|
116
116
|
|
|
117
117
|
### Step 2: Configure Your AI Tool
|
|
118
118
|
|
|
119
|
+
For agencies or anyone managing multiple connected sites, use the dedicated hosted setup page at [respira.press/dashboard/mcp](https://www.respira.press/dashboard/mcp). It generates the all-sites config, one-time install command, and AI setup prompt from your account inventory.
|
|
120
|
+
|
|
119
121
|
<details>
|
|
120
122
|
<summary><b>Cursor</b></summary>
|
|
121
123
|
|
|
@@ -184,7 +186,7 @@ Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)
|
|
|
184
186
|
|
|
185
187
|
</details>
|
|
186
188
|
|
|
187
|
-
### Step 3: Add Your Site
|
|
189
|
+
### Step 3: Add Your Site (Manual / Advanced)
|
|
188
190
|
|
|
189
191
|
Create `~/.respira/config.json`:
|
|
190
192
|
```json
|
|
@@ -203,6 +205,13 @@ Create `~/.respira/config.json`:
|
|
|
203
205
|
|
|
204
206
|
**Done!** Restart your AI tool and start editing.
|
|
205
207
|
|
|
208
|
+
### Guided Agency Setup
|
|
209
|
+
|
|
210
|
+
- Download client-specific config from [respira.press/dashboard/mcp](https://www.respira.press/dashboard/mcp)
|
|
211
|
+
- Or copy the one-time installer command:
|
|
212
|
+
- `npx -y @respira/wordpress-mcp-server --install-config --client codex --install-token <token>`
|
|
213
|
+
- Treat exported configs and install commands like passwords. They grant access to connected sites. Never commit them to git or paste them into public chats or tickets.
|
|
214
|
+
|
|
206
215
|
---
|
|
207
216
|
|
|
208
217
|
## Safe Editing (Unique to Respira)
|
|
@@ -412,6 +421,34 @@ npx -y @respira/wordpress-mcp-server
|
|
|
412
421
|
npx -y @smithery/cli install @respira/wordpress-mcp-server --client claude
|
|
413
422
|
```
|
|
414
423
|
|
|
424
|
+
### Publish on Smithery
|
|
425
|
+
|
|
426
|
+
Use Smithery's **GitHub / local deployment** flow for this repo, not the external URL form. Respira is a stdio-first MCP package, and Smithery can host the transport layer directly from the repository.
|
|
427
|
+
|
|
428
|
+
Respira's longer-term Smithery architecture is a separate **remote MCP** hosted on `mcp.respira.press` with Respira OAuth and server-side entitlement checks. That remote path is the official commercial direction for Smithery because it keeps the paywall on the server. The local/package-hosted Smithery path in this repo remains the manual fallback and development path until the remote service is live.
|
|
429
|
+
|
|
430
|
+
Recommended Smithery settings for this monorepo:
|
|
431
|
+
|
|
432
|
+
1. Repository: `webmyc/respira-wordpress`
|
|
433
|
+
2. Base directory: `mcp-server`
|
|
434
|
+
3. Config file: `mcp-server/smithery.yaml`
|
|
435
|
+
4. Runtime: `typescript` (picked up from `smithery.yaml`)
|
|
436
|
+
|
|
437
|
+
Smithery session config fields:
|
|
438
|
+
|
|
439
|
+
- `wordpressUrl` - normal single-site setup
|
|
440
|
+
- `apiKey` - Respira plugin key (`respira_...`) or dashboard site token (`respira_site_...`)
|
|
441
|
+
- `siteName` - optional display label
|
|
442
|
+
- `siteId` - optional stable site identifier
|
|
443
|
+
- `respiraConfigB64` - advanced dashboard export for multi-site setups
|
|
444
|
+
|
|
445
|
+
Notes:
|
|
446
|
+
|
|
447
|
+
- Smithery is best treated as a single-site connection for Respira today.
|
|
448
|
+
- For agency multi-site work, use the dedicated export flow at [respira.press/dashboard/mcp](https://www.respira.press/dashboard/mcp).
|
|
449
|
+
- Treat Smithery config values like passwords. They grant access to connected WordPress sites.
|
|
450
|
+
- When the remote Smithery service launches, prefer the OAuth-backed `mcp.respira.press` connection over pasted site tokens.
|
|
451
|
+
|
|
415
452
|
### Interactive Setup Wizard
|
|
416
453
|
```bash
|
|
417
454
|
npx @respira/wordpress-mcp-server --setup
|
|
@@ -441,8 +478,8 @@ npx @respira/wordpress-mcp-server --help # Show help
|
|
|
441
478
|
|
|
442
479
|
### Environment Variables (Alternative to config file)
|
|
443
480
|
```bash
|
|
444
|
-
export
|
|
445
|
-
export
|
|
481
|
+
export WORDPRESS_URL=https://your-site.com
|
|
482
|
+
export WORDPRESS_API_KEY=respira_your-api-key
|
|
446
483
|
```
|
|
447
484
|
|
|
448
485
|
---
|
package/dist/config.d.ts
CHANGED
|
@@ -2,15 +2,34 @@
|
|
|
2
2
|
* Configuration management
|
|
3
3
|
*/
|
|
4
4
|
import type { RespiraConfig, WordPressSiteConfig } from './types/index.js';
|
|
5
|
+
export declare const CONFIG_DIR: string;
|
|
6
|
+
export declare const CONFIG_FILE: string;
|
|
7
|
+
export declare function validateAndFixSiteUrl(url: string): {
|
|
8
|
+
url: string;
|
|
9
|
+
fixed: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare function normalizeConfig(config: RespiraConfig, sourceLabel: string, persistPath?: string): RespiraConfig;
|
|
12
|
+
export declare function readConfigFromBase64(encoded: string): RespiraConfig;
|
|
5
13
|
/**
|
|
6
|
-
* Load configuration from file or
|
|
7
|
-
*
|
|
14
|
+
* Load configuration from inline base64, explicit file path, default file, or env vars.
|
|
15
|
+
*
|
|
16
|
+
* Precedence by default:
|
|
17
|
+
* 1. RESPIRA_CONFIG_B64
|
|
18
|
+
* 2. RESPIRA_CONFIG_FILE
|
|
19
|
+
* 3. ~/.respira/config.json
|
|
20
|
+
* 4. WORDPRESS_URL + WORDPRESS_API_KEY
|
|
21
|
+
*
|
|
22
|
+
* Set RESPIRA_CONFIG_MODE=env to force env-only mode for single-site setups.
|
|
8
23
|
*/
|
|
9
24
|
export declare function loadConfig(): RespiraConfig;
|
|
10
25
|
/**
|
|
11
|
-
* Save configuration to file
|
|
26
|
+
* Save configuration to the default Respira config file.
|
|
12
27
|
*/
|
|
13
28
|
export declare function saveConfig(config: RespiraConfig): void;
|
|
29
|
+
/**
|
|
30
|
+
* Save configuration to an explicit file path.
|
|
31
|
+
*/
|
|
32
|
+
export declare function saveConfigToPath(config: RespiraConfig, path: string): void;
|
|
14
33
|
/**
|
|
15
34
|
* Add a new site to configuration
|
|
16
35
|
*/
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE3E,eAAO,MAAM,UAAU,QAA8B,CAAC;AACtD,eAAO,MAAM,WAAW,QAAkC,CAAC;AAE3D,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAoElF;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,aAAa,CA0Cf;AAQD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAInE;AAiED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,IAAI,aAAa,CA2C1C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAOtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAO1E;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAavD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAe/C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAYnD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBlE"}
|
package/dist/config.js
CHANGED
|
@@ -2,205 +2,250 @@
|
|
|
2
2
|
* Configuration management
|
|
3
3
|
*/
|
|
4
4
|
import { readFileSync, existsSync, writeFileSync, mkdirSync } from 'fs';
|
|
5
|
-
import { join } from 'path';
|
|
5
|
+
import { join, dirname } from 'path';
|
|
6
6
|
import { homedir } from 'os';
|
|
7
|
-
const CONFIG_DIR = join(homedir(), '.respira');
|
|
8
|
-
const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
7
|
+
export const CONFIG_DIR = join(homedir(), '.respira');
|
|
8
|
+
export const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
|
|
9
|
+
export function validateAndFixSiteUrl(url) {
|
|
10
|
+
let fixedUrl = (url || '').trim();
|
|
11
|
+
let fixed = false;
|
|
12
|
+
const dupProtocolMatch = fixedUrl.match(/^(https?:\/\/){2,}/i);
|
|
13
|
+
if (dupProtocolMatch) {
|
|
14
|
+
const firstProtocol = fixedUrl.startsWith('https') ? 'https://' : 'http://';
|
|
15
|
+
fixedUrl = fixedUrl.replace(/^(https?:\/\/)+/i, firstProtocol);
|
|
16
|
+
fixed = true;
|
|
17
|
+
}
|
|
18
|
+
if (fixedUrl.match(/^http:\/\/https:\/\//i)) {
|
|
19
|
+
fixedUrl = fixedUrl.replace(/^http:\/\/https:\/\//i, 'https://');
|
|
20
|
+
fixed = true;
|
|
21
|
+
}
|
|
22
|
+
if (fixedUrl.match(/^https:\/\/http:\/\//i)) {
|
|
23
|
+
fixedUrl = fixedUrl.replace(/^https:\/\/http:\/\//i, 'https://');
|
|
24
|
+
fixed = true;
|
|
25
|
+
}
|
|
26
|
+
if (fixedUrl.match(/^(https?)\/\//i)) {
|
|
27
|
+
fixedUrl = fixedUrl.replace(/^(https?)\/\//i, '$1://');
|
|
28
|
+
fixed = true;
|
|
29
|
+
}
|
|
30
|
+
if (fixedUrl.match(/^(https?:\/\/)\//)) {
|
|
31
|
+
fixedUrl = fixedUrl.replace(/^(https?:\/\/)\//, '$1');
|
|
32
|
+
fixed = true;
|
|
33
|
+
}
|
|
34
|
+
const protocolMatch = fixedUrl.match(/^(https?:\/\/)(.*)$/i);
|
|
35
|
+
if (protocolMatch) {
|
|
36
|
+
const protocol = protocolMatch[1];
|
|
37
|
+
const path = protocolMatch[2];
|
|
38
|
+
const fixedPath = path.replace(/\/+/g, '/');
|
|
39
|
+
fixedUrl = protocol + fixedPath;
|
|
40
|
+
if (path !== fixedPath) {
|
|
41
|
+
fixed = true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (!fixedUrl.match(/^https?:\/\//i)) {
|
|
45
|
+
const host = fixedUrl.split('/')[0]?.split(':')[0] || '';
|
|
46
|
+
const isLocal = /^(localhost|127\.0\.0\.1|.*\.local|.*\.localdomain|.*\.lndo\.site)$/i.test(host);
|
|
47
|
+
fixedUrl = `${isLocal ? 'http' : 'https'}://${fixedUrl}`;
|
|
48
|
+
fixed = true;
|
|
49
|
+
}
|
|
50
|
+
const urlObj = new URL(fixedUrl);
|
|
51
|
+
if (urlObj.protocol !== 'http:' && urlObj.protocol !== 'https:') {
|
|
52
|
+
throw new Error(`Invalid URL protocol: ${urlObj.protocol}`);
|
|
53
|
+
}
|
|
54
|
+
if (!urlObj.hostname || urlObj.hostname.length === 0) {
|
|
55
|
+
throw new Error('Invalid hostname');
|
|
56
|
+
}
|
|
57
|
+
if (urlObj.port === '80' && urlObj.protocol === 'http:') {
|
|
58
|
+
urlObj.port = '';
|
|
59
|
+
}
|
|
60
|
+
if (urlObj.port === '443' && urlObj.protocol === 'https:') {
|
|
61
|
+
urlObj.port = '';
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
url: urlObj.toString().replace(/\/$/, ''),
|
|
65
|
+
fixed,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export function normalizeConfig(config, sourceLabel, persistPath) {
|
|
69
|
+
if (!config?.sites || config.sites.length === 0) {
|
|
70
|
+
throw new Error(`No WordPress sites configured in ${sourceLabel}`);
|
|
71
|
+
}
|
|
72
|
+
let changed = false;
|
|
73
|
+
const normalizedSites = config.sites.map((site, index) => {
|
|
74
|
+
if (!site.id || !site.name || !site.url || !site.apiKey) {
|
|
75
|
+
throw new Error(`Site ${index + 1} is missing required fields (id, name, url, apiKey)`);
|
|
76
|
+
}
|
|
77
|
+
const validated = validateAndFixSiteUrl(site.url);
|
|
78
|
+
if (validated.fixed) {
|
|
79
|
+
changed = true;
|
|
80
|
+
console.warn(`Warning: Site "${site.name}" had malformed URL: ${site.url}`);
|
|
81
|
+
console.warn(` Auto-fixed to: ${validated.url}`);
|
|
82
|
+
}
|
|
83
|
+
if (!site.apiKey.startsWith('respira_')) {
|
|
84
|
+
console.warn(`Warning: API key for "${site.name}" doesn't start with "respira_" prefix`);
|
|
85
|
+
}
|
|
25
86
|
return {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
id: 'env-site',
|
|
29
|
-
name: 'WordPress (from env)',
|
|
30
|
-
url,
|
|
31
|
-
apiKey: envKey,
|
|
32
|
-
default: true,
|
|
33
|
-
},
|
|
34
|
-
],
|
|
35
|
-
preferences: {
|
|
36
|
-
autoDuplicate: true,
|
|
37
|
-
securityChecks: true,
|
|
38
|
-
},
|
|
87
|
+
...site,
|
|
88
|
+
url: validated.url,
|
|
39
89
|
};
|
|
90
|
+
});
|
|
91
|
+
const normalizedConfig = {
|
|
92
|
+
...config,
|
|
93
|
+
sites: normalizedSites,
|
|
94
|
+
preferences: {
|
|
95
|
+
autoDuplicate: config.preferences?.autoDuplicate ?? true,
|
|
96
|
+
securityChecks: config.preferences?.securityChecks ?? true,
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
if (changed && persistPath) {
|
|
100
|
+
writeConfig(normalizedConfig, persistPath);
|
|
40
101
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
102
|
+
return normalizedConfig;
|
|
103
|
+
}
|
|
104
|
+
function readConfigFromPath(path, sourceLabel, persistFixes = false) {
|
|
105
|
+
const configData = readFileSync(path, 'utf-8');
|
|
106
|
+
const parsed = JSON.parse(configData);
|
|
107
|
+
return normalizeConfig(parsed, sourceLabel, persistFixes ? path : undefined);
|
|
108
|
+
}
|
|
109
|
+
export function readConfigFromBase64(encoded) {
|
|
110
|
+
const raw = Buffer.from(encoded, 'base64').toString('utf8');
|
|
111
|
+
const parsed = JSON.parse(raw);
|
|
112
|
+
return normalizeConfig(parsed, 'RESPIRA_CONFIG_B64');
|
|
113
|
+
}
|
|
114
|
+
function ensureDefaultConfigFile() {
|
|
115
|
+
console.error('No configuration file found. Creating default configuration...');
|
|
116
|
+
console.error(`Please edit ${CONFIG_FILE} to add your WordPress sites.`);
|
|
117
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
118
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
119
|
+
}
|
|
120
|
+
saveConfig({
|
|
121
|
+
sites: [
|
|
122
|
+
{
|
|
123
|
+
id: 'example-site',
|
|
124
|
+
name: 'My WordPress Site',
|
|
125
|
+
url: 'https://example.com',
|
|
126
|
+
apiKey: 'respira_your-api-key-here',
|
|
127
|
+
default: true,
|
|
62
128
|
},
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
129
|
+
],
|
|
130
|
+
preferences: {
|
|
131
|
+
autoDuplicate: true,
|
|
132
|
+
securityChecks: true,
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
throw new Error(`Configuration file created at ${CONFIG_FILE}\n` +
|
|
136
|
+
'Please update it with your WordPress site URL and API key, then run again.');
|
|
137
|
+
}
|
|
138
|
+
function loadEnvSingleSiteConfig() {
|
|
139
|
+
const envUrl = process.env.WORDPRESS_URL?.trim();
|
|
140
|
+
const envKey = process.env.WORDPRESS_API_KEY?.trim();
|
|
141
|
+
if (!envUrl || !envKey) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
const validated = validateAndFixSiteUrl(envUrl);
|
|
145
|
+
return {
|
|
146
|
+
sites: [
|
|
147
|
+
{
|
|
148
|
+
id: 'env-site',
|
|
149
|
+
name: 'WordPress (from env)',
|
|
150
|
+
url: validated.url,
|
|
151
|
+
apiKey: envKey,
|
|
152
|
+
default: true,
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
preferences: {
|
|
156
|
+
autoDuplicate: true,
|
|
157
|
+
securityChecks: true,
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function writeConfig(config, path) {
|
|
162
|
+
const targetDir = dirname(path);
|
|
163
|
+
if (!existsSync(targetDir)) {
|
|
164
|
+
mkdirSync(targetDir, { recursive: true });
|
|
67
165
|
}
|
|
166
|
+
writeFileSync(path, JSON.stringify(config, null, 2));
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Load configuration from inline base64, explicit file path, default file, or env vars.
|
|
170
|
+
*
|
|
171
|
+
* Precedence by default:
|
|
172
|
+
* 1. RESPIRA_CONFIG_B64
|
|
173
|
+
* 2. RESPIRA_CONFIG_FILE
|
|
174
|
+
* 3. ~/.respira/config.json
|
|
175
|
+
* 4. WORDPRESS_URL + WORDPRESS_API_KEY
|
|
176
|
+
*
|
|
177
|
+
* Set RESPIRA_CONFIG_MODE=env to force env-only mode for single-site setups.
|
|
178
|
+
*/
|
|
179
|
+
export function loadConfig() {
|
|
180
|
+
const forcedMode = process.env.RESPIRA_CONFIG_MODE?.trim();
|
|
68
181
|
try {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
throw new Error('No WordPress sites configured in config.json');
|
|
74
|
-
}
|
|
75
|
-
// Validate each site
|
|
76
|
-
config.sites.forEach((site, index) => {
|
|
77
|
-
if (!site.id || !site.name || !site.url || !site.apiKey) {
|
|
78
|
-
throw new Error(`Site ${index + 1} is missing required fields (id, name, url, apiKey)`);
|
|
79
|
-
}
|
|
80
|
-
if (!site.apiKey.startsWith('respira_')) {
|
|
81
|
-
console.warn(`Warning: API key for "${site.name}" doesn't start with "respira_" prefix`);
|
|
82
|
-
}
|
|
83
|
-
// Validate and fix URL
|
|
84
|
-
let fixedUrl = site.url.trim();
|
|
85
|
-
let urlFixed = false;
|
|
86
|
-
// Fix duplicate protocols (https://https://, http://http://, etc.) - preserve original protocol
|
|
87
|
-
const dupProtocolMatch = fixedUrl.match(/^(https?:\/\/){2,}/i);
|
|
88
|
-
if (dupProtocolMatch) {
|
|
89
|
-
const firstProtocol = fixedUrl.startsWith('https') ? 'https://' : 'http://';
|
|
90
|
-
fixedUrl = fixedUrl.replace(/^(https?:\/\/)+/i, firstProtocol);
|
|
91
|
-
urlFixed = true;
|
|
92
|
-
}
|
|
93
|
-
// Fix mixed protocols (http://https://, https://http://)
|
|
94
|
-
if (fixedUrl.match(/^http:\/\/https:\/\//i)) {
|
|
95
|
-
fixedUrl = fixedUrl.replace(/^http:\/\/https:\/\//i, 'https://');
|
|
96
|
-
urlFixed = true;
|
|
97
|
-
}
|
|
98
|
-
if (fixedUrl.match(/^https:\/\/http:\/\//i)) {
|
|
99
|
-
fixedUrl = fixedUrl.replace(/^https:\/\/http:\/\//i, 'https://');
|
|
100
|
-
urlFixed = true;
|
|
101
|
-
}
|
|
102
|
-
// Fix malformed protocols (https//, http//)
|
|
103
|
-
if (fixedUrl.match(/^(https?)\/\//i)) {
|
|
104
|
-
fixedUrl = fixedUrl.replace(/^(https?)\/\//i, '$1://');
|
|
105
|
-
urlFixed = true;
|
|
106
|
-
}
|
|
107
|
-
// Fix triple slashes (https:///example.com)
|
|
108
|
-
if (fixedUrl.match(/^(https?:\/\/)\//)) {
|
|
109
|
-
fixedUrl = fixedUrl.replace(/^(https?:\/\/)\//, '$1');
|
|
110
|
-
urlFixed = true;
|
|
182
|
+
if (forcedMode === 'env') {
|
|
183
|
+
const envConfig = loadEnvSingleSiteConfig();
|
|
184
|
+
if (!envConfig) {
|
|
185
|
+
throw new Error('RESPIRA_CONFIG_MODE=env requires WORDPRESS_URL and WORDPRESS_API_KEY.');
|
|
111
186
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// Validate URL format
|
|
125
|
-
try {
|
|
126
|
-
// Add protocol if missing - use http for local dev (Local, Lando, etc.)
|
|
127
|
-
if (!fixedUrl.match(/^https?:\/\//i)) {
|
|
128
|
-
const host = fixedUrl.split('/')[0]?.split(':')[0] || '';
|
|
129
|
-
const isLocal = /^(localhost|127\.0\.0\.1|.*\.local|.*\.localdomain|.*\.lndo\.site)$/i.test(host);
|
|
130
|
-
fixedUrl = `${isLocal ? 'http' : 'https'}://${fixedUrl}`;
|
|
131
|
-
urlFixed = true;
|
|
132
|
-
}
|
|
133
|
-
const urlObj = new URL(fixedUrl);
|
|
134
|
-
// Ensure protocol is http or https
|
|
135
|
-
if (urlObj.protocol !== 'http:' && urlObj.protocol !== 'https:') {
|
|
136
|
-
throw new Error(`Site ${index + 1} ("${site.name}") has invalid URL protocol: ${urlObj.protocol}`);
|
|
137
|
-
}
|
|
138
|
-
// Validate hostname
|
|
139
|
-
if (!urlObj.hostname || urlObj.hostname.length === 0) {
|
|
140
|
-
throw new Error(`Site ${index + 1} ("${site.name}") has invalid hostname`);
|
|
141
|
-
}
|
|
142
|
-
// Remove default ports
|
|
143
|
-
if (urlObj.port === '80' && urlObj.protocol === 'http:') {
|
|
144
|
-
urlObj.port = '';
|
|
145
|
-
}
|
|
146
|
-
if (urlObj.port === '443' && urlObj.protocol === 'https:') {
|
|
147
|
-
urlObj.port = '';
|
|
148
|
-
}
|
|
149
|
-
// Update site URL if it was fixed
|
|
150
|
-
if (urlFixed) {
|
|
151
|
-
const normalizedUrl = urlObj.toString().replace(/\/$/, '');
|
|
152
|
-
console.warn(`Warning: Site "${site.name}" had malformed URL: ${site.url}`);
|
|
153
|
-
console.warn(` Auto-fixed to: ${normalizedUrl}`);
|
|
154
|
-
site.url = normalizedUrl;
|
|
155
|
-
// Save fixed config back
|
|
156
|
-
saveConfig(config);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
catch (e) {
|
|
160
|
-
if (e instanceof TypeError && e.message.includes('Invalid URL')) {
|
|
161
|
-
throw new Error(`Site ${index + 1} ("${site.name}") has invalid URL: ${site.url}`);
|
|
162
|
-
}
|
|
163
|
-
throw e;
|
|
187
|
+
return envConfig;
|
|
188
|
+
}
|
|
189
|
+
const inlineConfig = process.env.RESPIRA_CONFIG_B64?.trim();
|
|
190
|
+
if (inlineConfig) {
|
|
191
|
+
return readConfigFromBase64(inlineConfig);
|
|
192
|
+
}
|
|
193
|
+
const explicitPath = process.env.RESPIRA_CONFIG_FILE?.trim();
|
|
194
|
+
if (explicitPath) {
|
|
195
|
+
if (!existsSync(explicitPath)) {
|
|
196
|
+
throw new Error(`RESPIRA_CONFIG_FILE points to a missing file: ${explicitPath}`);
|
|
164
197
|
}
|
|
165
|
-
|
|
166
|
-
|
|
198
|
+
return readConfigFromPath(explicitPath, explicitPath, true);
|
|
199
|
+
}
|
|
200
|
+
if (existsSync(CONFIG_FILE)) {
|
|
201
|
+
return readConfigFromPath(CONFIG_FILE, CONFIG_FILE, true);
|
|
202
|
+
}
|
|
203
|
+
const envConfig = loadEnvSingleSiteConfig();
|
|
204
|
+
if (envConfig) {
|
|
205
|
+
return envConfig;
|
|
206
|
+
}
|
|
207
|
+
return ensureDefaultConfigFile();
|
|
167
208
|
}
|
|
168
209
|
catch (error) {
|
|
169
|
-
if (error.code === 'ENOENT') {
|
|
170
|
-
return DEFAULT_CONFIG;
|
|
171
|
-
}
|
|
172
210
|
if (error instanceof SyntaxError) {
|
|
173
|
-
throw new Error(`Invalid JSON in
|
|
211
|
+
throw new Error(`Invalid JSON in configuration: ${error.message}`);
|
|
174
212
|
}
|
|
175
213
|
const errorMessage = error?.message || error?.toString() || 'Unknown error';
|
|
176
|
-
throw new Error(`Failed to load configuration
|
|
214
|
+
throw new Error(`Failed to load Respira configuration: ${errorMessage}`);
|
|
177
215
|
}
|
|
178
216
|
}
|
|
179
217
|
/**
|
|
180
|
-
* Save configuration to file
|
|
218
|
+
* Save configuration to the default Respira config file.
|
|
181
219
|
*/
|
|
182
220
|
export function saveConfig(config) {
|
|
183
221
|
try {
|
|
184
|
-
|
|
185
|
-
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
186
|
-
}
|
|
187
|
-
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
222
|
+
writeConfig(config, CONFIG_FILE);
|
|
188
223
|
console.error(`Configuration saved to ${CONFIG_FILE}`);
|
|
189
224
|
}
|
|
190
225
|
catch (error) {
|
|
191
226
|
throw new Error(`Failed to save configuration: ${error.message}`);
|
|
192
227
|
}
|
|
193
228
|
}
|
|
229
|
+
/**
|
|
230
|
+
* Save configuration to an explicit file path.
|
|
231
|
+
*/
|
|
232
|
+
export function saveConfigToPath(config, path) {
|
|
233
|
+
try {
|
|
234
|
+
writeConfig(config, path);
|
|
235
|
+
console.error(`Configuration saved to ${path}`);
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
throw new Error(`Failed to save configuration to ${path}: ${error.message}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
194
241
|
/**
|
|
195
242
|
* Add a new site to configuration
|
|
196
243
|
*/
|
|
197
244
|
export function addSite(site) {
|
|
198
245
|
const config = loadConfig();
|
|
199
|
-
|
|
200
|
-
if (config.sites.some((s) => s.id === site.id)) {
|
|
246
|
+
if (config.sites.some((existing) => existing.id === site.id)) {
|
|
201
247
|
throw new Error(`Site with ID "${site.id}" already exists`);
|
|
202
248
|
}
|
|
203
|
-
// If this is the first site, make it default
|
|
204
249
|
if (config.sites.length === 0) {
|
|
205
250
|
site.default = true;
|
|
206
251
|
}
|
|
@@ -212,13 +257,12 @@ export function addSite(site) {
|
|
|
212
257
|
*/
|
|
213
258
|
export function removeSite(siteId) {
|
|
214
259
|
const config = loadConfig();
|
|
215
|
-
const index = config.sites.findIndex((
|
|
260
|
+
const index = config.sites.findIndex((site) => site.id === siteId);
|
|
216
261
|
if (index === -1) {
|
|
217
262
|
throw new Error(`Site with ID "${siteId}" not found`);
|
|
218
263
|
}
|
|
219
264
|
config.sites.splice(index, 1);
|
|
220
|
-
|
|
221
|
-
if (config.sites.length > 0 && !config.sites.some((s) => s.default)) {
|
|
265
|
+
if (config.sites.length > 0 && !config.sites.some((site) => site.default)) {
|
|
222
266
|
config.sites[0].default = true;
|
|
223
267
|
}
|
|
224
268
|
saveConfig(config);
|
|
@@ -228,15 +272,13 @@ export function removeSite(siteId) {
|
|
|
228
272
|
*/
|
|
229
273
|
export function setDefaultSite(siteId) {
|
|
230
274
|
const config = loadConfig();
|
|
231
|
-
const site = config.sites.find((
|
|
275
|
+
const site = config.sites.find((candidate) => candidate.id === siteId);
|
|
232
276
|
if (!site) {
|
|
233
277
|
throw new Error(`Site with ID "${siteId}" not found`);
|
|
234
278
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
s.default = false;
|
|
279
|
+
config.sites.forEach((candidate) => {
|
|
280
|
+
candidate.default = false;
|
|
238
281
|
});
|
|
239
|
-
// Set new default
|
|
240
282
|
site.default = true;
|
|
241
283
|
saveConfig(config);
|
|
242
284
|
}
|
|
@@ -245,7 +287,7 @@ export function setDefaultSite(siteId) {
|
|
|
245
287
|
*/
|
|
246
288
|
export async function testConnection(siteId) {
|
|
247
289
|
const config = loadConfig();
|
|
248
|
-
const site = config.sites.find((
|
|
290
|
+
const site = config.sites.find((candidate) => candidate.id === siteId);
|
|
249
291
|
if (!site) {
|
|
250
292
|
throw new Error(`Site with ID "${siteId}" not found`);
|
|
251
293
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,12 +71,12 @@ export async function discoverAbilities(siteUrl, apiKey) {
|
|
|
71
71
|
result.message =
|
|
72
72
|
'This site has the WordPress Abilities API and MCP Adapter installed. ' +
|
|
73
73
|
'Respira abilities are registered and discoverable through the official adapter. ' +
|
|
74
|
-
'You can use
|
|
74
|
+
'You can use the standalone MCP server, the adapter default/public server, or the dedicated Respira adapter server side by side.';
|
|
75
75
|
}
|
|
76
76
|
else if (result.abilitiesApiAvailable && !result.respiraAbilitiesRegistered) {
|
|
77
77
|
result.message =
|
|
78
78
|
'This site has the WordPress Abilities API but Respira abilities are not registered. ' +
|
|
79
|
-
'Update the Respira plugin to
|
|
79
|
+
'Update the Respira plugin to a current 4.x build so abilities are registered automatically.';
|
|
80
80
|
}
|
|
81
81
|
else if (result.abilitiesApiAvailable) {
|
|
82
82
|
result.message =
|