@se-studio/contentful-cms 1.0.23 → 1.0.24
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 +50 -0
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +3 -2
- package/dist/commands/health.js.map +1 -1
- package/dist/config/load.d.ts +7 -1
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +29 -5
- package/dist/config/load.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -17,6 +17,56 @@ pnpm install
|
|
|
17
17
|
pnpm build
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
+
## MCP Setup (Claude Desktop / Claude Code)
|
|
21
|
+
|
|
22
|
+
`cms-edit` ships an MCP server so Claude can call it as a tool directly — no manual CLI use needed.
|
|
23
|
+
|
|
24
|
+
### Claude Desktop
|
|
25
|
+
|
|
26
|
+
Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"mcpServers": {
|
|
31
|
+
"cms-edit": {
|
|
32
|
+
"command": "npx",
|
|
33
|
+
"args": ["-y", "@se-studio/contentful-cms"],
|
|
34
|
+
"cwd": "/path/to/your/project",
|
|
35
|
+
"env": {
|
|
36
|
+
"CMS_EDIT_TOKEN_OM1": "your-management-token"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- `cwd` must point to the directory containing your `.contentful-cms.json` (or omit `cwd` and place the file in your home directory — `~/.contentful-cms.json` on macOS/Linux, `C:\Users\<you>\.contentful-cms.json` on Windows).
|
|
44
|
+
- Add one `CMS_EDIT_TOKEN_<SPACE>` env var per space defined in your config. Alternatively, set `CMS_EDIT_CONFIG` to the absolute path of your config file if you need to point at a specific location.
|
|
45
|
+
- `npx -y @se-studio/contentful-cms` always pulls the latest published version — no global install needed.
|
|
46
|
+
|
|
47
|
+
If you have the package installed globally, you can use `"command": "cms-edit-mcp"` (no `args`) instead.
|
|
48
|
+
|
|
49
|
+
### Claude Code
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
claude mcp add cms-edit -- npx -y @se-studio/contentful-cms
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Then set env vars in your project's `.env.local` (they are picked up automatically via the config's `${ENV_VAR}` syntax).
|
|
56
|
+
|
|
57
|
+
### What the MCP server exposes
|
|
58
|
+
|
|
59
|
+
A single `cms_edit` tool that accepts an `args` array matching any `cms-edit` CLI command:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
["open", "/pricing"]
|
|
63
|
+
["snapshot"]
|
|
64
|
+
["set", "@c0", "heading", "New heading"]
|
|
65
|
+
["save"]
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
All output is JSON. Stdin-mode commands (`rtf` with `-`) are not supported via MCP — use `--file` instead.
|
|
69
|
+
|
|
20
70
|
## Contentful Role Setup (Required)
|
|
21
71
|
|
|
22
72
|
Before using this tool, create a dedicated **AI Editor** role in your Contentful space with restricted permissions. This provides defence-in-depth safety on top of the CLI's own restrictions.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAGvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAGvF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAczC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwK5D"}
|
package/dist/commands/health.js
CHANGED
|
@@ -10,13 +10,14 @@ export function registerHealthCommand(program) {
|
|
|
10
10
|
.command('health')
|
|
11
11
|
.description('Validate config, token, and Contentful connectivity. No session required.\n' +
|
|
12
12
|
'Exit 0 if all required checks pass (optional warnings allowed). Exit 1 if any required check fails.')
|
|
13
|
-
.action(async () => {
|
|
13
|
+
.action(async (_opts, cmd) => {
|
|
14
|
+
const parentOpts = cmd.parent?.opts() ?? {};
|
|
14
15
|
try {
|
|
15
16
|
const results = [];
|
|
16
17
|
// 1. Config file found
|
|
17
18
|
let config;
|
|
18
19
|
try {
|
|
19
|
-
config = loadConfig();
|
|
20
|
+
config = loadConfig(parentOpts.config);
|
|
20
21
|
results.push({ name: 'Config file found', ok: true, optional: false, detail: 'OK' });
|
|
21
22
|
}
|
|
22
23
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAS9C,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CACV,6EAA6E;QAC3E,qGAAqG,CACxG;SACA,MAAM,CAAC,KAAK,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/commands/health.ts"],"names":[],"mappings":"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"}
|
package/dist/config/load.d.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import type { CmsEditConfig, SpaceConfig } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Loads .contentful-cms.json from the given path or searches up from cwd.
|
|
4
|
-
* Also loads .env.local from cwd for token resolution.
|
|
4
|
+
* Also loads .env.local from cwd (and home dir) for token resolution.
|
|
5
|
+
*
|
|
6
|
+
* Config resolution order:
|
|
7
|
+
* 1. --config <path> flag (explicit)
|
|
8
|
+
* 2. CMS_EDIT_CONFIG env var (useful for MCP / Claude Desktop env block)
|
|
9
|
+
* 3. Walk up from cwd
|
|
10
|
+
* 4. Home directory fallback (~/.contentful-cms.json)
|
|
5
11
|
*/
|
|
6
12
|
export declare function loadConfig(configPath?: string): CmsEditConfig;
|
|
7
13
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAiB7D;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CA+D7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAWrC"}
|
package/dist/config/load.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
|
+
import * as os from 'node:os';
|
|
2
3
|
import * as path from 'node:path';
|
|
3
4
|
import { config as loadDotenv } from 'dotenv';
|
|
4
5
|
/**
|
|
@@ -15,18 +16,36 @@ function resolveEnvToken(value) {
|
|
|
15
16
|
}
|
|
16
17
|
/**
|
|
17
18
|
* Loads .contentful-cms.json from the given path or searches up from cwd.
|
|
18
|
-
* Also loads .env.local from cwd for token resolution.
|
|
19
|
+
* Also loads .env.local from cwd (and home dir) for token resolution.
|
|
20
|
+
*
|
|
21
|
+
* Config resolution order:
|
|
22
|
+
* 1. --config <path> flag (explicit)
|
|
23
|
+
* 2. CMS_EDIT_CONFIG env var (useful for MCP / Claude Desktop env block)
|
|
24
|
+
* 3. Walk up from cwd
|
|
25
|
+
* 4. Home directory fallback (~/.contentful-cms.json)
|
|
19
26
|
*/
|
|
20
27
|
export function loadConfig(configPath) {
|
|
21
28
|
const cwd = process.cwd();
|
|
22
|
-
|
|
29
|
+
const home = os.homedir();
|
|
30
|
+
// Load .env.local from cwd and home dir so tokens like ${CMS_EDIT_TOKEN} can be resolved.
|
|
31
|
+
// Home dir is loaded first (lower priority) so cwd can override.
|
|
32
|
+
const homeEnvLocal = path.join(home, '.env.local');
|
|
33
|
+
if (fs.existsSync(homeEnvLocal)) {
|
|
34
|
+
loadDotenv({ path: homeEnvLocal, override: false, quiet: true });
|
|
35
|
+
}
|
|
23
36
|
const envLocalPath = path.join(cwd, '.env.local');
|
|
24
37
|
if (fs.existsSync(envLocalPath)) {
|
|
25
38
|
loadDotenv({ path: envLocalPath, override: false, quiet: true });
|
|
26
39
|
}
|
|
27
|
-
const
|
|
40
|
+
const envVarConfig = process.env['CMS_EDIT_CONFIG'];
|
|
41
|
+
const resolvedPath = configPath
|
|
42
|
+
? path.resolve(configPath)
|
|
43
|
+
: envVarConfig
|
|
44
|
+
? path.resolve(envVarConfig)
|
|
45
|
+
: findConfigFile(cwd);
|
|
28
46
|
if (!resolvedPath) {
|
|
29
|
-
throw new Error('No .contentful-cms.json found. Create one in your project root
|
|
47
|
+
throw new Error('No .contentful-cms.json found. Create one in your project root or home directory, ' +
|
|
48
|
+
'or set CMS_EDIT_CONFIG=/path/to/.contentful-cms.json (see .contentful-cms.example.json).');
|
|
30
49
|
}
|
|
31
50
|
const raw = fs.readFileSync(resolvedPath, 'utf-8');
|
|
32
51
|
const parsed = JSON.parse(raw);
|
|
@@ -71,6 +90,7 @@ export function resolveSpaceConfig(config, spaceKey) {
|
|
|
71
90
|
}
|
|
72
91
|
/**
|
|
73
92
|
* Walk up the directory tree from start to find .contentful-cms.json.
|
|
93
|
+
* Falls back to the home directory if not found along the path.
|
|
74
94
|
*/
|
|
75
95
|
function findConfigFile(start) {
|
|
76
96
|
let current = start;
|
|
@@ -80,8 +100,12 @@ function findConfigFile(start) {
|
|
|
80
100
|
return candidate;
|
|
81
101
|
const parent = path.dirname(current);
|
|
82
102
|
if (parent === current)
|
|
83
|
-
|
|
103
|
+
break;
|
|
84
104
|
current = parent;
|
|
85
105
|
}
|
|
106
|
+
// Home directory fallback — useful when launched by MCP servers (e.g. Claude Desktop)
|
|
107
|
+
// where the working directory is unrelated to the user's project.
|
|
108
|
+
const homeCandidate = path.join(os.homedir(), '.contentful-cms.json');
|
|
109
|
+
return fs.existsSync(homeCandidate) ? homeCandidate : null;
|
|
86
110
|
}
|
|
87
111
|
//# sourceMappingURL=load.js.map
|
package/dist/config/load.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAC;AAG9C;;GAEG;AACH,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,yBAAyB,GAAG,2DAA2D,CACxF,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/config/load.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@se-studio/contentful-cms",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.24",
|
|
4
4
|
"description": "CLI tool for AI agents to read and edit Contentful draft content without publish permissions",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
},
|
|
20
20
|
"bin": {
|
|
21
21
|
"cms-edit": "./dist/bin/cms-edit.js",
|
|
22
|
-
"cms-edit-mcp": "./dist/bin/cms-edit-mcp.js"
|
|
22
|
+
"cms-edit-mcp": "./dist/bin/cms-edit-mcp.js",
|
|
23
|
+
"contentful-cms": "./dist/bin/cms-edit-mcp.js"
|
|
23
24
|
},
|
|
24
25
|
"files": [
|
|
25
26
|
"dist",
|