@mcpmake/core 0.2.4 → 0.3.0

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 (184) hide show
  1. package/dist/analyzer/dom-parser.d.ts +35 -0
  2. package/dist/analyzer/dom-parser.d.ts.map +1 -1
  3. package/dist/analyzer/dom-parser.js +107 -6
  4. package/dist/analyzer/dom-parser.js.map +1 -1
  5. package/dist/analyzer/goal-crawler.d.ts +2 -1
  6. package/dist/analyzer/goal-crawler.d.ts.map +1 -1
  7. package/dist/analyzer/goal-crawler.js +66 -17
  8. package/dist/analyzer/goal-crawler.js.map +1 -1
  9. package/dist/analyzer/semantic-analyzer.d.ts +1 -1
  10. package/dist/analyzer/semantic-analyzer.d.ts.map +1 -1
  11. package/dist/analyzer/semantic-analyzer.js +15 -16
  12. package/dist/analyzer/semantic-analyzer.js.map +1 -1
  13. package/dist/analyzer/site-crawler.d.ts.map +1 -1
  14. package/dist/analyzer/site-crawler.js +122 -16
  15. package/dist/analyzer/site-crawler.js.map +1 -1
  16. package/dist/config/mcpmake-config.d.ts.map +1 -1
  17. package/dist/config/mcpmake-config.js +5 -0
  18. package/dist/config/mcpmake-config.js.map +1 -1
  19. package/dist/emitter/code-writer.d.ts +1 -0
  20. package/dist/emitter/code-writer.d.ts.map +1 -1
  21. package/dist/emitter/code-writer.js +79 -12
  22. package/dist/emitter/code-writer.js.map +1 -1
  23. package/dist/emitter/index.d.ts +8 -0
  24. package/dist/emitter/index.d.ts.map +1 -1
  25. package/dist/emitter/index.js +113 -6
  26. package/dist/emitter/index.js.map +1 -1
  27. package/dist/emitter/project-scaffolder.d.ts +13 -0
  28. package/dist/emitter/project-scaffolder.d.ts.map +1 -1
  29. package/dist/emitter/project-scaffolder.js +29 -0
  30. package/dist/emitter/project-scaffolder.js.map +1 -1
  31. package/dist/emitter/python-template-loader.d.ts.map +1 -1
  32. package/dist/emitter/python-template-loader.js +10 -0
  33. package/dist/emitter/python-template-loader.js.map +1 -1
  34. package/dist/emitter/python-templates/dockerfile.hbs +4 -1
  35. package/dist/emitter/python-templates/server.py.hbs +82 -8
  36. package/dist/emitter/site-scaffolder.d.ts.map +1 -1
  37. package/dist/emitter/site-scaffolder.js +28 -1
  38. package/dist/emitter/site-scaffolder.js.map +1 -1
  39. package/dist/emitter/site-templates/browser-manager.ts.hbs +104 -34
  40. package/dist/emitter/site-templates/dockerfile.hbs +13 -4
  41. package/dist/emitter/site-templates/env.example.hbs +8 -0
  42. package/dist/emitter/site-templates/server-main-http.ts.hbs +77 -6
  43. package/dist/emitter/site-templates/telemetry.ts.hbs +117 -0
  44. package/dist/emitter/site-templates/tool-handler-form.ts.hbs +10 -8
  45. package/dist/emitter/template-loader.d.ts.map +1 -1
  46. package/dist/emitter/template-loader.js +9 -0
  47. package/dist/emitter/template-loader.js.map +1 -1
  48. package/dist/emitter/templates/auth-provider.ts.hbs +86 -21
  49. package/dist/emitter/templates/config.ts.hbs +29 -0
  50. package/dist/emitter/templates/dockerfile.hbs +12 -4
  51. package/dist/emitter/templates/env.example.hbs +6 -0
  52. package/dist/emitter/templates/http-executor.ts.hbs +150 -7
  53. package/dist/emitter/templates/oauth.ts.hbs +19 -65
  54. package/dist/emitter/templates/server-main-http.ts.hbs +93 -12
  55. package/dist/emitter/templates/task-handlers.ts.hbs +40 -1
  56. package/dist/emitter/templates/tool-handler.ts.hbs +37 -2
  57. package/dist/emitter/templates/tool-test.ts.hbs +9 -1
  58. package/dist/emitter/worker-templates/config.ts.hbs +7 -0
  59. package/dist/emitter/worker-templates/tool-handler.ts.hbs +37 -2
  60. package/dist/emitter/worker-templates/worker.ts.hbs +119 -25
  61. package/dist/generator/spec-generator.d.ts.map +1 -1
  62. package/dist/generator/spec-generator.js +9 -54
  63. package/dist/generator/spec-generator.js.map +1 -1
  64. package/dist/index.d.ts +1 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +1 -0
  67. package/dist/index.js.map +1 -1
  68. package/dist/llm/anthropic-provider.d.ts +14 -0
  69. package/dist/llm/anthropic-provider.d.ts.map +1 -0
  70. package/dist/llm/anthropic-provider.js +50 -0
  71. package/dist/llm/anthropic-provider.js.map +1 -0
  72. package/dist/llm/index.d.ts +19 -0
  73. package/dist/llm/index.d.ts.map +1 -0
  74. package/dist/llm/index.js +73 -0
  75. package/dist/llm/index.js.map +1 -0
  76. package/dist/llm/openai-provider.d.ts +46 -0
  77. package/dist/llm/openai-provider.d.ts.map +1 -0
  78. package/dist/llm/openai-provider.js +221 -0
  79. package/dist/llm/openai-provider.js.map +1 -0
  80. package/dist/llm/types.d.ts +61 -0
  81. package/dist/llm/types.d.ts.map +1 -0
  82. package/dist/llm/types.js +16 -0
  83. package/dist/llm/types.js.map +1 -0
  84. package/dist/parser/har-filter.d.ts +7 -0
  85. package/dist/parser/har-filter.d.ts.map +1 -1
  86. package/dist/parser/har-filter.js +107 -1
  87. package/dist/parser/har-filter.js.map +1 -1
  88. package/dist/parser/index.d.ts +1 -1
  89. package/dist/parser/index.d.ts.map +1 -1
  90. package/dist/parser/index.js +1 -1
  91. package/dist/parser/index.js.map +1 -1
  92. package/dist/parser/openapi-loader.d.ts.map +1 -1
  93. package/dist/parser/openapi-loader.js +36 -2
  94. package/dist/parser/openapi-loader.js.map +1 -1
  95. package/dist/parser/operation-extractor.d.ts.map +1 -1
  96. package/dist/parser/operation-extractor.js +12 -1
  97. package/dist/parser/operation-extractor.js.map +1 -1
  98. package/dist/parser/overlay-loader.d.ts.map +1 -1
  99. package/dist/parser/overlay-loader.js +11 -2
  100. package/dist/parser/overlay-loader.js.map +1 -1
  101. package/dist/parser/postman-loader.d.ts.map +1 -1
  102. package/dist/parser/postman-loader.js +6 -1
  103. package/dist/parser/postman-loader.js.map +1 -1
  104. package/dist/parser/schema-converter.d.ts +13 -2
  105. package/dist/parser/schema-converter.d.ts.map +1 -1
  106. package/dist/parser/schema-converter.js +64 -42
  107. package/dist/parser/schema-converter.js.map +1 -1
  108. package/dist/plugins/loader.d.ts +5 -1
  109. package/dist/plugins/loader.d.ts.map +1 -1
  110. package/dist/plugins/loader.js +39 -10
  111. package/dist/plugins/loader.js.map +1 -1
  112. package/dist/pricing.d.ts +5 -1
  113. package/dist/pricing.d.ts.map +1 -1
  114. package/dist/pricing.js +7 -3
  115. package/dist/pricing.js.map +1 -1
  116. package/dist/providers/index.d.ts.map +1 -1
  117. package/dist/providers/index.js +6 -21
  118. package/dist/providers/index.js.map +1 -1
  119. package/dist/recorder/browser-recorder.d.ts.map +1 -1
  120. package/dist/recorder/browser-recorder.js +89 -12
  121. package/dist/recorder/browser-recorder.js.map +1 -1
  122. package/dist/rescan/rescan-scheduler.d.ts.map +1 -1
  123. package/dist/rescan/rescan-scheduler.js +22 -7
  124. package/dist/rescan/rescan-scheduler.js.map +1 -1
  125. package/dist/site-transformer/selector-healer.d.ts +1 -1
  126. package/dist/site-transformer/selector-healer.d.ts.map +1 -1
  127. package/dist/site-transformer/selector-healer.js +17 -18
  128. package/dist/site-transformer/selector-healer.js.map +1 -1
  129. package/dist/site-transformer/tool-generator.d.ts.map +1 -1
  130. package/dist/site-transformer/tool-generator.js +90 -22
  131. package/dist/site-transformer/tool-generator.js.map +1 -1
  132. package/dist/transformer/auth-detector.d.ts.map +1 -1
  133. package/dist/transformer/auth-detector.js +24 -5
  134. package/dist/transformer/auth-detector.js.map +1 -1
  135. package/dist/transformer/har-schema-inferrer.d.ts.map +1 -1
  136. package/dist/transformer/har-schema-inferrer.js +2 -0
  137. package/dist/transformer/har-schema-inferrer.js.map +1 -1
  138. package/dist/transformer/har-to-operations.d.ts +1 -0
  139. package/dist/transformer/har-to-operations.d.ts.map +1 -1
  140. package/dist/transformer/har-to-operations.js +42 -10
  141. package/dist/transformer/har-to-operations.js.map +1 -1
  142. package/dist/transformer/llm-namer.d.ts.map +1 -1
  143. package/dist/transformer/llm-namer.js +10 -13
  144. package/dist/transformer/llm-namer.js.map +1 -1
  145. package/dist/transformer/naming.d.ts.map +1 -1
  146. package/dist/transformer/naming.js +16 -8
  147. package/dist/transformer/naming.js.map +1 -1
  148. package/dist/transformer/resource-builder.d.ts.map +1 -1
  149. package/dist/transformer/resource-builder.js +13 -6
  150. package/dist/transformer/resource-builder.js.map +1 -1
  151. package/dist/transformer/stainless-translator.d.ts +6 -0
  152. package/dist/transformer/stainless-translator.d.ts.map +1 -1
  153. package/dist/transformer/stainless-translator.js +18 -1
  154. package/dist/transformer/stainless-translator.js.map +1 -1
  155. package/dist/transformer/tool-builder.d.ts.map +1 -1
  156. package/dist/transformer/tool-builder.js +141 -14
  157. package/dist/transformer/tool-builder.js.map +1 -1
  158. package/dist/types/index.d.ts +79 -0
  159. package/dist/types/index.d.ts.map +1 -1
  160. package/dist/types/site.d.ts +19 -1
  161. package/dist/types/site.d.ts.map +1 -1
  162. package/dist/utils/fail.d.ts.map +1 -1
  163. package/dist/utils/fail.js +22 -4
  164. package/dist/utils/fail.js.map +1 -1
  165. package/dist/utils/json-extract.d.ts +21 -0
  166. package/dist/utils/json-extract.d.ts.map +1 -0
  167. package/dist/utils/json-extract.js +67 -0
  168. package/dist/utils/json-extract.js.map +1 -0
  169. package/dist/utils/model-resolver.d.ts.map +1 -1
  170. package/dist/utils/model-resolver.js +6 -0
  171. package/dist/utils/model-resolver.js.map +1 -1
  172. package/dist/utils/sanitize.d.ts +63 -1
  173. package/dist/utils/sanitize.d.ts.map +1 -1
  174. package/dist/utils/sanitize.js +147 -2
  175. package/dist/utils/sanitize.js.map +1 -1
  176. package/dist/utils/ssrf-guard.d.ts +10 -0
  177. package/dist/utils/ssrf-guard.d.ts.map +1 -0
  178. package/dist/utils/ssrf-guard.js +130 -0
  179. package/dist/utils/ssrf-guard.js.map +1 -0
  180. package/dist/utils/watcher.d.ts +17 -1
  181. package/dist/utils/watcher.d.ts.map +1 -1
  182. package/dist/utils/watcher.js +53 -21
  183. package/dist/utils/watcher.js.map +1 -1
  184. package/package.json +2 -1
@@ -1,5 +1,5 @@
1
1
  import { writeCodeUnits } from './code-writer.js';
2
- import { scaffoldProjectFiles, scaffoldSharedModules } from './project-scaffolder.js';
2
+ import { scaffoldProjectFiles, scaffoldSharedModules, escapeDotenvValue, } from './project-scaffolder.js';
3
3
  import { scaffoldSiteProjectFiles, scaffoldSiteSharedModules } from './site-scaffolder.js';
4
4
  import { renderTemplate } from './template-loader.js';
5
5
  import { renderSiteTemplate } from './site-template-loader.js';
@@ -7,7 +7,26 @@ import { renderPythonTemplate } from './python-template-loader.js';
7
7
  import { renderWorkerTemplate } from './worker-template-loader.js';
8
8
  import { buildCatalog } from '../transformer/catalog-builder.js';
9
9
  import { logger } from '../utils/logger.js';
10
+ import { sanitizeUrlLiteral, sanitizePyIdentifier } from '../utils/sanitize.js';
10
11
  const SAFE_VERSION_RE = /^[0-9a-zA-Z._+-]{1,50}$/;
12
+ /**
13
+ * Whether any configured auth scheme sends the API key as a query parameter.
14
+ * Query-string API-key auth cannot be applied as a header, so the generated
15
+ * tool handler appends it during URL construction instead (D-H2). Used to gate
16
+ * the `apiKeyQueryName` config field and the handler's append logic so projects
17
+ * without query auth are byte-for-byte unchanged.
18
+ */
19
+ function hasQueryApiKey(manifest) {
20
+ return manifest.authSchemes.some((s) => s.type === 'apiKey' && s.in === 'query');
21
+ }
22
+ /**
23
+ * Per-tool render data for the handler templates. Carries the manifest-level
24
+ * `hasQueryApiKey` flag onto each tool so the template can emit the query
25
+ * API-key append without needing access to the whole manifest.
26
+ */
27
+ function toToolHandlerView(tool, manifest) {
28
+ return { ...tool, hasQueryApiKey: hasQueryApiKey(manifest) };
29
+ }
11
30
  /**
12
31
  * Serialize named environments for the generated `.env.example` / `.dev.vars`
13
32
  * seed (the `MCP_ENVIRONMENTS` JSON map). Returns undefined when none are set,
@@ -26,6 +45,10 @@ export async function emitProject(manifest, options) {
26
45
  if (!/^[a-z0-9][a-z0-9._-]*$/.test(manifest.serverName)) {
27
46
  throw new Error(`Invalid server name: "${manifest.serverName}". Must match /^[a-z0-9][a-z0-9._-]*$/`);
28
47
  }
48
+ // baseUrl is emitted into string literals across TS/Python/TOML/.env targets.
49
+ // Sanitize once here so a malicious spec/flag value cannot break out of any of
50
+ // them (lossless for real URLs).
51
+ manifest = { ...manifest, baseUrl: sanitizeUrlLiteral(manifest.baseUrl) };
29
52
  if (!SAFE_VERSION_RE.test(manifest.serverVersion)) {
30
53
  logger.warn(`Unsafe server version "${manifest.serverVersion}" sanitized to "0.0.0"`);
31
54
  manifest = { ...manifest, serverVersion: '0.0.0' };
@@ -77,7 +100,7 @@ export async function emitProject(manifest, options) {
77
100
  for (const tool of staticTools) {
78
101
  units.push({
79
102
  filePath: `src/tools/${tool.fileName}.ts`,
80
- content: renderTemplate('tool-handler.ts', tool),
103
+ content: renderTemplate('tool-handler.ts', toToolHandlerView(tool, manifest)),
81
104
  });
82
105
  }
83
106
  units.push({
@@ -93,7 +116,7 @@ export async function emitProject(manifest, options) {
93
116
  for (const tool of manifest.tools) {
94
117
  units.push({
95
118
  filePath: `src/tools/${tool.fileName}.ts`,
96
- content: renderTemplate('tool-handler.ts', tool),
119
+ content: renderTemplate('tool-handler.ts', toToolHandlerView(tool, manifest)),
97
120
  });
98
121
  }
99
122
  units.push({
@@ -142,6 +165,10 @@ export async function emitWorkerProject(manifest, options) {
142
165
  if (!/^[a-z0-9][a-z0-9._-]*$/.test(manifest.serverName)) {
143
166
  throw new Error(`Invalid server name: "${manifest.serverName}". Must match /^[a-z0-9][a-z0-9._-]*$/`);
144
167
  }
168
+ // baseUrl is emitted into string literals across TS/Python/TOML/.env targets.
169
+ // Sanitize once here so a malicious spec/flag value cannot break out of any of
170
+ // them (lossless for real URLs).
171
+ manifest = { ...manifest, baseUrl: sanitizeUrlLiteral(manifest.baseUrl) };
145
172
  if (!SAFE_VERSION_RE.test(manifest.serverVersion)) {
146
173
  logger.warn(`Unsafe server version "${manifest.serverVersion}" sanitized to "0.0.0"`);
147
174
  manifest = { ...manifest, serverVersion: '0.0.0' };
@@ -182,7 +209,19 @@ export async function emitWorkerProject(manifest, options) {
182
209
  { filePath: 'README.md', content: renderWorkerTemplate('readme.md', templateData) },
183
210
  {
184
211
  filePath: '.dev.vars.example',
185
- content: renderWorkerTemplate('dev-vars.example', templateData),
212
+ // Escape the dotenv VALUES (baseUrl, defaultEnvironment) at this emit
213
+ // boundary so a value with a CR/LF or `#` cannot inject an extra
214
+ // KEY=value line into the operator's `.dev.vars` (D-M3). Env NAMES are
215
+ // already validated upstream in the Stainless translator. The wider
216
+ // templateData keeps the raw (url-literal-sanitized) baseUrl for the
217
+ // non-dotenv sinks (wrangler.toml, config.ts).
218
+ content: renderWorkerTemplate('dev-vars.example', {
219
+ ...templateData,
220
+ baseUrl: escapeDotenvValue(manifest.baseUrl),
221
+ defaultEnvironment: manifest.defaultEnvironment
222
+ ? escapeDotenvValue(manifest.defaultEnvironment)
223
+ : manifest.defaultEnvironment,
224
+ }),
186
225
  },
187
226
  { filePath: '.gitignore', content: renderWorkerTemplate('gitignore', templateData) },
188
227
  // Runtime-agnostic modules reused from the Node templates (fetch / Buffer /
@@ -198,7 +237,7 @@ export async function emitWorkerProject(manifest, options) {
198
237
  for (const tool of manifest.tools) {
199
238
  units.push({
200
239
  filePath: `src/tools/${tool.fileName}.ts`,
201
- content: renderWorkerTemplate('tool-handler.ts', tool),
240
+ content: renderWorkerTemplate('tool-handler.ts', toToolHandlerView(tool, manifest)),
202
241
  });
203
242
  }
204
243
  units.push({
@@ -220,6 +259,10 @@ export async function emitSiteProject(manifest, options) {
220
259
  if (!/^[a-z0-9][a-z0-9._-]*$/.test(manifest.serverName)) {
221
260
  throw new Error(`Invalid server name: "${manifest.serverName}". Must match /^[a-z0-9][a-z0-9._-]*$/`);
222
261
  }
262
+ // baseUrl is emitted into string literals across TS/Python/TOML/.env targets.
263
+ // Sanitize once here so a malicious spec/flag value cannot break out of any of
264
+ // them (lossless for real URLs).
265
+ manifest = { ...manifest, baseUrl: sanitizeUrlLiteral(manifest.baseUrl) };
223
266
  if (!SAFE_VERSION_RE.test(manifest.serverVersion)) {
224
267
  logger.warn(`Unsafe server version "${manifest.serverVersion}" sanitized to "0.0.0"`);
225
268
  manifest = { ...manifest, serverVersion: '0.0.0' };
@@ -259,6 +302,52 @@ function getSiteToolTemplate(tool) {
259
302
  return 'tool-handler-action.ts';
260
303
  }
261
304
  }
305
+ /**
306
+ * Build a Python-safe view of a tool. Path/query param names become valid,
307
+ * de-duplicated Python identifiers (used as function args and locals), while the
308
+ * original API name is preserved for the URL path token and query-string key.
309
+ * This lets server.py.hbs build the URL with plain `str.replace()` instead of an
310
+ * f-string, removing the brace-expression evaluation / breakout vectors.
311
+ */
312
+ function toPythonToolView(tool) {
313
+ const used = new Set();
314
+ const uniquePyName = (apiName) => {
315
+ let base = sanitizePyIdentifier(apiName);
316
+ let candidate = base;
317
+ let i = 1;
318
+ while (used.has(candidate))
319
+ candidate = `${base}_${i++}`;
320
+ used.add(candidate);
321
+ return candidate;
322
+ };
323
+ const pyPathParams = tool.pathParams.map((apiName) => ({
324
+ apiName,
325
+ pyName: uniquePyName(apiName),
326
+ brace: `{${apiName}}`,
327
+ }));
328
+ const pyQueryParams = tool.queryParams.map((apiName) => ({
329
+ apiName,
330
+ pyName: uniquePyName(apiName),
331
+ }));
332
+ // Header/cookie request params (D-H2). Driven off paramMappings so the
333
+ // function arg uses a sanitized, de-duplicated Python identifier while the
334
+ // upstream request still uses the original wire name. De-duplicated by wire
335
+ // name so a header/cookie repeated across mappings cannot emit two args.
336
+ const dedupeByWire = (kind) => {
337
+ const seen = new Set();
338
+ const out = [];
339
+ for (const m of tool.paramMappings) {
340
+ if (m.in !== kind || seen.has(m.wireName))
341
+ continue;
342
+ seen.add(m.wireName);
343
+ out.push({ wireName: m.wireName, pyName: uniquePyName(m.wireName) });
344
+ }
345
+ return out;
346
+ };
347
+ const pyHeaderParams = dedupeByWire('header');
348
+ const pyCookieParams = dedupeByWire('cookie');
349
+ return { ...tool, pyPathParams, pyQueryParams, pyHeaderParams, pyCookieParams };
350
+ }
262
351
  /**
263
352
  * Emit a Python MCP server project.
264
353
  * Generates a single server.py file with all tools, plus requirements.txt.
@@ -267,11 +356,18 @@ export async function emitPythonProject(manifest, options) {
267
356
  if (!/^[a-z0-9][a-z0-9._-]*$/.test(manifest.serverName)) {
268
357
  throw new Error(`Invalid server name: "${manifest.serverName}". Must match /^[a-z0-9][a-z0-9._-]*$/`);
269
358
  }
359
+ // baseUrl is emitted into string literals across TS/Python/TOML/.env targets.
360
+ // Sanitize once here so a malicious spec/flag value cannot break out of any of
361
+ // them (lossless for real URLs).
362
+ manifest = { ...manifest, baseUrl: sanitizeUrlLiteral(manifest.baseUrl) };
270
363
  const units = [];
271
364
  const templateData = {
272
365
  ...manifest,
366
+ tools: manifest.tools.map(toPythonToolView),
273
367
  authEnvVars: manifest.envVars.filter((v) => v.name !== 'BASE_URL'),
274
368
  environmentsJson: environmentsJson(manifest),
369
+ // Gate the apiKey-in-query merge so projects without query auth are unchanged.
370
+ hasQueryApiKey: hasQueryApiKey(manifest),
275
371
  };
276
372
  units.push({
277
373
  filePath: 'server.py',
@@ -283,7 +379,18 @@ export async function emitPythonProject(manifest, options) {
283
379
  });
284
380
  units.push({
285
381
  filePath: '.env.example',
286
- content: renderPythonTemplate('env.example', templateData),
382
+ // Escape the dotenv VALUES (baseUrl, defaultEnvironment) at this emit
383
+ // boundary so a value with a CR/LF or `#` cannot inject an extra KEY=value
384
+ // line into the operator's `.env` (D-M3). Env NAMES are already validated
385
+ // upstream. The wider templateData keeps the raw (url-literal-sanitized)
386
+ // baseUrl for the Python string-literal sink in server.py.
387
+ content: renderPythonTemplate('env.example', {
388
+ ...templateData,
389
+ baseUrl: escapeDotenvValue(manifest.baseUrl),
390
+ defaultEnvironment: manifest.defaultEnvironment
391
+ ? escapeDotenvValue(manifest.defaultEnvironment)
392
+ : manifest.defaultEnvironment,
393
+ }),
287
394
  });
288
395
  if (manifest.transport === 'http') {
289
396
  units.push({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emitter/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emitter/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,18 @@
1
1
  import type { ProjectManifest } from '../types/index.js';
2
2
  import type { CodeUnit } from './code-writer.js';
3
+ /**
4
+ * Escape an arbitrary string for use as a single-line dotenv value in the
5
+ * generated `.env.example` (the file users are told to copy to `.env`).
6
+ *
7
+ * Untrusted values (e.g. a Stainless `defaultEnvironment` name, a base URL) are
8
+ * interpolated raw by Handlebars (`noEscape: true`), so a value containing a
9
+ * newline or `#` could inject extra `KEY=value` lines or a comment — config
10
+ * injection into the operator's `.env`. We collapse all line breaks to a single
11
+ * space and wrap the value in double quotes (dotenv treats a quoted value as a
12
+ * single token) whenever it contains a character that would otherwise change how
13
+ * dotenv parses the line. Lossless for benign values (those are returned as-is).
14
+ */
15
+ export declare function escapeDotenvValue(raw: string): string;
3
16
  export declare function scaffoldProjectFiles(manifest: ProjectManifest): CodeUnit[];
4
17
  export declare function scaffoldSharedModules(manifest: ProjectManifest): CodeUnit[];
5
18
  //# sourceMappingURL=project-scaffolder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-scaffolder.d.ts","sourceRoot":"","sources":["../../src/emitter/project-scaffolder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AASjD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,GAAG,QAAQ,EAAE,CAgD1E;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,QAAQ,EAAE,CAmD3E"}
1
+ {"version":3,"file":"project-scaffolder.d.ts","sourceRoot":"","sources":["../../src/emitter/project-scaffolder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AASjD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQrD;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,GAAG,QAAQ,EAAE,CAuD1E;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,QAAQ,EAAE,CAmD3E"}
@@ -4,6 +4,28 @@ import { renderTemplate } from './template-loader.js';
4
4
  * problem; the README recommends `--dynamic-discovery` (the #1 buyer concern).
5
5
  */
6
6
  const DISCOVERY_RECOMMEND_THRESHOLD = 50;
7
+ /**
8
+ * Escape an arbitrary string for use as a single-line dotenv value in the
9
+ * generated `.env.example` (the file users are told to copy to `.env`).
10
+ *
11
+ * Untrusted values (e.g. a Stainless `defaultEnvironment` name, a base URL) are
12
+ * interpolated raw by Handlebars (`noEscape: true`), so a value containing a
13
+ * newline or `#` could inject extra `KEY=value` lines or a comment — config
14
+ * injection into the operator's `.env`. We collapse all line breaks to a single
15
+ * space and wrap the value in double quotes (dotenv treats a quoted value as a
16
+ * single token) whenever it contains a character that would otherwise change how
17
+ * dotenv parses the line. Lossless for benign values (those are returned as-is).
18
+ */
19
+ export function escapeDotenvValue(raw) {
20
+ // Neutralize any CR/LF — these are what break out into new dotenv lines.
21
+ const oneLine = raw.replace(/[\r\n]+/g, ' ');
22
+ // A bare value is safe only when it has no characters dotenv treats specially
23
+ // at the start/inside an unquoted value (#, quotes, backslash, surrounding ws).
24
+ const needsQuoting = /[#"'\\]/.test(oneLine) || /^\s|\s$/.test(oneLine) || oneLine !== raw;
25
+ if (!needsQuoting)
26
+ return oneLine;
27
+ return `"${oneLine.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
28
+ }
7
29
  export function scaffoldProjectFiles(manifest) {
8
30
  const dynamicDiscovery = manifest.dynamicDiscovery ?? false;
9
31
  const units = [
@@ -19,9 +41,16 @@ export function scaffoldProjectFiles(manifest) {
19
41
  filePath: '.env.example',
20
42
  content: renderTemplate('env.example', {
21
43
  ...manifest,
44
+ // Serialize every untrusted scalar through the dotenv escaper at this
45
+ // emit boundary so a value with a newline/`#` cannot inject extra lines.
46
+ baseUrl: escapeDotenvValue(manifest.baseUrl),
47
+ defaultEnvironment: manifest.defaultEnvironment
48
+ ? escapeDotenvValue(manifest.defaultEnvironment)
49
+ : manifest.defaultEnvironment,
22
50
  authEnvVars: manifest.envVars.filter((v) => v.name !== 'BASE_URL'),
23
51
  // Pre-seed MCP_ENVIRONMENTS when an importer carried over named
24
52
  // environments (e.g. Stainless `environments:`); omitted otherwise.
53
+ // JSON.stringify already escapes the keys/values into a single token.
25
54
  environmentsJson: manifest.environments && Object.keys(manifest.environments).length > 0
26
55
  ? JSON.stringify(manifest.environments)
27
56
  : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"project-scaffolder.js","sourceRoot":"","sources":["../../src/emitter/project-scaffolder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-scaffolder.js","sourceRoot":"","sources":["../../src/emitter/project-scaffolder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;GAGG;AACH,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAEzC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,yEAAyE;IACzE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC7C,8EAA8E;IAC9E,gFAAgF;IAChF,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,GAAG,CAAC;IAC3F,IAAI,CAAC,YAAY;QAAE,OAAO,OAAO,CAAC;IAClC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAyB;IAC5D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,IAAI,KAAK,CAAC;IAC5D,MAAM,KAAK,GAAe;QACxB;YACE,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,cAAc,CAAC,cAAc,EAAE,QAAQ,CAAC;SAClD;QACD;YACE,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,cAAc,CAAC,eAAe,EAAE,QAAQ,CAAC;SACnD;QACD;YACE,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,cAAc,CAAC,aAAa,EAAE;gBACrC,GAAG,QAAQ;gBACX,sEAAsE;gBACtE,yEAAyE;gBACzE,OAAO,EAAE,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC5C,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;oBAC7C,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,kBAAkB,CAAC;oBAChD,CAAC,CAAC,QAAQ,CAAC,kBAAkB;gBAC/B,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;gBAClE,gEAAgE;gBAChE,oEAAoE;gBACpE,sEAAsE;gBACtE,gBAAgB,EACd,QAAQ,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC;oBACpE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;oBACvC,CAAC,CAAC,SAAS;aAChB,CAAC;SACH;QACD;YACE,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC;SAC/C;QACD;YACE,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,cAAc,CAAC,WAAW,EAAE;gBACnC,GAAG,QAAQ;gBACX,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;gBAClE,gBAAgB;gBAChB,kBAAkB,EAChB,CAAC,gBAAgB,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,IAAI,6BAA6B;aAC9E,CAAC;SACH;KACF,CAAC;IAEF,IAAI,QAAQ,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,cAAc,CAAC,YAAY,EAAE,QAAQ,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAyB;IAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACvE,MAAM,mBAAmB,GAAG,QAAQ,CAAC,gBAAgB,IAAI,KAAK,CAAC;IAC/D,MAAM,cAAc,GAAG,CAAC,mBAAmB,IAAI,CAAC,QAAQ,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACnF,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG;QACnB,GAAG,QAAQ;QACX,YAAY,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;QACnD,UAAU,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;QAC/C,QAAQ;QACR,mBAAmB;QACnB,cAAc;QACd,aAAa;KACd,CAAC;IACF,OAAO;QACL;YACE,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,cAAc,CACrB,QAAQ,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,gBAAgB,EACxE,YAAY,CACb;SACF;QACD;YACE,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC;SAC/C;QACD;YACE,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,cAAc,CAAC,kBAAkB,EAAE,YAAY,CAAC;SAC1D;QACD;YACE,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,cAAc,CAAC,kBAAkB,EAAE,QAAQ,CAAC;SACtD;QACD;YACE,0EAA0E;YAC1E,sCAAsC;YACtC,QAAQ,EAAE,wBAAwB;YAClC,OAAO,EAAE,cAAc,CAAC,oBAAoB,EAAE,QAAQ,CAAC;SACxD;QACD;YACE,sEAAsE;YACtE,uEAAuE;YACvE,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC;SAC9C;QACD;YACE,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC;SAC9C;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"python-template-loader.d.ts","sourceRoot":"","sources":["../../src/emitter/python-template-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,MAAM,CAUpE"}
1
+ {"version":3,"file":"python-template-loader.d.ts","sourceRoot":"","sources":["../../src/emitter/python-template-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkCH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,MAAM,CAUpE"}
@@ -5,17 +5,27 @@ import { readFileSync } from 'node:fs';
5
5
  import { resolve, dirname } from 'node:path';
6
6
  import { fileURLToPath } from 'node:url';
7
7
  import Handlebars from 'handlebars';
8
+ import { escapePyString } from '../utils/sanitize.js';
8
9
  const __dirname = dirname(fileURLToPath(import.meta.url));
9
10
  const PYTHON_TEMPLATE_DIR = resolve(__dirname, 'python-templates');
10
11
  const pythonTemplateCache = new Map();
11
12
  Handlebars.registerHelper('eq', function (a, b) {
12
13
  return a === b;
13
14
  });
15
+ // Logical OR for block conditionals (e.g. emit a section when either of two
16
+ // param lists is non-empty). Handlebars has no built-in `or`.
17
+ Handlebars.registerHelper('or', function (a, b) {
18
+ return a || b;
19
+ });
14
20
  Handlebars.registerHelper('pyDocstring', function (str) {
15
21
  if (!str)
16
22
  return '';
17
23
  return str.replace(/"""/g, '\\"\\"\\"').replace(/\\/g, '\\\\');
18
24
  });
25
+ // Escape a value for embedding in a double-quoted Python string literal.
26
+ Handlebars.registerHelper('pyStr', function (str) {
27
+ return escapePyString(String(str ?? ''));
28
+ });
19
29
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
30
  export function renderPythonTemplate(name, data) {
21
31
  if (!pythonTemplateCache.has(name)) {
@@ -1 +1 @@
1
- {"version":3,"file":"python-template-loader.js","sourceRoot":"","sources":["../../src/emitter/python-template-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,mBAAmB,GAAG,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAEnE,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAuC,CAAC;AAE3E,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAU,EAAE,CAAU;IAC9D,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,cAAc,CAAC,aAAa,EAAE,UAAU,GAAW;IAC5D,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEH,8DAA8D;AAC9D,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,IAAS;IAC1D,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,OAAO,CAAC,mBAAmB,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,mBAAmB,GAAG,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChD,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"python-template-loader.js","sourceRoot":"","sources":["../../src/emitter/python-template-loader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,mBAAmB,GAAG,OAAO,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAEnE,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAuC,CAAC;AAE3E,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAU,EAAE,CAAU;IAC9D,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,4EAA4E;AAC5E,8DAA8D;AAC9D,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAU,EAAE,CAAU;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,UAAU,CAAC,cAAc,CAAC,aAAa,EAAE,UAAU,GAAW;IAC5D,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEH,yEAAyE;AACzE,UAAU,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,GAAY;IACvD,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH,8DAA8D;AAC9D,MAAM,UAAU,oBAAoB,CAAC,IAAY,EAAE,IAAS;IAC1D,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,OAAO,CAAC,mBAAmB,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,mBAAmB,GAAG,GAAG,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAChD,mBAAmB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC"}
@@ -4,7 +4,10 @@ WORKDIR /app
4
4
  COPY requirements.txt .
5
5
  RUN pip install --no-cache-dir -r requirements.txt
6
6
  COPY server.py .
7
- COPY .env.example .env
7
+ # Do NOT bake .env.example in as the runtime .env — it ships placeholder/sample
8
+ # secrets into the image (L-pydocker). Provide real config at run time via
9
+ # `docker run -e KEY=VALUE` / `--env-file`, or mount a real .env. `load_dotenv()`
10
+ # in server.py is a no-op when no .env is present and falls back to os.environ.
8
11
 
9
12
  ENV TRANSPORT=http
10
13
  ENV PORT=3000
@@ -3,6 +3,7 @@
3
3
  import os
4
4
  import json
5
5
  import httpx
6
+ from urllib.parse import quote
6
7
  from dotenv import load_dotenv
7
8
  from mcp.server import Server
8
9
  from mcp.server.stdio import stdio_server
@@ -37,7 +38,12 @@ API_KEY = os.environ.get("{{envVarName}}", "")
37
38
  {{/each}}
38
39
 
39
40
  server = Server("{{serverName}}")
40
- client = httpx.AsyncClient(timeout=30.0)
41
+
42
+ # Hard per-request deadline (seconds) and response-size cap (bytes). A stalled or
43
+ # runaway upstream otherwise keeps tool calls alive indefinitely or exhausts memory.
44
+ _REQUEST_TIMEOUT_S = float(os.environ.get("MCP_REQUEST_TIMEOUT_MS", "30000")) / 1000.0
45
+ _MAX_RESPONSE_BYTES = int(os.environ.get("MCP_MAX_RESPONSE_BYTES", str(10 * 1024 * 1024)))
46
+ client = httpx.AsyncClient(timeout=_REQUEST_TIMEOUT_S)
41
47
 
42
48
 
43
49
  def _headers() -> dict[str, str]:
@@ -48,34 +54,102 @@ def _headers() -> dict[str, str]:
48
54
  headers["Authorization"] = f"Bearer {BEARER_TOKEN}"
49
55
  {{/if}}
50
56
  {{#if (eq type "apiKey")}}
57
+ {{#if (eq in "header")}}
58
+ if API_KEY:
59
+ headers["{{pyStr headerName}}"] = API_KEY
60
+ {{/if}}
61
+ {{#if (eq in "cookie")}}
62
+ # API key sent as a cookie — appended to the Cookie header.
51
63
  if API_KEY:
52
- headers["{{headerName}}"] = API_KEY
64
+ _existing = headers.get("Cookie")
65
+ _pair = "{{pyStr headerName}}=" + quote(str(API_KEY), safe="")
66
+ headers["Cookie"] = (_existing + "; " + _pair) if _existing else _pair
67
+ {{/if}}
53
68
  {{/if}}
54
69
  {{/each}}
55
70
  return headers
56
71
 
57
72
 
73
+ def _auth_query_params() -> dict[str, str]:
74
+ # apiKey-in-query auth: the key is sent as a query parameter, not a header.
75
+ params: dict[str, str] = {}
76
+ {{#each authSchemes}}
77
+ {{#if (eq type "apiKey")}}
78
+ {{#if (eq in "query")}}
79
+ if API_KEY:
80
+ params["{{pyStr headerName}}"] = API_KEY
81
+ {{/if}}
82
+ {{/if}}
83
+ {{/each}}
84
+ return params
85
+
86
+
58
87
  {{#each tools}}
59
88
  @server.tool()
60
- async def {{functionName}}({{#each pathParams}}{{this}}: str, {{/each}}{{#each queryParams}}{{this}}: str = "", {{/each}}{{#if hasRequestBody}}body: dict | None = None{{/if}}) -> list[TextContent]:
89
+ async def {{functionName}}({{#each pyPathParams}}{{pyName}}: str, {{/each}}{{#each pyQueryParams}}{{pyName}}: str = "", {{/each}}{{#each pyHeaderParams}}{{pyName}}: str = "", {{/each}}{{#each pyCookieParams}}{{pyName}}: str = "", {{/each}}{{#if hasRequestBody}}body: dict | None = None{{/if}}) -> list[TextContent]:
61
90
  """{{pyDocstring description}}"""
62
- url = f"{BASE_URL}{{{pathTemplate}}}"
63
- {{#if queryParams.length}}
64
- params = { {{#each queryParams}}"{{this}}": {{this}}, {{/each}} }
91
+ url = BASE_URL + "{{pyStr pathTemplate}}"
92
+ {{#each pyPathParams}}
93
+ url = url.replace("{{pyStr brace}}", quote(str({{pyName}}), safe=""))
94
+ {{/each}}
95
+ {{#if pyQueryParams.length}}
96
+ params = { {{#each pyQueryParams}}"{{pyStr apiName}}": {{pyName}}, {{/each}} }
65
97
  params = {k: v for k, v in params.items() if v}
98
+ {{#if @root.hasQueryApiKey}}
99
+ params.update(_auth_query_params())
100
+ {{/if}}
101
+ {{else}}
102
+ {{#if @root.hasQueryApiKey}}
103
+ params = _auth_query_params()
104
+ {{/if}}
105
+ {{/if}}
106
+ {{#if (or pyHeaderParams.length pyCookieParams.length)}}
107
+ # Per-request header/cookie params (D-H2): sent under their original wire
108
+ # names, merged over the auth headers. Empty values are omitted.
109
+ req_headers = dict(_headers())
110
+ {{#each pyHeaderParams}}
111
+ if {{pyName}}:
112
+ req_headers["{{pyStr wireName}}"] = {{pyName}}
113
+ {{/each}}
114
+ {{#if pyCookieParams.length}}
115
+ _cookie_parts = []
116
+ {{#each pyCookieParams}}
117
+ if {{pyName}}:
118
+ _cookie_parts.append("{{pyStr wireName}}=" + quote(str({{pyName}}), safe=""))
119
+ {{/each}}
120
+ if _cookie_parts:
121
+ _existing = req_headers.get("Cookie")
122
+ _joined = "; ".join(_cookie_parts)
123
+ req_headers["Cookie"] = (_existing + "; " + _joined) if _existing else _joined
124
+ {{/if}}
66
125
  {{/if}}
67
126
  try:
68
127
  resp = await client.request(
69
128
  "{{method}}",
70
129
  url,
71
- headers=_headers(),
72
- {{#if queryParams.length}}
130
+ headers={{#if (or pyHeaderParams.length pyCookieParams.length)}}req_headers{{else}}_headers(){{/if}},
131
+ {{#if (or queryParams.length @root.hasQueryApiKey)}}
73
132
  params=params,
74
133
  {{/if}}
75
134
  {{#if hasRequestBody}}
135
+ {{#if (eq bodyEncoding "form")}}
136
+ data=body,
137
+ {{else}}
138
+ {{#if (eq bodyEncoding "multipart")}}
139
+ files=body,
140
+ {{else}}
76
141
  json=body,
77
142
  {{/if}}
143
+ {{/if}}
144
+ {{/if}}
78
145
  )
146
+ # Cap the buffered response so a runaway upstream cannot exhaust memory.
147
+ if len(resp.content) > _MAX_RESPONSE_BYTES:
148
+ return [TextContent(type="text", text=f"Error: response exceeded {_MAX_RESPONSE_BYTES}-byte cap")]
149
+ # Never echo upstream 4xx/5xx bodies to the MCP caller — they can leak
150
+ # internal/upstream detail. Surface only the status code + generic reason.
151
+ if resp.status_code >= 400:
152
+ return [TextContent(type="text", text=f"Error: upstream returned {resp.status_code} {resp.reason_phrase}".rstrip())]
79
153
  data = resp.json() if resp.headers.get("content-type", "").startswith("application/json") else resp.text
80
154
  return [TextContent(type="text", text=json.dumps(data, indent=2) if isinstance(data, (dict, list)) else str(data))]
81
155
  except Exception as e:
@@ -1 +1 @@
1
- {"version":3,"file":"site-scaffolder.d.ts","sourceRoot":"","sources":["../../src/emitter/site-scaffolder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAqB,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIjD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,QAAQ,EAAE,CA0ClF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,QAAQ,EAAE,CAsBnF"}
1
+ {"version":3,"file":"site-scaffolder.d.ts","sourceRoot":"","sources":["../../src/emitter/site-scaffolder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAqC,MAAM,kBAAkB,CAAC;AAC/F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA4BjD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,QAAQ,EAAE,CA0ClF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,QAAQ,EAAE,CA4BnF"}
@@ -1,8 +1,29 @@
1
1
  /**
2
2
  * Scaffolds the project files and shared modules for a site (Playwright-based) MCP server.
3
3
  */
4
+ import { isSensitiveField } from '../analyzer/dom-parser.js';
4
5
  import { renderSiteTemplate } from './site-template-loader.js';
5
6
  import { renderTemplate } from './template-loader.js';
7
+ /**
8
+ * Defense-in-depth before writing `site-descriptor.json`: strip any
9
+ * default/prefilled value from sensitive (password/credential) form fields so
10
+ * a captured live secret can never be serialized into the generated project,
11
+ * even if it slipped through an older parser or hand-edited descriptor (M9).
12
+ */
13
+ function stripSensitiveDefaults(descriptor) {
14
+ return {
15
+ ...descriptor,
16
+ pages: descriptor.pages.map((page) => ({
17
+ ...page,
18
+ forms: page.forms.map((form) => ({
19
+ ...form,
20
+ fields: form.fields.map((field) => field.defaultValue !== undefined && isSensitiveField(field.name, field.fieldType, '')
21
+ ? { ...field, defaultValue: undefined }
22
+ : field),
23
+ })),
24
+ })),
25
+ };
26
+ }
6
27
  /**
7
28
  * Generate project skeleton files (package.json, tsconfig, Dockerfile, etc.)
8
29
  */
@@ -62,9 +83,15 @@ export function scaffoldSiteSharedModules(manifest) {
62
83
  filePath: 'src/browser-manager.ts',
63
84
  content: renderSiteTemplate('browser-manager.ts', manifest),
64
85
  },
86
+ {
87
+ // Best-effort browser-session telemetry for exact metering on managed
88
+ // hosting. No-ops unless the host injects MCPMAKE_TELEMETRY_URL.
89
+ filePath: 'src/telemetry.ts',
90
+ content: renderSiteTemplate('telemetry.ts', manifest),
91
+ },
65
92
  {
66
93
  filePath: 'src/site-descriptor.json',
67
- content: JSON.stringify(manifest.siteDescriptor, null, 2),
94
+ content: JSON.stringify(stripSensitiveDefaults(manifest.siteDescriptor), null, 2),
68
95
  },
69
96
  ];
70
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"site-scaffolder.js","sourceRoot":"","sources":["../../src/emitter/site-scaffolder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAA6B;IACpE,MAAM,KAAK,GAAe;QACxB;YACE,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,kBAAkB,CAAC,cAAc,EAAE,QAAQ,CAAC;SACtD;QACD;YACE,QAAQ,EAAE,eAAe;YACzB,6EAA6E;YAC7E,OAAO,EAAE,cAAc,CAAC,eAAe,EAAE,QAAQ,CAAC;SACnD;QACD;YACE,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,kBAAkB,CAAC,aAAa,EAAE,QAAQ,CAAC;SACrD;QACD;YACE,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC;SAC/C;QACD;YACE,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,kBAAkB,CAAC,YAAY,EAAE,QAAQ,CAAC;SACpD;QACD;YACE,sEAAsE;YACtE,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB;gBACE,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,aAAa,EAAE,QAAQ,CAAC,aAAa;aACV,EAC7B,IAAI,EACJ,CAAC,CACF;SACF;KACF,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAA6B;IACrE,MAAM,kBAAkB,GACtB,QAAQ,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAE3E,OAAO;QACL;YACE,QAAQ,EAAE,cAAc;YACxB,OAAO,EAAE,kBAAkB,CAAC,kBAAkB,EAAE,QAAQ,CAAC;SAC1D;QACD;YACE,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC;SACnD;QACD;YACE,QAAQ,EAAE,wBAAwB;YAClC,OAAO,EAAE,kBAAkB,CAAC,oBAAoB,EAAE,QAAQ,CAAC;SAC5D;QACD;YACE,QAAQ,EAAE,0BAA0B;YACpC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;SAC1D;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"site-scaffolder.js","sourceRoot":"","sources":["../../src/emitter/site-scaffolder.ts"],"names":[],"mappings":"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"}