@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,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "validateServers", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return validateServers;
9
+ }
10
+ });
11
+ var _ajv = require("ajv");
12
+ var _fs = /*#__PURE__*/ _interop_require_wildcard(require("fs"));
13
+ var _module = require("module");
14
+ var _modulerootsync = /*#__PURE__*/ _interop_require_default(require("module-root-sync"));
15
+ var _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
16
+ function _interop_require_default(obj) {
17
+ return obj && obj.__esModule ? obj : {
18
+ default: obj
19
+ };
20
+ }
21
+ function _getRequireWildcardCache(nodeInterop) {
22
+ if (typeof WeakMap !== "function") return null;
23
+ var cacheBabelInterop = new WeakMap();
24
+ var cacheNodeInterop = new WeakMap();
25
+ return (_getRequireWildcardCache = function(nodeInterop) {
26
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
27
+ })(nodeInterop);
28
+ }
29
+ function _interop_require_wildcard(obj, nodeInterop) {
30
+ if (!nodeInterop && obj && obj.__esModule) {
31
+ return obj;
32
+ }
33
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
34
+ return {
35
+ default: obj
36
+ };
37
+ }
38
+ var cache = _getRequireWildcardCache(nodeInterop);
39
+ if (cache && cache.has(obj)) {
40
+ return cache.get(obj);
41
+ }
42
+ var newObj = {
43
+ __proto__: null
44
+ };
45
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
46
+ for(var key in obj){
47
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
48
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
49
+ if (desc && (desc.get || desc.set)) {
50
+ Object.defineProperty(newObj, key, desc);
51
+ } else {
52
+ newObj[key] = obj[key];
53
+ }
54
+ }
55
+ }
56
+ newObj.default = obj;
57
+ if (cache) {
58
+ cache.set(obj, newObj);
59
+ }
60
+ return newObj;
61
+ }
62
+ // Import ajv-formats (CommonJS module - use createRequire for ESM compatibility)
63
+ var require1 = (0, _module.createRequire)(require("url").pathToFileURL(__filename).toString());
64
+ var addFormats = require1('ajv-formats');
65
+ var packageRoot = (0, _modulerootsync.default)(__filename);
66
+ // Module-level cache for schema and validator
67
+ var schemaCache = null;
68
+ var validatorCache = null;
69
+ /**
70
+ * Get servers schema (loads once from bundled file, then caches)
71
+ */ function getSchema() {
72
+ if (schemaCache) {
73
+ return schemaCache;
74
+ }
75
+ var schemaPath = _path.join(packageRoot, 'schemas/servers.schema.json');
76
+ if (!_fs.existsSync(schemaPath)) {
77
+ throw new Error("Servers schema not found at: ".concat(schemaPath));
78
+ }
79
+ schemaCache = JSON.parse(_fs.readFileSync(schemaPath, 'utf8'));
80
+ return schemaCache;
81
+ }
82
+ /**
83
+ * Get compiled AJV validator (creates once, then caches)
84
+ */ function getValidator() {
85
+ if (validatorCache) {
86
+ return validatorCache;
87
+ }
88
+ var schema = getSchema();
89
+ var ajv = new _ajv.Ajv({
90
+ allErrors: true,
91
+ verbose: true,
92
+ strictSchema: false
93
+ });
94
+ // Add format validators (uri, email, etc.)
95
+ addFormats(ajv);
96
+ validatorCache = ajv.compile(schema);
97
+ return validatorCache;
98
+ }
99
+ function validateServers(servers) {
100
+ try {
101
+ var validate = getValidator();
102
+ var valid = validate(servers);
103
+ if (!valid) {
104
+ var _validate_errors;
105
+ var errors = ((_validate_errors = validate.errors) === null || _validate_errors === void 0 ? void 0 : _validate_errors.map(function(e) {
106
+ var path = e.instancePath || '(root)';
107
+ return "".concat(path, ": ").concat(e.message);
108
+ })) || [];
109
+ return {
110
+ valid: false,
111
+ errors: errors
112
+ };
113
+ }
114
+ var warnings = [];
115
+ return {
116
+ valid: true,
117
+ warnings: warnings
118
+ };
119
+ } catch (err) {
120
+ return {
121
+ valid: false,
122
+ errors: [
123
+ "Configuration validation failed: ".concat(err.message)
124
+ ]
125
+ };
126
+ }
127
+ }
128
+ /* 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; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/libs/client/src/config/validate-config.ts"],"sourcesContent":["import { Ajv, type ErrorObject } from 'ajv';\nimport * as fs from 'fs';\nimport { createRequire } from 'module';\nimport moduleRoot from 'module-root-sync';\nimport * as path from 'path';\n\n// Import ajv-formats (CommonJS module - use createRequire for ESM compatibility)\nconst require = createRequire(import.meta.url);\nconst addFormats = require('ajv-formats');\nconst packageRoot = moduleRoot(import.meta.filename);\n\n/**\n * Validation result for servers configuration\n */\nexport interface ValidationResult {\n valid: boolean;\n errors?: string[];\n warnings?: string[];\n}\n\n// Module-level cache for schema and validator\nlet schemaCache: object | null = null;\nlet validatorCache: ReturnType<Ajv['compile']> | null = null;\n\n/**\n * Get servers schema (loads once from bundled file, then caches)\n */\nfunction getSchema(): object {\n if (schemaCache) {\n return schemaCache;\n }\n\n const schemaPath = path.join(packageRoot, 'schemas/servers.schema.json');\n if (!fs.existsSync(schemaPath)) {\n throw new Error(`Servers schema not found at: ${schemaPath}`);\n }\n\n schemaCache = JSON.parse(fs.readFileSync(schemaPath, 'utf8')) as object;\n return schemaCache;\n}\n\n/**\n * Get compiled AJV validator (creates once, then caches)\n */\nfunction getValidator(): ReturnType<Ajv['compile']> {\n if (validatorCache) {\n return validatorCache;\n }\n\n const schema = getSchema();\n const ajv = new Ajv({\n allErrors: true,\n verbose: true,\n strictSchema: false, // Allow non-standard keywords like \"example\"\n });\n\n // Add format validators (uri, email, etc.)\n addFormats(ajv);\n\n validatorCache = ajv.compile(schema);\n return validatorCache;\n}\n\n/**\n * Validate servers configuration against JSON Schema\n *\n * @param servers - Servers configuration object to validate (map of server names to configs)\n * @returns ValidationResult with valid flag, errors, and warnings\n */\nexport function validateServers(servers: unknown): ValidationResult {\n try {\n const validate = getValidator();\n const valid = validate(servers);\n\n if (!valid) {\n const errors =\n validate.errors?.map((e: ErrorObject) => {\n const path = e.instancePath || '(root)';\n return `${path}: ${e.message}`;\n }) || [];\n\n return { valid: false, errors };\n }\n\n const warnings: string[] = [];\n return { valid: true, warnings };\n } catch (err) {\n return {\n valid: false,\n errors: [`Configuration validation failed: ${(err as Error).message}`],\n };\n }\n}\n"],"names":["validateServers","require","createRequire","addFormats","packageRoot","moduleRoot","schemaCache","validatorCache","getSchema","schemaPath","path","join","fs","existsSync","Error","JSON","parse","readFileSync","getValidator","schema","ajv","Ajv","allErrors","verbose","strictSchema","compile","servers","validate","valid","errors","map","e","instancePath","message","warnings","err"],"mappings":";;;;+BAqEgBA;;;eAAAA;;;mBArEsB;0DAClB;sBACU;qEACP;4DACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtB,iFAAiF;AACjF,IAAMC,WAAUC,IAAAA,qBAAa,EAAC;AAC9B,IAAMC,aAAaF,SAAQ;AAC3B,IAAMG,cAAcC,IAAAA,uBAAU,EAAC;AAW/B,8CAA8C;AAC9C,IAAIC,cAA6B;AACjC,IAAIC,iBAAoD;AAExD;;CAEC,GACD,SAASC;IACP,IAAIF,aAAa;QACf,OAAOA;IACT;IAEA,IAAMG,aAAaC,MAAKC,IAAI,CAACP,aAAa;IAC1C,IAAI,CAACQ,IAAGC,UAAU,CAACJ,aAAa;QAC9B,MAAM,IAAIK,MAAM,AAAC,gCAA0C,OAAXL;IAClD;IAEAH,cAAcS,KAAKC,KAAK,CAACJ,IAAGK,YAAY,CAACR,YAAY;IACrD,OAAOH;AACT;AAEA;;CAEC,GACD,SAASY;IACP,IAAIX,gBAAgB;QAClB,OAAOA;IACT;IAEA,IAAMY,SAASX;IACf,IAAMY,MAAM,IAAIC,QAAG,CAAC;QAClBC,WAAW;QACXC,SAAS;QACTC,cAAc;IAChB;IAEA,2CAA2C;IAC3CrB,WAAWiB;IAEXb,iBAAiBa,IAAIK,OAAO,CAACN;IAC7B,OAAOZ;AACT;AAQO,SAASP,gBAAgB0B,OAAgB;IAC9C,IAAI;QACF,IAAMC,WAAWT;QACjB,IAAMU,QAAQD,SAASD;QAEvB,IAAI,CAACE,OAAO;gBAERD;YADF,IAAME,SACJF,EAAAA,mBAAAA,SAASE,MAAM,cAAfF,uCAAAA,iBAAiBG,GAAG,CAAC,SAACC;gBACpB,IAAMrB,OAAOqB,EAAEC,YAAY,IAAI;gBAC/B,OAAO,AAAC,GAAWD,OAATrB,MAAK,MAAc,OAAVqB,EAAEE,OAAO;YAC9B,OAAM,EAAE;YAEV,OAAO;gBAAEL,OAAO;gBAAOC,QAAAA;YAAO;QAChC;QAEA,IAAMK,WAAqB,EAAE;QAC7B,OAAO;YAAEN,OAAO;YAAMM,UAAAA;QAAS;IACjC,EAAE,OAAOC,KAAK;QACZ,OAAO;YACLP,OAAO;YACPC,QAAQ;gBAAE,oCAA0D,OAAvB,AAACM,IAAcF,OAAO;aAAG;QACxE;IACF;AACF"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * connect-mcp-client.ts
3
+ *
4
+ * Helper to connect MCP SDK clients to servers with intelligent transport inference.
5
+ * Automatically detects transport type from URL protocol or type field.
6
+ */
7
+ import '../monkey-patches.js';
8
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
9
+ import { type DcrAuthenticatorOptions } from '../dcr/index.js';
10
+ import type { ServerProcess } from '../spawn/spawn-server.js';
11
+ import type { ServersConfig } from '../spawn/spawn-servers.js';
12
+ /**
13
+ * Minimal interface for connecting to servers.
14
+ * Only needs config and servers map for connection logic.
15
+ */
16
+ interface RegistryLike {
17
+ config: ServersConfig;
18
+ servers: Map<string, ServerProcess>;
19
+ }
20
+ import { type Logger } from '../utils/logger.js';
21
+ /**
22
+ * Connect MCP SDK client to server with full readiness handling.
23
+ * @internal - Use registry.connect() instead
24
+ *
25
+ * **Completely handles readiness**: transport availability + MCP protocol handshake.
26
+ *
27
+ * Transport is intelligently inferred and handled:
28
+ * - **Stdio servers**: Direct MCP connect (fast for spawned processes)
29
+ * - **HTTP servers**: Transport polling (/mcp endpoint) + MCP connect
30
+ * - **Registry result**: Handles both spawned and external servers
31
+ *
32
+ * Returns only when server is fully MCP-ready (initialize handshake complete).
33
+ *
34
+ * @param registryOrConfig - Result from createServerRegistry() or servers config object
35
+ * @param serverName - Server name from servers config
36
+ * @returns Connected MCP SDK Client (guaranteed ready)
37
+ *
38
+ * @example
39
+ * // Using registry (recommended)
40
+ * const registry = createServerRegistry({ echo: { command: 'node', args: ['server.ts'] } });
41
+ * const client = await registry.connect('echo');
42
+ * // Server is fully ready - transport available + MCP handshake complete
43
+ *
44
+ * @example
45
+ * // HTTP server readiness (waits for /mcp polling + MCP handshake)
46
+ * const registry = createServerRegistry(
47
+ * { http: { type: 'http', url: 'http://localhost:3000/mcp', start: {...} } },
48
+ * { dialects: ['start'] }
49
+ * );
50
+ * const client = await registry.connect('http');
51
+ * // 1. Waits for HTTP server to respond on /mcp
52
+ * // 2. Performs MCP initialize handshake
53
+ * // 3. Returns ready client
54
+ */
55
+ export declare function connectMcpClient(registryOrConfig: RegistryLike | ServersConfig, serverName: string, options?: {
56
+ dcrAuthenticator?: Partial<DcrAuthenticatorOptions>;
57
+ logger?: Logger;
58
+ }): Promise<Client>;
59
+ export {};
@@ -0,0 +1,59 @@
1
+ /**
2
+ * connect-mcp-client.ts
3
+ *
4
+ * Helper to connect MCP SDK clients to servers with intelligent transport inference.
5
+ * Automatically detects transport type from URL protocol or type field.
6
+ */
7
+ import '../monkey-patches.js';
8
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
9
+ import { type DcrAuthenticatorOptions } from '../dcr/index.js';
10
+ import type { ServerProcess } from '../spawn/spawn-server.js';
11
+ import type { ServersConfig } from '../spawn/spawn-servers.js';
12
+ /**
13
+ * Minimal interface for connecting to servers.
14
+ * Only needs config and servers map for connection logic.
15
+ */
16
+ interface RegistryLike {
17
+ config: ServersConfig;
18
+ servers: Map<string, ServerProcess>;
19
+ }
20
+ import { type Logger } from '../utils/logger.js';
21
+ /**
22
+ * Connect MCP SDK client to server with full readiness handling.
23
+ * @internal - Use registry.connect() instead
24
+ *
25
+ * **Completely handles readiness**: transport availability + MCP protocol handshake.
26
+ *
27
+ * Transport is intelligently inferred and handled:
28
+ * - **Stdio servers**: Direct MCP connect (fast for spawned processes)
29
+ * - **HTTP servers**: Transport polling (/mcp endpoint) + MCP connect
30
+ * - **Registry result**: Handles both spawned and external servers
31
+ *
32
+ * Returns only when server is fully MCP-ready (initialize handshake complete).
33
+ *
34
+ * @param registryOrConfig - Result from createServerRegistry() or servers config object
35
+ * @param serverName - Server name from servers config
36
+ * @returns Connected MCP SDK Client (guaranteed ready)
37
+ *
38
+ * @example
39
+ * // Using registry (recommended)
40
+ * const registry = createServerRegistry({ echo: { command: 'node', args: ['server.ts'] } });
41
+ * const client = await registry.connect('echo');
42
+ * // Server is fully ready - transport available + MCP handshake complete
43
+ *
44
+ * @example
45
+ * // HTTP server readiness (waits for /mcp polling + MCP handshake)
46
+ * const registry = createServerRegistry(
47
+ * { http: { type: 'http', url: 'http://localhost:3000/mcp', start: {...} } },
48
+ * { dialects: ['start'] }
49
+ * );
50
+ * const client = await registry.connect('http');
51
+ * // 1. Waits for HTTP server to respond on /mcp
52
+ * // 2. Performs MCP initialize handshake
53
+ * // 3. Returns ready client
54
+ */
55
+ export declare function connectMcpClient(registryOrConfig: RegistryLike | ServersConfig, serverName: string, options?: {
56
+ dcrAuthenticator?: Partial<DcrAuthenticatorOptions>;
57
+ logger?: Logger;
58
+ }): Promise<Client>;
59
+ export {};