@mcp-use/client 0.0.0-bootstrap.0 → 2.0.0-beta.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 (121) hide show
  1. package/README.md +127 -4
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/auth/browser.d.ts +149 -0
  4. package/dist/auth/browser.d.ts.map +1 -0
  5. package/dist/auth/callback.d.ts +9 -0
  6. package/dist/auth/callback.d.ts.map +1 -0
  7. package/dist/auth/flow.d.ts +23 -0
  8. package/dist/auth/flow.d.ts.map +1 -0
  9. package/dist/auth/node.d.ts +100 -0
  10. package/dist/auth/node.d.ts.map +1 -0
  11. package/dist/auth/popup.d.ts +67 -0
  12. package/dist/auth/popup.d.ts.map +1 -0
  13. package/dist/auth/session-store.d.ts +114 -0
  14. package/dist/auth/session-store.d.ts.map +1 -0
  15. package/dist/auth/storage-file.d.ts +18 -0
  16. package/dist/auth/storage-file.d.ts.map +1 -0
  17. package/dist/auth/storage.d.ts +25 -0
  18. package/dist/auth/storage.d.ts.map +1 -0
  19. package/dist/auth/url.d.ts +17 -0
  20. package/dist/auth/url.d.ts.map +1 -0
  21. package/dist/code-mode/connector.d.ts +27 -0
  22. package/dist/code-mode/connector.d.ts.map +1 -0
  23. package/dist/code-mode/executor-e2b.d.ts +46 -0
  24. package/dist/code-mode/executor-e2b.d.ts.map +1 -0
  25. package/dist/code-mode/executor-vm.d.ts +39 -0
  26. package/dist/code-mode/executor-vm.d.ts.map +1 -0
  27. package/dist/code-mode/executor.d.ts +66 -0
  28. package/dist/code-mode/executor.d.ts.map +1 -0
  29. package/dist/core/base.d.ts +418 -0
  30. package/dist/core/base.d.ts.map +1 -0
  31. package/dist/core/browser.d.ts +20 -0
  32. package/dist/core/browser.d.ts.map +1 -0
  33. package/dist/core/config.d.ts +149 -0
  34. package/dist/core/config.d.ts.map +1 -0
  35. package/dist/core/node.d.ts +441 -0
  36. package/dist/core/node.d.ts.map +1 -0
  37. package/dist/core/session.d.ts +683 -0
  38. package/dist/core/session.d.ts.map +1 -0
  39. package/dist/index-browser.d.ts +25 -0
  40. package/dist/index-browser.d.ts.map +1 -0
  41. package/dist/index-browser.js +4150 -0
  42. package/dist/index-browser.js.map +1 -0
  43. package/dist/index.d.ts +23 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +5598 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/react/McpClientProvider.d.ts +242 -0
  48. package/dist/react/McpClientProvider.d.ts.map +1 -0
  49. package/dist/react/index.d.ts +33 -0
  50. package/dist/react/index.d.ts.map +1 -0
  51. package/dist/react/index.js +7922 -0
  52. package/dist/react/index.js.map +1 -0
  53. package/dist/react/rpc-logger.d.ts +42 -0
  54. package/dist/react/rpc-logger.d.ts.map +1 -0
  55. package/dist/react/storage.d.ts +51 -0
  56. package/dist/react/storage.d.ts.map +1 -0
  57. package/dist/react/types.d.ts +596 -0
  58. package/dist/react/types.d.ts.map +1 -0
  59. package/dist/react/useMcp-helpers.d.ts +99 -0
  60. package/dist/react/useMcp-helpers.d.ts.map +1 -0
  61. package/dist/react/useMcp-operations.d.ts +156 -0
  62. package/dist/react/useMcp-operations.d.ts.map +1 -0
  63. package/dist/react/useMcp.d.ts +48 -0
  64. package/dist/react/useMcp.d.ts.map +1 -0
  65. package/dist/react/useMcpServerQueues.d.ts +376 -0
  66. package/dist/react/useMcpServerQueues.d.ts.map +1 -0
  67. package/dist/react/view/ViewRenderer.d.ts +12 -0
  68. package/dist/react/view/ViewRenderer.d.ts.map +1 -0
  69. package/dist/react/view/ext-apps-bridge.d.ts +3 -0
  70. package/dist/react/view/ext-apps-bridge.d.ts.map +1 -0
  71. package/dist/react/view/parse-custom-props.d.ts +2 -0
  72. package/dist/react/view/parse-custom-props.d.ts.map +1 -0
  73. package/dist/react/view/resolve-view-resource.d.ts +12 -0
  74. package/dist/react/view/resolve-view-resource.d.ts.map +1 -0
  75. package/dist/react/view/sandbox-blob-url.d.ts +25 -0
  76. package/dist/react/view/sandbox-blob-url.d.ts.map +1 -0
  77. package/dist/react/view/types.d.ts +97 -0
  78. package/dist/react/view/types.d.ts.map +1 -0
  79. package/dist/react/view/use-display-mode.d.ts +18 -0
  80. package/dist/react/view/use-display-mode.d.ts.map +1 -0
  81. package/dist/react/view/view-detection.d.ts +4 -0
  82. package/dist/react/view/view-detection.d.ts.map +1 -0
  83. package/dist/telemetry/client-telemetry.d.ts +13 -0
  84. package/dist/telemetry/client-telemetry.d.ts.map +1 -0
  85. package/dist/telemetry/configure-browser.d.ts +2 -0
  86. package/dist/telemetry/configure-browser.d.ts.map +1 -0
  87. package/dist/telemetry/configure-node.d.ts +2 -0
  88. package/dist/telemetry/configure-node.d.ts.map +1 -0
  89. package/dist/telemetry/connector-telemetry.d.ts +8 -0
  90. package/dist/telemetry/connector-telemetry.d.ts.map +1 -0
  91. package/dist/telemetry/events.d.ts +91 -0
  92. package/dist/telemetry/events.d.ts.map +1 -0
  93. package/dist/telemetry/index.d.ts +3 -0
  94. package/dist/telemetry/index.d.ts.map +1 -0
  95. package/dist/telemetry/tel-fetch.d.ts +25 -0
  96. package/dist/telemetry/tel-fetch.d.ts.map +1 -0
  97. package/dist/telemetry/telemetry-browser.d.ts +6 -0
  98. package/dist/telemetry/telemetry-browser.d.ts.map +1 -0
  99. package/dist/telemetry/telemetry-node.d.ts +8 -0
  100. package/dist/telemetry/telemetry-node.d.ts.map +1 -0
  101. package/dist/telemetry/telemetry.d.ts +79 -0
  102. package/dist/telemetry/telemetry.d.ts.map +1 -0
  103. package/dist/transport/base.d.ts +505 -0
  104. package/dist/transport/base.d.ts.map +1 -0
  105. package/dist/transport/connection-manager.d.ts +55 -0
  106. package/dist/transport/connection-manager.d.ts.map +1 -0
  107. package/dist/transport/http.d.ts +74 -0
  108. package/dist/transport/http.d.ts.map +1 -0
  109. package/dist/transport/stdio.d.ts +48 -0
  110. package/dist/transport/stdio.d.ts.map +1 -0
  111. package/dist/utils/elicitation.d.ts +52 -0
  112. package/dist/utils/elicitation.d.ts.map +1 -0
  113. package/dist/utils/favicon.d.ts +6 -0
  114. package/dist/utils/favicon.d.ts.map +1 -0
  115. package/dist/utils/json-schema-validator.d.ts +13 -0
  116. package/dist/utils/json-schema-validator.d.ts.map +1 -0
  117. package/dist/utils/logging.d.ts +32 -0
  118. package/dist/utils/logging.d.ts.map +1 -0
  119. package/dist/utils/version.d.ts +3 -0
  120. package/dist/utils/version.d.ts.map +1 -0
  121. package/package.json +77 -8
@@ -0,0 +1,505 @@
1
+ import type { CallToolResult, Client, ClientOptions, CompleteRequestParams, CompleteResult, ElicitRequestFormParams, ElicitRequestURLParams, ElicitResult, AuthProvider, Notification, OAuthClientProvider, ProtocolEra, RequestOptions, Root, Tool } from "@modelcontextprotocol/client";
2
+ import type { SamplingCreateMessageParams, SamplingCreateMessageResult } from "../core/config.js";
3
+ import type { ConnectionManager } from "./connection-manager.js";
4
+ import type { ConnectorInitEventData } from "../telemetry/events.js";
5
+ import type { MCPServerInfo } from "../core/session.js";
6
+ /**
7
+ * Handler function for server notifications
8
+ */
9
+ export type NotificationHandler = (notification: Notification) => void | Promise<void>;
10
+ export interface ConnectorInitOptions {
11
+ /**
12
+ * Options forwarded to the underlying MCP `Client` instance.
13
+ *
14
+ * By default, all connectors (HTTP and stdio) use `DialectJsonSchemaValidator`
15
+ * to support common `$schema` dialects (draft-04, draft-07, 2019-09, 2020-12)
16
+ * for cross-version compatibility with v1-era servers. Override with
17
+ * `clientOptions.jsonSchemaValidator` if stricter validation is needed.
18
+ */
19
+ clientOptions?: ClientOptions;
20
+ /**
21
+ * Arbitrary request options (timeouts, cancellation, etc.) used by helper
22
+ * methods when they issue SDK requests. Can be overridden per‑call.
23
+ */
24
+ defaultRequestOptions?: RequestOptions;
25
+ /**
26
+ * OAuth client provider for automatic authentication
27
+ */
28
+ authProvider?: AuthProvider | OAuthClientProvider;
29
+ /**
30
+ * Optional callback to wrap the transport before passing it to the Client.
31
+ * Useful for logging, monitoring, or other transport-level interceptors.
32
+ */
33
+ wrapTransport?: (transport: any, serverId: string) => any;
34
+ /**
35
+ * Initial roots to provide to the server.
36
+ * Roots allow the server to know which directories/files the client has access to.
37
+ */
38
+ roots?: Root[];
39
+ /**
40
+ * Optional callback function to handle sampling requests from servers.
41
+ * When provided, the client will declare sampling capability and handle
42
+ * `sampling/createMessage` requests by calling this callback.
43
+ *
44
+ * @deprecated Sampling is deprecated by the 2026 protocol. Retained for v1
45
+ * push requests and v2 multi-round-trip compatibility.
46
+ */
47
+ onSampling?: (params: SamplingCreateMessageParams) => Promise<SamplingCreateMessageResult>;
48
+ /**
49
+ * Optional callback function to handle elicitation requests from servers.
50
+ * When provided, the client will declare elicitation capability and handle
51
+ * `elicitation/create` requests by calling this callback.
52
+ *
53
+ * Elicitation allows servers to request additional information from users:
54
+ * - Form mode: Collect structured data with JSON schema validation
55
+ * - URL mode: Direct users to external URLs for sensitive interactions
56
+ */
57
+ onElicitation?: (params: ElicitRequestFormParams | ElicitRequestURLParams) => Promise<ElicitResult>;
58
+ /**
59
+ * Optional callback for server notifications.
60
+ * When provided, registered as initial notification handler.
61
+ */
62
+ onNotification?: NotificationHandler;
63
+ /**
64
+ * Reconnection options for streamable HTTP transport.
65
+ * Controls retry behavior of the underlying `StreamableHTTPClientTransport`.
66
+ */
67
+ reconnectionOptions?: {
68
+ maxReconnectionDelay?: number;
69
+ initialReconnectionDelay?: number;
70
+ reconnectionDelayGrowFactor?: number;
71
+ maxRetries?: number;
72
+ };
73
+ }
74
+ /**
75
+ * Base class for MCP connectors.
76
+ */
77
+ export declare abstract class BaseConnector {
78
+ protected client: Client | null;
79
+ protected connectionManager: ConnectionManager<any> | null;
80
+ protected toolsCache: Tool[] | null;
81
+ protected capabilitiesCache: Record<string, unknown> | null;
82
+ protected serverInfoCache: MCPServerInfo | null;
83
+ protected connected: boolean;
84
+ protected readonly opts: ConnectorInitOptions;
85
+ protected notificationHandlers: NotificationHandler[];
86
+ protected rootsCache: Root[];
87
+ private activeProgressHandlers;
88
+ constructor(opts?: ConnectorInitOptions);
89
+ /**
90
+ * Track connector initialization event
91
+ * Should be called by subclasses after successful connection
92
+ */
93
+ protected trackConnectorInit(data: Omit<ConnectorInitEventData, "connectorType">): void;
94
+ /**
95
+ * Register a handler for server notifications
96
+ *
97
+ * @param handler - Function to call when a notification is received
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * connector.onNotification((notification) => {
102
+ * console.log(`Received: ${notification.method}`, notification.params);
103
+ * });
104
+ * ```
105
+ */
106
+ onNotification(handler: NotificationHandler): void;
107
+ /** Forward a normalized notification to every registered consumer. */
108
+ protected forwardNotification(notification: Notification): Promise<void>;
109
+ /** Handle SDK list-change callbacks identically on v1 and v2 connections. */
110
+ protected handleListChanged(method: "notifications/tools/list_changed" | "notifications/resources/list_changed" | "notifications/prompts/list_changed", error: Error | null, tools?: Tool[] | null): Promise<void>;
111
+ /**
112
+ * Internal: wire notification handlers to the SDK client
113
+ * Includes automatic handling for list_changed notifications per MCP spec
114
+ */
115
+ protected setupNotificationHandler(): void;
116
+ /**
117
+ * Forward v2 MRTR progress whose retry request IDs are not associated with
118
+ * the original call callback by the current SDK beta.
119
+ *
120
+ * ponytail: fallback is enabled only when exactly one progress-aware call is
121
+ * active; remove it when the upstream SDK propagates handlers to MRTR rounds.
122
+ */
123
+ protected setupRoundProgressForwarding(): void;
124
+ /** Forward progress parsed from a transport stream to the active call. */
125
+ protected forwardRoundProgress(params: unknown): void;
126
+ /**
127
+ * Auto-refresh tools cache when server sends tools/list_changed notification
128
+ */
129
+ protected refreshToolsCache(): Promise<void>;
130
+ /**
131
+ * Called when server sends resources/list_changed notification
132
+ * Resources aren't cached by default, but we log for user awareness
133
+ */
134
+ protected onResourcesListChanged(): Promise<void>;
135
+ /**
136
+ * Called when server sends prompts/list_changed notification
137
+ * Prompts aren't cached by default, but we log for user awareness
138
+ */
139
+ protected onPromptsListChanged(): Promise<void>;
140
+ /**
141
+ * Set roots and notify the server.
142
+ * Roots represent directories or files that the client has access to.
143
+ *
144
+ * @param roots - Array of Root objects with `uri` (must start with "file://") and optional `name`
145
+ *
146
+ * @deprecated Roots are retained only for v1 compatibility.
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * await connector.setRoots([
151
+ * { uri: "file:///home/user/project", name: "My Project" },
152
+ * { uri: "file:///home/user/data" }
153
+ * ]);
154
+ * ```
155
+ */
156
+ setRoots(roots: Root[]): Promise<void>;
157
+ /**
158
+ * Get the current roots.
159
+ */
160
+ getRoots(): Root[];
161
+ /**
162
+ * Internal: set up roots/list request handler.
163
+ * Must be registered after Client construction and before connect() so the
164
+ * handler is available during initialize / reverse RPC for the full session.
165
+ */
166
+ protected setupRootsHandler(): void;
167
+ /**
168
+ * Internal: set up sampling/createMessage request handler.
169
+ * Must be registered after Client construction and before connect().
170
+ */
171
+ protected setupSamplingHandler(): void;
172
+ /**
173
+ * Internal: set up elicitation/create request handler.
174
+ * Must be registered after Client construction and before connect().
175
+ */
176
+ protected setupElicitationHandler(): void;
177
+ /** Establish the connection and create the SDK client. */
178
+ abstract connect(): Promise<void>;
179
+ /** Get the identifier for the connector. */
180
+ abstract get publicIdentifier(): Record<string, string>;
181
+ /** Disconnect and release resources. */
182
+ disconnect(): Promise<void>;
183
+ /** Check if the client is connected */
184
+ get isClientConnected(): boolean;
185
+ /**
186
+ * Initialise the MCP session **after** `connect()` has succeeded.
187
+ *
188
+ * In the SDK, `Client.connect(transport)` automatically performs the
189
+ * protocol‑level `initialize` handshake, so we only need to cache the list of
190
+ * tools and expose some server info.
191
+ */
192
+ initialize(defaultRequestOptions?: RequestOptions): Promise<ReturnType<Client["getServerCapabilities"]>>;
193
+ /** Lazily expose the cached tools list. */
194
+ get tools(): Tool[];
195
+ /** Expose cached server capabilities. */
196
+ get serverCapabilities(): Record<string, unknown>;
197
+ /** Expose cached server info. */
198
+ get serverInfo(): MCPServerInfo | null;
199
+ /** Instructions supplied by the connected server, if any. */
200
+ get instructions(): string | undefined;
201
+ /**
202
+ * The negotiated protocol era for the active connection.
203
+ * - `"legacy"` — 2025-era server, sessionful `initialize` handshake.
204
+ * - `"modern"` — 2026-era server, stateless per-request.
205
+ * `undefined` before the connection has negotiated.
206
+ */
207
+ get protocolEra(): ProtocolEra | undefined;
208
+ /** The protocol version string negotiated for the active connection. */
209
+ get negotiatedProtocolVersion(): string | undefined;
210
+ /** Call a tool on the server. */
211
+ callTool(name: string, args: Record<string, any>, options?: RequestOptions): Promise<CallToolResult>;
212
+ /**
213
+ * List all available tools from the MCP server.
214
+ * This method fetches fresh tools from the server, unlike the `tools` getter which returns cached tools.
215
+ *
216
+ * @param options - Optional request options
217
+ * @returns Array of available tools
218
+ */
219
+ listTools(options?: RequestOptions): Promise<Tool[]>;
220
+ /**
221
+ * List resources from the server with optional pagination
222
+ *
223
+ * @param cursor - Optional cursor for pagination
224
+ * @param options - Request options
225
+ * @returns Resource list with optional nextCursor for pagination
226
+ */
227
+ listResources(cursor?: string, options?: RequestOptions): Promise<{
228
+ [x: string]: unknown;
229
+ resources: {
230
+ uri: string;
231
+ name: string;
232
+ description?: string | undefined;
233
+ mimeType?: string | undefined;
234
+ size?: number | undefined;
235
+ annotations?: {
236
+ audience?: ("user" | "assistant")[] | undefined;
237
+ priority?: number | undefined;
238
+ lastModified?: string | undefined;
239
+ } | undefined;
240
+ _meta?: {
241
+ [x: string]: unknown;
242
+ } | undefined;
243
+ icons?: {
244
+ src: string;
245
+ mimeType?: string | undefined;
246
+ sizes?: string[] | undefined;
247
+ theme?: "light" | "dark" | undefined;
248
+ }[] | undefined;
249
+ title?: string | undefined;
250
+ }[];
251
+ _meta?: {
252
+ [x: string]: unknown;
253
+ progressToken?: string | number | undefined;
254
+ "io.modelcontextprotocol/related-task"?: {
255
+ taskId: string;
256
+ } | undefined;
257
+ } | undefined;
258
+ nextCursor?: string | undefined;
259
+ }>;
260
+ /**
261
+ * List all resources from the server, automatically handling pagination
262
+ *
263
+ * @param options - Request options
264
+ * @returns Complete list of all resources
265
+ */
266
+ listAllResources(options?: RequestOptions): Promise<{
267
+ resources: any[];
268
+ }>;
269
+ /**
270
+ * List resource templates from the server
271
+ *
272
+ * @param options - Request options
273
+ * @returns List of available resource templates
274
+ */
275
+ listResourceTemplates(options?: RequestOptions): Promise<{
276
+ [x: string]: unknown;
277
+ resourceTemplates: {
278
+ uriTemplate: string;
279
+ name: string;
280
+ description?: string | undefined;
281
+ mimeType?: string | undefined;
282
+ annotations?: {
283
+ audience?: ("user" | "assistant")[] | undefined;
284
+ priority?: number | undefined;
285
+ lastModified?: string | undefined;
286
+ } | undefined;
287
+ _meta?: {
288
+ [x: string]: unknown;
289
+ } | undefined;
290
+ icons?: {
291
+ src: string;
292
+ mimeType?: string | undefined;
293
+ sizes?: string[] | undefined;
294
+ theme?: "light" | "dark" | undefined;
295
+ }[] | undefined;
296
+ title?: string | undefined;
297
+ }[];
298
+ _meta?: {
299
+ [x: string]: unknown;
300
+ progressToken?: string | number | undefined;
301
+ "io.modelcontextprotocol/related-task"?: {
302
+ taskId: string;
303
+ } | undefined;
304
+ } | undefined;
305
+ nextCursor?: string | undefined;
306
+ }>;
307
+ /**
308
+ * Request completion suggestions for a prompt or resource template argument
309
+ *
310
+ * @param params - Completion request parameters
311
+ * @param options - Request options
312
+ * @returns Completion suggestions from the server
313
+ */
314
+ complete(params: CompleteRequestParams, options?: RequestOptions): Promise<CompleteResult>;
315
+ /** Read a resource by URI. */
316
+ readResource(uri: string, options?: RequestOptions): Promise<{
317
+ [x: string]: unknown;
318
+ contents: ({
319
+ uri: string;
320
+ text: string;
321
+ mimeType?: string | undefined;
322
+ _meta?: {
323
+ [x: string]: unknown;
324
+ } | undefined;
325
+ } | {
326
+ uri: string;
327
+ blob: string;
328
+ mimeType?: string | undefined;
329
+ _meta?: {
330
+ [x: string]: unknown;
331
+ } | undefined;
332
+ })[];
333
+ _meta?: {
334
+ [x: string]: unknown;
335
+ progressToken?: string | number | undefined;
336
+ "io.modelcontextprotocol/related-task"?: {
337
+ taskId: string;
338
+ } | undefined;
339
+ } | undefined;
340
+ }>;
341
+ /**
342
+ * Subscribe to resource updates
343
+ *
344
+ * @param uri - URI of the resource to subscribe to
345
+ * @param options - Request options
346
+ */
347
+ subscribeToResource(uri: string, options?: RequestOptions): Promise<{
348
+ _meta?: {
349
+ [x: string]: unknown;
350
+ progressToken?: string | number | undefined;
351
+ "io.modelcontextprotocol/related-task"?: {
352
+ taskId: string;
353
+ } | undefined;
354
+ } | undefined;
355
+ }>;
356
+ /**
357
+ * Unsubscribe from resource updates
358
+ *
359
+ * @param uri - URI of the resource to unsubscribe from
360
+ * @param options - Request options
361
+ */
362
+ unsubscribeFromResource(uri: string, options?: RequestOptions): Promise<{
363
+ _meta?: {
364
+ [x: string]: unknown;
365
+ progressToken?: string | number | undefined;
366
+ "io.modelcontextprotocol/related-task"?: {
367
+ taskId: string;
368
+ } | undefined;
369
+ } | undefined;
370
+ }>;
371
+ listPrompts(): Promise<{
372
+ [x: string]: unknown;
373
+ prompts: {
374
+ name: string;
375
+ description?: string | undefined;
376
+ arguments?: {
377
+ name: string;
378
+ description?: string | undefined;
379
+ required?: boolean | undefined;
380
+ }[] | undefined;
381
+ _meta?: {
382
+ [x: string]: unknown;
383
+ } | undefined;
384
+ icons?: {
385
+ src: string;
386
+ mimeType?: string | undefined;
387
+ sizes?: string[] | undefined;
388
+ theme?: "light" | "dark" | undefined;
389
+ }[] | undefined;
390
+ title?: string | undefined;
391
+ }[];
392
+ _meta?: {
393
+ [x: string]: unknown;
394
+ progressToken?: string | number | undefined;
395
+ "io.modelcontextprotocol/related-task"?: {
396
+ taskId: string;
397
+ } | undefined;
398
+ } | undefined;
399
+ nextCursor?: string | undefined;
400
+ }>;
401
+ getPrompt(name: string, args: Record<string, any>): Promise<{
402
+ [x: string]: unknown;
403
+ messages: {
404
+ role: "user" | "assistant";
405
+ content: {
406
+ type: "text";
407
+ text: string;
408
+ annotations?: {
409
+ audience?: ("user" | "assistant")[] | undefined;
410
+ priority?: number | undefined;
411
+ lastModified?: string | undefined;
412
+ } | undefined;
413
+ _meta?: {
414
+ [x: string]: unknown;
415
+ } | undefined;
416
+ } | {
417
+ type: "image";
418
+ data: string;
419
+ mimeType: string;
420
+ annotations?: {
421
+ audience?: ("user" | "assistant")[] | undefined;
422
+ priority?: number | undefined;
423
+ lastModified?: string | undefined;
424
+ } | undefined;
425
+ _meta?: {
426
+ [x: string]: unknown;
427
+ } | undefined;
428
+ } | {
429
+ type: "audio";
430
+ data: string;
431
+ mimeType: string;
432
+ annotations?: {
433
+ audience?: ("user" | "assistant")[] | undefined;
434
+ priority?: number | undefined;
435
+ lastModified?: string | undefined;
436
+ } | undefined;
437
+ _meta?: {
438
+ [x: string]: unknown;
439
+ } | undefined;
440
+ } | {
441
+ uri: string;
442
+ name: string;
443
+ type: "resource_link";
444
+ description?: string | undefined;
445
+ mimeType?: string | undefined;
446
+ size?: number | undefined;
447
+ annotations?: {
448
+ audience?: ("user" | "assistant")[] | undefined;
449
+ priority?: number | undefined;
450
+ lastModified?: string | undefined;
451
+ } | undefined;
452
+ _meta?: {
453
+ [x: string]: unknown;
454
+ } | undefined;
455
+ icons?: {
456
+ src: string;
457
+ mimeType?: string | undefined;
458
+ sizes?: string[] | undefined;
459
+ theme?: "light" | "dark" | undefined;
460
+ }[] | undefined;
461
+ title?: string | undefined;
462
+ } | {
463
+ type: "resource";
464
+ resource: {
465
+ uri: string;
466
+ text: string;
467
+ mimeType?: string | undefined;
468
+ _meta?: {
469
+ [x: string]: unknown;
470
+ } | undefined;
471
+ } | {
472
+ uri: string;
473
+ blob: string;
474
+ mimeType?: string | undefined;
475
+ _meta?: {
476
+ [x: string]: unknown;
477
+ } | undefined;
478
+ };
479
+ annotations?: {
480
+ audience?: ("user" | "assistant")[] | undefined;
481
+ priority?: number | undefined;
482
+ lastModified?: string | undefined;
483
+ } | undefined;
484
+ _meta?: {
485
+ [x: string]: unknown;
486
+ } | undefined;
487
+ };
488
+ }[];
489
+ _meta?: {
490
+ [x: string]: unknown;
491
+ progressToken?: string | number | undefined;
492
+ "io.modelcontextprotocol/related-task"?: {
493
+ taskId: string;
494
+ } | undefined;
495
+ } | undefined;
496
+ description?: string | undefined;
497
+ }>;
498
+ /** Send a raw request through the client. */
499
+ request(method: string, params?: Record<string, any> | null, options?: RequestOptions): Promise<unknown>;
500
+ /**
501
+ * Helper to tear down the client & connection manager safely.
502
+ */
503
+ protected cleanupResources(): Promise<void>;
504
+ }
505
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/transport/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ export declare abstract class ConnectionManager<T = any> {
2
+ private _readyPromise;
3
+ private _readyResolver;
4
+ private _donePromise;
5
+ private _doneResolver;
6
+ private _exception;
7
+ private _connection;
8
+ private _task;
9
+ private _abortController;
10
+ constructor();
11
+ /**
12
+ * Establish the connection.
13
+ *
14
+ * This method should be implemented by subclasses to establish the specific
15
+ * type of connection needed.
16
+ *
17
+ * @returns The established connection.
18
+ * @throws If the connection cannot be established.
19
+ */
20
+ protected abstract establishConnection(): Promise<T>;
21
+ /**
22
+ * Close the connection.
23
+ *
24
+ * This method should be implemented by subclasses to close the specific type
25
+ * of connection.
26
+ *
27
+ * @param connection The connection to close.
28
+ */
29
+ protected abstract closeConnection(connection: T): Promise<void>;
30
+ /**
31
+ * Start the connection manager and establish a connection.
32
+ *
33
+ * @returns The established connection.
34
+ * @throws If the connection cannot be established.
35
+ */
36
+ start(): Promise<T>;
37
+ /**
38
+ * Stop the connection manager and close the connection.
39
+ */
40
+ stop(): Promise<void>;
41
+ /**
42
+ * Reset all internal state.
43
+ */
44
+ private reset;
45
+ /**
46
+ * The background task responsible for establishing and maintaining the
47
+ * connection until it is cancelled.
48
+ */
49
+ private connectionTask;
50
+ /**
51
+ * Helper that returns a promise which resolves when the abort signal fires.
52
+ */
53
+ private waitForAbort;
54
+ }
55
+ //# sourceMappingURL=connection-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../src/transport/connection-manager.ts"],"names":[],"mappings":"AAEA,8BAAsB,iBAAiB,CAAC,CAAC,GAAG,GAAG;IAC7C,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,cAAc,CAAc;IAEpC,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,aAAa,CAAc;IAEnC,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,gBAAgB,CAAgC;;IAMxD;;;;;;;;OAQG;IACH,SAAS,CAAC,QAAQ,CAAC,mBAAmB,IAAI,OAAO,CAAC,CAAC,CAAC;IAEpD;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAEhE;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC;IAwBzB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB3B;;OAEG;IACH,OAAO,CAAC,KAAK;IASb;;;OAGG;YACW,cAAc;IAqC5B;;OAEG;YACW,YAAY;CAqB3B"}
@@ -0,0 +1,74 @@
1
+ import { type VersionNegotiationMode } from "@modelcontextprotocol/client";
2
+ import type { ConnectorInitOptions } from "./base.js";
3
+ import { BaseConnector } from "./base.js";
4
+ export type ClientInfo = {
5
+ name: string;
6
+ title?: string;
7
+ version: string;
8
+ description?: string;
9
+ icons?: Array<{
10
+ src: string;
11
+ mimeType?: string;
12
+ sizes?: string[];
13
+ }>;
14
+ websiteUrl?: string;
15
+ };
16
+ interface HttpConnectorOptions extends ConnectorInitOptions {
17
+ authToken?: string;
18
+ fetch?: typeof fetch;
19
+ headers?: Record<string, string>;
20
+ timeout?: number;
21
+ clientInfo?: ClientInfo;
22
+ /**
23
+ * Protocol version negotiation mode passed to the SDK `Client`.
24
+ * - `"legacy"` (default): classic 2025 `initialize` handshake, no probe —
25
+ * matches the SDK's own default. Still connects to both v1 and v2 servers
26
+ * (v2 servers serve 2025-era traffic).
27
+ * - `"auto"`: probe with `server/discover`, falling back to the 2025
28
+ * handshake against legacy servers. Opt-in: the probe performs OAuth
29
+ * discovery on auth-required servers and can fail on servers whose
30
+ * authorization-server issuer differs from the server URL (RFC 8414 §3.3),
31
+ * which would otherwise mask the normal 401 → auth flow.
32
+ * - `{ pin: "2026-07-28" }`: modern era only, no fallback.
33
+ */
34
+ protocolNegotiation?: VersionNegotiationMode;
35
+ gatewayUrl?: string;
36
+ serverId?: string;
37
+ reconnectionOptions?: {
38
+ maxReconnectionDelay?: number;
39
+ initialReconnectionDelay?: number;
40
+ reconnectionDelayGrowFactor?: number;
41
+ maxRetries?: number;
42
+ };
43
+ }
44
+ export declare class HttpConnector extends BaseConnector {
45
+ private readonly baseUrl;
46
+ private readonly headers;
47
+ private readonly timeout;
48
+ private readonly customFetch?;
49
+ private readonly clientInfo;
50
+ private readonly protocolNegotiation;
51
+ private readonly gatewayUrl?;
52
+ private readonly serverId?;
53
+ private readonly reconnectionOptions?;
54
+ private transportType;
55
+ private streamableTransport;
56
+ constructor(baseUrl: string, opts?: HttpConnectorOptions);
57
+ private buildClientOptions;
58
+ private unwrapStreamableError;
59
+ private classifyStreamableHttpFailure;
60
+ /** Establish connection to the MCP implementation via streamable HTTP. */
61
+ connect(): Promise<void>;
62
+ /**
63
+ * Tee an SSE response so v2 MRTR progress can be correlated even when the
64
+ * upstream SDK does not carry the original callback to retry request IDs.
65
+ */
66
+ private observeSseProgress;
67
+ private connectWithStreamableHttp;
68
+ get publicIdentifier(): Record<string, string>;
69
+ /** Get the active transport type (`streamable-http` once connected). */
70
+ getTransportType(): "streamable-http" | null;
71
+ protected cleanupResources(): Promise<void>;
72
+ }
73
+ export {};
74
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AAGtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAsB1C,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC,CAAC;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,UAAU,oBAAqB,SAAQ,oBAAoB;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;;;;;;;;;;OAWG;IACH,mBAAmB,CAAC,EAAE,sBAAsB,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE;QACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,2BAA2B,CAAC,EAAE,MAAM,CAAC;QACrC,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAmDD,qBAAa,aAAc,SAAQ,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAyB;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAA8C;IACnF,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,mBAAmB,CAA8C;gBAE7D,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB;IAmC5D,OAAO,CAAC,kBAAkB;IAqD1B,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,6BAA6B;IA0DrC,0EAA0E;IACpE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC9B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;YAmDZ,yBAAyB;IAuNvC,IAAI,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAO7C;IAED,wEAAwE;IACxE,gBAAgB,IAAI,iBAAiB,GAAG,IAAI;cAQ5B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;CA8BlD"}