@ductape/mcp 0.2.11 → 0.2.13
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 +1 -0
- package/dist/index.js +14 -3
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
- Mark `ductape_function_setup` as read-only, non-destructive, idempotent, and closed-world in both MCP registration APIs so hosts do not incorrectly require mutation approval for its pure setup-plan generation.
|
|
9
10
|
- Broadened Feature guidance from durable/event-driven workflows to synchronous or asynchronous named product capabilities.
|
|
10
11
|
- Added evidence-backed `FEATURE`, `FEATURE_STEP`, `DOMAIN_SERVICE`, `UTILITY`, and `INFRASTRUCTURE_ADAPTER` classification guidance.
|
|
11
12
|
- Added synchronous multi-step examples and repository discovery/grouping rules.
|
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
|
|
@@ -1468,6 +1468,15 @@ const portableFunctionSetupInputSchema = z.object({
|
|
|
1468
1468
|
version: z.string().min(1).describe('Contract version.'),
|
|
1469
1469
|
operations: z.array(z.string().min(1)).min(1).describe('Operation names that must be registered and exposed.'),
|
|
1470
1470
|
});
|
|
1471
|
+
// This tool only derives setup instructions from its arguments. It performs no network request,
|
|
1472
|
+
// filesystem write, process launch, registration, deployment, or infrastructure provisioning.
|
|
1473
|
+
// Declare that explicitly so MCP hosts do not send it through mutation approval workflows.
|
|
1474
|
+
const portableFunctionSetupAnnotations = {
|
|
1475
|
+
readOnlyHint: true,
|
|
1476
|
+
destructiveHint: false,
|
|
1477
|
+
idempotentHint: true,
|
|
1478
|
+
openWorldHint: false,
|
|
1479
|
+
};
|
|
1471
1480
|
const migrationInputSchema = z.object({
|
|
1472
1481
|
source: z.string().describe('Absolute path to the existing codebase.'),
|
|
1473
1482
|
e2e_baseline: z.string().describe('Absolute path to a passing migration-e2e baseline manifest created before migration inspection.'),
|
|
@@ -5223,10 +5232,12 @@ async function main() {
|
|
|
5223
5232
|
}, eventsDiscoveryHandler);
|
|
5224
5233
|
server.registerTool('ductape_function_setup', {
|
|
5225
5234
|
title: 'Ductape Portable Function Setup',
|
|
5226
|
-
description: '
|
|
5235
|
+
description: 'Read-only: generate (without applying) the mandatory secure local + remote runtime setup for application functions used by Features. ' +
|
|
5236
|
+
'This tool performs no network requests, writes, registrations, deployments, or infrastructure provisioning. ' +
|
|
5227
5237
|
'Use this only after a primitives-first decomposition proves residual application-owned logic remains. The result requires a registered local handler, ' +
|
|
5228
5238
|
'a deterministic HTTPS endpoint, raw-body HMAC verification, runtime checks, and fail-closed behavior.',
|
|
5229
5239
|
inputSchema: portableFunctionSetupInputSchema,
|
|
5240
|
+
annotations: portableFunctionSetupAnnotations,
|
|
5230
5241
|
}, portableFunctionSetupHandler);
|
|
5231
5242
|
server.registerTool('ductape_redis_setup', {
|
|
5232
5243
|
title: 'Ductape Local Redis Setup',
|
|
@@ -5361,7 +5372,7 @@ async function main() {
|
|
|
5361
5372
|
server.tool('ductape_schema', schemaInputSchema.shape, schemaHandler);
|
|
5362
5373
|
server.tool('ductape_docs', docsInputSchema.shape, docsHandler);
|
|
5363
5374
|
server.tool('ductape_events_discover', eventsDiscoveryInputSchema.shape, eventsDiscoveryHandler);
|
|
5364
|
-
server.tool('ductape_function_setup', portableFunctionSetupInputSchema.shape, portableFunctionSetupHandler);
|
|
5375
|
+
server.tool('ductape_function_setup', portableFunctionSetupInputSchema.shape, portableFunctionSetupAnnotations, portableFunctionSetupHandler);
|
|
5365
5376
|
server.tool('ductape_redis_setup', redisSetupInputSchema.shape, redisSetupHandler);
|
|
5366
5377
|
server.tool('ductape_migration_plan', migrationInputSchema.shape, migrationHandler);
|
|
5367
5378
|
server.tool('ductape_cli', cliInputSchema.shape, cliHandler);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ductape/mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
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
|
},
|