@ductape/mcp 0.2.10 → 0.2.12
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/dist/index.js +31 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -98,7 +98,7 @@ There are THREE categories of operations. Use the right tool for each:
|
|
|
98
98
|
|
|
99
99
|
RESOLVING "No linked project" ERRORS:
|
|
100
100
|
Some commands (declarative sync below, db migrate/schema, products environments *) need a
|
|
101
|
-
linked project — a local
|
|
101
|
+
linked project — a local ductape/config.json with a product tag and env slug. The "link"
|
|
102
102
|
command does NOT validate against the server: it just writes that local file. This means you
|
|
103
103
|
can run ductape_cli("link --product <tag> --env <slug>") even before that environment exists on
|
|
104
104
|
the product yet — do not treat "no linked environment exists server-side" as a reason to avoid
|
|
@@ -235,6 +235,36 @@ There are THREE categories of operations. Use the right tool for each:
|
|
|
235
235
|
- For cloud-linked envs, set config.cloud to the connection tag for that env and
|
|
236
236
|
omit raw credentials; the cloud connection must exist for that env too.
|
|
237
237
|
|
|
238
|
+
⚠ PERSIST AGAINST AN ALREADY-REGISTERED COMPONENT TAG CAN SILENTLY NO-OP:
|
|
239
|
+
import-persist-all / provision-persist-all call the component's create method first and only
|
|
240
|
+
fall back to update if create throws. Depending on platform version, create against an existing
|
|
241
|
+
tag can resolve successfully without changing anything instead of throwing — so the response can
|
|
242
|
+
report success (and, for provision, a real cloud resource gets created) while the Ductape
|
|
243
|
+
component record is left completely unchanged, still pointing at whatever it pointed at before.
|
|
244
|
+
Never trust a success response alone when persisting against an existing tag:
|
|
245
|
+
1. ALWAYS re-fetch the component immediately after — ductape_cli("resources <type> get -t <tag> --json")
|
|
246
|
+
2. Diff the fields you meant to change (e.g. envs[].config.cloud) against what you intended.
|
|
247
|
+
3. If unchanged, treat the persist as failed even though it reported success, and say so —
|
|
248
|
+
do not retry the same call in a loop; report it and ask before continuing.
|
|
249
|
+
|
|
250
|
+
⚠ DUCTAPE NEVER DEPROVISIONS REAL CLOUD RESOURCES — THIS IS INTENTIONAL, NOT A GAP:
|
|
251
|
+
There is no verb, flag, or code path anywhere in Ductape (CLI, SDK, or backend) that deletes an
|
|
252
|
+
actual cloud resource (a GCS/S3 bucket, a Pub/Sub/SNS topic, a database instance, etc.). This is a
|
|
253
|
+
deliberate product decision — auto-deprovisioning real infrastructure risks destroying real data,
|
|
254
|
+
so that responsibility is left entirely to the human operator via the cloud provider's own console
|
|
255
|
+
or CLI (gcloud, aws, az, …). Concretely:
|
|
256
|
+
- ductape_cli("resources <type> delete -t <tag>") only clears Ductape's own catalog record
|
|
257
|
+
(soft delete). It never touches the underlying cloud resource — that resource still exists and
|
|
258
|
+
still costs money/still needs manual cleanup after this call succeeds.
|
|
259
|
+
- provision-persist(-all) and import-persist(-all) create/link real cloud resources but there
|
|
260
|
+
is no symmetric "deprovision" or "cloud resources delete" operation — attempting
|
|
261
|
+
ductape_cli("cloud resources delete ...") returns a clear error explaining this by design.
|
|
262
|
+
- If a provisioning attempt fails partway through, or a component is deleted, any real cloud
|
|
263
|
+
resources it created are orphaned and will keep existing (and accruing cost) until the operator
|
|
264
|
+
deletes them manually. Surface this to the user explicitly rather than treating it as something
|
|
265
|
+
this tooling can clean up — do not propose scripting cloud-provider deletes on the user's behalf
|
|
266
|
+
unless they explicitly ask for that as a separate, one-off action outside of Ductape.
|
|
267
|
+
|
|
238
268
|
2. RUNTIME OPERATIONS (run, dispatch, execute, start, send, produce, query, insert, update, delete…)
|
|
239
269
|
The "input" field shape is product- and operation-specific — it is NOT derivable from Joi validators.
|
|
240
270
|
It is defined by how the product's action/feature/session/quota/etc. was configured in Ductape.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ductape/mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.12",
|
|
4
4
|
"description": "MCP server that exposes Ductape SDK operations via the backend proxy",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
],
|
|
16
16
|
"scripts": {
|
|
17
17
|
"build": "tsc",
|
|
18
|
-
"test": "npm run build && node scripts/check-cli-command-security.mjs && node scripts/check-frontend-analytics-guidance.mjs && node scripts/check-events-discovery.mjs && node scripts/check-schema-fallback.mjs && node scripts/check-portable-functions.mjs",
|
|
18
|
+
"test": "npm run build && node scripts/check-cli-command-security.mjs && node scripts/check-frontend-analytics-guidance.mjs && node scripts/check-events-discovery.mjs && node scripts/check-schema-fallback.mjs && node scripts/check-portable-functions.mjs && node scripts/check-project-link-guidance.mjs",
|
|
19
19
|
"start": "node dist/index.js",
|
|
20
20
|
"dev": "tsx src/index.ts"
|
|
21
21
|
},
|