@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.
- package/AGENTS.md +159 -0
- package/LICENSE +21 -0
- package/README.md +90 -0
- package/dist/cjs/auth/capability-discovery.d.cts +25 -0
- package/dist/cjs/auth/capability-discovery.d.ts +25 -0
- package/dist/cjs/auth/capability-discovery.js +280 -0
- package/dist/cjs/auth/capability-discovery.js.map +1 -0
- package/dist/cjs/auth/index.d.cts +9 -0
- package/dist/cjs/auth/index.d.ts +9 -0
- package/dist/cjs/auth/index.js +28 -0
- package/dist/cjs/auth/index.js.map +1 -0
- package/dist/cjs/auth/interactive-oauth-flow.d.cts +58 -0
- package/dist/cjs/auth/interactive-oauth-flow.d.ts +58 -0
- package/dist/cjs/auth/interactive-oauth-flow.js +537 -0
- package/dist/cjs/auth/interactive-oauth-flow.js.map +1 -0
- package/dist/cjs/auth/oauth-callback-listener.d.cts +56 -0
- package/dist/cjs/auth/oauth-callback-listener.d.ts +56 -0
- package/dist/cjs/auth/oauth-callback-listener.js +333 -0
- package/dist/cjs/auth/oauth-callback-listener.js.map +1 -0
- package/dist/cjs/auth/pkce.d.cts +17 -0
- package/dist/cjs/auth/pkce.d.ts +17 -0
- package/dist/cjs/auth/pkce.js +192 -0
- package/dist/cjs/auth/pkce.js.map +1 -0
- package/dist/cjs/auth/rfc9728-discovery.d.cts +34 -0
- package/dist/cjs/auth/rfc9728-discovery.d.ts +34 -0
- package/dist/cjs/auth/rfc9728-discovery.js +436 -0
- package/dist/cjs/auth/rfc9728-discovery.js.map +1 -0
- package/dist/cjs/auth/types.d.cts +137 -0
- package/dist/cjs/auth/types.d.ts +137 -0
- package/dist/cjs/auth/types.js +9 -0
- package/dist/cjs/auth/types.js.map +1 -0
- package/dist/cjs/client-helpers.d.cts +55 -0
- package/dist/cjs/client-helpers.d.ts +55 -0
- package/dist/cjs/client-helpers.js +128 -0
- package/dist/cjs/client-helpers.js.map +1 -0
- package/dist/cjs/config/server-loader.d.cts +27 -0
- package/dist/cjs/config/server-loader.d.ts +27 -0
- package/dist/cjs/config/server-loader.js +111 -0
- package/dist/cjs/config/server-loader.js.map +1 -0
- package/dist/cjs/config/validate-config.d.cts +15 -0
- package/dist/cjs/config/validate-config.d.ts +15 -0
- package/dist/cjs/config/validate-config.js +128 -0
- package/dist/cjs/config/validate-config.js.map +1 -0
- package/dist/cjs/connection/connect-client.d.cts +59 -0
- package/dist/cjs/connection/connect-client.d.ts +59 -0
- package/dist/cjs/connection/connect-client.js +536 -0
- package/dist/cjs/connection/connect-client.js.map +1 -0
- package/dist/cjs/connection/existing-process-transport.d.cts +40 -0
- package/dist/cjs/connection/existing-process-transport.d.ts +40 -0
- package/dist/cjs/connection/existing-process-transport.js +274 -0
- package/dist/cjs/connection/existing-process-transport.js.map +1 -0
- package/dist/cjs/connection/types.d.cts +61 -0
- package/dist/cjs/connection/types.d.ts +61 -0
- package/dist/cjs/connection/types.js +53 -0
- package/dist/cjs/connection/types.js.map +1 -0
- package/dist/cjs/connection/wait-for-http-ready.d.cts +15 -0
- package/dist/cjs/connection/wait-for-http-ready.d.ts +15 -0
- package/dist/cjs/connection/wait-for-http-ready.js +232 -0
- package/dist/cjs/connection/wait-for-http-ready.js.map +1 -0
- package/dist/cjs/dcr/dcr-authenticator.d.cts +73 -0
- package/dist/cjs/dcr/dcr-authenticator.d.ts +73 -0
- package/dist/cjs/dcr/dcr-authenticator.js +655 -0
- package/dist/cjs/dcr/dcr-authenticator.js.map +1 -0
- package/dist/cjs/dcr/dynamic-client-registrar.d.cts +28 -0
- package/dist/cjs/dcr/dynamic-client-registrar.d.ts +28 -0
- package/dist/cjs/dcr/dynamic-client-registrar.js +245 -0
- package/dist/cjs/dcr/dynamic-client-registrar.js.map +1 -0
- package/dist/cjs/dcr/index.d.cts +8 -0
- package/dist/cjs/dcr/index.d.ts +8 -0
- package/dist/cjs/dcr/index.js +24 -0
- package/dist/cjs/dcr/index.js.map +1 -0
- package/dist/cjs/index.d.cts +21 -0
- package/dist/cjs/index.d.ts +21 -0
- package/dist/cjs/index.js +94 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/monkey-patches.d.cts +6 -0
- package/dist/cjs/monkey-patches.d.ts +6 -0
- package/dist/cjs/monkey-patches.js +236 -0
- package/dist/cjs/monkey-patches.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/response-wrappers.d.cts +41 -0
- package/dist/cjs/response-wrappers.d.ts +41 -0
- package/dist/cjs/response-wrappers.js +443 -0
- package/dist/cjs/response-wrappers.js.map +1 -0
- package/dist/cjs/search/index.d.cts +6 -0
- package/dist/cjs/search/index.d.ts +6 -0
- package/dist/cjs/search/index.js +25 -0
- package/dist/cjs/search/index.js.map +1 -0
- package/dist/cjs/search/search.d.cts +22 -0
- package/dist/cjs/search/search.d.ts +22 -0
- package/dist/cjs/search/search.js +630 -0
- package/dist/cjs/search/search.js.map +1 -0
- package/dist/cjs/search/types.d.cts +122 -0
- package/dist/cjs/search/types.d.ts +122 -0
- package/dist/cjs/search/types.js +10 -0
- package/dist/cjs/search/types.js.map +1 -0
- package/dist/cjs/spawn/spawn-server.d.cts +83 -0
- package/dist/cjs/spawn/spawn-server.d.ts +83 -0
- package/dist/cjs/spawn/spawn-server.js +410 -0
- package/dist/cjs/spawn/spawn-server.js.map +1 -0
- package/dist/cjs/spawn/spawn-servers.d.cts +151 -0
- package/dist/cjs/spawn/spawn-servers.d.ts +151 -0
- package/dist/cjs/spawn/spawn-servers.js +911 -0
- package/dist/cjs/spawn/spawn-servers.js.map +1 -0
- package/dist/cjs/types.d.cts +11 -0
- package/dist/cjs/types.d.ts +11 -0
- package/dist/cjs/types.js +10 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils/logger.d.cts +24 -0
- package/dist/cjs/utils/logger.d.ts +24 -0
- package/dist/cjs/utils/logger.js +80 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/cjs/utils/path-utils.d.cts +45 -0
- package/dist/cjs/utils/path-utils.d.ts +45 -0
- package/dist/cjs/utils/path-utils.js +158 -0
- package/dist/cjs/utils/path-utils.js.map +1 -0
- package/dist/cjs/utils/sanitizer.d.cts +30 -0
- package/dist/cjs/utils/sanitizer.d.ts +30 -0
- package/dist/cjs/utils/sanitizer.js +124 -0
- package/dist/cjs/utils/sanitizer.js.map +1 -0
- package/dist/esm/auth/capability-discovery.d.ts +25 -0
- package/dist/esm/auth/capability-discovery.js +110 -0
- package/dist/esm/auth/capability-discovery.js.map +1 -0
- package/dist/esm/auth/index.d.ts +9 -0
- package/dist/esm/auth/index.js +6 -0
- package/dist/esm/auth/index.js.map +1 -0
- package/dist/esm/auth/interactive-oauth-flow.d.ts +58 -0
- package/dist/esm/auth/interactive-oauth-flow.js +217 -0
- package/dist/esm/auth/interactive-oauth-flow.js.map +1 -0
- package/dist/esm/auth/oauth-callback-listener.d.ts +56 -0
- package/dist/esm/auth/oauth-callback-listener.js +166 -0
- package/dist/esm/auth/oauth-callback-listener.js.map +1 -0
- package/dist/esm/auth/pkce.d.ts +17 -0
- package/dist/esm/auth/pkce.js +41 -0
- package/dist/esm/auth/pkce.js.map +1 -0
- package/dist/esm/auth/rfc9728-discovery.d.ts +34 -0
- package/dist/esm/auth/rfc9728-discovery.js +157 -0
- package/dist/esm/auth/rfc9728-discovery.js.map +1 -0
- package/dist/esm/auth/types.d.ts +137 -0
- package/dist/esm/auth/types.js +7 -0
- package/dist/esm/auth/types.js.map +1 -0
- package/dist/esm/client-helpers.d.ts +55 -0
- package/dist/esm/client-helpers.js +81 -0
- package/dist/esm/client-helpers.js.map +1 -0
- package/dist/esm/config/server-loader.d.ts +27 -0
- package/dist/esm/config/server-loader.js +49 -0
- package/dist/esm/config/server-loader.js.map +1 -0
- package/dist/esm/config/validate-config.d.ts +15 -0
- package/dist/esm/config/validate-config.js +76 -0
- package/dist/esm/config/validate-config.js.map +1 -0
- package/dist/esm/connection/connect-client.d.ts +59 -0
- package/dist/esm/connection/connect-client.js +272 -0
- package/dist/esm/connection/connect-client.js.map +1 -0
- package/dist/esm/connection/existing-process-transport.d.ts +40 -0
- package/dist/esm/connection/existing-process-transport.js +103 -0
- package/dist/esm/connection/existing-process-transport.js.map +1 -0
- package/dist/esm/connection/types.d.ts +61 -0
- package/dist/esm/connection/types.js +34 -0
- package/dist/esm/connection/types.js.map +1 -0
- package/dist/esm/connection/wait-for-http-ready.d.ts +15 -0
- package/dist/esm/connection/wait-for-http-ready.js +43 -0
- package/dist/esm/connection/wait-for-http-ready.js.map +1 -0
- package/dist/esm/dcr/dcr-authenticator.d.ts +73 -0
- package/dist/esm/dcr/dcr-authenticator.js +235 -0
- package/dist/esm/dcr/dcr-authenticator.js.map +1 -0
- package/dist/esm/dcr/dynamic-client-registrar.d.ts +28 -0
- package/dist/esm/dcr/dynamic-client-registrar.js +66 -0
- package/dist/esm/dcr/dynamic-client-registrar.js.map +1 -0
- package/dist/esm/dcr/index.d.ts +8 -0
- package/dist/esm/dcr/index.js +5 -0
- package/dist/esm/dcr/index.js.map +1 -0
- package/dist/esm/index.d.ts +21 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/monkey-patches.d.ts +6 -0
- package/dist/esm/monkey-patches.js +32 -0
- package/dist/esm/monkey-patches.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/response-wrappers.d.ts +41 -0
- package/dist/esm/response-wrappers.js +201 -0
- package/dist/esm/response-wrappers.js.map +1 -0
- package/dist/esm/search/index.d.ts +6 -0
- package/dist/esm/search/index.js +3 -0
- package/dist/esm/search/index.js.map +1 -0
- package/dist/esm/search/search.d.ts +22 -0
- package/dist/esm/search/search.js +236 -0
- package/dist/esm/search/search.js.map +1 -0
- package/dist/esm/search/types.d.ts +122 -0
- package/dist/esm/search/types.js +8 -0
- package/dist/esm/search/types.js.map +1 -0
- package/dist/esm/spawn/spawn-server.d.ts +83 -0
- package/dist/esm/spawn/spawn-server.js +145 -0
- package/dist/esm/spawn/spawn-server.js.map +1 -0
- package/dist/esm/spawn/spawn-servers.d.ts +151 -0
- package/dist/esm/spawn/spawn-servers.js +406 -0
- package/dist/esm/spawn/spawn-servers.js.map +1 -0
- package/dist/esm/types.d.ts +11 -0
- package/dist/esm/types.js +9 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils/logger.d.ts +24 -0
- package/dist/esm/utils/logger.js +59 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/dist/esm/utils/path-utils.d.ts +45 -0
- package/dist/esm/utils/path-utils.js +89 -0
- package/dist/esm/utils/path-utils.js.map +1 -0
- package/dist/esm/utils/sanitizer.d.ts +30 -0
- package/dist/esm/utils/sanitizer.js +43 -0
- package/dist/esm/utils/sanitizer.js.map +1 -0
- package/package.json +92 -0
- package/schemas/servers.d.ts +90 -0
- 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 {};
|