@wootsup/yt-builder-mcp 1.2.0 → 1.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 (165) hide show
  1. package/README.md +15 -11
  2. package/dist/catalog/build-catalog.d.ts +63 -0
  3. package/dist/catalog/build-catalog.d.ts.map +1 -0
  4. package/dist/catalog/build-catalog.js +166 -0
  5. package/dist/catalog/build-catalog.js.map +1 -0
  6. package/dist/gateway/advanced-read-tool.d.ts +37 -0
  7. package/dist/gateway/advanced-read-tool.d.ts.map +1 -0
  8. package/dist/gateway/advanced-read-tool.js +156 -0
  9. package/dist/gateway/advanced-read-tool.js.map +1 -0
  10. package/dist/gateway/advanced-tool/domains.d.ts +18 -3
  11. package/dist/gateway/advanced-tool/domains.d.ts.map +1 -1
  12. package/dist/gateway/advanced-tool/domains.js +28 -9
  13. package/dist/gateway/advanced-tool/domains.js.map +1 -1
  14. package/dist/gateway/advanced-tool/register.d.ts.map +1 -1
  15. package/dist/gateway/advanced-tool/register.js +43 -11
  16. package/dist/gateway/advanced-tool/register.js.map +1 -1
  17. package/dist/gateway/essentials.d.ts +14 -4
  18. package/dist/gateway/essentials.d.ts.map +1 -1
  19. package/dist/gateway/essentials.js +41 -5
  20. package/dist/gateway/essentials.js.map +1 -1
  21. package/dist/gateway/test-support.d.ts +2 -2
  22. package/dist/gateway/test-support.js +2 -2
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +10 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/install-skill.js +1 -1
  27. package/dist/proxy/bridge.d.ts +36 -0
  28. package/dist/proxy/bridge.d.ts.map +1 -0
  29. package/dist/proxy/bridge.js +129 -0
  30. package/dist/proxy/bridge.js.map +1 -0
  31. package/dist/proxy/mode.d.ts +10 -0
  32. package/dist/proxy/mode.d.ts.map +1 -0
  33. package/dist/proxy/mode.js +20 -0
  34. package/dist/proxy/mode.js.map +1 -0
  35. package/dist/server.d.ts +5 -3
  36. package/dist/server.d.ts.map +1 -1
  37. package/dist/server.js +13 -3
  38. package/dist/server.js.map +1 -1
  39. package/dist/setup-wizard.d.ts.map +1 -1
  40. package/dist/setup-wizard.js +7 -0
  41. package/dist/setup-wizard.js.map +1 -1
  42. package/dist/sites/client-pool.d.ts.map +1 -1
  43. package/dist/sites/client-pool.js +21 -3
  44. package/dist/sites/client-pool.js.map +1 -1
  45. package/dist/sites/registry.d.ts +30 -0
  46. package/dist/sites/registry.d.ts.map +1 -1
  47. package/dist/sites/registry.js.map +1 -1
  48. package/dist/sites/store.d.ts +8 -1
  49. package/dist/sites/store.d.ts.map +1 -1
  50. package/dist/sites/store.js +17 -2
  51. package/dist/sites/store.js.map +1 -1
  52. package/dist/sites/tools/use-site.d.ts.map +1 -1
  53. package/dist/sites/tools/use-site.js +26 -6
  54. package/dist/sites/tools/use-site.js.map +1 -1
  55. package/dist/tools/bind-guidance.d.ts +80 -0
  56. package/dist/tools/bind-guidance.d.ts.map +1 -0
  57. package/dist/tools/bind-guidance.js +95 -0
  58. package/dist/tools/bind-guidance.js.map +1 -0
  59. package/dist/tools/elements/builders.d.ts.map +1 -1
  60. package/dist/tools/elements/builders.js +59 -11
  61. package/dist/tools/elements/builders.js.map +1 -1
  62. package/dist/tools/elements/handlers-write.d.ts +19 -2
  63. package/dist/tools/elements/handlers-write.d.ts.map +1 -1
  64. package/dist/tools/elements/handlers-write.js +179 -10
  65. package/dist/tools/elements/handlers-write.js.map +1 -1
  66. package/dist/tools/elements/handlers.d.ts +6 -1
  67. package/dist/tools/elements/handlers.d.ts.map +1 -1
  68. package/dist/tools/elements/handlers.js +74 -7
  69. package/dist/tools/elements/handlers.js.map +1 -1
  70. package/dist/tools/elements/layout-hierarchy-rules.d.ts +62 -0
  71. package/dist/tools/elements/layout-hierarchy-rules.d.ts.map +1 -0
  72. package/dist/tools/elements/layout-hierarchy-rules.js +154 -0
  73. package/dist/tools/elements/layout-hierarchy-rules.js.map +1 -0
  74. package/dist/tools/format/elements-format.d.ts +35 -0
  75. package/dist/tools/format/elements-format.d.ts.map +1 -1
  76. package/dist/tools/format/elements-format.js +124 -1
  77. package/dist/tools/format/elements-format.js.map +1 -1
  78. package/dist/tools/format/inspection-format.d.ts +18 -0
  79. package/dist/tools/format/inspection-format.d.ts.map +1 -1
  80. package/dist/tools/format/inspection-format.js +22 -1
  81. package/dist/tools/format/inspection-format.js.map +1 -1
  82. package/dist/tools/format/pages-format.d.ts.map +1 -1
  83. package/dist/tools/format/pages-format.js +7 -0
  84. package/dist/tools/format/pages-format.js.map +1 -1
  85. package/dist/tools/format/sources-format.d.ts +8 -0
  86. package/dist/tools/format/sources-format.d.ts.map +1 -1
  87. package/dist/tools/format/sources-format.js +10 -0
  88. package/dist/tools/format/sources-format.js.map +1 -1
  89. package/dist/tools/health.d.ts.map +1 -1
  90. package/dist/tools/health.js +24 -0
  91. package/dist/tools/health.js.map +1 -1
  92. package/dist/tools/index.d.ts.map +1 -1
  93. package/dist/tools/index.js +4 -0
  94. package/dist/tools/index.js.map +1 -1
  95. package/dist/tools/inspection.d.ts +24 -0
  96. package/dist/tools/inspection.d.ts.map +1 -1
  97. package/dist/tools/inspection.js +140 -41
  98. package/dist/tools/inspection.js.map +1 -1
  99. package/dist/tools/layout-flatten.d.ts +11 -8
  100. package/dist/tools/layout-flatten.d.ts.map +1 -1
  101. package/dist/tools/layout-flatten.js +17 -6
  102. package/dist/tools/layout-flatten.js.map +1 -1
  103. package/dist/tools/multi-items/builders.d.ts.map +1 -1
  104. package/dist/tools/multi-items/builders.js +11 -2
  105. package/dist/tools/multi-items/builders.js.map +1 -1
  106. package/dist/tools/multi-items/inspect-handler.d.ts +13 -0
  107. package/dist/tools/multi-items/inspect-handler.d.ts.map +1 -1
  108. package/dist/tools/multi-items/inspect-handler.js +147 -3
  109. package/dist/tools/multi-items/inspect-handler.js.map +1 -1
  110. package/dist/tools/pages/builders.d.ts.map +1 -1
  111. package/dist/tools/pages/builders.js +88 -25
  112. package/dist/tools/pages/builders.js.map +1 -1
  113. package/dist/tools/pages/handlers-read.d.ts +5 -1
  114. package/dist/tools/pages/handlers-read.d.ts.map +1 -1
  115. package/dist/tools/pages/handlers-read.js +192 -47
  116. package/dist/tools/pages/handlers-read.js.map +1 -1
  117. package/dist/tools/pages/handlers-write.d.ts +95 -1
  118. package/dist/tools/pages/handlers-write.d.ts.map +1 -1
  119. package/dist/tools/pages/handlers-write.js +137 -8
  120. package/dist/tools/pages/handlers-write.js.map +1 -1
  121. package/dist/tools/pages/index.d.ts +1 -1
  122. package/dist/tools/pages/index.d.ts.map +1 -1
  123. package/dist/tools/pages/index.js +1 -1
  124. package/dist/tools/pages/index.js.map +1 -1
  125. package/dist/tools/pages/schemas.d.ts +54 -0
  126. package/dist/tools/pages/schemas.d.ts.map +1 -1
  127. package/dist/tools/pages/schemas.js +199 -2
  128. package/dist/tools/pages/schemas.js.map +1 -1
  129. package/dist/tools/shared-schemas.d.ts.map +1 -1
  130. package/dist/tools/shared-schemas.js +15 -13
  131. package/dist/tools/shared-schemas.js.map +1 -1
  132. package/dist/tools/sources/builders.d.ts.map +1 -1
  133. package/dist/tools/sources/builders.js +64 -6
  134. package/dist/tools/sources/builders.js.map +1 -1
  135. package/dist/tools/sources/handlers-bind.d.ts +13 -1
  136. package/dist/tools/sources/handlers-bind.d.ts.map +1 -1
  137. package/dist/tools/sources/handlers-bind.js +163 -1
  138. package/dist/tools/sources/handlers-bind.js.map +1 -1
  139. package/dist/tools/sources/handlers.d.ts +3 -0
  140. package/dist/tools/sources/handlers.d.ts.map +1 -1
  141. package/dist/tools/sources/handlers.js +43 -6
  142. package/dist/tools/sources/handlers.js.map +1 -1
  143. package/dist/tools/sparse-fields.d.ts +23 -0
  144. package/dist/tools/sparse-fields.d.ts.map +1 -1
  145. package/dist/tools/sparse-fields.js +29 -0
  146. package/dist/tools/sparse-fields.js.map +1 -1
  147. package/dist/tools/sublayout/builders.d.ts +23 -0
  148. package/dist/tools/sublayout/builders.d.ts.map +1 -0
  149. package/dist/tools/sublayout/builders.js +54 -0
  150. package/dist/tools/sublayout/builders.js.map +1 -0
  151. package/dist/tools/sublayout/index.d.ts +13 -0
  152. package/dist/tools/sublayout/index.d.ts.map +1 -0
  153. package/dist/tools/sublayout/index.js +13 -0
  154. package/dist/tools/sublayout/index.js.map +1 -0
  155. package/dist/tools/sublayout/inspect-sublayout-handler.d.ts +95 -0
  156. package/dist/tools/sublayout/inspect-sublayout-handler.d.ts.map +1 -0
  157. package/dist/tools/sublayout/inspect-sublayout-handler.js +181 -0
  158. package/dist/tools/sublayout/inspect-sublayout-handler.js.map +1 -0
  159. package/dist/tools/tool-builder/results.d.ts +31 -0
  160. package/dist/tools/tool-builder/results.d.ts.map +1 -1
  161. package/dist/tools/tool-builder/results.js +95 -4
  162. package/dist/tools/tool-builder/results.js.map +1 -1
  163. package/manifest.json +1 -1
  164. package/package.json +4 -2
  165. package/skills/yt-builder-mcp/SKILL.md +146 -81
@@ -7,16 +7,37 @@
7
7
  * @license MIT
8
8
  */
9
9
  import { z } from 'zod';
10
+ import { isEssential, isDirectTopLevel } from '../essentials.js';
10
11
  import { buildDescription, renderGroupedList } from './domains.js';
11
12
  import { discoveryResult } from './discovery.js';
12
13
  import { errorResult, executeAdvancedTool } from './execute.js';
13
- /** Builds the gateway tool's Zod inputSchema for a given non-empty enum of advanced names. */
14
- function gatewayInputSchema(enumValues) {
14
+ /**
15
+ * Builds the gateway tool's Zod inputSchema.
16
+ *
17
+ * F205 (P2): `tool` is a free z.string(), NOT a z.enum of the advanced names.
18
+ * The MCP SDK validates the gateway inputSchema BEFORE our handler runs; an
19
+ * enum rejected every first-class tool name (yootheme_builder_health,
20
+ * yootheme_builder_template_summary, ...) with a raw McpError -32602, so the
21
+ * handler's unknown_tool / first_class_tool steering never ran. A plain string
22
+ * lets every name reach the handler. renderGroupedList in the description stays
23
+ * the load-bearing discovery surface.
24
+ */
25
+ function gatewayInputSchema() {
15
26
  return {
16
- tool: z.enum(enumValues).describe('Advanced tool to route to (e.g. "yootheme_builder_page_save"). ' +
27
+ tool: z.string().describe('Advanced tool to route to (e.g. "yootheme_builder_page_get_schema"). ' +
28
+ 'Must be one of the advanced tools listed in this description — ' +
29
+ 'first-class tools (yootheme_builder_health, ...) are called ' +
30
+ 'DIRECTLY, not through this gateway. ' +
17
31
  'Omit `arguments` to discover its schema first.'),
18
32
  arguments: z.record(z.string(), z.unknown()).optional().describe('Arguments for the target tool. Omit for discovery mode ' +
19
33
  "(returns the tool's schema + annotations)."),
34
+ // `input` is a tolerated ALIAS for `arguments`. Some agents (and older
35
+ // skill docs) pass the target arguments under `input:`. Without this the
36
+ // key would be dropped by the SDK's zod validation, leaving `arguments`
37
+ // undefined → the gateway silently fell into discovery mode and never
38
+ // executed the write (F107). Accepting it keeps verbatim callers working;
39
+ // `arguments` still wins when both are present.
40
+ input: z.record(z.string(), z.unknown()).optional().describe('Alias for `arguments` (tolerated for back-compat). Prefer `arguments`.'),
20
41
  };
21
42
  }
22
43
  /**
@@ -27,15 +48,10 @@ function gatewayInputSchema(enumValues) {
27
48
  */
28
49
  export function registerAdvancedTool(realServer, advancedRegistry) {
29
50
  const advancedNames = [...advancedRegistry.keys()].sort();
30
- // z.enum needs a non-empty tuple. The empty-registry arm is exercised
31
- // only by defensive test wiring; production always populates the
32
- // registry. Keeping the guard means a zero-tool wiring still yields a
33
- // valid (if inert) gateway schema rather than a z.enum crash.
34
- const enumValues = advancedNames.length > 0 ? advancedNames : ['__none__'];
35
51
  realServer.registerTool('yootheme_builder_advanced', {
36
52
  title: 'Advanced Tool Gateway',
37
53
  description: buildDescription(advancedNames),
38
- inputSchema: gatewayInputSchema(enumValues),
54
+ inputSchema: gatewayInputSchema(),
39
55
  // Stream D3 T3: gateway is the only L1 tool that retains
40
56
  // `openWorldHint:true` — its effective behaviour is
41
57
  // dynamic (target tool decided at call-time). Conservative
@@ -52,6 +68,20 @@ export function registerAdvancedTool(realServer, advancedRegistry) {
52
68
  }, async (args, extra) => {
53
69
  const entry = advancedRegistry.get(args.tool);
54
70
  if (!entry) {
71
+ // F205: a name that is a first-class tool (L1 essential or L3
72
+ // direct top-level) is a different error than a typo — steer the
73
+ // caller to call it DIRECTLY instead of routing it through the
74
+ // gateway.
75
+ if (isEssential(args.tool) || isDirectTopLevel(args.tool)) {
76
+ return errorResult({
77
+ message: `"${args.tool}" is a FIRST-CLASS tool — it appears directly in tools/list.`,
78
+ code: 'first_class_tool',
79
+ suggestion: `Call "${args.tool}" directly instead of routing it through ` +
80
+ 'yootheme_builder_advanced. This gateway only routes the advanced ' +
81
+ 'tools listed in its description.',
82
+ details: { tool: args.tool },
83
+ });
84
+ }
55
85
  return errorResult({
56
86
  message: `Unknown advanced tool: "${args.tool}".`,
57
87
  code: 'unknown_tool',
@@ -61,9 +91,11 @@ export function registerAdvancedTool(realServer, advancedRegistry) {
61
91
  details: { valid_tools_by_domain: renderGroupedList(advancedNames) },
62
92
  });
63
93
  }
64
- if (args.arguments === undefined)
94
+ // `arguments` is canonical; `input` is a tolerated alias (F107).
95
+ const callArgs = args.arguments ?? args.input;
96
+ if (callArgs === undefined)
65
97
  return discoveryResult(args.tool, entry);
66
- return executeAdvancedTool(args.tool, entry, args.arguments, extra);
98
+ return executeAdvancedTool(args.tool, entry, callArgs, extra);
67
99
  });
68
100
  }
69
101
  //# sourceMappingURL=register.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/register.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEhE,8FAA8F;AAC9F,SAAS,kBAAkB,CAAC,UAAiC;IACzD,OAAO;QACH,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAC7B,iEAAiE;YAC7D,gDAAgD,CACvD;QACD,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC5D,yDAAyD;YACrD,4CAA4C,CACnD;KACJ,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAChC,UAAqB,EACrB,gBAAgD;IAEhD,MAAM,aAAa,GAAG,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1D,sEAAsE;IACtE,iEAAiE;IACjE,sEAAsE;IACtE,8DAA8D;IAC9D,MAAM,UAAU,GACZ,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,aAAuC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAEvF,UAAU,CAAC,YAAY,CACnB,2BAA2B,EAC3B;QACI,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,gBAAgB,CAAC,aAAa,CAAC;QAC5C,WAAW,EAAE,kBAAkB,CAAC,UAAU,CAAC;QAC3C,yDAAyD;QACzD,oDAAoD;QACpD,2DAA2D;QAC3D,yDAAyD;QACzD,0DAA0D;QAC1D,iDAAiD;QACjD,WAAW,EAAE;YACT,KAAK,EAAE,uBAAuB;YAC9B,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,IAAI;SACtB;KACJ,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAA2B,EAAE;QAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,WAAW,CAAC;gBACf,OAAO,EAAE,2BAA2B,IAAI,CAAC,IAAI,IAAI;gBACjD,IAAI,EAAE,cAAc;gBACpB,UAAU,EACN,2DAA2D;oBAC3D,qDAAqD;oBACrD,oCAAoC,iBAAiB,CAAC,aAAa,CAAC,EAAE;gBAC1E,OAAO,EAAE,EAAE,qBAAqB,EAAE,iBAAiB,CAAC,aAAa,CAAC,EAAE;aACvE,CAAC,CAAC;QACP,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3E,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/gateway/advanced-tool/register.ts"],"names":[],"mappings":"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"}
@@ -16,11 +16,21 @@
16
16
  * SDK never sees a duplicate registration.
17
17
  *
18
18
  * Why this split: Cursor caps MCP servers at ~40 tools. This adapter
19
- * declares 30 callable tools (22 domain L1/L3 + 7 advanced L2 + 1 gateway).
20
- * The 3-lane shape keeps `tools/list` at 20 (L1) + 2 (L3) + 1 (gateway) =
21
- * 23 entries, well under the cap, while every tool stays fully reachable
19
+ * declares 31 callable tools (26 domain L1/L3 + 4 advanced L2 + 1 gateway).
20
+ * The 3-lane shape keeps `tools/list` at 24 (L1) + 2 (L3) + 1 (gateway) =
21
+ * 27 entries, well under the cap, while every tool stays fully reachable
22
22
  * (advanced tools through `yootheme_builder_advanced`).
23
23
  *
24
+ * F116 (2026-06-11): the bind→save→publish chain (element_bind_source,
25
+ * page_save, page_publish) was promoted from the advanced lane to L1. It is
26
+ * the #1 dynamic-content workflow; hiding it behind the gateway made an agent
27
+ * listing tools see element_add but neither bind nor publish — a likely
28
+ * "can't publish" deadend. L1 20→23, advanced 7→4.
29
+ *
30
+ * P-G (Goldstandard wave 3): page_dynamize was added as a new registered tool
31
+ * and promoted to L1 (the one-call dynamize-existing-section path). With the
32
+ * F116 trio it brings L1 to 24, advanced stays 4, surface to 27.
33
+ *
24
34
  * Health + diagnose live in L3 because they MUST be the first thing an
25
35
  * LLM-host calls when something is broken; routing them through a gateway
26
36
  * would create a chicken-and-egg loop (the LLM would have to discover
@@ -32,7 +42,7 @@
32
42
  * L1 — Tools kept as first-class entries in `tools/list`.
33
43
  * Forwarded by the CapturingServer to the real McpServer.
34
44
  */
35
- export declare const ESSENTIAL_TOOLS: readonly ["yootheme_builder_pages_list", "yootheme_builder_get_etag", "yootheme_builder_element_list", "yootheme_builder_element_add", "yootheme_builder_element_update_settings", "yootheme_builder_sources_list", "yootheme_builder_element_types_list", "yootheme_builder_inspect_multi_items_binding", "yootheme_builder_element_get", "yootheme_builder_element_delete", "yootheme_builder_element_clone", "yootheme_builder_element_move", "yootheme_builder_page_get_layout", "yootheme_builder_template_summary", "yootheme_builder_element_type_get_schema", "yootheme_builder_sites_list", "yootheme_builder_sites_test", "yootheme_builder_use_site", "yootheme_builder_pages_create", "yootheme_builder_pages_delete"];
45
+ export declare const ESSENTIAL_TOOLS: readonly ["yootheme_builder_pages_list", "yootheme_builder_get_etag", "yootheme_builder_element_list", "yootheme_builder_element_add", "yootheme_builder_element_update_settings", "yootheme_builder_sources_list", "yootheme_builder_element_types_list", "yootheme_builder_inspect_multi_items_binding", "yootheme_builder_element_get", "yootheme_builder_element_delete", "yootheme_builder_element_clone", "yootheme_builder_element_move", "yootheme_builder_page_get_layout", "yootheme_builder_template_summary", "yootheme_builder_element_type_get_schema", "yootheme_builder_sites_list", "yootheme_builder_sites_test", "yootheme_builder_use_site", "yootheme_builder_pages_create", "yootheme_builder_pages_delete", "yootheme_builder_element_bind_source", "yootheme_builder_page_save", "yootheme_builder_page_publish", "yootheme_builder_page_dynamize", "yootheme_builder_scaffold_section"];
36
46
  /**
37
47
  * L3 — Tools registered DIRECTLY on the real McpServer, BEFORE the
38
48
  * CapturingServer wraps it. The CapturingServer treats these names as a
@@ -1 +1 @@
1
- {"version":3,"file":"essentials.d.ts","sourceRoot":"","sources":["../../src/gateway/essentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH;;;GAGG;AACH,eAAO,MAAM,eAAe,osBAqDlB,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,mEAGzB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD"}
1
+ {"version":3,"file":"essentials.d.ts","sourceRoot":"","sources":["../../src/gateway/essentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH;;;GAGG;AACH,eAAO,MAAM,eAAe,k3BA+ElB,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,mEAGzB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAC7D,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,4DAA4D;AAC5D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD"}
@@ -16,11 +16,21 @@
16
16
  * SDK never sees a duplicate registration.
17
17
  *
18
18
  * Why this split: Cursor caps MCP servers at ~40 tools. This adapter
19
- * declares 30 callable tools (22 domain L1/L3 + 7 advanced L2 + 1 gateway).
20
- * The 3-lane shape keeps `tools/list` at 20 (L1) + 2 (L3) + 1 (gateway) =
21
- * 23 entries, well under the cap, while every tool stays fully reachable
19
+ * declares 31 callable tools (26 domain L1/L3 + 4 advanced L2 + 1 gateway).
20
+ * The 3-lane shape keeps `tools/list` at 24 (L1) + 2 (L3) + 1 (gateway) =
21
+ * 27 entries, well under the cap, while every tool stays fully reachable
22
22
  * (advanced tools through `yootheme_builder_advanced`).
23
23
  *
24
+ * F116 (2026-06-11): the bind→save→publish chain (element_bind_source,
25
+ * page_save, page_publish) was promoted from the advanced lane to L1. It is
26
+ * the #1 dynamic-content workflow; hiding it behind the gateway made an agent
27
+ * listing tools see element_add but neither bind nor publish — a likely
28
+ * "can't publish" deadend. L1 20→23, advanced 7→4.
29
+ *
30
+ * P-G (Goldstandard wave 3): page_dynamize was added as a new registered tool
31
+ * and promoted to L1 (the one-call dynamize-existing-section path). With the
32
+ * F116 trio it brings L1 to 24, advanced stays 4, surface to 27.
33
+ *
24
34
  * Health + diagnose live in L3 because they MUST be the first thing an
25
35
  * LLM-host calls when something is broken; routing them through a gateway
26
36
  * would create a chicken-and-egg loop (the LLM would have to discover
@@ -48,8 +58,9 @@ export const ESSENTIAL_TOOLS = [
48
58
  // F-16 hot-path promotions (Maria-Audit v2 re-confirmed) — the 5
49
59
  // most-used read/mutate operations skip the advanced-router
50
60
  // discovery roundtrip. Cursor cap is ~40; with the W7 sites_list +
51
- // sites_test additions (plus later C4 + config-harmonization) we sit
52
- // at 20 L1 + 2 L3 + 1 gateway = 23, comfortable below the limit.
61
+ // sites_test additions (plus later C4, config-harmonization, the
62
+ // F116 bind→save→publish promotion and the P-G page_dynamize tool) we
63
+ // sit at 24 L1 + 2 L3 + 1 gateway = 27, comfortable below the limit.
53
64
  'yootheme_builder_element_get',
54
65
  'yootheme_builder_element_delete',
55
66
  'yootheme_builder_element_clone',
@@ -85,6 +96,31 @@ export const ESSENTIAL_TOOLS = [
85
96
  // this page". L1 surface 17 → 19.
86
97
  'yootheme_builder_pages_create',
87
98
  'yootheme_builder_pages_delete',
99
+ // F116 (2026-06-11) — the bind→save→publish chain. element_bind_source is the
100
+ // #1 dynamic-content operation (wire a published source field onto an
101
+ // element); page_save + page_publish persist + go live. All three were
102
+ // advanced-lane only, so an agent listing tools saw element_add but
103
+ // neither bind nor publish — a likely "can't publish" deadend and a
104
+ // 2-call discovery tax (find the gateway, then route). Promoting them to
105
+ // L1 makes the canonical dynamic-content workflow first-class and
106
+ // directly callable. L1 surface 20 → 23.
107
+ 'yootheme_builder_element_bind_source',
108
+ 'yootheme_builder_page_save',
109
+ 'yootheme_builder_page_publish',
110
+ // P-G (Goldstandard wave 3) — page_dynamize is THE canonical one-call
111
+ // path to dynamize an existing designed section (copy byte-identically,
112
+ // swap only mapped queries + leaf names). It MUST be L1 so an agent
113
+ // reaches it directly INSTEAD of discovering it through the advanced
114
+ // gateway and then hand-editing layout JSON (the failure mode the
115
+ // recipe-as-code exists to prevent). With the F116 trio L1 23 → 24.
116
+ 'yootheme_builder_page_dynamize',
117
+ // WF2 Option C (2026-06-13) — scaffold_section is the positive-steering
118
+ // counterpart to the structural-hierarchy guard: it creates a VALID
119
+ // section → row → column hull in ONE atomic call and returns the column
120
+ // pointer(s) to drop content into. It MUST be L1 so an agent reaches it
121
+ // directly INSTEAD of hand-building (and tripping the guard on) an
122
+ // invalid root/section/row placement. With the prior set L1 24 → 25.
123
+ 'yootheme_builder_scaffold_section',
88
124
  ];
89
125
  /**
90
126
  * L3 — Tools registered DIRECTLY on the real McpServer, BEFORE the
@@ -1 +1 @@
1
- {"version":3,"file":"essentials.js","sourceRoot":"","sources":["../../src/gateway/essentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,6BAA6B;IAC7B,2BAA2B;IAC3B,+BAA+B;IAC/B,8BAA8B;IAC9B,0CAA0C;IAC1C,+BAA+B;IAC/B,qCAAqC;IACrC,6DAA6D;IAC7D,kEAAkE;IAClE,6DAA6D;IAC7D,yCAAyC;IACzC,8CAA8C;IAC9C,iEAAiE;IACjE,4DAA4D;IAC5D,mEAAmE;IACnE,qEAAqE;IACrE,iEAAiE;IACjE,8BAA8B;IAC9B,iCAAiC;IACjC,gCAAgC;IAChC,+BAA+B;IAC/B,kCAAkC;IAClC,oEAAoE;IACpE,sEAAsE;IACtE,mCAAmC;IACnC,iEAAiE;IACjE,iEAAiE;IACjE,iEAAiE;IACjE,4DAA4D;IAC5D,4DAA4D;IAC5D,0CAA0C;IAC1C,mEAAmE;IACnE,oEAAoE;IACpE,mEAAmE;IACnE,kEAAkE;IAClE,uEAAuE;IACvE,6BAA6B;IAC7B,6BAA6B;IAC7B,mEAAmE;IACnE,oEAAoE;IACpE,oEAAoE;IACpE,8DAA8D;IAC9D,+BAA+B;IAC/B,2BAA2B;IAC3B,oEAAoE;IACpE,iEAAiE;IACjE,mEAAmE;IACnE,oEAAoE;IACpE,kEAAkE;IAClE,kCAAkC;IAClC,+BAA+B;IAC/B,+BAA+B;CACzB,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,yBAAyB;IACzB,2BAA2B;CACrB,CAAC;AAKX,gEAAgE;AAChE,MAAM,UAAU,WAAW,CAAC,IAAY;IACpC,OAAQ,eAAqC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,gBAAgB,CAAC,IAAY;IACzC,OAAQ,sBAA4C,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"essentials.js","sourceRoot":"","sources":["../../src/gateway/essentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,6BAA6B;IAC7B,2BAA2B;IAC3B,+BAA+B;IAC/B,8BAA8B;IAC9B,0CAA0C;IAC1C,+BAA+B;IAC/B,qCAAqC;IACrC,6DAA6D;IAC7D,kEAAkE;IAClE,6DAA6D;IAC7D,yCAAyC;IACzC,8CAA8C;IAC9C,iEAAiE;IACjE,4DAA4D;IAC5D,mEAAmE;IACnE,iEAAiE;IACjE,sEAAsE;IACtE,qEAAqE;IACrE,8BAA8B;IAC9B,iCAAiC;IACjC,gCAAgC;IAChC,+BAA+B;IAC/B,kCAAkC;IAClC,oEAAoE;IACpE,sEAAsE;IACtE,mCAAmC;IACnC,iEAAiE;IACjE,iEAAiE;IACjE,iEAAiE;IACjE,4DAA4D;IAC5D,4DAA4D;IAC5D,0CAA0C;IAC1C,mEAAmE;IACnE,oEAAoE;IACpE,mEAAmE;IACnE,kEAAkE;IAClE,uEAAuE;IACvE,6BAA6B;IAC7B,6BAA6B;IAC7B,mEAAmE;IACnE,oEAAoE;IACpE,oEAAoE;IACpE,8DAA8D;IAC9D,+BAA+B;IAC/B,2BAA2B;IAC3B,oEAAoE;IACpE,iEAAiE;IACjE,mEAAmE;IACnE,oEAAoE;IACpE,kEAAkE;IAClE,kCAAkC;IAClC,+BAA+B;IAC/B,+BAA+B;IAC/B,8EAA8E;IAC9E,sEAAsE;IACtE,uEAAuE;IACvE,oEAAoE;IACpE,oEAAoE;IACpE,yEAAyE;IACzE,kEAAkE;IAClE,yCAAyC;IACzC,sCAAsC;IACtC,4BAA4B;IAC5B,+BAA+B;IAC/B,sEAAsE;IACtE,wEAAwE;IACxE,oEAAoE;IACpE,qEAAqE;IACrE,kEAAkE;IAClE,oEAAoE;IACpE,gCAAgC;IAChC,wEAAwE;IACxE,oEAAoE;IACpE,wEAAwE;IACxE,wEAAwE;IACxE,mEAAmE;IACnE,qEAAqE;IACrE,mCAAmC;CAC7B,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IAClC,yBAAyB;IACzB,2BAA2B;CACrB,CAAC;AAKX,gEAAgE;AAChE,MAAM,UAAU,WAAW,CAAC,IAAY;IACpC,OAAQ,eAAqC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjE,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,gBAAgB,CAAC,IAAY;IACzC,OAAQ,sBAA4C,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxE,CAAC"}
@@ -31,8 +31,8 @@ export interface CollectedTool {
31
31
  * name. The CapturingServer must have been used to register the L1/L2
32
32
  * tools, and `registerAdvancedTool` must have run, before this is called.
33
33
  *
34
- * Production size = 30:
35
- * 20 L1 essentials (real server) + 7 L2 advanced (registry)
34
+ * Production size = 30 (post-F116):
35
+ * 23 L1 essentials (real server) + 4 L2 advanced (registry)
36
36
  * + 2 L3 direct (real server) + 1 gateway (real server) = 30.
37
37
  */
38
38
  export declare function collectAllRegisteredTools(server: McpServer, capturing: CapturingServer): Record<string, CollectedTool>;
@@ -20,8 +20,8 @@
20
20
  * name. The CapturingServer must have been used to register the L1/L2
21
21
  * tools, and `registerAdvancedTool` must have run, before this is called.
22
22
  *
23
- * Production size = 30:
24
- * 20 L1 essentials (real server) + 7 L2 advanced (registry)
23
+ * Production size = 30 (post-F116):
24
+ * 23 L1 essentials (real server) + 4 L2 advanced (registry)
25
25
  * + 2 L3 direct (real server) + 1 gateway (real server) = 30.
26
26
  */
27
27
  export function collectAllRegisteredTools(server, capturing) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACH,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EACH,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,gBAAgB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,eAAe,EACf,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EACH,yBAAyB,EACzB,QAAQ,EACR,KAAK,aAAa,GACrB,MAAM,2BAA2B,CAAC;AAEnC,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAuEnC;AAkBD,OAAO,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACH,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EACH,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,gBAAgB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,eAAe,EACf,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EACH,yBAAyB,EACzB,QAAQ,EACR,KAAK,aAAa,GACrB,MAAM,2BAA2B,CAAC;AAEnC,iBAAe,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAiFnC;AAkBD,OAAO,EAAE,IAAI,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -36,6 +36,16 @@ export { CapturingServer, } from './gateway/capturing-server.js';
36
36
  export { registerAdvancedTool } from './gateway/advanced-tool.js';
37
37
  export { collectAllRegisteredTools, findTool, } from './gateway/test-support.js';
38
38
  async function main() {
39
+ // Proxy mode: forward stdio 1:1 to the plugin-served PHP MCP endpoint and
40
+ // stop here — the fat catalog below is bypassed entirely. Default (fat) is
41
+ // unchanged. The dynamic import is gated on the env so the fat path never
42
+ // loads the proxy module (and the SDK client transport it pulls in) — keeps
43
+ // fat-mode startup lean and avoids loading proxy code when it can't apply.
44
+ if (process.env.YTB_MCP_MODE === 'proxy') {
45
+ const { maybeRunProxy } = await import('./proxy/bridge.js');
46
+ if (await maybeRunProxy(process.env))
47
+ return;
48
+ }
39
49
  const testMode = isTestMode();
40
50
  // W10 — multi-site bootstrap is now centralised in
41
51
  // `auth.loadRegistry()`. The canonical resolution order is:
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACH,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,mEAAmE;AACnE,+DAA+D;AAC/D,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EACH,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,gBAAgB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,eAAe,GAIlB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EACH,yBAAyB,EACzB,QAAQ,GAEX,MAAM,2BAA2B,CAAC;AAEnC,KAAK,UAAU,IAAI;IACf,0EAA0E;IAC1E,2EAA2E;IAC3E,0EAA0E;IAC1E,4EAA4E;IAC5E,2EAA2E;IAC3E,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;QACvC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC5D,IAAI,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO;IACjD,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAE9B,mDAAmD;IACnD,4DAA4D;IAC5D,yDAAyD;IACzD,4DAA4D;IAC5D,2CAA2C;IAC3C,EAAE;IACF,8DAA8D;IAC9D,gEAAgE;IAChE,iEAAiE;IACjE,mEAAmE;IACnE,6DAA6D;IAC7D,+CAA+C;IAC/C,IAAI,QAAsB,CAAC;IAC3B,IAAI,CAAC;QACD,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACpC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,8DAA8D;QAC9D,yDAAyD;QACzD,0DAA0D;QAC1D,kEAAkE;QAClE,kEAAkE;QAClE,gEAAgE;QAChE,kEAAkE;QAClE,kEAAkE;QAClE,gEAAgE;QAChE,+DAA+D;QAC/D,+DAA+D;QAC/D,gEAAgE;QAChE,kEAAkE;QAClE,yBAAyB;QACzB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,CAAC,YAAY,WAAW;YACjC,CAAC,CAAC,uBAAuB;YACzB,CAAC,CAAC,wCAAwC,CAAC;QAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC;QAC5D,QAAQ,GAAG,IAAI,YAAY,CAAC;YACxB,cAAc,EAAE,CAAC;YACjB,eAAe,EAAE,IAAI;YACrB,KAAK,EAAE,EAAE;SACZ,CAAC,CAAC;IACP,CAAC;IAED,MAAM,cAAc,GAAG,qBAAqB,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IAEtD,gEAAgE;IAChE,kEAAkE;IAClE,gEAAgE;IAChE,8DAA8D;IAC9D,oEAAoE;IACpE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE1B,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,IAAI,QAAQ,EAAE,CAAC;QACX,kEAAkE;QAClE,yDAAyD;QACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,gCAAgC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAC7E,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;GAOG;AACH,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,EAAE,CAAC;IACzC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;QACxB,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,OAAO,IAAI,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -27,7 +27,7 @@ The YT Builder MCP skill is installed at \`~/.claude/skills/yt-builder-mcp/\`
27
27
  — the universal-marker path recognised by Claude Desktop and other AI
28
28
  clients that follow the \`~/AGENTS.md\` discovery protocol.
29
29
 
30
- It documents the 30 MCP tools (29 domain + 1 gateway, 23 entries in
30
+ It documents the 30 MCP tools (29 domain + 1 gateway, 26 entries in
31
31
  \`tools/list\`), the 5 canonical workflows (build hero, bind dynamic
32
32
  source, clone section, diagnose 401, add custom element), and the
33
33
  gateway routing model. Source: https://github.com/wootsup/yt-builder-mcp.
@@ -0,0 +1,36 @@
1
+ import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
2
+ /**
3
+ * Wire two MCP transports into a transparent pipe: every message from one side
4
+ * is relayed verbatim to the other, and a close/error on either side tears down
5
+ * the other. No transformation — the PHP server owns the protocol semantics.
6
+ * The caller is responsible for start()ing both transports.
7
+ *
8
+ * `StreamableHTTPClientTransport.send()` re-throws on any upstream failure
9
+ * (401/5xx/connection refused / missing PHP endpoint). The forwarders MUST NOT
10
+ * fire-and-forget that rejection: an unhandled rejection crashes the Node
11
+ * process, so a wrong key / unreachable site would kill the proxy on the first
12
+ * `initialize` instead of surfacing an actionable error. Each direction
13
+ * therefore `.catch()`es its `send()`.
14
+ */
15
+ export declare function bridgeTransports(local: Transport, remote: Transport): void;
16
+ /** Build the real transports + bridge them; resolves when EITHER side closes. */
17
+ export declare function runProxy(config: {
18
+ endpointUrl: URL;
19
+ token: string;
20
+ }, deps?: {
21
+ makeTransports?: (c: {
22
+ endpointUrl: URL;
23
+ token: string;
24
+ }) => {
25
+ local: Transport;
26
+ remote: Transport;
27
+ };
28
+ }): Promise<void>;
29
+ /** Returns true if proxy mode handled the run; false → caller continues with fat. */
30
+ export declare function maybeRunProxy(env: NodeJS.ProcessEnv, deps?: {
31
+ runProxy?: (c: {
32
+ endpointUrl: URL;
33
+ token: string;
34
+ }) => Promise<void>;
35
+ }): Promise<boolean>;
36
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/proxy/bridge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AA6B/E;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CA2C1E;AAcD,iFAAiF;AACjF,wBAAsB,QAAQ,CAC5B,MAAM,EAAE;IAAE,WAAW,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAC3C,IAAI,GAAE;IACJ,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE;QAAE,WAAW,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK;QAC3D,KAAK,EAAE,SAAS,CAAC;QACjB,MAAM,EAAE,SAAS,CAAC;KACnB,CAAC;CACE,GACL,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,qFAAqF;AACrF,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE;QAAE,WAAW,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAAO,GAClF,OAAO,CAAC,OAAO,CAAC,CAMlB"}
@@ -0,0 +1,129 @@
1
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
2
+ import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
3
+ import { resolveMode } from './mode.js';
4
+ /** Narrow an unknown caught value to a human-readable message (no `any`). */
5
+ function errorMessage(err) {
6
+ if (err instanceof Error)
7
+ return err.message;
8
+ if (typeof err === 'string')
9
+ return err;
10
+ try {
11
+ return String(err);
12
+ }
13
+ catch {
14
+ return 'unknown error';
15
+ }
16
+ }
17
+ /**
18
+ * A forwarded message is request-shaped (and therefore answerable with a
19
+ * JSON-RPC error) iff it carries a non-null `id`. Notifications have no `id`.
20
+ */
21
+ function requestId(msg) {
22
+ if (msg !== null && typeof msg === 'object' && 'id' in msg) {
23
+ const id = msg.id;
24
+ if (typeof id === 'string' || typeof id === 'number')
25
+ return id;
26
+ }
27
+ return null;
28
+ }
29
+ /**
30
+ * Wire two MCP transports into a transparent pipe: every message from one side
31
+ * is relayed verbatim to the other, and a close/error on either side tears down
32
+ * the other. No transformation — the PHP server owns the protocol semantics.
33
+ * The caller is responsible for start()ing both transports.
34
+ *
35
+ * `StreamableHTTPClientTransport.send()` re-throws on any upstream failure
36
+ * (401/5xx/connection refused / missing PHP endpoint). The forwarders MUST NOT
37
+ * fire-and-forget that rejection: an unhandled rejection crashes the Node
38
+ * process, so a wrong key / unreachable site would kill the proxy on the first
39
+ * `initialize` instead of surfacing an actionable error. Each direction
40
+ * therefore `.catch()`es its `send()`.
41
+ */
42
+ export function bridgeTransports(local, remote) {
43
+ local.onmessage = (msg) => {
44
+ remote.send(msg).catch((err) => {
45
+ const message = errorMessage(err);
46
+ // stderr only — stdout is the JSON-RPC channel.
47
+ console.error('[yt-builder-proxy] upstream send failed:', message);
48
+ const id = requestId(msg);
49
+ if (id !== null) {
50
+ // Hand the client an actionable error instead of a dead pipe.
51
+ const frame = {
52
+ jsonrpc: '2.0',
53
+ id,
54
+ error: {
55
+ code: -32000,
56
+ message: `Proxy upstream error: ${message}. Check YTB_MCP_SITE_URL / YTB_MCP_BEARER_TOKEN.`,
57
+ },
58
+ };
59
+ local.send(frame).catch((sendErr) => {
60
+ console.error('[yt-builder-proxy] failed to deliver error frame:', errorMessage(sendErr));
61
+ });
62
+ }
63
+ else {
64
+ // A notification has no id to answer — tear the pipe down instead.
65
+ void remote.close();
66
+ }
67
+ });
68
+ };
69
+ remote.onmessage = (msg) => {
70
+ local.send(msg).catch((err) => {
71
+ console.error('[yt-builder-proxy] downstream send failed:', errorMessage(err));
72
+ });
73
+ };
74
+ local.onclose = () => {
75
+ void remote.close();
76
+ };
77
+ remote.onclose = () => {
78
+ void local.close();
79
+ };
80
+ local.onerror = (err) => {
81
+ console.error('[yt-builder-proxy] local transport error:', err.message);
82
+ };
83
+ remote.onerror = (err) => {
84
+ console.error('[yt-builder-proxy] remote transport error:', err.message);
85
+ };
86
+ }
87
+ /** Injection seam for tests — production builds the real SDK transports. */
88
+ function defaultTransports(config) {
89
+ const remote = new StreamableHTTPClientTransport(config.endpointUrl, {
90
+ requestInit: { headers: { Authorization: `Bearer ${config.token}` } },
91
+ });
92
+ const local = new StdioServerTransport();
93
+ return { local, remote };
94
+ }
95
+ /** Build the real transports + bridge them; resolves when EITHER side closes. */
96
+ export async function runProxy(config, deps = {}) {
97
+ const { local, remote } = (deps.makeTransports ?? defaultTransports)(config);
98
+ // Resolve the moment EITHER transport closes — never hang if the remote
99
+ // (upstream) drops first. Capture the bridge's own onclose handlers so the
100
+ // cross-teardown wiring still runs.
101
+ const closed = new Promise((resolve) => {
102
+ bridgeTransports(local, remote);
103
+ const prevLocalClose = local.onclose;
104
+ const prevRemoteClose = remote.onclose;
105
+ local.onclose = () => {
106
+ prevLocalClose?.();
107
+ resolve();
108
+ };
109
+ remote.onclose = () => {
110
+ prevRemoteClose?.();
111
+ resolve();
112
+ };
113
+ });
114
+ // Start LOCAL (stdio) first so the listener is installed before any client
115
+ // message can race in; only then open the upstream connection.
116
+ await local.start();
117
+ await remote.start();
118
+ await closed;
119
+ }
120
+ /** Returns true if proxy mode handled the run; false → caller continues with fat. */
121
+ export async function maybeRunProxy(env, deps = {}) {
122
+ const resolved = resolveMode(env);
123
+ if (resolved.mode !== 'proxy')
124
+ return false;
125
+ const run = deps.runProxy ?? runProxy;
126
+ await run({ endpointUrl: resolved.endpointUrl, token: resolved.token });
127
+ return true;
128
+ }
129
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/proxy/bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type ModeResolution = {
2
+ mode: 'fat';
3
+ } | {
4
+ mode: 'proxy';
5
+ endpointUrl: URL;
6
+ token: string;
7
+ };
8
+ /** Resolve the MCP run mode from the environment. Default is the legacy fat path. */
9
+ export declare function resolveMode(env: NodeJS.ProcessEnv): ModeResolution;
10
+ //# sourceMappingURL=mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/proxy/mode.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,GAAG,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,cAAc,CAqBlE"}
@@ -0,0 +1,20 @@
1
+ /** Resolve the MCP run mode from the environment. Default is the legacy fat path. */
2
+ export function resolveMode(env) {
3
+ if (env.YTB_MCP_MODE !== 'proxy') {
4
+ return { mode: 'fat' };
5
+ }
6
+ const token = env.YTB_MCP_BEARER_TOKEN?.trim();
7
+ if (!token) {
8
+ throw new Error('Proxy mode requires YTB_MCP_BEARER_TOKEN (the ytb_* MCP key).');
9
+ }
10
+ const override = env.YTB_MCP_MCP_URL?.trim();
11
+ const site = env.YTB_MCP_SITE_URL?.trim();
12
+ if (!override && !site) {
13
+ throw new Error('Proxy mode requires YTB_MCP_SITE_URL (or YTB_MCP_MCP_URL override).');
14
+ }
15
+ const endpointUrl = override
16
+ ? new URL(override)
17
+ : new URL(`${site.replace(/\/+$/, '')}/wp-json/yt-builder-mcp/mcp`);
18
+ return { mode: 'proxy', endpointUrl, token };
19
+ }
20
+ //# sourceMappingURL=mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/proxy/mode.ts"],"names":[],"mappings":"AAIA,qFAAqF;AACrF,MAAM,UAAU,WAAW,CAAC,GAAsB;IAChD,IAAI,GAAG,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ;QAC1B,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC;QACnB,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,IAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,6BAA6B,CAAC,CAAC;IAEvE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAC/C,CAAC"}
package/dist/server.d.ts CHANGED
@@ -23,9 +23,11 @@
23
23
  * Registered LAST on the real server, after every L1/L2 tool is
24
24
  * placed and the advanced registry is final.
25
25
  *
26
- * Result: `tools/list.length === 23` (20 L1 + 2 L3 + 1 gateway), and the
27
- * full callable tool surface is 30 (23 advertised + 7 advanced reachable
28
- * through the gateway).
26
+ * Result: `tools/list.length === 26` (23 L1 + 2 L3 + 1 gateway), and the
27
+ * full callable tool surface is 30 (26 advertised + 4 advanced reachable
28
+ * through the gateway). F116 (2026-06-11) promoted the bind→save→publish
29
+ * chain (element_bind_source / page_save / page_publish) L2 → L1, so the
30
+ * advertised surface grew 23 → 26 and the advanced lane shrank 7 → 4.
29
31
  *
30
32
  * @license MIT
31
33
  */
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAMH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,EAAE,eAAe,EAAsB,MAAM,+BAA+B,CAAC;AAEpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AASxD,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEtE,eAAO,MAAM,WAAW,4BAA4B,CAAC;AA4BrD,eAAO,MAAM,cAAc,QAAuB,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AAEpD,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,+BAA+B,CAAC;AAEhE,wDAAwD;AACxD,eAAO,MAAM,0BAA0B,QAGsB,CAAC;AAE9D,mDAAmD;AACnD,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC/C;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACrC,QAAQ,EAAE,YAAY,GACvB,oBAAoB,CAmBtB;AAED,MAAM,WAAW,mBAAmB;IAChC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;CACvC;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,aAAa,CAuIxE"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAMH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,OAAO,EAAE,eAAe,EAAsB,MAAM,+BAA+B,CAAC;AAEpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AASxD,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEtE,eAAO,MAAM,WAAW,4BAA4B,CAAC;AA4BrD,eAAO,MAAM,cAAc,QAAuB,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AAEpD,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,+BAA+B,CAAC;AAEhE,wDAAwD;AACxD,eAAO,MAAM,0BAA0B,QAGsB,CAAC;AAE9D,mDAAmD;AACnD,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAE3D;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC/C;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACrC,QAAQ,EAAE,YAAY,GACvB,oBAAoB,CAmBtB;AAED,MAAM,WAAW,mBAAmB;IAChC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,gFAAgF;IAChF,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAC1C,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;CACvC;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,aAAa,CA+IxE"}
package/dist/server.js CHANGED
@@ -23,9 +23,11 @@
23
23
  * Registered LAST on the real server, after every L1/L2 tool is
24
24
  * placed and the advanced registry is final.
25
25
  *
26
- * Result: `tools/list.length === 23` (20 L1 + 2 L3 + 1 gateway), and the
27
- * full callable tool surface is 30 (23 advertised + 7 advanced reachable
28
- * through the gateway).
26
+ * Result: `tools/list.length === 26` (23 L1 + 2 L3 + 1 gateway), and the
27
+ * full callable tool surface is 30 (26 advertised + 4 advanced reachable
28
+ * through the gateway). F116 (2026-06-11) promoted the bind→save→publish
29
+ * chain (element_bind_source / page_save / page_publish) L2 → L1, so the
30
+ * advertised surface grew 23 → 26 and the advanced lane shrank 7 → 4.
29
31
  *
30
32
  * @license MIT
31
33
  */
@@ -33,6 +35,7 @@ import { readFileSync } from 'node:fs';
33
35
  import { dirname, resolve } from 'node:path';
34
36
  import { fileURLToPath } from 'node:url';
35
37
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
38
+ import { registerAdvancedReadTool } from './gateway/advanced-read-tool.js';
36
39
  import { registerAdvancedTool } from './gateway/advanced-tool.js';
37
40
  import { CapturingServer } from './gateway/capturing-server.js';
38
41
  import { isDirectTopLevel } from './gateway/essentials.js';
@@ -221,6 +224,13 @@ export function createServer(options) {
221
224
  }
222
225
  // Gateway — registered LAST so the advanced registry is final.
223
226
  registerAdvancedTool(mcp, capturing.getAdvancedRegistry());
227
+ // F200a — READ-ONLY gateway sibling. Routes ONLY the read-only L2 subtools
228
+ // (annotation readOnlyHint:true) and is itself readOnly-annotated, so MCP
229
+ // hosts auto-allow it instead of gating every advanced inspection call (the
230
+ // Desktop-E2E #2 per-call approval tax). Writing tools stay reachable only
231
+ // through the (gated) write gateway above. It does NOT capture or duplicate
232
+ // the L2 subtools — it shares the same advanced registry, read-filtered.
233
+ registerAdvancedReadTool(mcp, capturing.getAdvancedRegistry());
224
234
  return { mcp, tools, capturing };
225
235
  }
226
236
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}