@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,137 @@
1
+ /**
2
+ * Shared types for OAuth and DCR authentication
3
+ */
4
+ /**
5
+ * OAuth callback result from authorization server
6
+ */
7
+ export interface CallbackResult {
8
+ /** Authorization code from OAuth server */
9
+ code: string;
10
+ /** State parameter for CSRF protection */
11
+ state?: string;
12
+ }
13
+ /**
14
+ * PKCE (Proof Key for Code Exchange) parameters (RFC 7636)
15
+ * Used to secure OAuth 2.0 authorization code flow for public clients
16
+ */
17
+ export interface PkceParams {
18
+ /** Code verifier - cryptographically random string (43-128 characters) */
19
+ codeVerifier: string;
20
+ /** Code challenge - derived from code verifier using challenge method */
21
+ codeChallenge: string;
22
+ /** Code challenge method - S256 (SHA-256) or plain */
23
+ codeChallengeMethod: 'S256' | 'plain';
24
+ }
25
+ /**
26
+ * OAuth token set with access and refresh tokens
27
+ */
28
+ export interface TokenSet {
29
+ /** Access token for API requests */
30
+ accessToken: string;
31
+ /** Refresh token for obtaining new access tokens */
32
+ refreshToken: string;
33
+ /** Timestamp when access token expires (milliseconds since epoch) */
34
+ expiresAt: number;
35
+ /** Scopes granted for this token set */
36
+ scopes?: string[];
37
+ /** Client ID used for DCR registration (stored for future use) */
38
+ clientId?: string;
39
+ /** Client secret used for DCR registration (stored for future use) */
40
+ clientSecret?: string;
41
+ }
42
+ /**
43
+ * OAuth 2.0 Protected Resource Metadata (RFC 9728)
44
+ * Response from .well-known/oauth-protected-resource endpoint
45
+ */
46
+ export interface ProtectedResourceMetadata {
47
+ /** The protected resource identifier */
48
+ resource: string;
49
+ /** List of authorization server URLs that can issue tokens for this resource */
50
+ authorization_servers: string[];
51
+ /** Optional list of scopes supported by this resource */
52
+ scopes_supported?: string[];
53
+ /** Optional list of bearer token methods supported (header, query, body) */
54
+ bearer_methods_supported?: string[];
55
+ }
56
+ /**
57
+ * OAuth 2.0 Authorization Server Metadata (RFC 8414)
58
+ * Response from .well-known/oauth-authorization-server endpoint
59
+ */
60
+ export interface AuthorizationServerMetadata {
61
+ /** The authorization server's issuer identifier */
62
+ issuer?: string;
63
+ /** URL of the authorization endpoint */
64
+ authorization_endpoint?: string;
65
+ /** URL of the token endpoint */
66
+ token_endpoint?: string;
67
+ /** URL of the client registration endpoint (DCR - RFC 7591) */
68
+ registration_endpoint?: string;
69
+ /** URL of the token introspection endpoint */
70
+ introspection_endpoint?: string;
71
+ /** List of OAuth scopes supported by the authorization server */
72
+ scopes_supported?: string[];
73
+ /** Response types supported (code, token, etc.) */
74
+ response_types_supported?: string[];
75
+ /** Grant types supported (authorization_code, refresh_token, etc.) */
76
+ grant_types_supported?: string[];
77
+ /** Token endpoint authentication methods supported */
78
+ token_endpoint_auth_methods_supported?: string[];
79
+ }
80
+ /**
81
+ * OAuth server capabilities discovered from .well-known endpoint
82
+ */
83
+ export interface AuthCapabilities {
84
+ /** Whether the server supports Dynamic Client Registration (RFC 7591) */
85
+ supportsDcr: boolean;
86
+ /** DCR client registration endpoint */
87
+ registrationEndpoint?: string;
88
+ /** OAuth authorization endpoint */
89
+ authorizationEndpoint?: string;
90
+ /** OAuth token endpoint */
91
+ tokenEndpoint?: string;
92
+ /** Token introspection endpoint */
93
+ introspectionEndpoint?: string;
94
+ /** Supported OAuth scopes */
95
+ scopes?: string[];
96
+ }
97
+ /**
98
+ * Client credentials from DCR registration
99
+ */
100
+ export interface ClientCredentials {
101
+ /** OAuth client ID */
102
+ clientId: string;
103
+ /** OAuth client secret */
104
+ clientSecret: string;
105
+ /** Timestamp when client was registered */
106
+ issuedAt?: number;
107
+ }
108
+ /**
109
+ * Options for DCR client registration
110
+ */
111
+ export interface DcrRegistrationOptions {
112
+ /** Client name to register */
113
+ clientName?: string;
114
+ /** Redirect URI for OAuth callback */
115
+ redirectUri?: string;
116
+ }
117
+ /**
118
+ * Options for OAuth authorization flow
119
+ */
120
+ export interface OAuthFlowOptions {
121
+ /** Port for OAuth callback listener (required - use get-port to find available port) */
122
+ port: number;
123
+ /** Redirect URI for OAuth callback (optional - will be built from port if not provided) */
124
+ redirectUri?: string;
125
+ /** OAuth scopes to request */
126
+ scopes?: string[];
127
+ /** Resource parameter (RFC 8707) - target resource server identifier */
128
+ resource?: string;
129
+ /** Enable PKCE (RFC 7636) - recommended for all clients, required for public clients */
130
+ pkce?: boolean;
131
+ /** Headless mode (don't open browser) */
132
+ headless?: boolean;
133
+ /** Timeout for callback (milliseconds) */
134
+ timeout?: number;
135
+ /** Optional logger for debug output (defaults to singleton logger) */
136
+ logger?: import('../utils/logger.js').Logger;
137
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Shared types for OAuth and DCR authentication
3
+ */ /**
4
+ * OAuth callback result from authorization server
5
+ */ "use strict";
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ /* 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/auth/types.ts"],"sourcesContent":["/**\n * Shared types for OAuth and DCR authentication\n */\n\n/**\n * OAuth callback result from authorization server\n */\nexport interface CallbackResult {\n /** Authorization code from OAuth server */\n code: string;\n /** State parameter for CSRF protection */\n state?: string;\n}\n\n/**\n * PKCE (Proof Key for Code Exchange) parameters (RFC 7636)\n * Used to secure OAuth 2.0 authorization code flow for public clients\n */\nexport interface PkceParams {\n /** Code verifier - cryptographically random string (43-128 characters) */\n codeVerifier: string;\n /** Code challenge - derived from code verifier using challenge method */\n codeChallenge: string;\n /** Code challenge method - S256 (SHA-256) or plain */\n codeChallengeMethod: 'S256' | 'plain';\n}\n\n/**\n * OAuth token set with access and refresh tokens\n */\nexport interface TokenSet {\n /** Access token for API requests */\n accessToken: string;\n /** Refresh token for obtaining new access tokens */\n refreshToken: string;\n /** Timestamp when access token expires (milliseconds since epoch) */\n expiresAt: number;\n /** Scopes granted for this token set */\n scopes?: string[];\n /** Client ID used for DCR registration (stored for future use) */\n clientId?: string;\n /** Client secret used for DCR registration (stored for future use) */\n clientSecret?: string;\n}\n\n/**\n * OAuth 2.0 Protected Resource Metadata (RFC 9728)\n * Response from .well-known/oauth-protected-resource endpoint\n */\nexport interface ProtectedResourceMetadata {\n /** The protected resource identifier */\n resource: string;\n /** List of authorization server URLs that can issue tokens for this resource */\n authorization_servers: string[];\n /** Optional list of scopes supported by this resource */\n scopes_supported?: string[];\n /** Optional list of bearer token methods supported (header, query, body) */\n bearer_methods_supported?: string[];\n}\n\n/**\n * OAuth 2.0 Authorization Server Metadata (RFC 8414)\n * Response from .well-known/oauth-authorization-server endpoint\n */\nexport interface AuthorizationServerMetadata {\n /** The authorization server's issuer identifier */\n issuer?: string;\n /** URL of the authorization endpoint */\n authorization_endpoint?: string;\n /** URL of the token endpoint */\n token_endpoint?: string;\n /** URL of the client registration endpoint (DCR - RFC 7591) */\n registration_endpoint?: string;\n /** URL of the token introspection endpoint */\n introspection_endpoint?: string;\n /** List of OAuth scopes supported by the authorization server */\n scopes_supported?: string[];\n /** Response types supported (code, token, etc.) */\n response_types_supported?: string[];\n /** Grant types supported (authorization_code, refresh_token, etc.) */\n grant_types_supported?: string[];\n /** Token endpoint authentication methods supported */\n token_endpoint_auth_methods_supported?: string[];\n}\n\n/**\n * OAuth server capabilities discovered from .well-known endpoint\n */\nexport interface AuthCapabilities {\n /** Whether the server supports Dynamic Client Registration (RFC 7591) */\n supportsDcr: boolean;\n /** DCR client registration endpoint */\n registrationEndpoint?: string;\n /** OAuth authorization endpoint */\n authorizationEndpoint?: string;\n /** OAuth token endpoint */\n tokenEndpoint?: string;\n /** Token introspection endpoint */\n introspectionEndpoint?: string;\n /** Supported OAuth scopes */\n scopes?: string[];\n}\n\n/**\n * Client credentials from DCR registration\n */\nexport interface ClientCredentials {\n /** OAuth client ID */\n clientId: string;\n /** OAuth client secret */\n clientSecret: string;\n /** Timestamp when client was registered */\n issuedAt?: number;\n}\n\n/**\n * Options for DCR client registration\n */\nexport interface DcrRegistrationOptions {\n /** Client name to register */\n clientName?: string;\n /** Redirect URI for OAuth callback */\n redirectUri?: string;\n}\n\n/**\n * Options for OAuth authorization flow\n */\nexport interface OAuthFlowOptions {\n /** Port for OAuth callback listener (required - use get-port to find available port) */\n port: number;\n /** Redirect URI for OAuth callback (optional - will be built from port if not provided) */\n redirectUri?: string;\n /** OAuth scopes to request */\n scopes?: string[];\n /** Resource parameter (RFC 8707) - target resource server identifier */\n resource?: string;\n /** Enable PKCE (RFC 7636) - recommended for all clients, required for public clients */\n pkce?: boolean;\n /** Headless mode (don't open browser) */\n headless?: boolean;\n /** Timeout for callback (milliseconds) */\n timeout?: number;\n /** Optional logger for debug output (defaults to singleton logger) */\n logger?: import('../utils/logger.ts').Logger;\n}\n"],"names":[],"mappings":"AAAA;;CAEC,GAED;;CAEC"}
@@ -0,0 +1,55 @@
1
+ import type { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import type { RequestOptions } from '@modelcontextprotocol/sdk/shared/protocol.js';
3
+ import type { ToolArguments } from './connection/types.js';
4
+ import { PromptResponseWrapper, ResourceResponseWrapper, ToolResponseWrapper } from './response-wrappers.js';
5
+ export type PromptArguments = Record<string, string>;
6
+ type NativeCallToolParams = Parameters<Client['callTool']>;
7
+ type NativeCallToolReturn = ReturnType<Client['callTool']>;
8
+ /**
9
+ * Fetch-style wrapper returned by `ManagedClient.callTool()`.
10
+ * @public
11
+ */
12
+ export type WrappedCallToolReturn = Promise<ToolResponseWrapper>;
13
+ type NativeGetPromptParams = Parameters<Client['getPrompt']>;
14
+ type NativeGetPromptReturn = ReturnType<Client['getPrompt']>;
15
+ /**
16
+ * Fetch-style wrapper returned by `ManagedClient.getPrompt()`.
17
+ * @public
18
+ */
19
+ export type WrappedGetPromptReturn = Promise<PromptResponseWrapper>;
20
+ type NativeReadResourceParams = Parameters<Client['readResource']>;
21
+ type NativeReadResourceReturn = ReturnType<Client['readResource']>;
22
+ /**
23
+ * Fetch-style wrapper returned by `ManagedClient.readResource()`.
24
+ * @public
25
+ */
26
+ export type WrappedReadResourceReturn = Promise<ResourceResponseWrapper>;
27
+ /**
28
+ * Client returned by registry.connect() with convenience overloads for
29
+ * calling tools, reading resources, and getting prompts using simple arguments.
30
+ */
31
+ export type ManagedClient = Omit<Client, 'callTool' | 'getPrompt' | 'readResource'> & {
32
+ /** Name of the server this client is connected to. */
33
+ readonly serverName: string;
34
+ /** Underlying MCP SDK client for advanced scenarios. */
35
+ readonly nativeClient: Client;
36
+ callTool(toolName: string, args?: ToolArguments, requestOptions?: RequestOptions): WrappedCallToolReturn;
37
+ callTool(invocation: NativeCallToolParams[0], sessionId?: NativeCallToolParams[1], requestOptions?: NativeCallToolParams[2]): WrappedCallToolReturn;
38
+ callToolRaw(toolName: string, args?: ToolArguments, requestOptions?: RequestOptions): NativeCallToolReturn;
39
+ callToolRaw(invocation: NativeCallToolParams[0], sessionId?: NativeCallToolParams[1], requestOptions?: NativeCallToolParams[2]): NativeCallToolReturn;
40
+ getPrompt(name: string, args?: PromptArguments, requestOptions?: NativeGetPromptParams[1]): WrappedGetPromptReturn;
41
+ getPrompt(invocation: NativeGetPromptParams[0], requestOptions?: NativeGetPromptParams[1]): WrappedGetPromptReturn;
42
+ getPromptRaw(name: string, args?: PromptArguments, requestOptions?: NativeGetPromptParams[1]): NativeGetPromptReturn;
43
+ getPromptRaw(invocation: NativeGetPromptParams[0], requestOptions?: NativeGetPromptParams[1]): NativeGetPromptReturn;
44
+ readResource(uri: string, requestOptions?: NativeReadResourceParams[1]): WrappedReadResourceReturn;
45
+ readResource(request: NativeReadResourceParams[0], requestOptions?: NativeReadResourceParams[1]): WrappedReadResourceReturn;
46
+ readResourceRaw(uri: string, requestOptions?: NativeReadResourceParams[1]): NativeReadResourceReturn;
47
+ readResourceRaw(request: NativeReadResourceParams[0], requestOptions?: NativeReadResourceParams[1]): NativeReadResourceReturn;
48
+ };
49
+ /**
50
+ * Enhance an MCP SDK client with convenience overloads.
51
+ */
52
+ export declare function decorateClient(client: Client, metadata: {
53
+ serverName: string;
54
+ }): ManagedClient;
55
+ export {};
@@ -0,0 +1,55 @@
1
+ import type { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import type { RequestOptions } from '@modelcontextprotocol/sdk/shared/protocol.js';
3
+ import type { ToolArguments } from './connection/types.js';
4
+ import { PromptResponseWrapper, ResourceResponseWrapper, ToolResponseWrapper } from './response-wrappers.js';
5
+ export type PromptArguments = Record<string, string>;
6
+ type NativeCallToolParams = Parameters<Client['callTool']>;
7
+ type NativeCallToolReturn = ReturnType<Client['callTool']>;
8
+ /**
9
+ * Fetch-style wrapper returned by `ManagedClient.callTool()`.
10
+ * @public
11
+ */
12
+ export type WrappedCallToolReturn = Promise<ToolResponseWrapper>;
13
+ type NativeGetPromptParams = Parameters<Client['getPrompt']>;
14
+ type NativeGetPromptReturn = ReturnType<Client['getPrompt']>;
15
+ /**
16
+ * Fetch-style wrapper returned by `ManagedClient.getPrompt()`.
17
+ * @public
18
+ */
19
+ export type WrappedGetPromptReturn = Promise<PromptResponseWrapper>;
20
+ type NativeReadResourceParams = Parameters<Client['readResource']>;
21
+ type NativeReadResourceReturn = ReturnType<Client['readResource']>;
22
+ /**
23
+ * Fetch-style wrapper returned by `ManagedClient.readResource()`.
24
+ * @public
25
+ */
26
+ export type WrappedReadResourceReturn = Promise<ResourceResponseWrapper>;
27
+ /**
28
+ * Client returned by registry.connect() with convenience overloads for
29
+ * calling tools, reading resources, and getting prompts using simple arguments.
30
+ */
31
+ export type ManagedClient = Omit<Client, 'callTool' | 'getPrompt' | 'readResource'> & {
32
+ /** Name of the server this client is connected to. */
33
+ readonly serverName: string;
34
+ /** Underlying MCP SDK client for advanced scenarios. */
35
+ readonly nativeClient: Client;
36
+ callTool(toolName: string, args?: ToolArguments, requestOptions?: RequestOptions): WrappedCallToolReturn;
37
+ callTool(invocation: NativeCallToolParams[0], sessionId?: NativeCallToolParams[1], requestOptions?: NativeCallToolParams[2]): WrappedCallToolReturn;
38
+ callToolRaw(toolName: string, args?: ToolArguments, requestOptions?: RequestOptions): NativeCallToolReturn;
39
+ callToolRaw(invocation: NativeCallToolParams[0], sessionId?: NativeCallToolParams[1], requestOptions?: NativeCallToolParams[2]): NativeCallToolReturn;
40
+ getPrompt(name: string, args?: PromptArguments, requestOptions?: NativeGetPromptParams[1]): WrappedGetPromptReturn;
41
+ getPrompt(invocation: NativeGetPromptParams[0], requestOptions?: NativeGetPromptParams[1]): WrappedGetPromptReturn;
42
+ getPromptRaw(name: string, args?: PromptArguments, requestOptions?: NativeGetPromptParams[1]): NativeGetPromptReturn;
43
+ getPromptRaw(invocation: NativeGetPromptParams[0], requestOptions?: NativeGetPromptParams[1]): NativeGetPromptReturn;
44
+ readResource(uri: string, requestOptions?: NativeReadResourceParams[1]): WrappedReadResourceReturn;
45
+ readResource(request: NativeReadResourceParams[0], requestOptions?: NativeReadResourceParams[1]): WrappedReadResourceReturn;
46
+ readResourceRaw(uri: string, requestOptions?: NativeReadResourceParams[1]): NativeReadResourceReturn;
47
+ readResourceRaw(request: NativeReadResourceParams[0], requestOptions?: NativeReadResourceParams[1]): NativeReadResourceReturn;
48
+ };
49
+ /**
50
+ * Enhance an MCP SDK client with convenience overloads.
51
+ */
52
+ export declare function decorateClient(client: Client, metadata: {
53
+ serverName: string;
54
+ }): ManagedClient;
55
+ export {};
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "decorateClient", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return decorateClient;
9
+ }
10
+ });
11
+ var _responsewrappersts = require("./response-wrappers.js");
12
+ function _define_property(obj, key, value) {
13
+ if (key in obj) {
14
+ Object.defineProperty(obj, key, {
15
+ value: value,
16
+ enumerable: true,
17
+ configurable: true,
18
+ writable: true
19
+ });
20
+ } else {
21
+ obj[key] = value;
22
+ }
23
+ return obj;
24
+ }
25
+ function _object_spread(target) {
26
+ for(var i = 1; i < arguments.length; i++){
27
+ var source = arguments[i] != null ? arguments[i] : {};
28
+ var ownKeys = Object.keys(source);
29
+ if (typeof Object.getOwnPropertySymbols === "function") {
30
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
31
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
32
+ }));
33
+ }
34
+ ownKeys.forEach(function(key) {
35
+ _define_property(target, key, source[key]);
36
+ });
37
+ }
38
+ return target;
39
+ }
40
+ function decorateClient(client, metadata) {
41
+ var enhanced = client;
42
+ Object.defineProperty(enhanced, 'serverName', {
43
+ value: metadata.serverName,
44
+ enumerable: true,
45
+ configurable: false,
46
+ writable: false
47
+ });
48
+ Object.defineProperty(enhanced, 'nativeClient', {
49
+ value: client,
50
+ enumerable: false,
51
+ configurable: false,
52
+ writable: false
53
+ });
54
+ var nativeCallTool = client.callTool.bind(client);
55
+ var wrapCallTool = function(promise) {
56
+ return promise.then(function(payload) {
57
+ return new _responsewrappersts.ToolResponseWrapper(payload);
58
+ });
59
+ };
60
+ enhanced.callTool = function(nameOrInvocation, argsOrSession, requestOptions) {
61
+ if (typeof nameOrInvocation === 'string') {
62
+ return wrapCallTool(nativeCallTool({
63
+ name: nameOrInvocation,
64
+ arguments: argsOrSession !== null && argsOrSession !== void 0 ? argsOrSession : {}
65
+ }, undefined, requestOptions));
66
+ }
67
+ return wrapCallTool(nativeCallTool(nameOrInvocation, argsOrSession, requestOptions));
68
+ };
69
+ enhanced.callToolRaw = function(nameOrInvocation, argsOrSession, requestOptions) {
70
+ if (typeof nameOrInvocation === 'string') {
71
+ return nativeCallTool({
72
+ name: nameOrInvocation,
73
+ arguments: argsOrSession !== null && argsOrSession !== void 0 ? argsOrSession : {}
74
+ }, undefined, requestOptions);
75
+ }
76
+ return nativeCallTool(nameOrInvocation, argsOrSession, requestOptions);
77
+ };
78
+ var nativeGetPrompt = client.getPrompt.bind(client);
79
+ var wrapPrompt = function(promise) {
80
+ return promise.then(function(payload) {
81
+ return new _responsewrappersts.PromptResponseWrapper(payload);
82
+ });
83
+ };
84
+ enhanced.getPrompt = function(nameOrParams, argsOrOptions, requestOptions) {
85
+ if (typeof nameOrParams === 'string') {
86
+ return wrapPrompt(nativeGetPrompt(_object_spread({
87
+ name: nameOrParams
88
+ }, argsOrOptions ? {
89
+ arguments: argsOrOptions
90
+ } : {}), requestOptions));
91
+ }
92
+ return wrapPrompt(nativeGetPrompt(nameOrParams, argsOrOptions));
93
+ };
94
+ enhanced.getPromptRaw = function(nameOrParams, argsOrOptions, requestOptions) {
95
+ if (typeof nameOrParams === 'string') {
96
+ return nativeGetPrompt(_object_spread({
97
+ name: nameOrParams
98
+ }, argsOrOptions ? {
99
+ arguments: argsOrOptions
100
+ } : {}), requestOptions);
101
+ }
102
+ return nativeGetPrompt(nameOrParams, argsOrOptions);
103
+ };
104
+ var nativeReadResource = client.readResource.bind(client);
105
+ var wrapResource = function(promise) {
106
+ return promise.then(function(payload) {
107
+ return new _responsewrappersts.ResourceResponseWrapper(payload);
108
+ });
109
+ };
110
+ enhanced.readResource = function(uriOrRequest, requestOptions) {
111
+ if (typeof uriOrRequest === 'string') {
112
+ return wrapResource(nativeReadResource({
113
+ uri: uriOrRequest
114
+ }, requestOptions));
115
+ }
116
+ return wrapResource(nativeReadResource(uriOrRequest, requestOptions));
117
+ };
118
+ enhanced.readResourceRaw = function(uriOrRequest, requestOptions) {
119
+ if (typeof uriOrRequest === 'string') {
120
+ return nativeReadResource({
121
+ uri: uriOrRequest
122
+ }, requestOptions);
123
+ }
124
+ return nativeReadResource(uriOrRequest, requestOptions);
125
+ };
126
+ return enhanced;
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/client-helpers.ts"],"sourcesContent":["import type { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport type { RequestOptions } from '@modelcontextprotocol/sdk/shared/protocol.js';\nimport type { ToolArguments } from './connection/types.ts';\nimport { type NativeCallToolResponse, type NativeGetPromptResponse, type NativeReadResourceResponse, PromptResponseWrapper, ResourceResponseWrapper, ToolResponseWrapper } from './response-wrappers.ts';\n\nexport type PromptArguments = Record<string, string>;\n\ntype NativeCallToolParams = Parameters<Client['callTool']>;\ntype NativeCallToolReturn = ReturnType<Client['callTool']>;\n/**\n * Fetch-style wrapper returned by `ManagedClient.callTool()`.\n * @public\n */\nexport type WrappedCallToolReturn = Promise<ToolResponseWrapper>;\n\ntype NativeGetPromptParams = Parameters<Client['getPrompt']>;\ntype NativeGetPromptReturn = ReturnType<Client['getPrompt']>;\n/**\n * Fetch-style wrapper returned by `ManagedClient.getPrompt()`.\n * @public\n */\nexport type WrappedGetPromptReturn = Promise<PromptResponseWrapper>;\n\ntype NativeReadResourceParams = Parameters<Client['readResource']>;\ntype NativeReadResourceReturn = ReturnType<Client['readResource']>;\n/**\n * Fetch-style wrapper returned by `ManagedClient.readResource()`.\n * @public\n */\nexport type WrappedReadResourceReturn = Promise<ResourceResponseWrapper>;\n\n/**\n * Client returned by registry.connect() with convenience overloads for\n * calling tools, reading resources, and getting prompts using simple arguments.\n */\nexport type ManagedClient = Omit<Client, 'callTool' | 'getPrompt' | 'readResource'> & {\n /** Name of the server this client is connected to. */\n readonly serverName: string;\n /** Underlying MCP SDK client for advanced scenarios. */\n readonly nativeClient: Client;\n\n callTool(toolName: string, args?: ToolArguments, requestOptions?: RequestOptions): WrappedCallToolReturn;\n callTool(invocation: NativeCallToolParams[0], sessionId?: NativeCallToolParams[1], requestOptions?: NativeCallToolParams[2]): WrappedCallToolReturn;\n callToolRaw(toolName: string, args?: ToolArguments, requestOptions?: RequestOptions): NativeCallToolReturn;\n callToolRaw(invocation: NativeCallToolParams[0], sessionId?: NativeCallToolParams[1], requestOptions?: NativeCallToolParams[2]): NativeCallToolReturn;\n\n getPrompt(name: string, args?: PromptArguments, requestOptions?: NativeGetPromptParams[1]): WrappedGetPromptReturn;\n getPrompt(invocation: NativeGetPromptParams[0], requestOptions?: NativeGetPromptParams[1]): WrappedGetPromptReturn;\n getPromptRaw(name: string, args?: PromptArguments, requestOptions?: NativeGetPromptParams[1]): NativeGetPromptReturn;\n getPromptRaw(invocation: NativeGetPromptParams[0], requestOptions?: NativeGetPromptParams[1]): NativeGetPromptReturn;\n\n readResource(uri: string, requestOptions?: NativeReadResourceParams[1]): WrappedReadResourceReturn;\n readResource(request: NativeReadResourceParams[0], requestOptions?: NativeReadResourceParams[1]): WrappedReadResourceReturn;\n readResourceRaw(uri: string, requestOptions?: NativeReadResourceParams[1]): NativeReadResourceReturn;\n readResourceRaw(request: NativeReadResourceParams[0], requestOptions?: NativeReadResourceParams[1]): NativeReadResourceReturn;\n};\n\n/**\n * Enhance an MCP SDK client with convenience overloads.\n */\nexport function decorateClient(client: Client, metadata: { serverName: string }): ManagedClient {\n const enhanced = client as unknown as ManagedClient;\n\n Object.defineProperty(enhanced, 'serverName', {\n value: metadata.serverName,\n enumerable: true,\n configurable: false,\n writable: false,\n });\n Object.defineProperty(enhanced, 'nativeClient', {\n value: client,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n\n const nativeCallTool = client.callTool.bind(client);\n const wrapCallTool = (promise: NativeCallToolReturn): WrappedCallToolReturn => promise.then((payload) => new ToolResponseWrapper(payload as NativeCallToolResponse));\n\n enhanced.callTool = ((nameOrInvocation: string | NativeCallToolParams[0], argsOrSession?: ToolArguments | NativeCallToolParams[1], requestOptions?: NativeCallToolParams[2]) => {\n if (typeof nameOrInvocation === 'string') {\n return wrapCallTool(nativeCallTool({ name: nameOrInvocation, arguments: (argsOrSession as ToolArguments) ?? {} }, undefined, requestOptions));\n }\n return wrapCallTool(nativeCallTool(nameOrInvocation, argsOrSession as NativeCallToolParams[1], requestOptions));\n }) as ManagedClient['callTool'];\n\n enhanced.callToolRaw = ((nameOrInvocation: string | NativeCallToolParams[0], argsOrSession?: ToolArguments | NativeCallToolParams[1], requestOptions?: NativeCallToolParams[2]) => {\n if (typeof nameOrInvocation === 'string') {\n return nativeCallTool({ name: nameOrInvocation, arguments: (argsOrSession as ToolArguments) ?? {} }, undefined, requestOptions);\n }\n return nativeCallTool(nameOrInvocation, argsOrSession as NativeCallToolParams[1], requestOptions);\n }) as ManagedClient['callToolRaw'];\n\n const nativeGetPrompt = client.getPrompt.bind(client);\n const wrapPrompt = (promise: NativeGetPromptReturn): WrappedGetPromptReturn => promise.then((payload) => new PromptResponseWrapper(payload as NativeGetPromptResponse));\n\n enhanced.getPrompt = ((nameOrParams: string | NativeGetPromptParams[0], argsOrOptions?: PromptArguments | NativeGetPromptParams[1], requestOptions?: NativeGetPromptParams[1]) => {\n if (typeof nameOrParams === 'string') {\n return wrapPrompt(nativeGetPrompt({ name: nameOrParams, ...(argsOrOptions ? { arguments: argsOrOptions as PromptArguments } : {}) }, requestOptions));\n }\n return wrapPrompt(nativeGetPrompt(nameOrParams, argsOrOptions as NativeGetPromptParams[1]));\n }) as ManagedClient['getPrompt'];\n\n enhanced.getPromptRaw = ((nameOrParams: string | NativeGetPromptParams[0], argsOrOptions?: PromptArguments | NativeGetPromptParams[1], requestOptions?: NativeGetPromptParams[1]) => {\n if (typeof nameOrParams === 'string') {\n return nativeGetPrompt({ name: nameOrParams, ...(argsOrOptions ? { arguments: argsOrOptions as PromptArguments } : {}) }, requestOptions);\n }\n return nativeGetPrompt(nameOrParams, argsOrOptions as NativeGetPromptParams[1]);\n }) as ManagedClient['getPromptRaw'];\n\n const nativeReadResource = client.readResource.bind(client);\n const wrapResource = (promise: NativeReadResourceReturn): WrappedReadResourceReturn => promise.then((payload) => new ResourceResponseWrapper(payload as NativeReadResourceResponse));\n\n enhanced.readResource = ((uriOrRequest: string | NativeReadResourceParams[0], requestOptions?: NativeReadResourceParams[1]) => {\n if (typeof uriOrRequest === 'string') {\n return wrapResource(nativeReadResource({ uri: uriOrRequest }, requestOptions));\n }\n return wrapResource(nativeReadResource(uriOrRequest, requestOptions));\n }) as ManagedClient['readResource'];\n\n enhanced.readResourceRaw = ((uriOrRequest: string | NativeReadResourceParams[0], requestOptions?: NativeReadResourceParams[1]) => {\n if (typeof uriOrRequest === 'string') {\n return nativeReadResource({ uri: uriOrRequest }, requestOptions);\n }\n return nativeReadResource(uriOrRequest, requestOptions);\n }) as ManagedClient['readResourceRaw'];\n\n return enhanced;\n}\n"],"names":["decorateClient","client","metadata","enhanced","Object","defineProperty","value","serverName","enumerable","configurable","writable","nativeCallTool","callTool","bind","wrapCallTool","promise","then","payload","ToolResponseWrapper","nameOrInvocation","argsOrSession","requestOptions","name","arguments","undefined","callToolRaw","nativeGetPrompt","getPrompt","wrapPrompt","PromptResponseWrapper","nameOrParams","argsOrOptions","getPromptRaw","nativeReadResource","readResource","wrapResource","ResourceResponseWrapper","uriOrRequest","uri","readResourceRaw"],"mappings":";;;;+BA4DgBA;;;eAAAA;;;kCAzDgK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDzK,SAASA,eAAeC,MAAc,EAAEC,QAAgC;IAC7E,IAAMC,WAAWF;IAEjBG,OAAOC,cAAc,CAACF,UAAU,cAAc;QAC5CG,OAAOJ,SAASK,UAAU;QAC1BC,YAAY;QACZC,cAAc;QACdC,UAAU;IACZ;IACAN,OAAOC,cAAc,CAACF,UAAU,gBAAgB;QAC9CG,OAAOL;QACPO,YAAY;QACZC,cAAc;QACdC,UAAU;IACZ;IAEA,IAAMC,iBAAiBV,OAAOW,QAAQ,CAACC,IAAI,CAACZ;IAC5C,IAAMa,eAAe,SAACC;eAAyDA,QAAQC,IAAI,CAAC,SAACC;mBAAY,IAAIC,uCAAmB,CAACD;;;IAEjId,SAASS,QAAQ,GAAI,SAACO,kBAAoDC,eAAyDC;QACjI,IAAI,OAAOF,qBAAqB,UAAU;YACxC,OAAOL,aAAaH,eAAe;gBAAEW,MAAMH;gBAAkBI,SAAS,EAAGH,0BAAAA,2BAAAA,gBAAmC,CAAC;YAAE,GAAGI,WAAWH;QAC/H;QACA,OAAOP,aAAaH,eAAeQ,kBAAkBC,eAA0CC;IACjG;IAEAlB,SAASsB,WAAW,GAAI,SAACN,kBAAoDC,eAAyDC;QACpI,IAAI,OAAOF,qBAAqB,UAAU;YACxC,OAAOR,eAAe;gBAAEW,MAAMH;gBAAkBI,SAAS,EAAGH,0BAAAA,2BAAAA,gBAAmC,CAAC;YAAE,GAAGI,WAAWH;QAClH;QACA,OAAOV,eAAeQ,kBAAkBC,eAA0CC;IACpF;IAEA,IAAMK,kBAAkBzB,OAAO0B,SAAS,CAACd,IAAI,CAACZ;IAC9C,IAAM2B,aAAa,SAACb;eAA2DA,QAAQC,IAAI,CAAC,SAACC;mBAAY,IAAIY,yCAAqB,CAACZ;;;IAEnId,SAASwB,SAAS,GAAI,SAACG,cAAiDC,eAA4DV;QAClI,IAAI,OAAOS,iBAAiB,UAAU;YACpC,OAAOF,WAAWF,gBAAgB;gBAAEJ,MAAMQ;eAAkBC,gBAAgB;gBAAER,WAAWQ;YAAiC,IAAI,CAAC,IAAMV;QACvI;QACA,OAAOO,WAAWF,gBAAgBI,cAAcC;IAClD;IAEA5B,SAAS6B,YAAY,GAAI,SAACF,cAAiDC,eAA4DV;QACrI,IAAI,OAAOS,iBAAiB,UAAU;YACpC,OAAOJ,gBAAgB;gBAAEJ,MAAMQ;eAAkBC,gBAAgB;gBAAER,WAAWQ;YAAiC,IAAI,CAAC,IAAMV;QAC5H;QACA,OAAOK,gBAAgBI,cAAcC;IACvC;IAEA,IAAME,qBAAqBhC,OAAOiC,YAAY,CAACrB,IAAI,CAACZ;IACpD,IAAMkC,eAAe,SAACpB;eAAiEA,QAAQC,IAAI,CAAC,SAACC;mBAAY,IAAImB,2CAAuB,CAACnB;;;IAE7Id,SAAS+B,YAAY,GAAI,SAACG,cAAoDhB;QAC5E,IAAI,OAAOgB,iBAAiB,UAAU;YACpC,OAAOF,aAAaF,mBAAmB;gBAAEK,KAAKD;YAAa,GAAGhB;QAChE;QACA,OAAOc,aAAaF,mBAAmBI,cAAchB;IACvD;IAEAlB,SAASoC,eAAe,GAAI,SAACF,cAAoDhB;QAC/E,IAAI,OAAOgB,iBAAiB,UAAU;YACpC,OAAOJ,mBAAmB;gBAAEK,KAAKD;YAAa,GAAGhB;QACnD;QACA,OAAOY,mBAAmBI,cAAchB;IAC1C;IAEA,OAAOlB;AACT"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Load server definitions from .mcp.json (data-driven)
3
+ */
4
+ export interface McpServerConfig {
5
+ command: string;
6
+ args: string[];
7
+ env?: Record<string, string>;
8
+ }
9
+ export interface MCPConfiguration {
10
+ mcpServers: Record<string, McpServerConfig>;
11
+ }
12
+ /**
13
+ * Load available servers from resources/.mcp.json
14
+ */
15
+ export declare function loadAvailableServers(): MCPConfiguration;
16
+ /**
17
+ * Get list of all available server names
18
+ */
19
+ export declare function getAllServerNames(): string[];
20
+ /**
21
+ * Parse comma-separated server list or "all"
22
+ */
23
+ export declare function parseServerList(input: string): string[];
24
+ /**
25
+ * Get server configuration by name
26
+ */
27
+ export declare function getServerConfig(serverName: string): McpServerConfig;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Load server definitions from .mcp.json (data-driven)
3
+ */
4
+ export interface McpServerConfig {
5
+ command: string;
6
+ args: string[];
7
+ env?: Record<string, string>;
8
+ }
9
+ export interface MCPConfiguration {
10
+ mcpServers: Record<string, McpServerConfig>;
11
+ }
12
+ /**
13
+ * Load available servers from resources/.mcp.json
14
+ */
15
+ export declare function loadAvailableServers(): MCPConfiguration;
16
+ /**
17
+ * Get list of all available server names
18
+ */
19
+ export declare function getAllServerNames(): string[];
20
+ /**
21
+ * Parse comma-separated server list or "all"
22
+ */
23
+ export declare function parseServerList(input: string): string[];
24
+ /**
25
+ * Get server configuration by name
26
+ */
27
+ export declare function getServerConfig(serverName: string): McpServerConfig;
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Load server definitions from .mcp.json (data-driven)
3
+ */ "use strict";
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ function _export(target, all) {
8
+ for(var name in all)Object.defineProperty(target, name, {
9
+ enumerable: true,
10
+ get: Object.getOwnPropertyDescriptor(all, name).get
11
+ });
12
+ }
13
+ _export(exports, {
14
+ get getAllServerNames () {
15
+ return getAllServerNames;
16
+ },
17
+ get getServerConfig () {
18
+ return getServerConfig;
19
+ },
20
+ get loadAvailableServers () {
21
+ return loadAvailableServers;
22
+ },
23
+ get parseServerList () {
24
+ return parseServerList;
25
+ }
26
+ });
27
+ var _fs = /*#__PURE__*/ _interop_require_wildcard(require("fs"));
28
+ var _path = /*#__PURE__*/ _interop_require_wildcard(require("path"));
29
+ var _url = require("url");
30
+ function _getRequireWildcardCache(nodeInterop) {
31
+ if (typeof WeakMap !== "function") return null;
32
+ var cacheBabelInterop = new WeakMap();
33
+ var cacheNodeInterop = new WeakMap();
34
+ return (_getRequireWildcardCache = function(nodeInterop) {
35
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
36
+ })(nodeInterop);
37
+ }
38
+ function _interop_require_wildcard(obj, nodeInterop) {
39
+ if (!nodeInterop && obj && obj.__esModule) {
40
+ return obj;
41
+ }
42
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
43
+ return {
44
+ default: obj
45
+ };
46
+ }
47
+ var cache = _getRequireWildcardCache(nodeInterop);
48
+ if (cache && cache.has(obj)) {
49
+ return cache.get(obj);
50
+ }
51
+ var newObj = {
52
+ __proto__: null
53
+ };
54
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
55
+ for(var key in obj){
56
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
57
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
58
+ if (desc && (desc.get || desc.set)) {
59
+ Object.defineProperty(newObj, key, desc);
60
+ } else {
61
+ newObj[key] = obj[key];
62
+ }
63
+ }
64
+ }
65
+ newObj.default = obj;
66
+ if (cache) {
67
+ cache.set(obj, newObj);
68
+ }
69
+ return newObj;
70
+ }
71
+ // Get package root: dist/esm/lib -> ../../../ or dist/cjs/lib -> ../../../
72
+ var __filename1 = (0, _url.fileURLToPath)(require("url").pathToFileURL(__filename).toString());
73
+ var __dirname = _path.dirname(__filename1);
74
+ var packageRoot = _path.resolve(__dirname, '../../..');
75
+ function loadAvailableServers() {
76
+ var configPath = _path.join(packageRoot, 'resources/.mcp.json');
77
+ if (!_fs.existsSync(configPath)) {
78
+ throw new Error("Server configuration not found: ".concat(configPath));
79
+ }
80
+ var content = _fs.readFileSync(configPath, 'utf-8');
81
+ return JSON.parse(content);
82
+ }
83
+ function getAllServerNames() {
84
+ var config = loadAvailableServers();
85
+ return Object.keys(config.mcpServers);
86
+ }
87
+ function parseServerList(input) {
88
+ var allServers = getAllServerNames();
89
+ if (input === 'all') {
90
+ return allServers;
91
+ }
92
+ var requested = input.split(',').map(function(s) {
93
+ return s.trim();
94
+ });
95
+ var invalid = requested.filter(function(s) {
96
+ return !allServers.includes(s);
97
+ });
98
+ if (invalid.length > 0) {
99
+ throw new Error("Invalid server names: ".concat(invalid.join(', '), ".\nAvailable: ").concat(allServers.join(', ')));
100
+ }
101
+ return requested;
102
+ }
103
+ function getServerConfig(serverName) {
104
+ var config = loadAvailableServers();
105
+ var serverConfig = config.mcpServers[serverName];
106
+ if (!serverConfig) {
107
+ throw new Error("Unknown server: ".concat(serverName, ".\nAvailable: ").concat(getAllServerNames().join(', ')));
108
+ }
109
+ return serverConfig;
110
+ }
111
+ /* 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/server-loader.ts"],"sourcesContent":["/**\n * Load server definitions from .mcp.json (data-driven)\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { fileURLToPath } from 'url';\n\n// Get package root: dist/esm/lib -> ../../../ or dist/cjs/lib -> ../../../\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\nconst packageRoot = path.resolve(__dirname, '../../..');\n\nexport interface McpServerConfig {\n command: string;\n args: string[];\n env?: Record<string, string>;\n}\n\nexport interface MCPConfiguration {\n mcpServers: Record<string, McpServerConfig>;\n}\n\n/**\n * Load available servers from resources/.mcp.json\n */\nexport function loadAvailableServers(): MCPConfiguration {\n const configPath = path.join(packageRoot, 'resources/.mcp.json');\n\n if (!fs.existsSync(configPath)) {\n throw new Error(`Server configuration not found: ${configPath}`);\n }\n\n const content = fs.readFileSync(configPath, 'utf-8');\n return JSON.parse(content) as MCPConfiguration;\n}\n\n/**\n * Get list of all available server names\n */\nexport function getAllServerNames(): string[] {\n const config = loadAvailableServers();\n return Object.keys(config.mcpServers);\n}\n\n/**\n * Parse comma-separated server list or \"all\"\n */\nexport function parseServerList(input: string): string[] {\n const allServers = getAllServerNames();\n\n if (input === 'all') {\n return allServers;\n }\n\n const requested = input.split(',').map((s) => s.trim());\n const invalid = requested.filter((s) => !allServers.includes(s));\n\n if (invalid.length > 0) {\n throw new Error(`Invalid server names: ${invalid.join(', ')}.\\nAvailable: ${allServers.join(', ')}`);\n }\n\n return requested;\n}\n\n/**\n * Get server configuration by name\n */\nexport function getServerConfig(serverName: string): McpServerConfig {\n const config = loadAvailableServers();\n const serverConfig = config.mcpServers[serverName];\n\n if (!serverConfig) {\n throw new Error(`Unknown server: ${serverName}.\\nAvailable: ${getAllServerNames().join(', ')}`);\n }\n\n return serverConfig;\n}\n"],"names":["getAllServerNames","getServerConfig","loadAvailableServers","parseServerList","__filename","fileURLToPath","__dirname","path","dirname","packageRoot","resolve","configPath","join","fs","existsSync","Error","content","readFileSync","JSON","parse","config","Object","keys","mcpServers","input","allServers","requested","split","map","s","trim","invalid","filter","includes","length","serverName","serverConfig"],"mappings":"AAAA;;CAEC;;;;;;;;;;;QAsCeA;eAAAA;;QA4BAC;eAAAA;;QA1CAC;eAAAA;;QAsBAC;eAAAA;;;0DA5CI;4DACE;mBACQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAE9B,2EAA2E;AAC3E,IAAMC,cAAaC,IAAAA,kBAAa,EAAC;AACjC,IAAMC,YAAYC,MAAKC,OAAO,CAACJ;AAC/B,IAAMK,cAAcF,MAAKG,OAAO,CAACJ,WAAW;AAerC,SAASJ;IACd,IAAMS,aAAaJ,MAAKK,IAAI,CAACH,aAAa;IAE1C,IAAI,CAACI,IAAGC,UAAU,CAACH,aAAa;QAC9B,MAAM,IAAII,MAAM,AAAC,mCAA6C,OAAXJ;IACrD;IAEA,IAAMK,UAAUH,IAAGI,YAAY,CAACN,YAAY;IAC5C,OAAOO,KAAKC,KAAK,CAACH;AACpB;AAKO,SAAShB;IACd,IAAMoB,SAASlB;IACf,OAAOmB,OAAOC,IAAI,CAACF,OAAOG,UAAU;AACtC;AAKO,SAASpB,gBAAgBqB,KAAa;IAC3C,IAAMC,aAAazB;IAEnB,IAAIwB,UAAU,OAAO;QACnB,OAAOC;IACT;IAEA,IAAMC,YAAYF,MAAMG,KAAK,CAAC,KAAKC,GAAG,CAAC,SAACC;eAAMA,EAAEC,IAAI;;IACpD,IAAMC,UAAUL,UAAUM,MAAM,CAAC,SAACH;eAAM,CAACJ,WAAWQ,QAAQ,CAACJ;;IAE7D,IAAIE,QAAQG,MAAM,GAAG,GAAG;QACtB,MAAM,IAAInB,MAAM,AAAC,yBAA2DU,OAAnCM,QAAQnB,IAAI,CAAC,OAAM,kBAAsC,OAAtBa,WAAWb,IAAI,CAAC;IAC9F;IAEA,OAAOc;AACT;AAKO,SAASzB,gBAAgBkC,UAAkB;IAChD,IAAMf,SAASlB;IACf,IAAMkC,eAAehB,OAAOG,UAAU,CAACY,WAAW;IAElD,IAAI,CAACC,cAAc;QACjB,MAAM,IAAIrB,MAAM,AAAC,mBAA6Cf,OAA3BmC,YAAW,kBAA+C,OAA/BnC,oBAAoBY,IAAI,CAAC;IACzF;IAEA,OAAOwB;AACT"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Validation result for servers configuration
3
+ */
4
+ export interface ValidationResult {
5
+ valid: boolean;
6
+ errors?: string[];
7
+ warnings?: string[];
8
+ }
9
+ /**
10
+ * Validate servers configuration against JSON Schema
11
+ *
12
+ * @param servers - Servers configuration object to validate (map of server names to configs)
13
+ * @returns ValidationResult with valid flag, errors, and warnings
14
+ */
15
+ export declare function validateServers(servers: unknown): ValidationResult;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Validation result for servers configuration
3
+ */
4
+ export interface ValidationResult {
5
+ valid: boolean;
6
+ errors?: string[];
7
+ warnings?: string[];
8
+ }
9
+ /**
10
+ * Validate servers configuration against JSON Schema
11
+ *
12
+ * @param servers - Servers configuration object to validate (map of server names to configs)
13
+ * @returns ValidationResult with valid flag, errors, and warnings
14
+ */
15
+ export declare function validateServers(servers: unknown): ValidationResult;