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.
Files changed (3) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +40 -15
  3. 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
- Defense-in-depth with four one-line presets, enforced connector-side and complemented by Drupal-side governance:
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 nodes, media, terms; no deletes; no publishing (`allowPublish` off); no user access |
138
- | `auditor` | Read-only, all entity types, PII fields redacted |
139
- | `production-strict` | Read-only, no user entities, broad PII redaction |
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
- Presets layer with entity allow/deny lists, per-bundle operation rules, and field-level redaction. Optional transport hardening (bearer-authenticated HTTPS, bind-address restriction, secrets-from-env) is covered in **[docs/security-hardening.md](docs/security-hardening.md)**.
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 — add your site's baseUrl, api backend, and auth
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**. Add an entry to your client's MCP server configuration:
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": "node",
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
- For multi-client or remote use, run the HTTPS transport and register the endpoint instead see **[docs/getting-started.md](docs/getting-started.md)**.
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.0",
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"