@mcp-ts/sdk 1.3.7 → 1.3.9

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 (61) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +398 -404
  3. package/dist/adapters/agui-middleware.js.map +1 -1
  4. package/dist/adapters/agui-middleware.mjs.map +1 -1
  5. package/dist/bin/mcp-ts.js +0 -0
  6. package/dist/bin/mcp-ts.js.map +1 -1
  7. package/dist/bin/mcp-ts.mjs +0 -0
  8. package/dist/bin/mcp-ts.mjs.map +1 -1
  9. package/dist/client/index.js.map +1 -1
  10. package/dist/client/index.mjs.map +1 -1
  11. package/dist/client/react.d.mts +2 -2
  12. package/dist/client/react.d.ts +2 -2
  13. package/dist/client/react.js +25 -2
  14. package/dist/client/react.js.map +1 -1
  15. package/dist/client/react.mjs +26 -3
  16. package/dist/client/react.mjs.map +1 -1
  17. package/dist/client/vue.js.map +1 -1
  18. package/dist/client/vue.mjs.map +1 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/index.mjs.map +1 -1
  21. package/dist/server/index.js.map +1 -1
  22. package/dist/server/index.mjs.map +1 -1
  23. package/dist/shared/index.js.map +1 -1
  24. package/dist/shared/index.mjs.map +1 -1
  25. package/package.json +185 -185
  26. package/src/adapters/agui-middleware.ts +382 -382
  27. package/src/bin/mcp-ts.ts +102 -102
  28. package/src/client/core/app-host.ts +417 -417
  29. package/src/client/core/sse-client.ts +371 -371
  30. package/src/client/core/types.ts +31 -31
  31. package/src/client/index.ts +27 -27
  32. package/src/client/react/index.ts +16 -16
  33. package/src/client/react/use-app-host.ts +73 -73
  34. package/src/client/react/use-mcp-apps.tsx +247 -214
  35. package/src/client/react/use-mcp.ts +641 -641
  36. package/src/client/vue/index.ts +10 -10
  37. package/src/client/vue/use-mcp.ts +617 -617
  38. package/src/index.ts +11 -11
  39. package/src/server/handlers/nextjs-handler.ts +204 -204
  40. package/src/server/handlers/sse-handler.ts +631 -631
  41. package/src/server/index.ts +57 -57
  42. package/src/server/mcp/multi-session-client.ts +228 -228
  43. package/src/server/mcp/oauth-client.ts +1188 -1188
  44. package/src/server/mcp/storage-oauth-provider.ts +272 -272
  45. package/src/server/storage/file-backend.ts +157 -157
  46. package/src/server/storage/index.ts +176 -176
  47. package/src/server/storage/memory-backend.ts +123 -123
  48. package/src/server/storage/redis-backend.ts +276 -276
  49. package/src/server/storage/redis.ts +160 -160
  50. package/src/server/storage/sqlite-backend.ts +182 -182
  51. package/src/server/storage/supabase-backend.ts +228 -228
  52. package/src/server/storage/types.ts +116 -116
  53. package/src/shared/constants.ts +29 -29
  54. package/src/shared/errors.ts +133 -133
  55. package/src/shared/event-routing.ts +28 -28
  56. package/src/shared/events.ts +180 -180
  57. package/src/shared/index.ts +75 -75
  58. package/src/shared/tool-utils.ts +61 -61
  59. package/src/shared/types.ts +282 -282
  60. package/src/shared/utils.ts +38 -38
  61. package/supabase/migrations/20260330195700_install_mcp_sessions.sql +84 -84
@@ -1,31 +1,31 @@
1
- import { SessionListResult } from '../../shared/types';
2
-
3
- /**
4
- * Abstraction layer for the AppHost's network communication.
5
- *
6
- * This interface decouples the `AppHost` from the concrete networking implementation (like `SSEClient`).
7
- * Implementation can be:
8
- * 1. `SSEClient`: Direct connection to MCP Server (Browser -> Server).
9
- * 2. `ProxyClient`: Connection via an intermediary API (Browser -> Next.js API -> Server).
10
- */
11
- export interface AppHostClient {
12
- /**
13
- * Check if the client is connected
14
- */
15
- isConnected(): boolean;
16
-
17
- /**
18
- * Get list of active sessions
19
- */
20
- getSessions(): Promise<SessionListResult>;
21
-
22
- /**
23
- * Call a tool on a specific session
24
- */
25
- callTool(sessionId: string, toolName: string, toolArgs: Record<string, unknown>): Promise<unknown>;
26
-
27
- /**
28
- * Read a resource from a specific session
29
- */
30
- readResource(sessionId: string, uri: string): Promise<unknown>;
31
- }
1
+ import { SessionListResult } from '../../shared/types';
2
+
3
+ /**
4
+ * Abstraction layer for the AppHost's network communication.
5
+ *
6
+ * This interface decouples the `AppHost` from the concrete networking implementation (like `SSEClient`).
7
+ * Implementation can be:
8
+ * 1. `SSEClient`: Direct connection to MCP Server (Browser -> Server).
9
+ * 2. `ProxyClient`: Connection via an intermediary API (Browser -> Next.js API -> Server).
10
+ */
11
+ export interface AppHostClient {
12
+ /**
13
+ * Check if the client is connected
14
+ */
15
+ isConnected(): boolean;
16
+
17
+ /**
18
+ * Get list of active sessions
19
+ */
20
+ getSessions(): Promise<SessionListResult>;
21
+
22
+ /**
23
+ * Call a tool on a specific session
24
+ */
25
+ callTool(sessionId: string, toolName: string, toolArgs: Record<string, unknown>): Promise<unknown>;
26
+
27
+ /**
28
+ * Read a resource from a specific session
29
+ */
30
+ readResource(sessionId: string, uri: string): Promise<unknown>;
31
+ }
@@ -1,27 +1,27 @@
1
- /**
2
- * MCP Redis Client Package
3
- * Browser/React client-side exports for MCP connection management
4
- */
5
-
6
- /** SSE client for real-time connections */
7
- export { SSEClient, type SSEClientOptions } from './core/sse-client';
8
- export { AppHost } from './core/app-host';
9
-
10
-
11
-
12
- /** Re-export shared types */
13
- export type {
14
- McpConnectionEvent,
15
- McpConnectionState,
16
- McpObservabilityEvent,
17
- Emitter,
18
- Disposable,
19
- Event,
20
- DisposableStore,
21
- } from '../shared/events';
22
-
23
- export type {
24
- ToolInfo,
25
- McpRpcRequest,
26
- McpRpcResponse,
27
- } from '../shared/types';
1
+ /**
2
+ * MCP Redis Client Package
3
+ * Browser/React client-side exports for MCP connection management
4
+ */
5
+
6
+ /** SSE client for real-time connections */
7
+ export { SSEClient, type SSEClientOptions } from './core/sse-client';
8
+ export { AppHost } from './core/app-host';
9
+
10
+
11
+
12
+ /** Re-export shared types */
13
+ export type {
14
+ McpConnectionEvent,
15
+ McpConnectionState,
16
+ McpObservabilityEvent,
17
+ Emitter,
18
+ Disposable,
19
+ Event,
20
+ DisposableStore,
21
+ } from '../shared/events';
22
+
23
+ export type {
24
+ ToolInfo,
25
+ McpRpcRequest,
26
+ McpRpcResponse,
27
+ } from '../shared/types';
@@ -1,16 +1,16 @@
1
- /**
2
- * MCP SDK - React Client
3
- * Simple React hooks for MCP app rendering
4
- */
5
-
6
- // Core MCP Hook
7
- export { useMcp, type UseMcpOptions, type McpClient, type McpConnection } from './use-mcp.js';
8
-
9
- // App Host (internal use)
10
- export { useAppHost } from './use-app-host.js';
11
-
12
- // Simplified MCP Apps Hook - the main API
13
- export { useMcpApps } from './use-mcp-apps.js';
14
-
15
- // Re-export shared types and client from main entry
16
- export * from '../index.js';
1
+ /**
2
+ * MCP SDK - React Client
3
+ * Simple React hooks for MCP app rendering
4
+ */
5
+
6
+ // Core MCP Hook
7
+ export { useMcp, type UseMcpOptions, type McpClient, type McpConnection } from './use-mcp.js';
8
+
9
+ // App Host (internal use)
10
+ export { useAppHost } from './use-app-host.js';
11
+
12
+ // Simplified MCP Apps Hook - the main API
13
+ export { useMcpApps } from './use-mcp-apps.js';
14
+
15
+ // Re-export shared types and client from main entry
16
+ export * from '../index.js';
@@ -1,73 +1,73 @@
1
- import { useEffect, useRef, useState, useCallback } from 'react';
2
- import type { SSEClient } from '../core/sse-client';
3
- import { AppHost } from '../core/app-host';
4
-
5
- /**
6
- * Hook to host an MCP App in a React component
7
- *
8
- * Optimized for instant loading:
9
- * - Creates AppHost synchronously
10
- * - Starts bridge connection immediately
11
- * - Returns host before connection completes (ready to call launch)
12
- *
13
- * @param client - Connected SSEClient instance
14
- * @param iframeRef - Reference to the iframe element
15
- * @param options - Optional configuration
16
- * @returns Object containing the AppHost instance (or null) and error state
17
- */
18
- export function useAppHost(
19
- client: SSEClient,
20
- iframeRef: React.RefObject<HTMLIFrameElement>,
21
- options?: {
22
- /** Callback when the App sends a message (e.g. to chat) */
23
- onMessage?: (params: { role: string; content: unknown }) => void;
24
- }
25
- ) {
26
- const [host, setHost] = useState<AppHost | null>(null);
27
- const [error, setError] = useState<Error | null>(null);
28
- const initializingRef = useRef(false);
29
-
30
- // Store latest callback in ref to avoid re-initializing AppHost on callback change
31
- const onMessageRef = useRef(options?.onMessage);
32
- useEffect(() => {
33
- onMessageRef.current = options?.onMessage;
34
- }, [options?.onMessage]);
35
-
36
- useEffect(() => {
37
- if (!client || !iframeRef.current || initializingRef.current) return;
38
-
39
- // Prevent double initialization in strict mode
40
- initializingRef.current = true;
41
-
42
- const initHost = async () => {
43
- try {
44
- // Initialize AppHost with security enforcement
45
- const appHost = new AppHost(client, iframeRef.current!);
46
-
47
- // Register message handler
48
- appHost.onAppMessage = (params) => {
49
- onMessageRef.current?.(params);
50
- };
51
-
52
- // Set host immediately so launch can be called
53
- // (launch will wait for bridge if needed)
54
- setHost(appHost);
55
-
56
- // Start bridge connection (this is fast, just sets up PostMessage)
57
- await appHost.start();
58
- } catch (err) {
59
- console.error('[useAppHost] Failed to initialize AppHost:', err);
60
- setError(err instanceof Error ? err : new Error(String(err)));
61
- }
62
- };
63
-
64
- initHost();
65
-
66
- return () => {
67
- initializingRef.current = false;
68
- setHost(null);
69
- };
70
- }, [client, iframeRef]);
71
-
72
- return { host, error };
73
- }
1
+ import { useEffect, useRef, useState, useCallback } from 'react';
2
+ import type { SSEClient } from '../core/sse-client';
3
+ import { AppHost } from '../core/app-host';
4
+
5
+ /**
6
+ * Hook to host an MCP App in a React component
7
+ *
8
+ * Optimized for instant loading:
9
+ * - Creates AppHost synchronously
10
+ * - Starts bridge connection immediately
11
+ * - Returns host before connection completes (ready to call launch)
12
+ *
13
+ * @param client - Connected SSEClient instance
14
+ * @param iframeRef - Reference to the iframe element
15
+ * @param options - Optional configuration
16
+ * @returns Object containing the AppHost instance (or null) and error state
17
+ */
18
+ export function useAppHost(
19
+ client: SSEClient,
20
+ iframeRef: React.RefObject<HTMLIFrameElement>,
21
+ options?: {
22
+ /** Callback when the App sends a message (e.g. to chat) */
23
+ onMessage?: (params: { role: string; content: unknown }) => void;
24
+ }
25
+ ) {
26
+ const [host, setHost] = useState<AppHost | null>(null);
27
+ const [error, setError] = useState<Error | null>(null);
28
+ const initializingRef = useRef(false);
29
+
30
+ // Store latest callback in ref to avoid re-initializing AppHost on callback change
31
+ const onMessageRef = useRef(options?.onMessage);
32
+ useEffect(() => {
33
+ onMessageRef.current = options?.onMessage;
34
+ }, [options?.onMessage]);
35
+
36
+ useEffect(() => {
37
+ if (!client || !iframeRef.current || initializingRef.current) return;
38
+
39
+ // Prevent double initialization in strict mode
40
+ initializingRef.current = true;
41
+
42
+ const initHost = async () => {
43
+ try {
44
+ // Initialize AppHost with security enforcement
45
+ const appHost = new AppHost(client, iframeRef.current!);
46
+
47
+ // Register message handler
48
+ appHost.onAppMessage = (params) => {
49
+ onMessageRef.current?.(params);
50
+ };
51
+
52
+ // Set host immediately so launch can be called
53
+ // (launch will wait for bridge if needed)
54
+ setHost(appHost);
55
+
56
+ // Start bridge connection (this is fast, just sets up PostMessage)
57
+ await appHost.start();
58
+ } catch (err) {
59
+ console.error('[useAppHost] Failed to initialize AppHost:', err);
60
+ setError(err instanceof Error ? err : new Error(String(err)));
61
+ }
62
+ };
63
+
64
+ initHost();
65
+
66
+ return () => {
67
+ initializingRef.current = false;
68
+ setHost(null);
69
+ };
70
+ }, [client, iframeRef]);
71
+
72
+ return { host, error };
73
+ }