drupal-mcp-connector 2.1.0 → 2.1.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/CHANGELOG.md +10 -0
- package/README.md +40 -15
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [2.1.1] - 2026-07-31
|
|
11
|
+
|
|
12
|
+
### Documentation
|
|
13
|
+
- **npm package page / README.** Security model table lists all six presets and
|
|
14
|
+
the 2.1 connector-side gates (entity policy on specialized tools, publish/draft
|
|
15
|
+
defaults, upload roots, fail-closed HTTPS). Quick start leads with `npm install`
|
|
16
|
+
for package consumers; clone path remains for development.
|
|
17
|
+
- Normalize `package.json` `repository.url` to the form npm expects
|
|
18
|
+
(`git+https://…`).
|
|
19
|
+
|
|
10
20
|
## [2.1.0] - 2026-07-31
|
|
11
21
|
|
|
12
22
|
### Security
|
package/README.md
CHANGED
|
@@ -125,7 +125,11 @@ Other MCP agents don't need this step — they get the same coverage from the pe
|
|
|
125
125
|
prompts above.
|
|
126
126
|
|
|
127
127
|
### Security Model
|
|
128
|
-
|
|
128
|
+
|
|
129
|
+
Defense-in-depth presets, enforced connector-side and complemented by Drupal-side
|
|
130
|
+
governance (MCP Sentinel). **Set an explicit preset on every non-dev site** —
|
|
131
|
+
if `security` is omitted, the connector still defaults to `development` (tracked
|
|
132
|
+
for change in issue #140).
|
|
129
133
|
|
|
130
134
|
```json
|
|
131
135
|
"security": { "preset": "auditor" }
|
|
@@ -134,11 +138,21 @@ Defense-in-depth with four one-line presets, enforced connector-side and complem
|
|
|
134
138
|
| Preset | What it does |
|
|
135
139
|
|--------|-------------|
|
|
136
140
|
| `development` | Everything allowed — local development only |
|
|
137
|
-
| `content-editor` | Create/edit
|
|
138
|
-
| `
|
|
139
|
-
| `
|
|
141
|
+
| `content-editor` | Create/edit content + structural entities; no deletes; no publishing; secrets/governance/account types denied |
|
|
142
|
+
| `config-editor` | content-editor + site-building config read + governed config write (developer tier) |
|
|
143
|
+
| `auditor` | Read-only; secrets/governance/account types denied; user PII redacted when user is allowed |
|
|
144
|
+
| `production-strict` | Read-only; same sensitive denylist as auditor; broad PII field redaction |
|
|
145
|
+
| `write-plane` | Create/update content set for agents; no deletes; no GraphQL mutations; publish off by default |
|
|
146
|
+
|
|
147
|
+
Additional connector-side gates (2.1+):
|
|
148
|
+
|
|
149
|
+
- **Entity allowlists** apply to specialized tools (`drupal_*_node`, media, taxonomy), not only `drupal_entity_*`.
|
|
150
|
+
- **Publish gate:** `status: true` and `moderation_state: "published"` require `allowPublish`. Media create defaults **unpublished**. Published moderated node updates without a moderation state default to **draft** (forward revision).
|
|
151
|
+
- **Uploads** only from `MCP_UPLOAD_ROOT` (or the process cwd); sensitive paths (`.env*`, `.ssh`, connector `config.json`) are refused.
|
|
152
|
+
- **HTTPS:** non-loopback binds require `MCP_AUTH_TOKEN` (or `MCP_ALLOW_UNAUTHENTICATED=1` behind a trusted proxy); non-loopback TLS defaults to 120 req/min rate limiting.
|
|
153
|
+
- **GraphQL caveat:** `drupal_graphql` returns raw query data — connector allowlists/redaction do not apply to that path (issue #142).
|
|
140
154
|
|
|
141
|
-
|
|
155
|
+
Full detail: **[docs/security.md](docs/security.md)** and **[docs/security-hardening.md](docs/security-hardening.md)**.
|
|
142
156
|
|
|
143
157
|
---
|
|
144
158
|
|
|
@@ -154,30 +168,38 @@ Presets layer with entity allow/deny lists, per-bundle operation rules, and fiel
|
|
|
154
168
|
|
|
155
169
|
## Quick Start
|
|
156
170
|
|
|
171
|
+
### From npm (recommended for operators)
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
npm install -g drupal-mcp-connector
|
|
175
|
+
# or: npx -y drupal-mcp-connector
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Point your MCP client at the installed binary (path from `which drupal-mcp-connector`
|
|
179
|
+
or `node_modules/.bin/drupal-mcp-connector`). For multi-site or non-env config,
|
|
180
|
+
clone the repo (or copy `config/config.example.json` beside a small launcher) and
|
|
181
|
+
pass a config path — see **[docs/getting-started.md](docs/getting-started.md)**.
|
|
182
|
+
|
|
183
|
+
### From a git clone (development)
|
|
184
|
+
|
|
157
185
|
```bash
|
|
158
|
-
# 1. Clone and install
|
|
159
186
|
git clone https://github.com/Wilkes-Liberty/drupal-mcp-connector
|
|
160
187
|
cd drupal-mcp-connector
|
|
161
188
|
npm install
|
|
162
|
-
|
|
163
|
-
# 2. Configure
|
|
164
189
|
cp config/config.example.json config/config.json
|
|
165
|
-
# Edit config/config.json —
|
|
166
|
-
|
|
167
|
-
# 3. Run (stdio transport)
|
|
190
|
+
# Edit config/config.json — baseUrl, api backend, auth, security preset
|
|
168
191
|
node src/index.js
|
|
169
192
|
```
|
|
170
193
|
|
|
171
194
|
### Register with an MCP client
|
|
172
195
|
|
|
173
|
-
Most desktop and CLI MCP clients launch the connector over **stdio
|
|
196
|
+
Most desktop and CLI MCP clients launch the connector over **stdio**:
|
|
174
197
|
|
|
175
198
|
```json
|
|
176
199
|
{
|
|
177
200
|
"mcpServers": {
|
|
178
201
|
"drupal": {
|
|
179
|
-
"command": "
|
|
180
|
-
"args": ["/absolute/path/to/drupal-mcp-connector/src/index.js"],
|
|
202
|
+
"command": "drupal-mcp-connector",
|
|
181
203
|
"env": {
|
|
182
204
|
"DRUPAL_BASE_URL": "https://mysite.com",
|
|
183
205
|
"DRUPAL_API_TOKEN": "your-token-here"
|
|
@@ -187,7 +209,10 @@ Most desktop and CLI MCP clients launch the connector over **stdio**. Add an ent
|
|
|
187
209
|
}
|
|
188
210
|
```
|
|
189
211
|
|
|
190
|
-
|
|
212
|
+
Or with an absolute path to `src/index.js` / the installed package. For multi-client
|
|
213
|
+
or remote use, run the HTTPS transport and register the endpoint instead — see
|
|
214
|
+
**[docs/getting-started.md](docs/getting-started.md)** and
|
|
215
|
+
**[docs/mcp-clients.md](docs/mcp-clients.md)**.
|
|
191
216
|
|
|
192
217
|
---
|
|
193
218
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "drupal-mcp-connector",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "A secure, multi-site Model Context Protocol (MCP) connector for Drupal — dual-protocol JSON:API and GraphQL.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"homepage": "https://github.com/Wilkes-Liberty/drupal-mcp-connector",
|
|
32
32
|
"repository": {
|
|
33
33
|
"type": "git",
|
|
34
|
-
"url": "https://github.com/Wilkes-Liberty/drupal-mcp-connector.git"
|
|
34
|
+
"url": "git+https://github.com/Wilkes-Liberty/drupal-mcp-connector.git"
|
|
35
35
|
},
|
|
36
36
|
"bugs": {
|
|
37
37
|
"url": "https://github.com/Wilkes-Liberty/drupal-mcp-connector/issues"
|