@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.
- package/LICENSE +21 -0
- package/README.md +297 -0
- package/dist/adapters/agui-adapter.d.mts +119 -0
- package/dist/adapters/agui-adapter.d.ts +119 -0
- package/dist/adapters/agui-adapter.js +109 -0
- package/dist/adapters/agui-adapter.js.map +1 -0
- package/dist/adapters/agui-adapter.mjs +107 -0
- package/dist/adapters/agui-adapter.mjs.map +1 -0
- package/dist/adapters/agui-middleware.d.mts +171 -0
- package/dist/adapters/agui-middleware.d.ts +171 -0
- package/dist/adapters/agui-middleware.js +429 -0
- package/dist/adapters/agui-middleware.js.map +1 -0
- package/dist/adapters/agui-middleware.mjs +417 -0
- package/dist/adapters/agui-middleware.mjs.map +1 -0
- package/dist/adapters/ai-adapter.d.mts +38 -0
- package/dist/adapters/ai-adapter.d.ts +38 -0
- package/dist/adapters/ai-adapter.js +82 -0
- package/dist/adapters/ai-adapter.js.map +1 -0
- package/dist/adapters/ai-adapter.mjs +80 -0
- package/dist/adapters/ai-adapter.mjs.map +1 -0
- package/dist/adapters/langchain-adapter.d.mts +46 -0
- package/dist/adapters/langchain-adapter.d.ts +46 -0
- package/dist/adapters/langchain-adapter.js +102 -0
- package/dist/adapters/langchain-adapter.js.map +1 -0
- package/dist/adapters/langchain-adapter.mjs +100 -0
- package/dist/adapters/langchain-adapter.mjs.map +1 -0
- package/dist/adapters/mastra-adapter.d.mts +49 -0
- package/dist/adapters/mastra-adapter.d.ts +49 -0
- package/dist/adapters/mastra-adapter.js +95 -0
- package/dist/adapters/mastra-adapter.js.map +1 -0
- package/dist/adapters/mastra-adapter.mjs +93 -0
- package/dist/adapters/mastra-adapter.mjs.map +1 -0
- package/dist/client/index.d.mts +119 -0
- package/dist/client/index.d.ts +119 -0
- package/dist/client/index.js +225 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/index.mjs +223 -0
- package/dist/client/index.mjs.map +1 -0
- package/dist/client/react.d.mts +151 -0
- package/dist/client/react.d.ts +151 -0
- package/dist/client/react.js +492 -0
- package/dist/client/react.js.map +1 -0
- package/dist/client/react.mjs +489 -0
- package/dist/client/react.mjs.map +1 -0
- package/dist/client/vue.d.mts +157 -0
- package/dist/client/vue.d.ts +157 -0
- package/dist/client/vue.js +474 -0
- package/dist/client/vue.js.map +1 -0
- package/dist/client/vue.mjs +471 -0
- package/dist/client/vue.mjs.map +1 -0
- package/dist/events-BP6WyRNh.d.mts +110 -0
- package/dist/events-BP6WyRNh.d.ts +110 -0
- package/dist/index.d.mts +10 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +2784 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2723 -0
- package/dist/index.mjs.map +1 -0
- package/dist/multi-session-client-BOFgPypS.d.ts +389 -0
- package/dist/multi-session-client-DMF3ED2O.d.mts +389 -0
- package/dist/server/index.d.mts +269 -0
- package/dist/server/index.d.ts +269 -0
- package/dist/server/index.js +2444 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/index.mjs +2414 -0
- package/dist/server/index.mjs.map +1 -0
- package/dist/shared/index.d.mts +24 -0
- package/dist/shared/index.d.ts +24 -0
- package/dist/shared/index.js +223 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/index.mjs +190 -0
- package/dist/shared/index.mjs.map +1 -0
- package/dist/types-SbDlA2VX.d.mts +153 -0
- package/dist/types-SbDlA2VX.d.ts +153 -0
- package/dist/utils-0qmYrqoa.d.mts +92 -0
- package/dist/utils-0qmYrqoa.d.ts +92 -0
- package/package.json +165 -0
- package/src/adapters/agui-adapter.ts +210 -0
- package/src/adapters/agui-middleware.ts +512 -0
- package/src/adapters/ai-adapter.ts +115 -0
- package/src/adapters/langchain-adapter.ts +127 -0
- package/src/adapters/mastra-adapter.ts +126 -0
- package/src/client/core/sse-client.ts +340 -0
- package/src/client/index.ts +26 -0
- package/src/client/react/index.ts +10 -0
- package/src/client/react/useMcp.ts +558 -0
- package/src/client/vue/index.ts +10 -0
- package/src/client/vue/useMcp.ts +542 -0
- package/src/index.ts +11 -0
- package/src/server/handlers/nextjs-handler.ts +216 -0
- package/src/server/handlers/sse-handler.ts +699 -0
- package/src/server/index.ts +57 -0
- package/src/server/mcp/multi-session-client.ts +132 -0
- package/src/server/mcp/oauth-client.ts +1168 -0
- package/src/server/mcp/storage-oauth-provider.ts +239 -0
- package/src/server/storage/file-backend.ts +169 -0
- package/src/server/storage/index.ts +115 -0
- package/src/server/storage/memory-backend.ts +132 -0
- package/src/server/storage/redis-backend.ts +210 -0
- package/src/server/storage/redis.ts +160 -0
- package/src/server/storage/types.ts +109 -0
- package/src/shared/constants.ts +29 -0
- package/src/shared/errors.ts +133 -0
- package/src/shared/events.ts +166 -0
- package/src/shared/index.ts +70 -0
- package/src/shared/types.ts +274 -0
- package/src/shared/utils.ts +16 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple event emitter pattern for MCP connection events
|
|
3
|
+
* Inspired by Cloudflare's agents pattern but adapted for serverless
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export type Disposable = {
|
|
7
|
+
dispose(): void;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export type Event<T> = (listener: (event: T) => void) => Disposable;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Event emitter class for type-safe event handling
|
|
14
|
+
* Similar to Cloudflare's Emitter but simplified for our use case
|
|
15
|
+
*/
|
|
16
|
+
export class Emitter<T> {
|
|
17
|
+
private listeners: Set<(event: T) => void> = new Set();
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Subscribe to events
|
|
21
|
+
* @param listener - Callback function to handle events
|
|
22
|
+
* @returns Disposable to unsubscribe
|
|
23
|
+
*/
|
|
24
|
+
get event(): Event<T> {
|
|
25
|
+
return (listener: (event: T) => void) => {
|
|
26
|
+
this.listeners.add(listener);
|
|
27
|
+
return {
|
|
28
|
+
dispose: () => {
|
|
29
|
+
this.listeners.delete(listener);
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Fire an event to all listeners
|
|
37
|
+
* @param event - Event data to emit
|
|
38
|
+
*/
|
|
39
|
+
fire(event: T): void {
|
|
40
|
+
for (const listener of this.listeners) {
|
|
41
|
+
try {
|
|
42
|
+
listener(event);
|
|
43
|
+
} catch (error) {
|
|
44
|
+
console.error('[Emitter] Error in event listener:', error);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Clear all listeners
|
|
51
|
+
*/
|
|
52
|
+
dispose(): void {
|
|
53
|
+
this.listeners.clear();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Get number of active listeners
|
|
58
|
+
*/
|
|
59
|
+
get listenerCount(): number {
|
|
60
|
+
return this.listeners.size;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Connection state types matching your existing ConnectionStatus
|
|
66
|
+
* Extended with more granular states for better observability
|
|
67
|
+
*/
|
|
68
|
+
export type McpConnectionState =
|
|
69
|
+
| 'DISCONNECTED' // Not connected
|
|
70
|
+
| 'CONNECTING' // Establishing transport connection to MCP server
|
|
71
|
+
| 'AUTHENTICATING' // OAuth flow in progress
|
|
72
|
+
| 'AUTHENTICATED' // OAuth complete, pre-connect
|
|
73
|
+
| 'DISCOVERING' // Discovering server capabilities (tools, resources, prompts)
|
|
74
|
+
| 'CONNECTED' // Transport connection established
|
|
75
|
+
| 'READY' // Fully connected and ready to use
|
|
76
|
+
| 'VALIDATING' // Validating existing session
|
|
77
|
+
| 'RECONNECTING' // Attempting to reconnect
|
|
78
|
+
| 'INITIALIZING' // Initializing session or connection
|
|
79
|
+
| 'FAILED'; // Connection error at some point
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* MCP Connection Event Types
|
|
83
|
+
* Discriminated union for type-safe event handling
|
|
84
|
+
*/
|
|
85
|
+
export type McpConnectionEvent =
|
|
86
|
+
| {
|
|
87
|
+
type: 'state_changed';
|
|
88
|
+
sessionId: string;
|
|
89
|
+
serverId: string;
|
|
90
|
+
serverName: string;
|
|
91
|
+
state: McpConnectionState;
|
|
92
|
+
previousState: McpConnectionState;
|
|
93
|
+
timestamp: number;
|
|
94
|
+
}
|
|
95
|
+
| {
|
|
96
|
+
type: 'tools_discovered';
|
|
97
|
+
sessionId: string;
|
|
98
|
+
serverId: string;
|
|
99
|
+
toolCount: number;
|
|
100
|
+
tools: any[];
|
|
101
|
+
timestamp: number;
|
|
102
|
+
}
|
|
103
|
+
| {
|
|
104
|
+
type: 'auth_required';
|
|
105
|
+
sessionId: string;
|
|
106
|
+
serverId: string;
|
|
107
|
+
authUrl: string;
|
|
108
|
+
timestamp: number;
|
|
109
|
+
}
|
|
110
|
+
| {
|
|
111
|
+
type: 'error';
|
|
112
|
+
sessionId: string;
|
|
113
|
+
serverId: string;
|
|
114
|
+
error: string;
|
|
115
|
+
errorType: 'connection' | 'auth' | 'validation' | 'unknown';
|
|
116
|
+
timestamp: number;
|
|
117
|
+
}
|
|
118
|
+
| {
|
|
119
|
+
type: 'disconnected';
|
|
120
|
+
sessionId: string;
|
|
121
|
+
serverId: string;
|
|
122
|
+
reason?: string;
|
|
123
|
+
timestamp: number;
|
|
124
|
+
}
|
|
125
|
+
| {
|
|
126
|
+
type: 'progress';
|
|
127
|
+
sessionId: string;
|
|
128
|
+
serverId: string;
|
|
129
|
+
message: string;
|
|
130
|
+
timestamp: number;
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Observability event for debugging and monitoring
|
|
135
|
+
*/
|
|
136
|
+
export interface McpObservabilityEvent {
|
|
137
|
+
type?: string;
|
|
138
|
+
level?: 'debug' | 'info' | 'warn' | 'error';
|
|
139
|
+
message?: string;
|
|
140
|
+
displayMessage?: string;
|
|
141
|
+
sessionId?: string;
|
|
142
|
+
serverId?: string;
|
|
143
|
+
payload?: Record<string, any>;
|
|
144
|
+
metadata?: Record<string, any>; // Kept for backward compatibility
|
|
145
|
+
timestamp: number;
|
|
146
|
+
id?: string;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* DisposableStore for managing multiple disposables
|
|
151
|
+
* Useful for cleanup in React hooks
|
|
152
|
+
*/
|
|
153
|
+
export class DisposableStore {
|
|
154
|
+
private disposables: Set<Disposable> = new Set();
|
|
155
|
+
|
|
156
|
+
add(disposable: Disposable): void {
|
|
157
|
+
this.disposables.add(disposable);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
dispose(): void {
|
|
161
|
+
for (const disposable of this.disposables) {
|
|
162
|
+
disposable.dispose();
|
|
163
|
+
}
|
|
164
|
+
this.disposables.clear();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Redis Shared Package
|
|
3
|
+
* Shared types and utilities for both server and client
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Events
|
|
7
|
+
export {
|
|
8
|
+
Emitter,
|
|
9
|
+
DisposableStore,
|
|
10
|
+
type Disposable,
|
|
11
|
+
type Event,
|
|
12
|
+
type McpConnectionState,
|
|
13
|
+
type McpConnectionEvent,
|
|
14
|
+
type McpObservabilityEvent,
|
|
15
|
+
} from './events';
|
|
16
|
+
|
|
17
|
+
// Constants
|
|
18
|
+
export * from './constants';
|
|
19
|
+
|
|
20
|
+
// Errors
|
|
21
|
+
export * from './errors';
|
|
22
|
+
|
|
23
|
+
// Types
|
|
24
|
+
export type {
|
|
25
|
+
ToolInfo,
|
|
26
|
+
McpRpcRequest,
|
|
27
|
+
McpRpcResponse,
|
|
28
|
+
McpRpcMethod,
|
|
29
|
+
McpRpcParams,
|
|
30
|
+
TransportType,
|
|
31
|
+
// API types
|
|
32
|
+
ConnectRequest,
|
|
33
|
+
ConnectResponse,
|
|
34
|
+
ConnectSuccessResponse,
|
|
35
|
+
ConnectAuthRequiredResponse,
|
|
36
|
+
ConnectErrorResponse,
|
|
37
|
+
ListToolsResponse,
|
|
38
|
+
CallToolRequest,
|
|
39
|
+
CallToolResponse,
|
|
40
|
+
// RPC param types
|
|
41
|
+
ConnectParams,
|
|
42
|
+
DisconnectParams,
|
|
43
|
+
SessionParams,
|
|
44
|
+
CallToolParams,
|
|
45
|
+
GetPromptParams,
|
|
46
|
+
ReadResourceParams,
|
|
47
|
+
FinishAuthParams,
|
|
48
|
+
// RPC result types
|
|
49
|
+
SessionInfo,
|
|
50
|
+
SessionListResult,
|
|
51
|
+
ConnectResult,
|
|
52
|
+
DisconnectResult,
|
|
53
|
+
RestoreSessionResult,
|
|
54
|
+
FinishAuthResult,
|
|
55
|
+
ListToolsRpcResult,
|
|
56
|
+
ListPromptsResult,
|
|
57
|
+
ListResourcesResult,
|
|
58
|
+
} from './types';
|
|
59
|
+
|
|
60
|
+
export {
|
|
61
|
+
isConnectSuccess,
|
|
62
|
+
isConnectAuthRequired,
|
|
63
|
+
isConnectError,
|
|
64
|
+
isListToolsSuccess,
|
|
65
|
+
isCallToolSuccess,
|
|
66
|
+
} from './types';
|
|
67
|
+
|
|
68
|
+
// Utilities
|
|
69
|
+
export { sanitizeServerLabel } from './utils';
|
|
70
|
+
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for MCP operations
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
6
|
+
|
|
7
|
+
// Connect API types
|
|
8
|
+
export interface ConnectRequest {
|
|
9
|
+
serverUrl: string;
|
|
10
|
+
callbackUrl: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface ConnectSuccessResponse {
|
|
14
|
+
success: true;
|
|
15
|
+
sessionId: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface ConnectAuthRequiredResponse {
|
|
19
|
+
requiresAuth: true;
|
|
20
|
+
authUrl: string;
|
|
21
|
+
sessionId: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface ConnectErrorResponse {
|
|
25
|
+
error: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export type ConnectResponse =
|
|
29
|
+
| ConnectSuccessResponse
|
|
30
|
+
| ConnectAuthRequiredResponse
|
|
31
|
+
| ConnectErrorResponse;
|
|
32
|
+
|
|
33
|
+
// Callback API types
|
|
34
|
+
export interface CallbackSuccessResponse {
|
|
35
|
+
success: true;
|
|
36
|
+
message: string;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface CallbackErrorResponse {
|
|
40
|
+
error: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export type CallbackResponse = CallbackSuccessResponse | CallbackErrorResponse;
|
|
44
|
+
|
|
45
|
+
// Disconnect API types
|
|
46
|
+
export interface DisconnectRequest {
|
|
47
|
+
sessionId: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface DisconnectSuccessResponse {
|
|
51
|
+
success: true;
|
|
52
|
+
message: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface DisconnectErrorResponse {
|
|
56
|
+
error: string;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export type DisconnectResponse =
|
|
60
|
+
| DisconnectSuccessResponse
|
|
61
|
+
| DisconnectErrorResponse;
|
|
62
|
+
|
|
63
|
+
// List Tools API types
|
|
64
|
+
export interface ListToolsSuccessResponse {
|
|
65
|
+
tools: Tool[];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface ListToolsErrorResponse {
|
|
69
|
+
error: string;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export type ListToolsResponse =
|
|
73
|
+
| ListToolsSuccessResponse
|
|
74
|
+
| ListToolsErrorResponse;
|
|
75
|
+
|
|
76
|
+
// Call Tool API types
|
|
77
|
+
export interface CallToolRequest {
|
|
78
|
+
sessionId: string;
|
|
79
|
+
toolName: string;
|
|
80
|
+
toolArgs: Record<string, unknown>;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface CallToolSuccessResponse {
|
|
84
|
+
content: Array<{
|
|
85
|
+
type: string;
|
|
86
|
+
text?: string;
|
|
87
|
+
[key: string]: unknown;
|
|
88
|
+
}>;
|
|
89
|
+
isError: boolean;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface CallToolErrorResponse {
|
|
93
|
+
error: string;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export type CallToolResponse =
|
|
97
|
+
| CallToolSuccessResponse
|
|
98
|
+
| CallToolErrorResponse;
|
|
99
|
+
|
|
100
|
+
// Helper type guards
|
|
101
|
+
export function isConnectSuccess(
|
|
102
|
+
response: ConnectResponse
|
|
103
|
+
): response is ConnectSuccessResponse {
|
|
104
|
+
return 'success' in response && response.success === true;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export function isConnectAuthRequired(
|
|
108
|
+
response: ConnectResponse
|
|
109
|
+
): response is ConnectAuthRequiredResponse {
|
|
110
|
+
return 'requiresAuth' in response && response.requiresAuth === true;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export function isConnectError(
|
|
114
|
+
response: ConnectResponse
|
|
115
|
+
): response is ConnectErrorResponse {
|
|
116
|
+
return 'error' in response;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function isListToolsSuccess(
|
|
120
|
+
response: ListToolsResponse
|
|
121
|
+
): response is ListToolsSuccessResponse {
|
|
122
|
+
return 'tools' in response;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export function isCallToolSuccess(
|
|
126
|
+
response: CallToolResponse
|
|
127
|
+
): response is CallToolSuccessResponse {
|
|
128
|
+
return 'content' in response;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Generic tool info type
|
|
132
|
+
export type ToolInfo = {
|
|
133
|
+
name: string;
|
|
134
|
+
description?: string;
|
|
135
|
+
inputSchema?: unknown;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
// Transport type
|
|
139
|
+
export type TransportType = 'sse' | 'streamable_http';
|
|
140
|
+
|
|
141
|
+
// SSE/RPC types
|
|
142
|
+
export type McpRpcMethod =
|
|
143
|
+
| 'connect'
|
|
144
|
+
| 'disconnect'
|
|
145
|
+
| 'listTools'
|
|
146
|
+
| 'callTool'
|
|
147
|
+
| 'getSessions'
|
|
148
|
+
| 'restoreSession'
|
|
149
|
+
| 'finishAuth'
|
|
150
|
+
| 'listPrompts'
|
|
151
|
+
| 'getPrompt'
|
|
152
|
+
| 'listResources'
|
|
153
|
+
| 'readResource';
|
|
154
|
+
|
|
155
|
+
export interface McpRpcRequest {
|
|
156
|
+
id: string;
|
|
157
|
+
method: McpRpcMethod;
|
|
158
|
+
params?: McpRpcParams;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export interface McpRpcResponse<T = unknown> {
|
|
162
|
+
id: string;
|
|
163
|
+
result?: T;
|
|
164
|
+
error?: {
|
|
165
|
+
code: string;
|
|
166
|
+
message: string;
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// RPC Parameter Types
|
|
171
|
+
export interface ConnectParams {
|
|
172
|
+
serverId: string;
|
|
173
|
+
serverName: string;
|
|
174
|
+
serverUrl: string;
|
|
175
|
+
callbackUrl: string;
|
|
176
|
+
transportType?: TransportType;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export interface DisconnectParams {
|
|
180
|
+
sessionId: string;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export interface SessionParams {
|
|
184
|
+
sessionId: string;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export interface CallToolParams {
|
|
188
|
+
sessionId: string;
|
|
189
|
+
toolName: string;
|
|
190
|
+
toolArgs: Record<string, unknown>;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export interface GetPromptParams {
|
|
194
|
+
sessionId: string;
|
|
195
|
+
name: string;
|
|
196
|
+
args?: Record<string, string>;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export interface ReadResourceParams {
|
|
200
|
+
sessionId: string;
|
|
201
|
+
uri: string;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
export interface FinishAuthParams {
|
|
205
|
+
sessionId: string;
|
|
206
|
+
code: string;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export type McpRpcParams =
|
|
210
|
+
| ConnectParams
|
|
211
|
+
| DisconnectParams
|
|
212
|
+
| SessionParams
|
|
213
|
+
| CallToolParams
|
|
214
|
+
| GetPromptParams
|
|
215
|
+
| ReadResourceParams
|
|
216
|
+
| FinishAuthParams
|
|
217
|
+
| undefined;
|
|
218
|
+
|
|
219
|
+
// RPC Result Types
|
|
220
|
+
export interface SessionInfo {
|
|
221
|
+
sessionId: string;
|
|
222
|
+
serverId?: string;
|
|
223
|
+
serverName?: string;
|
|
224
|
+
serverUrl: string;
|
|
225
|
+
transport: TransportType;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
export interface SessionListResult {
|
|
229
|
+
sessions: SessionInfo[];
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
export interface ConnectResult {
|
|
233
|
+
sessionId: string;
|
|
234
|
+
success: boolean;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
export interface DisconnectResult {
|
|
238
|
+
success: boolean;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
export interface RestoreSessionResult {
|
|
242
|
+
success: boolean;
|
|
243
|
+
toolCount: number;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export interface FinishAuthResult {
|
|
247
|
+
success: boolean;
|
|
248
|
+
toolCount: number;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export interface ListToolsRpcResult {
|
|
252
|
+
tools: Tool[];
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
export interface ListPromptsResult {
|
|
256
|
+
prompts: Array<{
|
|
257
|
+
name: string;
|
|
258
|
+
description?: string;
|
|
259
|
+
arguments?: Array<{
|
|
260
|
+
name: string;
|
|
261
|
+
description?: string;
|
|
262
|
+
required?: boolean;
|
|
263
|
+
}>;
|
|
264
|
+
}>;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export interface ListResourcesResult {
|
|
268
|
+
resources: Array<{
|
|
269
|
+
uri: string;
|
|
270
|
+
name: string;
|
|
271
|
+
description?: string;
|
|
272
|
+
mimeType?: string;
|
|
273
|
+
}>;
|
|
274
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitize server name to create a valid server label
|
|
3
|
+
* Must start with a letter and contain only letters, digits, '-' and '_'
|
|
4
|
+
*/
|
|
5
|
+
export function sanitizeServerLabel(name: string): string {
|
|
6
|
+
let sanitized = name
|
|
7
|
+
.replace(/[^a-zA-Z0-9-_]/g, '_')
|
|
8
|
+
.replace(/_{2,}/g, '_')
|
|
9
|
+
.toLowerCase();
|
|
10
|
+
|
|
11
|
+
if (!/^[a-zA-Z]/.test(sanitized)) {
|
|
12
|
+
sanitized = 's_' + sanitized;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return sanitized;
|
|
16
|
+
}
|