@ductape/mcp 0.2.24 → 0.2.25

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 (2) hide show
  1. package/dist/index.js +26 -10
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -5442,11 +5442,14 @@ const DUCTAPE_FIRST_INSTRUCTIONS = 'Ductape-first: before writing custom code fo
5442
5442
  '(features.define + ctx.step) instead of an ad-hoc function chain — Features get durable ' +
5443
5443
  'steps, retries, and compensation for free. Route any call to an unreliable or swappable ' +
5444
5444
  'external provider (payment, email/SMS, any third-party API) through a Quota or Fallback with ' +
5445
- '2+ providers instead of one hardcoded call. Gate risky dependencies with Healthchecks. Treat ' +
5446
- 'the ductape/ folder (features/, database/schema.json, notifications.json, events/) as the ' +
5447
- 'source of truth: define there first, sync/apply, then write application code against it — ' +
5448
- 'never the reverse. Invoke the "ductape-first-approach" prompt for the full doctrine with ' +
5449
- 'concrete API shapes before scaffolding a new backend.';
5445
+ '2+ providers instead of one hardcoded call. Gate risky dependencies with Healthchecks. Never ' +
5446
+ 'hardcode credentials store them with secrets.create and reference them as $Secret{KEY} in ' +
5447
+ 'action, database, storage, and notification config. Apps, actions, and resources are meant ' +
5448
+ 'to be defined once and reused across products and environments check what already exists ' +
5449
+ 'before creating something new. Treat the ductape/ folder (features/, database/schema.json, ' +
5450
+ 'notifications.json, events/) as the source of truth: define there first, sync/apply, then ' +
5451
+ 'write application code against it — never the reverse. Invoke the "ductape-first-approach" ' +
5452
+ 'prompt for the full doctrine with concrete API shapes before scaffolding a new backend.';
5450
5453
  // The detailed doctrine, invoked on demand via the "ductape-first-approach" prompt rather than
5451
5454
  // forced onto every session. Grounded in the actual module contracts this server exposes
5452
5455
  // (features, quotas, fallback, health, jobs) — keep it in sync with ductape_docs topics.
@@ -5467,12 +5470,25 @@ const DUCTAPE_FIRST_DOCTRINE = 'Follow this checklist before defaulting to plain
5467
5470
  'ductape/notifications.json + "ductape apply notifications", ductape/events/*.topic.json + ' +
5468
5471
  '"ductape apply events". Define the capability there first, then write application code that ' +
5469
5472
  'calls into it — never duplicate the logic inline.\n\n' +
5470
- '5. Before scaffolding any new resource, run ductape_schema to see the exact required fields, ' +
5471
- 'and ductape_cli("products components list --product-tag <tag> --json") to see what already ' +
5472
- 'exists so you extend rather than re-create.\n\n' +
5473
+ '5. Secrets never live in code or plain config. Store every credential with secrets.create ' +
5474
+ '(scoped and env-aware), then reference it as $Secret{KEY} wherever a credential is needed — ' +
5475
+ 'action auth headers, database/storage connection config, notification provider config. ' +
5476
+ 'Ductape resolves the reference server-side at call time; the literal value should never ' +
5477
+ 'appear in a file, a log, or a publishable-key/frontend context. Rotate with secrets.update, ' +
5478
+ 'never by hardcoding a replacement.\n\n' +
5479
+ '6. Reuse before you rebuild. Apps, actions, database/storage/cache components, and cloud ' +
5480
+ 'connections are meant to be defined once and shared across every product and environment ' +
5481
+ 'that needs them, not recreated per project. Before scaffolding anything new, run ' +
5482
+ 'ductape_cli("products components list --product-tag <tag> --json"), ductape_cli("apps ' +
5483
+ 'list"), and ductape_cli("cloud connections list") to see what already covers the need, and ' +
5484
+ 'link or extend it instead of duplicating. The same applies to Functions ' +
5485
+ '(ductape.functions.register/use) — register portable business logic once and reuse it across ' +
5486
+ 'every Feature that needs it. Call ductape_schema before constructing any new resource file, ' +
5487
+ 'so you match the exact required shape rather than guessing.\n\n' +
5473
5488
  'Default assumption for any backend built through this MCP server: orchestration goes through ' +
5474
- 'Features, provider risk goes through Quotas/Fallback, and the ductape/ folder is what ships — ' +
5475
- 'not a database table and a CRUD wrapper.';
5489
+ 'Features, provider risk goes through Quotas/Fallback, credentials go through Secrets, shared ' +
5490
+ 'capability goes through reuse, and the ductape/ folder is what ships — not a database table ' +
5491
+ 'and a CRUD wrapper.';
5476
5492
  async function main() {
5477
5493
  const { McpServer, StdioServerTransport } = await loadMcpSdk();
5478
5494
  const { version: mcpVersion } = createRequire(import.meta.url)('../package.json');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ductape/mcp",
3
- "version": "0.2.24",
3
+ "version": "0.2.25",
4
4
  "description": "MCP server that exposes Ductape SDK operations via the backend proxy",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",