@claude-flow/mcp 3.0.0-alpha.1

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 (92) hide show
  1. package/.agentic-flow/intelligence.json +16 -0
  2. package/README.md +428 -0
  3. package/__tests__/integration.test.ts +449 -0
  4. package/__tests__/mcp.test.ts +641 -0
  5. package/dist/connection-pool.d.ts +36 -0
  6. package/dist/connection-pool.d.ts.map +1 -0
  7. package/dist/connection-pool.js +273 -0
  8. package/dist/connection-pool.js.map +1 -0
  9. package/dist/index.d.ts +75 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +85 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/oauth.d.ts +146 -0
  14. package/dist/oauth.d.ts.map +1 -0
  15. package/dist/oauth.js +318 -0
  16. package/dist/oauth.js.map +1 -0
  17. package/dist/prompt-registry.d.ts +90 -0
  18. package/dist/prompt-registry.d.ts.map +1 -0
  19. package/dist/prompt-registry.js +209 -0
  20. package/dist/prompt-registry.js.map +1 -0
  21. package/dist/rate-limiter.d.ts +86 -0
  22. package/dist/rate-limiter.d.ts.map +1 -0
  23. package/dist/rate-limiter.js +197 -0
  24. package/dist/rate-limiter.js.map +1 -0
  25. package/dist/resource-registry.d.ts +144 -0
  26. package/dist/resource-registry.d.ts.map +1 -0
  27. package/dist/resource-registry.js +405 -0
  28. package/dist/resource-registry.js.map +1 -0
  29. package/dist/sampling.d.ts +102 -0
  30. package/dist/sampling.d.ts.map +1 -0
  31. package/dist/sampling.js +268 -0
  32. package/dist/sampling.js.map +1 -0
  33. package/dist/schema-validator.d.ts +30 -0
  34. package/dist/schema-validator.d.ts.map +1 -0
  35. package/dist/schema-validator.js +182 -0
  36. package/dist/schema-validator.js.map +1 -0
  37. package/dist/server.d.ts +122 -0
  38. package/dist/server.d.ts.map +1 -0
  39. package/dist/server.js +829 -0
  40. package/dist/server.js.map +1 -0
  41. package/dist/session-manager.d.ts +55 -0
  42. package/dist/session-manager.d.ts.map +1 -0
  43. package/dist/session-manager.js +252 -0
  44. package/dist/session-manager.js.map +1 -0
  45. package/dist/task-manager.d.ts +81 -0
  46. package/dist/task-manager.d.ts.map +1 -0
  47. package/dist/task-manager.js +337 -0
  48. package/dist/task-manager.js.map +1 -0
  49. package/dist/tool-registry.d.ts +88 -0
  50. package/dist/tool-registry.d.ts.map +1 -0
  51. package/dist/tool-registry.js +353 -0
  52. package/dist/tool-registry.js.map +1 -0
  53. package/dist/transport/http.d.ts +55 -0
  54. package/dist/transport/http.d.ts.map +1 -0
  55. package/dist/transport/http.js +446 -0
  56. package/dist/transport/http.js.map +1 -0
  57. package/dist/transport/index.d.ts +50 -0
  58. package/dist/transport/index.d.ts.map +1 -0
  59. package/dist/transport/index.js +181 -0
  60. package/dist/transport/index.js.map +1 -0
  61. package/dist/transport/stdio.d.ts +43 -0
  62. package/dist/transport/stdio.d.ts.map +1 -0
  63. package/dist/transport/stdio.js +194 -0
  64. package/dist/transport/stdio.js.map +1 -0
  65. package/dist/transport/websocket.d.ts +65 -0
  66. package/dist/transport/websocket.d.ts.map +1 -0
  67. package/dist/transport/websocket.js +314 -0
  68. package/dist/transport/websocket.js.map +1 -0
  69. package/dist/types.d.ts +473 -0
  70. package/dist/types.d.ts.map +1 -0
  71. package/dist/types.js +40 -0
  72. package/dist/types.js.map +1 -0
  73. package/package.json +42 -0
  74. package/src/connection-pool.ts +344 -0
  75. package/src/index.ts +253 -0
  76. package/src/oauth.ts +447 -0
  77. package/src/prompt-registry.ts +296 -0
  78. package/src/rate-limiter.ts +266 -0
  79. package/src/resource-registry.ts +530 -0
  80. package/src/sampling.ts +363 -0
  81. package/src/schema-validator.ts +213 -0
  82. package/src/server.ts +1134 -0
  83. package/src/session-manager.ts +339 -0
  84. package/src/task-manager.ts +427 -0
  85. package/src/tool-registry.ts +475 -0
  86. package/src/transport/http.ts +532 -0
  87. package/src/transport/index.ts +233 -0
  88. package/src/transport/stdio.ts +252 -0
  89. package/src/transport/websocket.ts +396 -0
  90. package/src/types.ts +664 -0
  91. package/tsconfig.json +20 -0
  92. package/vitest.config.ts +13 -0
package/src/types.ts ADDED
@@ -0,0 +1,664 @@
1
+ /**
2
+ * @claude-flow/mcp - Standalone Types
3
+ *
4
+ * Complete type definitions for MCP server implementation
5
+ * Zero external @claude-flow dependencies
6
+ */
7
+
8
+ // ============================================================================
9
+ // Core Protocol Types
10
+ // ============================================================================
11
+
12
+ export type JsonRpcVersion = '2.0';
13
+
14
+ export interface MCPProtocolVersion {
15
+ major: number;
16
+ minor: number;
17
+ patch: number;
18
+ }
19
+
20
+ export type RequestId = string | number | null;
21
+
22
+ export interface MCPMessage {
23
+ jsonrpc: JsonRpcVersion;
24
+ }
25
+
26
+ export interface MCPRequest extends MCPMessage {
27
+ id: RequestId;
28
+ method: string;
29
+ params?: Record<string, unknown>;
30
+ }
31
+
32
+ export interface MCPNotification extends MCPMessage {
33
+ method: string;
34
+ params?: Record<string, unknown>;
35
+ }
36
+
37
+ export interface MCPError {
38
+ code: number;
39
+ message: string;
40
+ data?: unknown;
41
+ }
42
+
43
+ export interface MCPResponse extends MCPMessage {
44
+ id: RequestId;
45
+ result?: unknown;
46
+ error?: MCPError;
47
+ }
48
+
49
+ // ============================================================================
50
+ // Server Configuration
51
+ // ============================================================================
52
+
53
+ export type TransportType = 'stdio' | 'http' | 'websocket' | 'in-process';
54
+
55
+ export type AuthMethod = 'token' | 'oauth' | 'api-key' | 'none';
56
+
57
+ export interface AuthConfig {
58
+ enabled: boolean;
59
+ method: AuthMethod;
60
+ tokens?: string[];
61
+ apiKeys?: string[];
62
+ jwtSecret?: string;
63
+ oauth?: {
64
+ clientId: string;
65
+ clientSecret: string;
66
+ authorizationUrl: string;
67
+ tokenUrl: string;
68
+ };
69
+ }
70
+
71
+ export interface LoadBalancerConfig {
72
+ enabled: boolean;
73
+ maxConcurrentRequests: number;
74
+ rateLimit?: {
75
+ requestsPerSecond: number;
76
+ burstSize: number;
77
+ };
78
+ circuitBreaker?: {
79
+ failureThreshold: number;
80
+ resetTimeout: number;
81
+ };
82
+ }
83
+
84
+ export interface ConnectionPoolConfig {
85
+ maxConnections: number;
86
+ minConnections: number;
87
+ idleTimeout: number;
88
+ acquireTimeout: number;
89
+ maxWaitingClients: number;
90
+ evictionRunInterval: number;
91
+ }
92
+
93
+ export interface MCPServerConfig {
94
+ name: string;
95
+ version: string;
96
+ transport: TransportType;
97
+ host?: string;
98
+ port?: number;
99
+ tlsEnabled?: boolean;
100
+ tlsCert?: string;
101
+ tlsKey?: string;
102
+ auth?: AuthConfig;
103
+ loadBalancer?: LoadBalancerConfig;
104
+ connectionPool?: ConnectionPoolConfig;
105
+ corsEnabled?: boolean;
106
+ corsOrigins?: string[];
107
+ maxRequestSize?: number;
108
+ requestTimeout?: number;
109
+ enableMetrics?: boolean;
110
+ enableCaching?: boolean;
111
+ cacheTTL?: number;
112
+ logLevel?: 'debug' | 'info' | 'warn' | 'error';
113
+ }
114
+
115
+ // ============================================================================
116
+ // Session Types
117
+ // ============================================================================
118
+
119
+ export type SessionState = 'created' | 'initializing' | 'ready' | 'closing' | 'closed' | 'error';
120
+
121
+ export interface MCPSession {
122
+ id: string;
123
+ state: SessionState;
124
+ transport: TransportType;
125
+ createdAt: Date;
126
+ lastActivityAt: Date;
127
+ isInitialized: boolean;
128
+ isAuthenticated: boolean;
129
+ clientInfo?: MCPClientInfo;
130
+ protocolVersion?: MCPProtocolVersion;
131
+ capabilities?: MCPCapabilities;
132
+ metadata?: Record<string, unknown>;
133
+ }
134
+
135
+ export interface MCPClientInfo {
136
+ name: string;
137
+ version: string;
138
+ }
139
+
140
+ // ============================================================================
141
+ // Capability Types
142
+ // ============================================================================
143
+
144
+ export interface MCPCapabilities {
145
+ logging?: {
146
+ level: 'debug' | 'info' | 'warn' | 'error';
147
+ };
148
+ tools?: {
149
+ listChanged: boolean;
150
+ };
151
+ resources?: {
152
+ listChanged: boolean;
153
+ subscribe: boolean;
154
+ };
155
+ prompts?: {
156
+ listChanged: boolean;
157
+ };
158
+ sampling?: Record<string, unknown>;
159
+ experimental?: Record<string, unknown>;
160
+ }
161
+
162
+ export interface MCPInitializeParams {
163
+ protocolVersion: MCPProtocolVersion;
164
+ capabilities: MCPCapabilities;
165
+ clientInfo: MCPClientInfo;
166
+ }
167
+
168
+ export interface MCPInitializeResult {
169
+ protocolVersion: MCPProtocolVersion;
170
+ capabilities: MCPCapabilities;
171
+ serverInfo: {
172
+ name: string;
173
+ version: string;
174
+ };
175
+ instructions?: string;
176
+ }
177
+
178
+ // ============================================================================
179
+ // Tool Types
180
+ // ============================================================================
181
+
182
+ export interface JSONSchema {
183
+ type: string;
184
+ properties?: Record<string, JSONSchema>;
185
+ required?: string[];
186
+ items?: JSONSchema;
187
+ enum?: string[];
188
+ description?: string;
189
+ default?: unknown;
190
+ minimum?: number;
191
+ maximum?: number;
192
+ minLength?: number;
193
+ maxLength?: number;
194
+ pattern?: string;
195
+ additionalProperties?: boolean | JSONSchema;
196
+ }
197
+
198
+ export interface ToolContext {
199
+ sessionId: string;
200
+ requestId?: RequestId;
201
+ orchestrator?: unknown;
202
+ swarmCoordinator?: unknown;
203
+ agentManager?: unknown;
204
+ resourceManager?: unknown;
205
+ messageBus?: unknown;
206
+ monitor?: unknown;
207
+ metadata?: Record<string, unknown>;
208
+ }
209
+
210
+ export type ToolHandler<TInput = unknown, TOutput = unknown> = (
211
+ input: TInput,
212
+ context?: ToolContext
213
+ ) => Promise<TOutput>;
214
+
215
+ export interface MCPTool<TInput = unknown, TOutput = unknown> {
216
+ name: string;
217
+ description: string;
218
+ inputSchema: JSONSchema;
219
+ handler: ToolHandler<TInput, TOutput>;
220
+ category?: string;
221
+ tags?: string[];
222
+ version?: string;
223
+ deprecated?: boolean;
224
+ cacheable?: boolean;
225
+ cacheTTL?: number;
226
+ timeout?: number;
227
+ }
228
+
229
+ export interface ToolCallResult {
230
+ content: Array<{
231
+ type: 'text' | 'image' | 'resource';
232
+ text?: string;
233
+ data?: string;
234
+ mimeType?: string;
235
+ }>;
236
+ isError: boolean;
237
+ }
238
+
239
+ export interface ToolRegistrationOptions {
240
+ override?: boolean;
241
+ validate?: boolean;
242
+ preload?: boolean;
243
+ }
244
+
245
+ // ============================================================================
246
+ // Resource Types (MCP 2025-11-25)
247
+ // ============================================================================
248
+
249
+ export interface MCPResource {
250
+ uri: string;
251
+ name: string;
252
+ description?: string;
253
+ mimeType?: string;
254
+ annotations?: ContentAnnotations;
255
+ }
256
+
257
+ export interface ResourceContent {
258
+ uri: string;
259
+ mimeType?: string;
260
+ text?: string;
261
+ blob?: string; // base64 encoded
262
+ }
263
+
264
+ export interface ResourceTemplate {
265
+ uriTemplate: string;
266
+ name: string;
267
+ description?: string;
268
+ mimeType?: string;
269
+ }
270
+
271
+ export interface ResourceListResult {
272
+ resources: MCPResource[];
273
+ nextCursor?: string;
274
+ }
275
+
276
+ export interface ResourceReadResult {
277
+ contents: ResourceContent[];
278
+ }
279
+
280
+ // ============================================================================
281
+ // Prompt Types (MCP 2025-11-25)
282
+ // ============================================================================
283
+
284
+ export interface PromptArgument {
285
+ name: string;
286
+ description?: string;
287
+ required?: boolean;
288
+ }
289
+
290
+ export interface MCPPrompt {
291
+ name: string;
292
+ title?: string;
293
+ description?: string;
294
+ arguments?: PromptArgument[];
295
+ }
296
+
297
+ export type PromptRole = 'user' | 'assistant';
298
+
299
+ export interface ContentAnnotations {
300
+ audience?: Array<'user' | 'assistant'>;
301
+ priority?: number;
302
+ createdAt?: string;
303
+ modifiedAt?: string;
304
+ }
305
+
306
+ export interface TextContent {
307
+ type: 'text';
308
+ text: string;
309
+ annotations?: ContentAnnotations;
310
+ }
311
+
312
+ export interface ImageContent {
313
+ type: 'image';
314
+ data: string; // base64
315
+ mimeType: string;
316
+ annotations?: ContentAnnotations;
317
+ }
318
+
319
+ export interface AudioContent {
320
+ type: 'audio';
321
+ data: string; // base64
322
+ mimeType: string;
323
+ annotations?: ContentAnnotations;
324
+ }
325
+
326
+ export interface EmbeddedResource {
327
+ type: 'resource';
328
+ resource: ResourceContent;
329
+ annotations?: ContentAnnotations;
330
+ }
331
+
332
+ export type PromptContent = TextContent | ImageContent | AudioContent | EmbeddedResource;
333
+
334
+ export interface PromptMessage {
335
+ role: PromptRole;
336
+ content: PromptContent;
337
+ }
338
+
339
+ export interface PromptListResult {
340
+ prompts: MCPPrompt[];
341
+ nextCursor?: string;
342
+ }
343
+
344
+ export interface PromptGetResult {
345
+ description?: string;
346
+ messages: PromptMessage[];
347
+ }
348
+
349
+ // ============================================================================
350
+ // Task Types (MCP 2025-11-25 - Async Operations)
351
+ // ============================================================================
352
+
353
+ export type TaskState = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';
354
+
355
+ export interface MCPTask {
356
+ id: string;
357
+ state: TaskState;
358
+ progress?: TaskProgress;
359
+ result?: unknown;
360
+ error?: MCPError;
361
+ createdAt: Date;
362
+ updatedAt: Date;
363
+ metadata?: Record<string, unknown>;
364
+ }
365
+
366
+ export interface TaskProgress {
367
+ progress: number;
368
+ total?: number;
369
+ message?: string;
370
+ }
371
+
372
+ export interface TaskResult {
373
+ taskId: string;
374
+ state: TaskState;
375
+ progress?: TaskProgress;
376
+ result?: unknown;
377
+ error?: MCPError;
378
+ }
379
+
380
+ // ============================================================================
381
+ // Pagination Types (MCP 2025-11-25)
382
+ // ============================================================================
383
+
384
+ export interface PaginatedRequest {
385
+ cursor?: string;
386
+ }
387
+
388
+ export interface PaginatedResult<T> {
389
+ items: T[];
390
+ nextCursor?: string;
391
+ }
392
+
393
+ // ============================================================================
394
+ // Progress & Cancellation Types (MCP 2025-11-25)
395
+ // ============================================================================
396
+
397
+ export interface ProgressNotification {
398
+ progressToken: string | number;
399
+ progress: number;
400
+ total?: number;
401
+ message?: string;
402
+ }
403
+
404
+ export interface CancellationParams {
405
+ requestId: RequestId;
406
+ reason?: string;
407
+ }
408
+
409
+ // ============================================================================
410
+ // Sampling Types (MCP 2025-11-25 - Server-initiated LLM)
411
+ // ============================================================================
412
+
413
+ export interface SamplingMessage {
414
+ role: PromptRole;
415
+ content: PromptContent;
416
+ }
417
+
418
+ export interface ModelPreferences {
419
+ hints?: Array<{ name?: string }>;
420
+ costPriority?: number;
421
+ speedPriority?: number;
422
+ intelligencePriority?: number;
423
+ }
424
+
425
+ export interface CreateMessageRequest {
426
+ messages: SamplingMessage[];
427
+ modelPreferences?: ModelPreferences;
428
+ systemPrompt?: string;
429
+ includeContext?: 'none' | 'thisServer' | 'allServers';
430
+ temperature?: number;
431
+ maxTokens: number;
432
+ stopSequences?: string[];
433
+ metadata?: Record<string, unknown>;
434
+ }
435
+
436
+ export interface CreateMessageResult {
437
+ role: 'assistant';
438
+ content: PromptContent;
439
+ model: string;
440
+ stopReason?: 'endTurn' | 'stopSequence' | 'maxTokens';
441
+ }
442
+
443
+ // ============================================================================
444
+ // Roots Types (MCP 2025-11-25)
445
+ // ============================================================================
446
+
447
+ export interface Root {
448
+ uri: string;
449
+ name?: string;
450
+ }
451
+
452
+ export interface RootsListResult {
453
+ roots: Root[];
454
+ }
455
+
456
+ // ============================================================================
457
+ // Logging Types (MCP 2025-11-25)
458
+ // ============================================================================
459
+
460
+ export type MCPLogLevel = 'debug' | 'info' | 'notice' | 'warning' | 'error' | 'critical' | 'alert' | 'emergency';
461
+
462
+ export interface LoggingMessage {
463
+ level: MCPLogLevel;
464
+ logger?: string;
465
+ data?: unknown;
466
+ }
467
+
468
+ // ============================================================================
469
+ // Completion Types (MCP 2025-11-25)
470
+ // ============================================================================
471
+
472
+ export interface CompletionReference {
473
+ type: 'ref/prompt' | 'ref/resource';
474
+ name?: string;
475
+ uri?: string;
476
+ }
477
+
478
+ export interface CompletionArgument {
479
+ name: string;
480
+ value: string;
481
+ }
482
+
483
+ export interface CompletionResult {
484
+ values: string[];
485
+ total?: number;
486
+ hasMore?: boolean;
487
+ }
488
+
489
+ // ============================================================================
490
+ // Transport Types
491
+ // ============================================================================
492
+
493
+ export type RequestHandler = (request: MCPRequest) => Promise<MCPResponse>;
494
+
495
+ export type NotificationHandler = (notification: MCPNotification) => Promise<void>;
496
+
497
+ export interface TransportHealthStatus {
498
+ healthy: boolean;
499
+ error?: string;
500
+ metrics?: Record<string, number>;
501
+ }
502
+
503
+ export interface ITransport {
504
+ readonly type: TransportType;
505
+ start(): Promise<void>;
506
+ stop(): Promise<void>;
507
+ onRequest(handler: RequestHandler): void;
508
+ onNotification(handler: NotificationHandler): void;
509
+ sendNotification?(notification: MCPNotification): Promise<void>;
510
+ getHealthStatus(): Promise<TransportHealthStatus>;
511
+ }
512
+
513
+ // ============================================================================
514
+ // Connection Pool Types
515
+ // ============================================================================
516
+
517
+ export type ConnectionState = 'idle' | 'busy' | 'closing' | 'closed' | 'error';
518
+
519
+ export interface PooledConnection {
520
+ id: string;
521
+ state: ConnectionState;
522
+ createdAt: Date;
523
+ lastUsedAt: Date;
524
+ useCount: number;
525
+ transport: TransportType;
526
+ metadata?: Record<string, unknown>;
527
+ }
528
+
529
+ export interface ConnectionPoolStats {
530
+ totalConnections: number;
531
+ idleConnections: number;
532
+ busyConnections: number;
533
+ pendingRequests: number;
534
+ totalAcquired: number;
535
+ totalReleased: number;
536
+ totalCreated: number;
537
+ totalDestroyed: number;
538
+ avgAcquireTime: number;
539
+ }
540
+
541
+ export interface IConnectionPool {
542
+ acquire(): Promise<PooledConnection>;
543
+ release(connection: PooledConnection): void;
544
+ destroy(connection: PooledConnection): void;
545
+ getStats(): ConnectionPoolStats;
546
+ drain(): Promise<void>;
547
+ clear(): Promise<void>;
548
+ }
549
+
550
+ // ============================================================================
551
+ // Metrics Types
552
+ // ============================================================================
553
+
554
+ export interface ToolCallMetrics {
555
+ toolName: string;
556
+ duration: number;
557
+ success: boolean;
558
+ timestamp: number;
559
+ transport: TransportType;
560
+ cached?: boolean;
561
+ }
562
+
563
+ export interface MCPServerMetrics {
564
+ totalRequests: number;
565
+ successfulRequests: number;
566
+ failedRequests: number;
567
+ averageResponseTime: number;
568
+ activeSessions: number;
569
+ toolInvocations: Record<string, number>;
570
+ errors: Record<string, number>;
571
+ lastReset: Date;
572
+ startupTime?: number;
573
+ uptime?: number;
574
+ }
575
+
576
+ export interface SessionMetrics {
577
+ total: number;
578
+ active: number;
579
+ authenticated: number;
580
+ expired: number;
581
+ }
582
+
583
+ // ============================================================================
584
+ // Event Types
585
+ // ============================================================================
586
+
587
+ export type MCPEventType =
588
+ | 'server:started'
589
+ | 'server:stopped'
590
+ | 'server:error'
591
+ | 'session:created'
592
+ | 'session:initialized'
593
+ | 'session:closed'
594
+ | 'session:error'
595
+ | 'tool:registered'
596
+ | 'tool:unregistered'
597
+ | 'tool:called'
598
+ | 'tool:completed'
599
+ | 'tool:error'
600
+ | 'transport:connected'
601
+ | 'transport:disconnected'
602
+ | 'transport:error'
603
+ | 'pool:connection:acquired'
604
+ | 'pool:connection:released'
605
+ | 'pool:connection:created'
606
+ | 'pool:connection:destroyed';
607
+
608
+ export interface MCPEvent {
609
+ type: MCPEventType;
610
+ timestamp: Date;
611
+ data?: unknown;
612
+ }
613
+
614
+ export type EventHandler = (event: MCPEvent) => void;
615
+
616
+ // ============================================================================
617
+ // Logger Interface
618
+ // ============================================================================
619
+
620
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
621
+
622
+ export interface ILogger {
623
+ debug(message: string, data?: unknown): void;
624
+ info(message: string, data?: unknown): void;
625
+ warn(message: string, data?: unknown): void;
626
+ error(message: string, data?: unknown): void;
627
+ }
628
+
629
+ // ============================================================================
630
+ // Error Codes
631
+ // ============================================================================
632
+
633
+ export const ErrorCodes = {
634
+ PARSE_ERROR: -32700,
635
+ INVALID_REQUEST: -32600,
636
+ METHOD_NOT_FOUND: -32601,
637
+ INVALID_PARAMS: -32602,
638
+ INTERNAL_ERROR: -32603,
639
+ SERVER_NOT_INITIALIZED: -32002,
640
+ UNKNOWN_ERROR: -32001,
641
+ REQUEST_CANCELLED: -32800,
642
+ RATE_LIMITED: -32000,
643
+ AUTHENTICATION_REQUIRED: -32001,
644
+ AUTHORIZATION_FAILED: -32002,
645
+ } as const;
646
+
647
+ export class MCPServerError extends Error {
648
+ constructor(
649
+ message: string,
650
+ public code: number = ErrorCodes.INTERNAL_ERROR,
651
+ public data?: unknown
652
+ ) {
653
+ super(message);
654
+ this.name = 'MCPServerError';
655
+ }
656
+
657
+ toMCPError(): MCPError {
658
+ return {
659
+ code: this.code,
660
+ message: this.message,
661
+ data: this.data,
662
+ };
663
+ }
664
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "declaration": true,
7
+ "declarationMap": true,
8
+ "sourceMap": true,
9
+ "outDir": "./dist",
10
+ "rootDir": "./src",
11
+ "strict": true,
12
+ "esModuleInterop": true,
13
+ "skipLibCheck": true,
14
+ "forceConsistentCasingInFileNames": true,
15
+ "resolveJsonModule": true,
16
+ "isolatedModules": true
17
+ },
18
+ "include": ["src/**/*"],
19
+ "exclude": ["node_modules", "dist", "__tests__"]
20
+ }
@@ -0,0 +1,13 @@
1
+ import { defineConfig } from 'vitest/config';
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ globals: true,
6
+ environment: 'node',
7
+ include: ['__tests__/**/*.test.ts'],
8
+ coverage: {
9
+ provider: 'v8',
10
+ reporter: ['text', 'json', 'html'],
11
+ },
12
+ },
13
+ });