@mcp-ts/sdk 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 (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +297 -0
  3. package/dist/adapters/agui-adapter.d.mts +119 -0
  4. package/dist/adapters/agui-adapter.d.ts +119 -0
  5. package/dist/adapters/agui-adapter.js +109 -0
  6. package/dist/adapters/agui-adapter.js.map +1 -0
  7. package/dist/adapters/agui-adapter.mjs +107 -0
  8. package/dist/adapters/agui-adapter.mjs.map +1 -0
  9. package/dist/adapters/agui-middleware.d.mts +171 -0
  10. package/dist/adapters/agui-middleware.d.ts +171 -0
  11. package/dist/adapters/agui-middleware.js +429 -0
  12. package/dist/adapters/agui-middleware.js.map +1 -0
  13. package/dist/adapters/agui-middleware.mjs +417 -0
  14. package/dist/adapters/agui-middleware.mjs.map +1 -0
  15. package/dist/adapters/ai-adapter.d.mts +38 -0
  16. package/dist/adapters/ai-adapter.d.ts +38 -0
  17. package/dist/adapters/ai-adapter.js +82 -0
  18. package/dist/adapters/ai-adapter.js.map +1 -0
  19. package/dist/adapters/ai-adapter.mjs +80 -0
  20. package/dist/adapters/ai-adapter.mjs.map +1 -0
  21. package/dist/adapters/langchain-adapter.d.mts +46 -0
  22. package/dist/adapters/langchain-adapter.d.ts +46 -0
  23. package/dist/adapters/langchain-adapter.js +102 -0
  24. package/dist/adapters/langchain-adapter.js.map +1 -0
  25. package/dist/adapters/langchain-adapter.mjs +100 -0
  26. package/dist/adapters/langchain-adapter.mjs.map +1 -0
  27. package/dist/adapters/mastra-adapter.d.mts +49 -0
  28. package/dist/adapters/mastra-adapter.d.ts +49 -0
  29. package/dist/adapters/mastra-adapter.js +95 -0
  30. package/dist/adapters/mastra-adapter.js.map +1 -0
  31. package/dist/adapters/mastra-adapter.mjs +93 -0
  32. package/dist/adapters/mastra-adapter.mjs.map +1 -0
  33. package/dist/client/index.d.mts +119 -0
  34. package/dist/client/index.d.ts +119 -0
  35. package/dist/client/index.js +225 -0
  36. package/dist/client/index.js.map +1 -0
  37. package/dist/client/index.mjs +223 -0
  38. package/dist/client/index.mjs.map +1 -0
  39. package/dist/client/react.d.mts +151 -0
  40. package/dist/client/react.d.ts +151 -0
  41. package/dist/client/react.js +492 -0
  42. package/dist/client/react.js.map +1 -0
  43. package/dist/client/react.mjs +489 -0
  44. package/dist/client/react.mjs.map +1 -0
  45. package/dist/client/vue.d.mts +157 -0
  46. package/dist/client/vue.d.ts +157 -0
  47. package/dist/client/vue.js +474 -0
  48. package/dist/client/vue.js.map +1 -0
  49. package/dist/client/vue.mjs +471 -0
  50. package/dist/client/vue.mjs.map +1 -0
  51. package/dist/events-BP6WyRNh.d.mts +110 -0
  52. package/dist/events-BP6WyRNh.d.ts +110 -0
  53. package/dist/index.d.mts +10 -0
  54. package/dist/index.d.ts +10 -0
  55. package/dist/index.js +2784 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/index.mjs +2723 -0
  58. package/dist/index.mjs.map +1 -0
  59. package/dist/multi-session-client-BOFgPypS.d.ts +389 -0
  60. package/dist/multi-session-client-DMF3ED2O.d.mts +389 -0
  61. package/dist/server/index.d.mts +269 -0
  62. package/dist/server/index.d.ts +269 -0
  63. package/dist/server/index.js +2444 -0
  64. package/dist/server/index.js.map +1 -0
  65. package/dist/server/index.mjs +2414 -0
  66. package/dist/server/index.mjs.map +1 -0
  67. package/dist/shared/index.d.mts +24 -0
  68. package/dist/shared/index.d.ts +24 -0
  69. package/dist/shared/index.js +223 -0
  70. package/dist/shared/index.js.map +1 -0
  71. package/dist/shared/index.mjs +190 -0
  72. package/dist/shared/index.mjs.map +1 -0
  73. package/dist/types-SbDlA2VX.d.mts +153 -0
  74. package/dist/types-SbDlA2VX.d.ts +153 -0
  75. package/dist/utils-0qmYrqoa.d.mts +92 -0
  76. package/dist/utils-0qmYrqoa.d.ts +92 -0
  77. package/package.json +165 -0
  78. package/src/adapters/agui-adapter.ts +210 -0
  79. package/src/adapters/agui-middleware.ts +512 -0
  80. package/src/adapters/ai-adapter.ts +115 -0
  81. package/src/adapters/langchain-adapter.ts +127 -0
  82. package/src/adapters/mastra-adapter.ts +126 -0
  83. package/src/client/core/sse-client.ts +340 -0
  84. package/src/client/index.ts +26 -0
  85. package/src/client/react/index.ts +10 -0
  86. package/src/client/react/useMcp.ts +558 -0
  87. package/src/client/vue/index.ts +10 -0
  88. package/src/client/vue/useMcp.ts +542 -0
  89. package/src/index.ts +11 -0
  90. package/src/server/handlers/nextjs-handler.ts +216 -0
  91. package/src/server/handlers/sse-handler.ts +699 -0
  92. package/src/server/index.ts +57 -0
  93. package/src/server/mcp/multi-session-client.ts +132 -0
  94. package/src/server/mcp/oauth-client.ts +1168 -0
  95. package/src/server/mcp/storage-oauth-provider.ts +239 -0
  96. package/src/server/storage/file-backend.ts +169 -0
  97. package/src/server/storage/index.ts +115 -0
  98. package/src/server/storage/memory-backend.ts +132 -0
  99. package/src/server/storage/redis-backend.ts +210 -0
  100. package/src/server/storage/redis.ts +160 -0
  101. package/src/server/storage/types.ts +109 -0
  102. package/src/shared/constants.ts +29 -0
  103. package/src/shared/errors.ts +133 -0
  104. package/src/shared/events.ts +166 -0
  105. package/src/shared/index.ts +70 -0
  106. package/src/shared/types.ts +274 -0
  107. package/src/shared/utils.ts +16 -0
@@ -0,0 +1,269 @@
1
+ export { M as MCPClient, a as MultiSessionClient, S as StorageOAuthClientProvider } from '../multi-session-client-BOFgPypS.js';
2
+ export { U as UnauthorizedError, s as sanitizeServerLabel } from '../utils-0qmYrqoa.js';
3
+ import { OAuthClientInformationMixed, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
4
+ export { OAuthClientInformation, OAuthClientInformationFull, OAuthClientMetadata, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
5
+ import { M as McpConnectionEvent, d as McpObservabilityEvent } from '../events-BP6WyRNh.js';
6
+ export { D as Disposable, E as Emitter, b as Event, c as McpConnectionState } from '../events-BP6WyRNh.js';
7
+ import { q as McpRpcResponse, p as McpRpcRequest } from '../types-SbDlA2VX.js';
8
+ export { a as CallToolRequest, b as CallToolResponse, f as ConnectRequest, g as ConnectResponse, m as ListToolsResponse, T as ToolInfo } from '../types-SbDlA2VX.js';
9
+ export { CallToolResult, ListToolsResult, Tool } from '@modelcontextprotocol/sdk/types.js';
10
+ import '@modelcontextprotocol/sdk/client/auth.js';
11
+
12
+ interface SessionData {
13
+ sessionId: string;
14
+ serverId?: string;
15
+ serverName?: string;
16
+ serverUrl: string;
17
+ transportType: 'sse' | 'streamable_http';
18
+ callbackUrl: string;
19
+ createdAt: number;
20
+ identity?: string;
21
+ headers?: Record<string, string>;
22
+ clientInformation?: OAuthClientInformationMixed;
23
+ tokens?: OAuthTokens;
24
+ codeVerifier?: string;
25
+ clientId?: string;
26
+ }
27
+ /**
28
+ * Interface for MCP Session Storage Backends
29
+ */
30
+ interface StorageBackend {
31
+ /**
32
+ * Optional initialization (e.g., database connection)
33
+ */
34
+ init?(): Promise<void>;
35
+ /**
36
+ * Generates a unique session ID
37
+ */
38
+ generateSessionId(): string;
39
+ /**
40
+ * Stores or updates a session
41
+ */
42
+ /**
43
+ * Creates a new session. Throws if session already exists.
44
+ * @param session - Session data to create
45
+ * @param ttl - Optional TTL in seconds (defaults to backend's default)
46
+ */
47
+ createSession(session: SessionData, ttl?: number): Promise<void>;
48
+ /**
49
+ * Updates an existing session with partial data. Throws if session does not exist.
50
+ * @param identity - User identity
51
+ * @param sessionId - Session identifier
52
+ * @param data - Partial session data to update
53
+ * @param ttl - Optional TTL in seconds (defaults to backend's default)
54
+ */
55
+ updateSession(identity: string, sessionId: string, data: Partial<SessionData>, ttl?: number): Promise<void>;
56
+ /**
57
+ * Retrieves a session
58
+ */
59
+ getSession(identity: string, sessionId: string): Promise<SessionData | null>;
60
+ /**
61
+ * Gets full session data for all of an identity's sessions
62
+ */
63
+ getIdentitySessionsData(identity: string): Promise<SessionData[]>;
64
+ /**
65
+ * Removes a session
66
+ */
67
+ removeSession(identity: string, sessionId: string): Promise<void>;
68
+ /**
69
+ * Gets all sessions IDs of an identity
70
+ */
71
+ getIdentityMcpSessions(identity: string): Promise<string[]>;
72
+ /**
73
+ * Gets all session IDs across all users (Admin)
74
+ */
75
+ getAllSessionIds(): Promise<string[]>;
76
+ /**
77
+ * Clears all sessions (Admin)
78
+ */
79
+ clearAll(): Promise<void>;
80
+ /**
81
+ * Clean up expired sessions
82
+ */
83
+ cleanupExpiredSessions(): Promise<void>;
84
+ /**
85
+ * Disconnect from storage backend
86
+ */
87
+ disconnect(): Promise<void>;
88
+ }
89
+
90
+ /**
91
+ * Global session store instance
92
+ * Uses lazy initialization with a Proxy to handle async setup transparently
93
+ */
94
+ declare const storage: StorageBackend;
95
+
96
+ /**
97
+ * SSE (Server-Sent Events) Handler for MCP Connections
98
+ * Provides real-time connection state updates to clients
99
+ * Based on Cloudflare's agents pattern but adapted for HTTP/SSE
100
+ */
101
+
102
+ interface ClientMetadata {
103
+ clientName?: string;
104
+ clientUri?: string;
105
+ logoUri?: string;
106
+ policyUri?: string;
107
+ }
108
+ interface SSEHandlerOptions {
109
+ /**
110
+ * User/Client identifier
111
+ */
112
+ identity: string;
113
+ /**
114
+ * Optional callback for authentication/authorization
115
+ */
116
+ onAuth?: (identity: string) => Promise<boolean>;
117
+ /**
118
+ * Heartbeat interval in ms (default: 30000)
119
+ */
120
+ heartbeatInterval?: number;
121
+ /**
122
+ * Static OAuth client metadata defaults (for all connections)
123
+ */
124
+ clientDefaults?: ClientMetadata;
125
+ /**
126
+ * Dynamic OAuth client metadata getter (per-request, useful for multi-tenant)
127
+ * Takes precedence over clientDefaults
128
+ */
129
+ getClientMetadata?: (request?: any) => ClientMetadata | Promise<ClientMetadata>;
130
+ }
131
+ /**
132
+ * SSE Connection Manager
133
+ * Handles a single SSE connection and manages MCP operations
134
+ */
135
+ declare class SSEConnectionManager {
136
+ private options;
137
+ private sendEvent;
138
+ private identity;
139
+ private clients;
140
+ private heartbeatTimer?;
141
+ private isActive;
142
+ constructor(options: SSEHandlerOptions, sendEvent: (event: McpConnectionEvent | McpObservabilityEvent | McpRpcResponse) => void);
143
+ /**
144
+ * Get resolved client metadata (dynamic > static > defaults)
145
+ */
146
+ private getResolvedClientMetadata;
147
+ /**
148
+ * Start heartbeat to keep connection alive
149
+ */
150
+ private startHeartbeat;
151
+ /**
152
+ * Handle incoming RPC requests
153
+ */
154
+ handleRequest(request: McpRpcRequest): Promise<void>;
155
+ /**
156
+ * Get all user sessions
157
+ */
158
+ private getSessions;
159
+ /**
160
+ * Connect to an MCP server
161
+ */
162
+ private connect;
163
+ /**
164
+ * Disconnect from an MCP server
165
+ */
166
+ private disconnect;
167
+ /**
168
+ * Helper to get or restore a client
169
+ */
170
+ private getOrCreateClient;
171
+ /**
172
+ * List tools from a session
173
+ */
174
+ private listTools;
175
+ /**
176
+ * Call a tool
177
+ */
178
+ private callTool;
179
+ /**
180
+ * Refresh/validate a session
181
+ */
182
+ private restoreSession;
183
+ /**
184
+ * Complete OAuth authorization
185
+ */
186
+ private finishAuth;
187
+ /**
188
+ * List prompts from a session
189
+ */
190
+ private listPrompts;
191
+ /**
192
+ * Get a specific prompt
193
+ */
194
+ private getPrompt;
195
+ /**
196
+ * List resources from a session
197
+ */
198
+ private listResources;
199
+ /**
200
+ * Read a specific resource
201
+ */
202
+ private readResource;
203
+ /**
204
+ * Emit connection event
205
+ */
206
+ private emitConnectionEvent;
207
+ /**
208
+ * Cleanup and close all connections
209
+ */
210
+ dispose(): void;
211
+ }
212
+ /**
213
+ * Create SSE endpoint handler
214
+ * Compatible with various Node.js frameworks
215
+ */
216
+ declare function createSSEHandler(options: SSEHandlerOptions): (req: any, res: any) => Promise<void>;
217
+
218
+ /**
219
+ * Next.js App Router Handler for MCP SSE
220
+ * Provides a clean, zero-boilerplate API for Next.js applications
221
+ */
222
+
223
+ interface NextMcpHandlerOptions {
224
+ /**
225
+ * Extract identity from request (default: from 'identity' query param)
226
+ */
227
+ getIdentity?: (request: Request) => string | null;
228
+ /**
229
+ * Extract auth token from request (default: from 'token' query param or Authorization header)
230
+ */
231
+ getAuthToken?: (request: Request) => string | null;
232
+ /**
233
+ * Authenticate user and verify access (optional)
234
+ * Return true if user is authenticated, false otherwise
235
+ */
236
+ authenticate?: (identity: string, token: string | null) => Promise<boolean> | boolean;
237
+ /**
238
+ * Heartbeat interval in milliseconds (default: 30000)
239
+ */
240
+ heartbeatInterval?: number;
241
+ /**
242
+ * Static OAuth client metadata defaults (for all connections)
243
+ * Use this for single-tenant applications with fixed branding
244
+ */
245
+ clientDefaults?: ClientMetadata;
246
+ /**
247
+ * Dynamic OAuth client metadata getter (per-request, useful for multi-tenant)
248
+ * Use this when you need different branding based on request (tenant, domain, etc.)
249
+ * Takes precedence over clientDefaults
250
+ */
251
+ getClientMetadata?: (request: Request) => ClientMetadata | Promise<ClientMetadata>;
252
+ }
253
+ /**
254
+ * Creates Next.js App Router handlers (GET and POST) for MCP SSE endpoint
255
+ *
256
+ * @example
257
+ * ```typescript
258
+ * // app/api/mcp/route.ts
259
+ * import { createNextMcpHandler } from '@mcp-ts/core/server';
260
+ *
261
+ * export const { GET, POST } = createNextMcpHandler();
262
+ * ```
263
+ */
264
+ declare function createNextMcpHandler(options?: NextMcpHandlerOptions): {
265
+ GET: (request: Request) => Promise<Response>;
266
+ POST: (request: Request) => Promise<Response>;
267
+ };
268
+
269
+ export { type ClientMetadata, McpConnectionEvent, McpObservabilityEvent, McpRpcRequest, McpRpcResponse, type NextMcpHandlerOptions, SSEConnectionManager, type SSEHandlerOptions, type StorageBackend, createNextMcpHandler, createSSEHandler, storage };