@mcp-z/client 1.0.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 (211) hide show
  1. package/AGENTS.md +159 -0
  2. package/LICENSE +21 -0
  3. package/README.md +90 -0
  4. package/dist/cjs/auth/capability-discovery.d.cts +25 -0
  5. package/dist/cjs/auth/capability-discovery.d.ts +25 -0
  6. package/dist/cjs/auth/capability-discovery.js +280 -0
  7. package/dist/cjs/auth/capability-discovery.js.map +1 -0
  8. package/dist/cjs/auth/index.d.cts +9 -0
  9. package/dist/cjs/auth/index.d.ts +9 -0
  10. package/dist/cjs/auth/index.js +28 -0
  11. package/dist/cjs/auth/index.js.map +1 -0
  12. package/dist/cjs/auth/interactive-oauth-flow.d.cts +58 -0
  13. package/dist/cjs/auth/interactive-oauth-flow.d.ts +58 -0
  14. package/dist/cjs/auth/interactive-oauth-flow.js +537 -0
  15. package/dist/cjs/auth/interactive-oauth-flow.js.map +1 -0
  16. package/dist/cjs/auth/oauth-callback-listener.d.cts +56 -0
  17. package/dist/cjs/auth/oauth-callback-listener.d.ts +56 -0
  18. package/dist/cjs/auth/oauth-callback-listener.js +333 -0
  19. package/dist/cjs/auth/oauth-callback-listener.js.map +1 -0
  20. package/dist/cjs/auth/pkce.d.cts +17 -0
  21. package/dist/cjs/auth/pkce.d.ts +17 -0
  22. package/dist/cjs/auth/pkce.js +192 -0
  23. package/dist/cjs/auth/pkce.js.map +1 -0
  24. package/dist/cjs/auth/rfc9728-discovery.d.cts +34 -0
  25. package/dist/cjs/auth/rfc9728-discovery.d.ts +34 -0
  26. package/dist/cjs/auth/rfc9728-discovery.js +436 -0
  27. package/dist/cjs/auth/rfc9728-discovery.js.map +1 -0
  28. package/dist/cjs/auth/types.d.cts +137 -0
  29. package/dist/cjs/auth/types.d.ts +137 -0
  30. package/dist/cjs/auth/types.js +9 -0
  31. package/dist/cjs/auth/types.js.map +1 -0
  32. package/dist/cjs/client-helpers.d.cts +55 -0
  33. package/dist/cjs/client-helpers.d.ts +55 -0
  34. package/dist/cjs/client-helpers.js +128 -0
  35. package/dist/cjs/client-helpers.js.map +1 -0
  36. package/dist/cjs/config/server-loader.d.cts +27 -0
  37. package/dist/cjs/config/server-loader.d.ts +27 -0
  38. package/dist/cjs/config/server-loader.js +111 -0
  39. package/dist/cjs/config/server-loader.js.map +1 -0
  40. package/dist/cjs/config/validate-config.d.cts +15 -0
  41. package/dist/cjs/config/validate-config.d.ts +15 -0
  42. package/dist/cjs/config/validate-config.js +128 -0
  43. package/dist/cjs/config/validate-config.js.map +1 -0
  44. package/dist/cjs/connection/connect-client.d.cts +59 -0
  45. package/dist/cjs/connection/connect-client.d.ts +59 -0
  46. package/dist/cjs/connection/connect-client.js +536 -0
  47. package/dist/cjs/connection/connect-client.js.map +1 -0
  48. package/dist/cjs/connection/existing-process-transport.d.cts +40 -0
  49. package/dist/cjs/connection/existing-process-transport.d.ts +40 -0
  50. package/dist/cjs/connection/existing-process-transport.js +274 -0
  51. package/dist/cjs/connection/existing-process-transport.js.map +1 -0
  52. package/dist/cjs/connection/types.d.cts +61 -0
  53. package/dist/cjs/connection/types.d.ts +61 -0
  54. package/dist/cjs/connection/types.js +53 -0
  55. package/dist/cjs/connection/types.js.map +1 -0
  56. package/dist/cjs/connection/wait-for-http-ready.d.cts +15 -0
  57. package/dist/cjs/connection/wait-for-http-ready.d.ts +15 -0
  58. package/dist/cjs/connection/wait-for-http-ready.js +232 -0
  59. package/dist/cjs/connection/wait-for-http-ready.js.map +1 -0
  60. package/dist/cjs/dcr/dcr-authenticator.d.cts +73 -0
  61. package/dist/cjs/dcr/dcr-authenticator.d.ts +73 -0
  62. package/dist/cjs/dcr/dcr-authenticator.js +655 -0
  63. package/dist/cjs/dcr/dcr-authenticator.js.map +1 -0
  64. package/dist/cjs/dcr/dynamic-client-registrar.d.cts +28 -0
  65. package/dist/cjs/dcr/dynamic-client-registrar.d.ts +28 -0
  66. package/dist/cjs/dcr/dynamic-client-registrar.js +245 -0
  67. package/dist/cjs/dcr/dynamic-client-registrar.js.map +1 -0
  68. package/dist/cjs/dcr/index.d.cts +8 -0
  69. package/dist/cjs/dcr/index.d.ts +8 -0
  70. package/dist/cjs/dcr/index.js +24 -0
  71. package/dist/cjs/dcr/index.js.map +1 -0
  72. package/dist/cjs/index.d.cts +21 -0
  73. package/dist/cjs/index.d.ts +21 -0
  74. package/dist/cjs/index.js +94 -0
  75. package/dist/cjs/index.js.map +1 -0
  76. package/dist/cjs/monkey-patches.d.cts +6 -0
  77. package/dist/cjs/monkey-patches.d.ts +6 -0
  78. package/dist/cjs/monkey-patches.js +236 -0
  79. package/dist/cjs/monkey-patches.js.map +1 -0
  80. package/dist/cjs/package.json +1 -0
  81. package/dist/cjs/response-wrappers.d.cts +41 -0
  82. package/dist/cjs/response-wrappers.d.ts +41 -0
  83. package/dist/cjs/response-wrappers.js +443 -0
  84. package/dist/cjs/response-wrappers.js.map +1 -0
  85. package/dist/cjs/search/index.d.cts +6 -0
  86. package/dist/cjs/search/index.d.ts +6 -0
  87. package/dist/cjs/search/index.js +25 -0
  88. package/dist/cjs/search/index.js.map +1 -0
  89. package/dist/cjs/search/search.d.cts +22 -0
  90. package/dist/cjs/search/search.d.ts +22 -0
  91. package/dist/cjs/search/search.js +630 -0
  92. package/dist/cjs/search/search.js.map +1 -0
  93. package/dist/cjs/search/types.d.cts +122 -0
  94. package/dist/cjs/search/types.d.ts +122 -0
  95. package/dist/cjs/search/types.js +10 -0
  96. package/dist/cjs/search/types.js.map +1 -0
  97. package/dist/cjs/spawn/spawn-server.d.cts +83 -0
  98. package/dist/cjs/spawn/spawn-server.d.ts +83 -0
  99. package/dist/cjs/spawn/spawn-server.js +410 -0
  100. package/dist/cjs/spawn/spawn-server.js.map +1 -0
  101. package/dist/cjs/spawn/spawn-servers.d.cts +151 -0
  102. package/dist/cjs/spawn/spawn-servers.d.ts +151 -0
  103. package/dist/cjs/spawn/spawn-servers.js +911 -0
  104. package/dist/cjs/spawn/spawn-servers.js.map +1 -0
  105. package/dist/cjs/types.d.cts +11 -0
  106. package/dist/cjs/types.d.ts +11 -0
  107. package/dist/cjs/types.js +10 -0
  108. package/dist/cjs/types.js.map +1 -0
  109. package/dist/cjs/utils/logger.d.cts +24 -0
  110. package/dist/cjs/utils/logger.d.ts +24 -0
  111. package/dist/cjs/utils/logger.js +80 -0
  112. package/dist/cjs/utils/logger.js.map +1 -0
  113. package/dist/cjs/utils/path-utils.d.cts +45 -0
  114. package/dist/cjs/utils/path-utils.d.ts +45 -0
  115. package/dist/cjs/utils/path-utils.js +158 -0
  116. package/dist/cjs/utils/path-utils.js.map +1 -0
  117. package/dist/cjs/utils/sanitizer.d.cts +30 -0
  118. package/dist/cjs/utils/sanitizer.d.ts +30 -0
  119. package/dist/cjs/utils/sanitizer.js +124 -0
  120. package/dist/cjs/utils/sanitizer.js.map +1 -0
  121. package/dist/esm/auth/capability-discovery.d.ts +25 -0
  122. package/dist/esm/auth/capability-discovery.js +110 -0
  123. package/dist/esm/auth/capability-discovery.js.map +1 -0
  124. package/dist/esm/auth/index.d.ts +9 -0
  125. package/dist/esm/auth/index.js +6 -0
  126. package/dist/esm/auth/index.js.map +1 -0
  127. package/dist/esm/auth/interactive-oauth-flow.d.ts +58 -0
  128. package/dist/esm/auth/interactive-oauth-flow.js +217 -0
  129. package/dist/esm/auth/interactive-oauth-flow.js.map +1 -0
  130. package/dist/esm/auth/oauth-callback-listener.d.ts +56 -0
  131. package/dist/esm/auth/oauth-callback-listener.js +166 -0
  132. package/dist/esm/auth/oauth-callback-listener.js.map +1 -0
  133. package/dist/esm/auth/pkce.d.ts +17 -0
  134. package/dist/esm/auth/pkce.js +41 -0
  135. package/dist/esm/auth/pkce.js.map +1 -0
  136. package/dist/esm/auth/rfc9728-discovery.d.ts +34 -0
  137. package/dist/esm/auth/rfc9728-discovery.js +157 -0
  138. package/dist/esm/auth/rfc9728-discovery.js.map +1 -0
  139. package/dist/esm/auth/types.d.ts +137 -0
  140. package/dist/esm/auth/types.js +7 -0
  141. package/dist/esm/auth/types.js.map +1 -0
  142. package/dist/esm/client-helpers.d.ts +55 -0
  143. package/dist/esm/client-helpers.js +81 -0
  144. package/dist/esm/client-helpers.js.map +1 -0
  145. package/dist/esm/config/server-loader.d.ts +27 -0
  146. package/dist/esm/config/server-loader.js +49 -0
  147. package/dist/esm/config/server-loader.js.map +1 -0
  148. package/dist/esm/config/validate-config.d.ts +15 -0
  149. package/dist/esm/config/validate-config.js +76 -0
  150. package/dist/esm/config/validate-config.js.map +1 -0
  151. package/dist/esm/connection/connect-client.d.ts +59 -0
  152. package/dist/esm/connection/connect-client.js +272 -0
  153. package/dist/esm/connection/connect-client.js.map +1 -0
  154. package/dist/esm/connection/existing-process-transport.d.ts +40 -0
  155. package/dist/esm/connection/existing-process-transport.js +103 -0
  156. package/dist/esm/connection/existing-process-transport.js.map +1 -0
  157. package/dist/esm/connection/types.d.ts +61 -0
  158. package/dist/esm/connection/types.js +34 -0
  159. package/dist/esm/connection/types.js.map +1 -0
  160. package/dist/esm/connection/wait-for-http-ready.d.ts +15 -0
  161. package/dist/esm/connection/wait-for-http-ready.js +43 -0
  162. package/dist/esm/connection/wait-for-http-ready.js.map +1 -0
  163. package/dist/esm/dcr/dcr-authenticator.d.ts +73 -0
  164. package/dist/esm/dcr/dcr-authenticator.js +235 -0
  165. package/dist/esm/dcr/dcr-authenticator.js.map +1 -0
  166. package/dist/esm/dcr/dynamic-client-registrar.d.ts +28 -0
  167. package/dist/esm/dcr/dynamic-client-registrar.js +66 -0
  168. package/dist/esm/dcr/dynamic-client-registrar.js.map +1 -0
  169. package/dist/esm/dcr/index.d.ts +8 -0
  170. package/dist/esm/dcr/index.js +5 -0
  171. package/dist/esm/dcr/index.js.map +1 -0
  172. package/dist/esm/index.d.ts +21 -0
  173. package/dist/esm/index.js +22 -0
  174. package/dist/esm/index.js.map +1 -0
  175. package/dist/esm/monkey-patches.d.ts +6 -0
  176. package/dist/esm/monkey-patches.js +32 -0
  177. package/dist/esm/monkey-patches.js.map +1 -0
  178. package/dist/esm/package.json +1 -0
  179. package/dist/esm/response-wrappers.d.ts +41 -0
  180. package/dist/esm/response-wrappers.js +201 -0
  181. package/dist/esm/response-wrappers.js.map +1 -0
  182. package/dist/esm/search/index.d.ts +6 -0
  183. package/dist/esm/search/index.js +3 -0
  184. package/dist/esm/search/index.js.map +1 -0
  185. package/dist/esm/search/search.d.ts +22 -0
  186. package/dist/esm/search/search.js +236 -0
  187. package/dist/esm/search/search.js.map +1 -0
  188. package/dist/esm/search/types.d.ts +122 -0
  189. package/dist/esm/search/types.js +8 -0
  190. package/dist/esm/search/types.js.map +1 -0
  191. package/dist/esm/spawn/spawn-server.d.ts +83 -0
  192. package/dist/esm/spawn/spawn-server.js +145 -0
  193. package/dist/esm/spawn/spawn-server.js.map +1 -0
  194. package/dist/esm/spawn/spawn-servers.d.ts +151 -0
  195. package/dist/esm/spawn/spawn-servers.js +406 -0
  196. package/dist/esm/spawn/spawn-servers.js.map +1 -0
  197. package/dist/esm/types.d.ts +11 -0
  198. package/dist/esm/types.js +9 -0
  199. package/dist/esm/types.js.map +1 -0
  200. package/dist/esm/utils/logger.d.ts +24 -0
  201. package/dist/esm/utils/logger.js +59 -0
  202. package/dist/esm/utils/logger.js.map +1 -0
  203. package/dist/esm/utils/path-utils.d.ts +45 -0
  204. package/dist/esm/utils/path-utils.js +89 -0
  205. package/dist/esm/utils/path-utils.js.map +1 -0
  206. package/dist/esm/utils/sanitizer.d.ts +30 -0
  207. package/dist/esm/utils/sanitizer.js +43 -0
  208. package/dist/esm/utils/sanitizer.js.map +1 -0
  209. package/package.json +92 -0
  210. package/schemas/servers.d.ts +90 -0
  211. package/schemas/servers.schema.json +104 -0
@@ -0,0 +1,911 @@
1
+ /**
2
+ * High-level multi-server registry management.
3
+ * Starts multiple servers from a servers configuration object.
4
+ * Supports stdio, http, and ws transports.
5
+ * Implements Claude Code-compatible configuration with start extension support.
6
+ */ "use strict";
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ Object.defineProperty(exports, "createServerRegistry", {
11
+ enumerable: true,
12
+ get: function() {
13
+ return createServerRegistry;
14
+ }
15
+ });
16
+ var _fs = /*#__PURE__*/ _interop_require_wildcard(require("fs"));
17
+ var _process = /*#__PURE__*/ _interop_require_wildcard(require("process"));
18
+ var _clienthelpersts = require("../client-helpers.js");
19
+ var _validateconfigts = require("../config/validate-config.js");
20
+ var _connectclientts = require("../connection/connect-client.js");
21
+ var _indexts = require("../search/index.js");
22
+ var _loggerts = require("../utils/logger.js");
23
+ var _spawnserverts = require("./spawn-server.js");
24
+ function _array_like_to_array(arr, len) {
25
+ if (len == null || len > arr.length) len = arr.length;
26
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
27
+ return arr2;
28
+ }
29
+ function _array_with_holes(arr) {
30
+ if (Array.isArray(arr)) return arr;
31
+ }
32
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
33
+ try {
34
+ var info = gen[key](arg);
35
+ var value = info.value;
36
+ } catch (error) {
37
+ reject(error);
38
+ return;
39
+ }
40
+ if (info.done) {
41
+ resolve(value);
42
+ } else {
43
+ Promise.resolve(value).then(_next, _throw);
44
+ }
45
+ }
46
+ function _async_to_generator(fn) {
47
+ return function() {
48
+ var self = this, args = arguments;
49
+ return new Promise(function(resolve, reject) {
50
+ var gen = fn.apply(self, args);
51
+ function _next(value) {
52
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
53
+ }
54
+ function _throw(err) {
55
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
56
+ }
57
+ _next(undefined);
58
+ });
59
+ };
60
+ }
61
+ function _define_property(obj, key, value) {
62
+ if (key in obj) {
63
+ Object.defineProperty(obj, key, {
64
+ value: value,
65
+ enumerable: true,
66
+ configurable: true,
67
+ writable: true
68
+ });
69
+ } else {
70
+ obj[key] = value;
71
+ }
72
+ return obj;
73
+ }
74
+ function _instanceof(left, right) {
75
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
76
+ return !!right[Symbol.hasInstance](left);
77
+ } else {
78
+ return left instanceof right;
79
+ }
80
+ }
81
+ function _getRequireWildcardCache(nodeInterop) {
82
+ if (typeof WeakMap !== "function") return null;
83
+ var cacheBabelInterop = new WeakMap();
84
+ var cacheNodeInterop = new WeakMap();
85
+ return (_getRequireWildcardCache = function(nodeInterop) {
86
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
87
+ })(nodeInterop);
88
+ }
89
+ function _interop_require_wildcard(obj, nodeInterop) {
90
+ if (!nodeInterop && obj && obj.__esModule) {
91
+ return obj;
92
+ }
93
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
94
+ return {
95
+ default: obj
96
+ };
97
+ }
98
+ var cache = _getRequireWildcardCache(nodeInterop);
99
+ if (cache && cache.has(obj)) {
100
+ return cache.get(obj);
101
+ }
102
+ var newObj = {
103
+ __proto__: null
104
+ };
105
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
106
+ for(var key in obj){
107
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
108
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
109
+ if (desc && (desc.get || desc.set)) {
110
+ Object.defineProperty(newObj, key, desc);
111
+ } else {
112
+ newObj[key] = obj[key];
113
+ }
114
+ }
115
+ }
116
+ newObj.default = obj;
117
+ if (cache) {
118
+ cache.set(obj, newObj);
119
+ }
120
+ return newObj;
121
+ }
122
+ function _iterable_to_array_limit(arr, i) {
123
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
124
+ if (_i == null) return;
125
+ var _arr = [];
126
+ var _n = true;
127
+ var _d = false;
128
+ var _s, _e;
129
+ try {
130
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
131
+ _arr.push(_s.value);
132
+ if (i && _arr.length === i) break;
133
+ }
134
+ } catch (err) {
135
+ _d = true;
136
+ _e = err;
137
+ } finally{
138
+ try {
139
+ if (!_n && _i["return"] != null) _i["return"]();
140
+ } finally{
141
+ if (_d) throw _e;
142
+ }
143
+ }
144
+ return _arr;
145
+ }
146
+ function _non_iterable_rest() {
147
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
148
+ }
149
+ function _object_spread(target) {
150
+ for(var i = 1; i < arguments.length; i++){
151
+ var source = arguments[i] != null ? arguments[i] : {};
152
+ var ownKeys = Object.keys(source);
153
+ if (typeof Object.getOwnPropertySymbols === "function") {
154
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
155
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
156
+ }));
157
+ }
158
+ ownKeys.forEach(function(key) {
159
+ _define_property(target, key, source[key]);
160
+ });
161
+ }
162
+ return target;
163
+ }
164
+ function ownKeys(object, enumerableOnly) {
165
+ var keys = Object.keys(object);
166
+ if (Object.getOwnPropertySymbols) {
167
+ var symbols = Object.getOwnPropertySymbols(object);
168
+ if (enumerableOnly) {
169
+ symbols = symbols.filter(function(sym) {
170
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
171
+ });
172
+ }
173
+ keys.push.apply(keys, symbols);
174
+ }
175
+ return keys;
176
+ }
177
+ function _object_spread_props(target, source) {
178
+ source = source != null ? source : {};
179
+ if (Object.getOwnPropertyDescriptors) {
180
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
181
+ } else {
182
+ ownKeys(Object(source)).forEach(function(key) {
183
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
184
+ });
185
+ }
186
+ return target;
187
+ }
188
+ function _sliced_to_array(arr, i) {
189
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
190
+ }
191
+ function _unsupported_iterable_to_array(o, minLen) {
192
+ if (!o) return;
193
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
194
+ var n = Object.prototype.toString.call(o).slice(8, -1);
195
+ if (n === "Object" && o.constructor) n = o.constructor.name;
196
+ if (n === "Map" || n === "Set") return Array.from(n);
197
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
198
+ }
199
+ function _ts_generator(thisArg, body) {
200
+ var f, y, t, _ = {
201
+ label: 0,
202
+ sent: function() {
203
+ if (t[0] & 1) throw t[1];
204
+ return t[1];
205
+ },
206
+ trys: [],
207
+ ops: []
208
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype), d = Object.defineProperty;
209
+ return d(g, "next", {
210
+ value: verb(0)
211
+ }), d(g, "throw", {
212
+ value: verb(1)
213
+ }), d(g, "return", {
214
+ value: verb(2)
215
+ }), typeof Symbol === "function" && d(g, Symbol.iterator, {
216
+ value: function() {
217
+ return this;
218
+ }
219
+ }), g;
220
+ function verb(n) {
221
+ return function(v) {
222
+ return step([
223
+ n,
224
+ v
225
+ ]);
226
+ };
227
+ }
228
+ function step(op) {
229
+ if (f) throw new TypeError("Generator is already executing.");
230
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
231
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
232
+ if (y = 0, t) op = [
233
+ op[0] & 2,
234
+ t.value
235
+ ];
236
+ switch(op[0]){
237
+ case 0:
238
+ case 1:
239
+ t = op;
240
+ break;
241
+ case 4:
242
+ _.label++;
243
+ return {
244
+ value: op[1],
245
+ done: false
246
+ };
247
+ case 5:
248
+ _.label++;
249
+ y = op[1];
250
+ op = [
251
+ 0
252
+ ];
253
+ continue;
254
+ case 7:
255
+ op = _.ops.pop();
256
+ _.trys.pop();
257
+ continue;
258
+ default:
259
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
260
+ _ = 0;
261
+ continue;
262
+ }
263
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
264
+ _.label = op[1];
265
+ break;
266
+ }
267
+ if (op[0] === 6 && _.label < t[1]) {
268
+ _.label = t[1];
269
+ t = op;
270
+ break;
271
+ }
272
+ if (t && _.label < t[2]) {
273
+ _.label = t[2];
274
+ _.ops.push(op);
275
+ break;
276
+ }
277
+ if (t[2]) _.ops.pop();
278
+ _.trys.pop();
279
+ continue;
280
+ }
281
+ op = body.call(thisArg, _);
282
+ } catch (e) {
283
+ op = [
284
+ 6,
285
+ e
286
+ ];
287
+ y = 0;
288
+ } finally{
289
+ f = t = 0;
290
+ }
291
+ if (op[0] & 5) throw op[1];
292
+ return {
293
+ value: op[0] ? op[1] : void 0,
294
+ done: true
295
+ };
296
+ }
297
+ }
298
+ /**
299
+ * Infer transport type: explicit type > URL protocol > default 'stdio'
300
+ */ function inferTransportType(config) {
301
+ if (config.type) {
302
+ return config.type;
303
+ }
304
+ if (config.url) {
305
+ var url = new URL(config.url);
306
+ if (url.protocol === 'http:' || url.protocol === 'https:') {
307
+ return 'http';
308
+ }
309
+ }
310
+ return 'stdio';
311
+ }
312
+ /**
313
+ * Helper to filter undefined values from environment
314
+ */ function filterEnv(env) {
315
+ var filtered = {};
316
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
317
+ try {
318
+ for(var _iterator = Object.entries(env)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
319
+ var _step_value = _sliced_to_array(_step.value, 2), key = _step_value[0], value = _step_value[1];
320
+ if (value !== undefined) {
321
+ filtered[key] = value;
322
+ }
323
+ }
324
+ } catch (err) {
325
+ _didIteratorError = true;
326
+ _iteratorError = err;
327
+ } finally{
328
+ try {
329
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
330
+ _iterator.return();
331
+ }
332
+ } finally{
333
+ if (_didIteratorError) {
334
+ throw _iteratorError;
335
+ }
336
+ }
337
+ }
338
+ return filtered;
339
+ }
340
+ /**
341
+ * Determine spawn behavior based on dialects and config structure.
342
+ *
343
+ * Dialects:
344
+ * - ['servers'] (default): Claude Code compatible - ignores start blocks, stdio only
345
+ * - ['start']: Only spawn servers with start blocks (HTTP server testing)
346
+ * - ['servers', 'start']: Spawn both start blocks and stdio servers (full MCP-Z extension support)
347
+ *
348
+ * Environment merging (when baseEnv provided):
349
+ * - HTTP servers (start block): { ...baseEnv, ...entry.start.env }
350
+ * - Stdio servers: { ...baseEnv, ...entry.env }
351
+ *
352
+ * When baseEnv is not provided, process.env is used as the base.
353
+ */ function getSpawnConfig(entry, dialects, baseEnv) {
354
+ var transportType = inferTransportType(entry);
355
+ var hasServers = dialects.includes('servers');
356
+ var hasStart = dialects.includes('start');
357
+ // If only 'servers' dialect: Claude Code compatible (ignore start blocks, stdio only)
358
+ if (hasServers && !hasStart) {
359
+ if (transportType === 'stdio' && entry.command) {
360
+ return {
361
+ shouldSpawn: true,
362
+ command: entry.command,
363
+ args: entry.args || [],
364
+ env: filterEnv(_object_spread({}, baseEnv, entry.env))
365
+ };
366
+ }
367
+ return {
368
+ shouldSpawn: false
369
+ };
370
+ }
371
+ // If only 'start' dialect: Only spawn servers with start blocks
372
+ if (hasStart && !hasServers) {
373
+ if (entry.start) {
374
+ return {
375
+ shouldSpawn: true,
376
+ command: entry.start.command,
377
+ args: entry.start.args || [],
378
+ env: filterEnv(_object_spread({}, baseEnv, entry.start.env))
379
+ };
380
+ }
381
+ return {
382
+ shouldSpawn: false
383
+ };
384
+ }
385
+ // Both dialects: Spawn both start blocks and stdio servers
386
+ // Priority: start blocks first, then stdio
387
+ if (entry.start) {
388
+ return {
389
+ shouldSpawn: true,
390
+ command: entry.start.command,
391
+ args: entry.start.args || [],
392
+ env: filterEnv(_object_spread({}, baseEnv, entry.start.env))
393
+ };
394
+ }
395
+ if (transportType === 'stdio' && entry.command) {
396
+ return {
397
+ shouldSpawn: true,
398
+ command: entry.command,
399
+ args: entry.args || [],
400
+ env: filterEnv(_object_spread({}, baseEnv, entry.env))
401
+ };
402
+ }
403
+ return {
404
+ shouldSpawn: false
405
+ };
406
+ }
407
+ function createServerRegistry(serversConfig, options) {
408
+ var _ref, _ref1, _ref2;
409
+ var cwd = (_ref = options === null || options === void 0 ? void 0 : options.cwd) !== null && _ref !== void 0 ? _ref : _process.cwd();
410
+ var dialects = (_ref1 = options === null || options === void 0 ? void 0 : options.dialects) !== null && _ref1 !== void 0 ? _ref1 : [
411
+ 'servers'
412
+ ];
413
+ // Determine base environment:
414
+ // - If options.env provided, use it (process.env NOT included)
415
+ // - If options.env omitted, use process.env as base
416
+ var baseEnv = (_ref2 = options === null || options === void 0 ? void 0 : options.env) !== null && _ref2 !== void 0 ? _ref2 : _process.env;
417
+ // Validate working directory exists (fail fast for configuration errors)
418
+ if (!_fs.existsSync(cwd)) {
419
+ throw new Error("Cannot start servers: working directory '".concat(cwd, "' does not exist"));
420
+ }
421
+ // Validate configuration (fail fast with clear errors)
422
+ var validation = (0, _validateconfigts.validateServers)(serversConfig);
423
+ if (!validation.valid) {
424
+ var _ref3;
425
+ var _validation_errors;
426
+ throw new Error("Invalid servers configuration:\n".concat((_ref3 = (_validation_errors = validation.errors) === null || _validation_errors === void 0 ? void 0 : _validation_errors.join('\n')) !== null && _ref3 !== void 0 ? _ref3 : 'Unknown validation error'));
427
+ }
428
+ // Log validation warnings (non-blocking)
429
+ if (validation.warnings && validation.warnings.length > 0) {
430
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
431
+ try {
432
+ for(var _iterator = validation.warnings[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
433
+ var warning = _step.value;
434
+ _loggerts.logger.warn(warning);
435
+ }
436
+ } catch (err) {
437
+ _didIteratorError = true;
438
+ _iteratorError = err;
439
+ } finally{
440
+ try {
441
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
442
+ _iterator.return();
443
+ }
444
+ } finally{
445
+ if (_didIteratorError) {
446
+ throw _iteratorError;
447
+ }
448
+ }
449
+ }
450
+ }
451
+ var servers = new Map();
452
+ var clients = new Set();
453
+ var sharedStdioClients = new Map();
454
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
455
+ try {
456
+ // Start each server in the configuration
457
+ for(var _iterator1 = Object.entries(serversConfig)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
458
+ var _step_value = _sliced_to_array(_step1.value, 2), name = _step_value[0], entry = _step_value[1];
459
+ // Infer transport type from config
460
+ var transportType = inferTransportType(entry);
461
+ // Determine spawn behavior based on dialects
462
+ var spawnConfig = getSpawnConfig(entry, dialects, baseEnv);
463
+ // Check if we should spawn this server
464
+ if (!spawnConfig.shouldSpawn) {
465
+ // External server - just log, no spawn needed
466
+ if (entry.url) {
467
+ _loggerts.logger.info("[".concat(name, "] external ").concat(transportType, " server (url: ").concat(entry.url, ")"));
468
+ } else {
469
+ _loggerts.logger.warn("[".concat(name, "] skipping: no spawn configuration (missing start or command) and no url for external server"));
470
+ }
471
+ continue;
472
+ }
473
+ try {
474
+ // Validate spawn config
475
+ if (!spawnConfig.command) {
476
+ throw new Error('Server "'.concat(name, '" missing command field'));
477
+ }
478
+ // All servers use the same working directory (cwd from options)
479
+ var resolvedCwd = cwd;
480
+ // Start the server
481
+ _loggerts.logger.info("[".concat(name, "] starting ").concat(transportType, " server (").concat(spawnConfig.command, " ").concat((spawnConfig.args || []).join(' '), ")"));
482
+ // stdio servers need 'pipe' for MCP communication over stdin/stdout
483
+ // network servers use 'inherit' so we see their logs
484
+ var stdio = transportType === 'stdio' ? 'pipe' : 'inherit';
485
+ var handle = (0, _spawnserverts.spawnProcess)(_object_spread_props(_object_spread(_object_spread_props(_object_spread({
486
+ name: name,
487
+ command: spawnConfig.command
488
+ }, spawnConfig.args !== undefined && {
489
+ args: spawnConfig.args
490
+ }), {
491
+ cwd: resolvedCwd
492
+ }), spawnConfig.env && Object.keys(spawnConfig.env).length > 0 && {
493
+ env: spawnConfig.env
494
+ }), {
495
+ stdio: stdio
496
+ }));
497
+ // Add server to registry (starting is fast, readiness is lazy)
498
+ servers.set(name, handle);
499
+ _loggerts.logger.info("[".concat(name, "] started successfully"));
500
+ } catch (e) {
501
+ _loggerts.logger.info("[".concat(name, "] start ERROR: ").concat(_instanceof(e, Error) ? e.message : String(e)));
502
+ }
503
+ }
504
+ } catch (err) {
505
+ _didIteratorError1 = true;
506
+ _iteratorError1 = err;
507
+ } finally{
508
+ try {
509
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
510
+ _iterator1.return();
511
+ }
512
+ } finally{
513
+ if (_didIteratorError1) {
514
+ throw _iteratorError1;
515
+ }
516
+ }
517
+ }
518
+ // Create connect function that tracks clients
519
+ var connect = function(name, options) {
520
+ return _async_to_generator(function() {
521
+ var serverEntry, available, transportType, entry, released, lease, registryLike, rawClient, decorated;
522
+ return _ts_generator(this, function(_state) {
523
+ switch(_state.label){
524
+ case 0:
525
+ serverEntry = serversConfig[name];
526
+ if (!serverEntry) {
527
+ available = Object.keys(serversConfig).join(', ');
528
+ throw new Error("Server '".concat(name, "' not found in config. Available servers: ").concat(available || 'none'));
529
+ }
530
+ transportType = inferTransportType(serverEntry);
531
+ if (!(transportType === 'stdio')) return [
532
+ 3,
533
+ 3
534
+ ];
535
+ // Stdio is a single logical connection; reuse one client and lease references.
536
+ entry = sharedStdioClients.get(name);
537
+ if (!entry) {
538
+ entry = {
539
+ refs: 0
540
+ };
541
+ sharedStdioClients.set(name, entry);
542
+ }
543
+ if (!!entry.client) return [
544
+ 3,
545
+ 2
546
+ ];
547
+ if (!entry.connecting) {
548
+ entry.connecting = (function() {
549
+ return _async_to_generator(function() {
550
+ var registryLike, rawClient, decorated;
551
+ return _ts_generator(this, function(_state) {
552
+ switch(_state.label){
553
+ case 0:
554
+ // Pass minimal RegistryLike object to connectMcpClient
555
+ registryLike = {
556
+ config: serversConfig,
557
+ servers: servers
558
+ };
559
+ return [
560
+ 4,
561
+ (0, _connectclientts.connectMcpClient)(registryLike, name, options)
562
+ ];
563
+ case 1:
564
+ rawClient = _state.sent();
565
+ decorated = (0, _clienthelpersts.decorateClient)(rawClient, {
566
+ serverName: name
567
+ });
568
+ entry.client = decorated;
569
+ entry.connecting = undefined;
570
+ return [
571
+ 2,
572
+ decorated
573
+ ];
574
+ }
575
+ });
576
+ })();
577
+ })().catch(function(error) {
578
+ sharedStdioClients.delete(name);
579
+ throw error;
580
+ });
581
+ }
582
+ return [
583
+ 4,
584
+ entry.connecting
585
+ ];
586
+ case 1:
587
+ _state.sent();
588
+ _state.label = 2;
589
+ case 2:
590
+ if (!entry.client) {
591
+ throw new Error("Failed to connect to stdio server '".concat(name, "'"));
592
+ }
593
+ entry.refs += 1;
594
+ released = false;
595
+ lease = new Proxy(entry.client, {
596
+ get: function get(target, prop) {
597
+ if (prop === 'close') {
598
+ return function() {
599
+ return _async_to_generator(function() {
600
+ return _ts_generator(this, function(_state) {
601
+ switch(_state.label){
602
+ case 0:
603
+ if (released) return [
604
+ 2
605
+ ];
606
+ released = true;
607
+ clients.delete(lease);
608
+ entry.refs = Math.max(0, entry.refs - 1);
609
+ if (!(entry.refs === 0)) return [
610
+ 3,
611
+ 2
612
+ ];
613
+ sharedStdioClients.delete(name);
614
+ return [
615
+ 4,
616
+ target.close()
617
+ ];
618
+ case 1:
619
+ _state.sent();
620
+ _state.label = 2;
621
+ case 2:
622
+ return [
623
+ 2
624
+ ];
625
+ }
626
+ });
627
+ })();
628
+ };
629
+ }
630
+ var value = Reflect.get(target, prop, target);
631
+ if (typeof value === 'function') {
632
+ return value.bind(target);
633
+ }
634
+ return value;
635
+ }
636
+ });
637
+ clients.add(lease);
638
+ return [
639
+ 2,
640
+ lease
641
+ ];
642
+ case 3:
643
+ // Pass minimal RegistryLike object to connectMcpClient
644
+ registryLike = {
645
+ config: serversConfig,
646
+ servers: servers
647
+ };
648
+ return [
649
+ 4,
650
+ (0, _connectclientts.connectMcpClient)(registryLike, name, options)
651
+ ];
652
+ case 4:
653
+ rawClient = _state.sent();
654
+ decorated = (0, _clienthelpersts.decorateClient)(rawClient, {
655
+ serverName: name
656
+ });
657
+ clients.add(decorated);
658
+ return [
659
+ 2,
660
+ decorated
661
+ ];
662
+ }
663
+ });
664
+ })();
665
+ };
666
+ // Create close function that stops all clients and servers
667
+ var close = function() {
668
+ var signal = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 'SIGINT', opts = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
669
+ return _async_to_generator(function() {
670
+ var clientClosePromises, closeResults, timedOut, killedCount;
671
+ return _ts_generator(this, function(_state) {
672
+ switch(_state.label){
673
+ case 0:
674
+ _loggerts.logger.info("[registry] closing (".concat(signal, ")"));
675
+ // First, close all tracked clients
676
+ clientClosePromises = Array.from(clients).map(function(client) {
677
+ return _async_to_generator(function() {
678
+ var unused;
679
+ return _ts_generator(this, function(_state) {
680
+ switch(_state.label){
681
+ case 0:
682
+ _state.trys.push([
683
+ 0,
684
+ 2,
685
+ ,
686
+ 3
687
+ ]);
688
+ return [
689
+ 4,
690
+ client.close()
691
+ ];
692
+ case 1:
693
+ _state.sent();
694
+ return [
695
+ 3,
696
+ 3
697
+ ];
698
+ case 2:
699
+ unused = _state.sent();
700
+ return [
701
+ 3,
702
+ 3
703
+ ];
704
+ case 3:
705
+ return [
706
+ 2
707
+ ];
708
+ }
709
+ });
710
+ })();
711
+ });
712
+ return [
713
+ 4,
714
+ Promise.all(clientClosePromises)
715
+ ];
716
+ case 1:
717
+ _state.sent();
718
+ clients.clear();
719
+ // Then close all server processes
720
+ if (servers.size === 0) {
721
+ return [
722
+ 2,
723
+ {
724
+ timedOut: false,
725
+ killedCount: 0
726
+ }
727
+ ];
728
+ }
729
+ return [
730
+ 4,
731
+ Promise.all(Array.from(servers.values()).map(function(server) {
732
+ return server.close(signal, opts);
733
+ }))
734
+ ];
735
+ case 2:
736
+ closeResults = _state.sent();
737
+ // Check if any timed out and count how many were force-killed
738
+ timedOut = closeResults.some(function(result) {
739
+ return result.timedOut;
740
+ });
741
+ killedCount = closeResults.filter(function(result) {
742
+ return result.killed;
743
+ }).length;
744
+ return [
745
+ 2,
746
+ {
747
+ timedOut: timedOut,
748
+ killedCount: killedCount
749
+ }
750
+ ];
751
+ }
752
+ });
753
+ })();
754
+ };
755
+ var searchFromRegistry = function(query) {
756
+ var _$options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
757
+ return _async_to_generator(function() {
758
+ var _options_servers, requestedServers, unknownServers, capabilityClients, failures, ensureClient, failureDetails, index;
759
+ return _ts_generator(this, function(_state) {
760
+ switch(_state.label){
761
+ case 0:
762
+ requestedServers = (_options_servers = _$options.servers) !== null && _options_servers !== void 0 ? _options_servers : Object.keys(serversConfig);
763
+ if (requestedServers.length === 0) {
764
+ throw new Error('Cannot search capabilities: registry has no configured servers');
765
+ }
766
+ unknownServers = requestedServers.filter(function(name) {
767
+ return !(name in serversConfig);
768
+ });
769
+ if (unknownServers.length > 0) {
770
+ throw new Error("Cannot search capabilities: unknown server(s) [".concat(unknownServers.join(', '), "]"));
771
+ }
772
+ capabilityClients = new Map();
773
+ failures = [];
774
+ ensureClient = function(serverName) {
775
+ return _async_to_generator(function() {
776
+ var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, client;
777
+ return _ts_generator(this, function(_state) {
778
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
779
+ try {
780
+ for(_iterator = clients[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
781
+ client = _step.value;
782
+ if (client.serverName === serverName) {
783
+ return [
784
+ 2,
785
+ client
786
+ ];
787
+ }
788
+ }
789
+ } catch (err) {
790
+ _didIteratorError = true;
791
+ _iteratorError = err;
792
+ } finally{
793
+ try {
794
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
795
+ _iterator.return();
796
+ }
797
+ } finally{
798
+ if (_didIteratorError) {
799
+ throw _iteratorError;
800
+ }
801
+ }
802
+ }
803
+ return [
804
+ 2,
805
+ connect(serverName)
806
+ ];
807
+ });
808
+ })();
809
+ };
810
+ return [
811
+ 4,
812
+ Promise.all(requestedServers.map(function(serverName) {
813
+ return _async_to_generator(function() {
814
+ var managed, error;
815
+ return _ts_generator(this, function(_state) {
816
+ switch(_state.label){
817
+ case 0:
818
+ _state.trys.push([
819
+ 0,
820
+ 2,
821
+ ,
822
+ 3
823
+ ]);
824
+ return [
825
+ 4,
826
+ ensureClient(serverName)
827
+ ];
828
+ case 1:
829
+ managed = _state.sent();
830
+ capabilityClients.set(serverName, managed.nativeClient);
831
+ return [
832
+ 3,
833
+ 3
834
+ ];
835
+ case 2:
836
+ error = _state.sent();
837
+ failures.push({
838
+ server: serverName,
839
+ reason: _instanceof(error, Error) ? error.message : String(error)
840
+ });
841
+ return [
842
+ 3,
843
+ 3
844
+ ];
845
+ case 3:
846
+ return [
847
+ 2
848
+ ];
849
+ }
850
+ });
851
+ })();
852
+ }))
853
+ ];
854
+ case 1:
855
+ _state.sent();
856
+ if (capabilityClients.size === 0) {
857
+ failureDetails = failures.length > 0 ? " Connection failures: ".concat(failures.map(function(f) {
858
+ return "".concat(f.server, " (").concat(f.reason, ")");
859
+ }).join('; ')) : '';
860
+ throw new Error("Cannot search capabilities: unable to connect to any requested servers.".concat(failureDetails));
861
+ }
862
+ if (failures.length > 0) {
863
+ throw new Error("Cannot search capabilities: failed to connect to server(s) [".concat(failures.map(function(f) {
864
+ return f.server;
865
+ }).join(', '), "]. Reasons: ").concat(failures.map(function(f) {
866
+ return "".concat(f.server, ": ").concat(f.reason);
867
+ }).join('; ')));
868
+ }
869
+ return [
870
+ 4,
871
+ (0, _indexts.buildCapabilityIndex)(capabilityClients)
872
+ ];
873
+ case 2:
874
+ index = _state.sent();
875
+ return [
876
+ 2,
877
+ (0, _indexts.searchCapabilities)(index, query, _$options)
878
+ ];
879
+ }
880
+ });
881
+ })();
882
+ };
883
+ // Async dispose for `await using` pattern
884
+ var asyncDispose = function() {
885
+ return _async_to_generator(function() {
886
+ return _ts_generator(this, function(_state) {
887
+ switch(_state.label){
888
+ case 0:
889
+ return [
890
+ 4,
891
+ close()
892
+ ];
893
+ case 1:
894
+ _state.sent();
895
+ return [
896
+ 2
897
+ ];
898
+ }
899
+ });
900
+ })();
901
+ };
902
+ return _define_property({
903
+ config: serversConfig,
904
+ servers: servers,
905
+ clients: clients,
906
+ connect: connect,
907
+ close: close,
908
+ searchCapabilities: searchFromRegistry
909
+ }, Symbol.asyncDispose, asyncDispose);
910
+ }
911
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }