easy-mcp-nest 0.3.0 → 0.5.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/README.md +280 -29
- package/dist/EasyMCP.js +0 -3
- package/dist/EasyMCP.js.map +1 -1
- package/dist/adapters/express/express-adapter.js +10 -0
- package/dist/adapters/express/express-adapter.js.map +1 -1
- package/dist/config/config-validator.js +36 -14
- package/dist/config/config-validator.js.map +1 -1
- package/dist/config/mcp-config.interface.d.ts +9 -4
- package/dist/core/batch/batch-executor.service.d.ts +21 -0
- package/dist/core/batch/batch-executor.service.js +101 -0
- package/dist/core/batch/batch-executor.service.js.map +1 -0
- package/dist/core/documentation/openapi-generator.service.d.ts +13 -0
- package/dist/core/documentation/openapi-generator.service.js +116 -0
- package/dist/core/documentation/openapi-generator.service.js.map +1 -0
- package/dist/core/errors/error-handler.interface.d.ts +11 -0
- package/dist/core/errors/error-handler.interface.js +3 -0
- package/dist/core/errors/error-handler.interface.js.map +1 -0
- package/dist/core/health/health-check.service.d.ts +33 -0
- package/dist/core/health/health-check.service.js +71 -0
- package/dist/core/health/health-check.service.js.map +1 -0
- package/dist/core/mcp-server/mcp-server.service.d.ts +14 -1
- package/dist/core/mcp-server/mcp-server.service.js +198 -4
- package/dist/core/mcp-server/mcp-server.service.js.map +1 -1
- package/dist/core/middleware/middleware-executor.service.d.ts +8 -0
- package/dist/core/middleware/middleware-executor.service.js +46 -0
- package/dist/core/middleware/middleware-executor.service.js.map +1 -0
- package/dist/core/middleware/middleware.interface.d.ts +6 -0
- package/dist/core/middleware/middleware.interface.js +3 -0
- package/dist/core/middleware/middleware.interface.js.map +1 -0
- package/dist/core/observability/metrics.service.d.ts +29 -0
- package/dist/core/observability/metrics.service.js +124 -0
- package/dist/core/observability/metrics.service.js.map +1 -0
- package/dist/core/observability/tracing.service.d.ts +12 -0
- package/dist/core/observability/tracing.service.js +88 -0
- package/dist/core/observability/tracing.service.js.map +1 -0
- package/dist/core/progress/progress-notifier.service.d.ts +16 -0
- package/dist/core/progress/progress-notifier.service.js +96 -0
- package/dist/core/progress/progress-notifier.service.js.map +1 -0
- package/dist/core/rate-limiting/rate-limit.interface.d.ts +11 -0
- package/dist/core/rate-limiting/rate-limit.interface.js +3 -0
- package/dist/core/rate-limiting/rate-limit.interface.js.map +1 -0
- package/dist/core/rate-limiting/rate-limiter.service.d.ts +13 -0
- package/dist/core/rate-limiting/rate-limiter.service.js +147 -0
- package/dist/core/rate-limiting/rate-limiter.service.js.map +1 -0
- package/dist/core/resilience/circuit-breaker.interface.d.ts +15 -0
- package/dist/core/resilience/circuit-breaker.interface.js +3 -0
- package/dist/core/resilience/circuit-breaker.interface.js.map +1 -0
- package/dist/core/resilience/circuit-breaker.service.d.ts +11 -0
- package/dist/core/resilience/circuit-breaker.service.js +117 -0
- package/dist/core/resilience/circuit-breaker.service.js.map +1 -0
- package/dist/core/resilience/retry.service.d.ts +6 -0
- package/dist/core/resilience/retry.service.js +66 -0
- package/dist/core/resilience/retry.service.js.map +1 -0
- package/dist/core/utils/decorator-scanner.d.ts +4 -0
- package/dist/core/utils/decorator-scanner.js +112 -0
- package/dist/core/utils/decorator-scanner.js.map +1 -0
- package/dist/core/utils/sanitize.util.d.ts +1 -0
- package/dist/core/utils/sanitize.util.js +19 -0
- package/dist/core/utils/sanitize.util.js.map +1 -1
- package/dist/decorators/index.d.ts +3 -0
- package/dist/decorators/index.js +12 -1
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/mcp-error-handler.decorator.d.ts +4 -0
- package/dist/decorators/mcp-error-handler.decorator.js +15 -0
- package/dist/decorators/mcp-error-handler.decorator.js.map +1 -0
- package/dist/decorators/mcp-middleware.decorator.d.ts +4 -0
- package/dist/decorators/mcp-middleware.decorator.js +17 -0
- package/dist/decorators/mcp-middleware.decorator.js.map +1 -0
- package/dist/decorators/mcp-tool.decorator.d.ts +28 -0
- package/dist/decorators/mcp-tool.decorator.js +36 -0
- package/dist/decorators/mcp-tool.decorator.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/interface/interface.interface.d.ts +2 -0
- package/dist/interface/mcp-protocol.interface.d.ts +14 -0
- package/dist/interface/mcp-protocol.interface.js.map +1 -1
- package/dist/resources/resource-registry.service.d.ts +3 -2
- package/dist/resources/resource-registry.service.js +7 -3
- package/dist/resources/resource-registry.service.js.map +1 -1
- package/dist/resources/resource.interface.d.ts +2 -1
- package/dist/standalone/core-services.d.ts +5 -0
- package/dist/standalone/core-services.js +18 -2
- package/dist/standalone/core-services.js.map +1 -1
- package/dist/tooling/tool-registry/tool-registry.service.d.ts +7 -1
- package/dist/tooling/tool-registry/tool-registry.service.js +54 -7
- package/dist/tooling/tool-registry/tool-registry.service.js.map +1 -1
- package/dist/tooling/tool.interface.d.ts +7 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/validation/index.d.ts +1 -1
- package/dist/validation/index.js +2 -1
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/zod-integration.d.ts +1 -0
- package/dist/validation/zod-integration.js +14 -0
- package/dist/validation/zod-integration.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -111,24 +111,27 @@ interface McpConfig {
|
|
|
111
111
|
Each tool must implement:
|
|
112
112
|
|
|
113
113
|
```typescript
|
|
114
|
-
interface ToolRegistrationInput {
|
|
114
|
+
interface ToolRegistrationInput<TArgs = Record<string, any>> {
|
|
115
115
|
name: string;
|
|
116
116
|
description: string;
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
117
|
+
/**
|
|
118
|
+
* Tool function that accepts args, optional cancellationToken, optional context, and optional progress callback.
|
|
119
|
+
* For backward compatibility, only the args parameter is required.
|
|
120
|
+
*/
|
|
121
|
+
function: (
|
|
122
|
+
args: TArgs,
|
|
123
|
+
cancellationToken?: CancellationToken,
|
|
124
|
+
context?: McpContext,
|
|
125
|
+
progress?: ProgressCallback
|
|
126
|
+
) => Promise<any>;
|
|
127
|
+
/**
|
|
128
|
+
* Input schema in JSON Schema 2020-12 format or Zod schema.
|
|
129
|
+
* If a Zod schema is provided, it will be converted to JSON Schema internally.
|
|
130
|
+
*/
|
|
131
|
+
inputSchema: JsonSchema2020_12 | z.ZodType<TArgs>;
|
|
131
132
|
icon?: string; // Optional icon URI
|
|
133
|
+
/** Required scopes/permissions for this tool */
|
|
134
|
+
requiredScopes?: string[];
|
|
132
135
|
}
|
|
133
136
|
```
|
|
134
137
|
|
|
@@ -145,8 +148,14 @@ interface ServerInfo {
|
|
|
145
148
|
|
|
146
149
|
### Example Tool
|
|
147
150
|
|
|
151
|
+
#### Using JSON Schema
|
|
152
|
+
|
|
148
153
|
```typescript
|
|
149
|
-
async function searchDatabase(
|
|
154
|
+
async function searchDatabase(
|
|
155
|
+
args: { query: string; limit?: number },
|
|
156
|
+
cancellationToken?: CancellationToken,
|
|
157
|
+
context?: McpContext
|
|
158
|
+
): Promise<string> {
|
|
150
159
|
const results = await db.search(args.query, args.limit || 10);
|
|
151
160
|
return JSON.stringify(results);
|
|
152
161
|
}
|
|
@@ -155,20 +164,86 @@ const searchTool: ToolRegistrationInput = {
|
|
|
155
164
|
name: 'searchDatabase',
|
|
156
165
|
description: 'Searches the database for matching records',
|
|
157
166
|
function: searchDatabase,
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
},
|
|
165
|
-
limit: {
|
|
166
|
-
type: 'integer',
|
|
167
|
-
description: 'Maximum number of results to return',
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
required: ['query'],
|
|
167
|
+
inputSchema: {
|
|
168
|
+
type: 'object', // JSON Schema 2020-12 format
|
|
169
|
+
properties: {
|
|
170
|
+
query: {
|
|
171
|
+
type: 'string',
|
|
172
|
+
description: 'The search query',
|
|
171
173
|
},
|
|
174
|
+
limit: {
|
|
175
|
+
type: 'integer',
|
|
176
|
+
description: 'Maximum number of results to return',
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
required: ['query'],
|
|
180
|
+
},
|
|
181
|
+
requiredScopes: ['database:read'], // Optional: require specific permissions
|
|
182
|
+
};
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
#### Using Zod Schema (Recommended)
|
|
186
|
+
|
|
187
|
+
```typescript
|
|
188
|
+
import { z } from 'zod';
|
|
189
|
+
|
|
190
|
+
const SearchSchema = z.object({
|
|
191
|
+
query: z.string().describe('The search query'),
|
|
192
|
+
limit: z.number().int().positive().optional().describe('Maximum number of results to return'),
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
type SearchParams = z.infer<typeof SearchSchema>;
|
|
196
|
+
|
|
197
|
+
async function searchDatabase(
|
|
198
|
+
args: SearchParams,
|
|
199
|
+
cancellationToken?: CancellationToken,
|
|
200
|
+
context?: McpContext
|
|
201
|
+
): Promise<string> {
|
|
202
|
+
// args is fully typed as SearchParams
|
|
203
|
+
const results = await db.search(args.query, args.limit || 10);
|
|
204
|
+
return JSON.stringify(results);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const searchTool: ToolRegistrationInput<SearchParams> = {
|
|
208
|
+
name: 'searchDatabase',
|
|
209
|
+
description: 'Searches the database for matching records',
|
|
210
|
+
function: searchDatabase,
|
|
211
|
+
inputSchema: SearchSchema, // Direct Zod schema - no conversion needed!
|
|
212
|
+
requiredScopes: ['database:read'],
|
|
213
|
+
};
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### ResourceRegistrationInput
|
|
217
|
+
|
|
218
|
+
Resources can now access context (user info, scopes, etc.):
|
|
219
|
+
|
|
220
|
+
```typescript
|
|
221
|
+
interface ResourceRegistrationInput {
|
|
222
|
+
uri: string;
|
|
223
|
+
name: string;
|
|
224
|
+
description?: string;
|
|
225
|
+
mimeType?: string;
|
|
226
|
+
icon?: string;
|
|
227
|
+
/**
|
|
228
|
+
* Function that returns the resource content.
|
|
229
|
+
* Context is provided when the resource is accessed.
|
|
230
|
+
*/
|
|
231
|
+
getContent: (context?: McpContext) => Promise<string | { type: string; data: string; mimeType?: string }>;
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
#### Example Resource
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
const buildingListResource: ResourceRegistrationInput = {
|
|
239
|
+
uri: 'building://list',
|
|
240
|
+
name: 'Building List',
|
|
241
|
+
description: 'List of buildings accessible to the user',
|
|
242
|
+
getContent: async (context) => {
|
|
243
|
+
// Context is now available!
|
|
244
|
+
const buildings = await getBuildingService().getBuildings(context?.userId);
|
|
245
|
+
return JSON.stringify(buildings);
|
|
246
|
+
},
|
|
172
247
|
};
|
|
173
248
|
```
|
|
174
249
|
|
|
@@ -460,6 +535,182 @@ Debug mode provides detailed information about:
|
|
|
460
535
|
|
|
461
536
|
**Note**: The `DEBUG` environment variable accepts either `'1'` or `'true'` (case-sensitive) to enable debug logging.
|
|
462
537
|
|
|
538
|
+
## High-Value Framework Features
|
|
539
|
+
|
|
540
|
+
EasyMCP provides production-ready features out of the box:
|
|
541
|
+
|
|
542
|
+
### 1. Declarative Tool Registration with @McpTool
|
|
543
|
+
|
|
544
|
+
Define tools using decorators for automatic discovery and registration:
|
|
545
|
+
|
|
546
|
+
```typescript
|
|
547
|
+
import { McpTool, McpParam, McpContext } from 'easy-mcp-nest';
|
|
548
|
+
import { z } from 'zod';
|
|
549
|
+
|
|
550
|
+
const CreateBuildingSchema = z.object({
|
|
551
|
+
name: z.string(),
|
|
552
|
+
address: z.string(),
|
|
553
|
+
});
|
|
554
|
+
|
|
555
|
+
@McpTool({
|
|
556
|
+
name: 'create_building',
|
|
557
|
+
description: 'Creates a new building',
|
|
558
|
+
requiredScopes: ['building:write'],
|
|
559
|
+
rateLimit: { max: 10, window: '1m' },
|
|
560
|
+
retry: { maxAttempts: 3, backoff: 'exponential' }
|
|
561
|
+
})
|
|
562
|
+
async createBuilding(
|
|
563
|
+
@McpParam(CreateBuildingSchema) params: z.infer<typeof CreateBuildingSchema>,
|
|
564
|
+
@McpContext() context: McpContext
|
|
565
|
+
) {
|
|
566
|
+
return this.service.createBuilding(context.userId, params);
|
|
567
|
+
}
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
### 2. Automatic Scope Checking
|
|
571
|
+
|
|
572
|
+
Declarative scope validation - framework handles security automatically:
|
|
573
|
+
|
|
574
|
+
```typescript
|
|
575
|
+
@McpTool({
|
|
576
|
+
name: 'delete_building',
|
|
577
|
+
requiredScopes: ['building:write', 'building:delete']
|
|
578
|
+
})
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
### 3. Progress Notifications
|
|
582
|
+
|
|
583
|
+
Report progress for long-running operations:
|
|
584
|
+
|
|
585
|
+
```typescript
|
|
586
|
+
@McpTool({ name: 'analyze_debts' })
|
|
587
|
+
async analyzeDebts(
|
|
588
|
+
args: any,
|
|
589
|
+
cancellationToken?: CancellationToken,
|
|
590
|
+
context?: McpContext,
|
|
591
|
+
progress?: ProgressCallback
|
|
592
|
+
) {
|
|
593
|
+
progress?.({ progress: 0.1, message: 'Fetching payment data...' });
|
|
594
|
+
// ... work ...
|
|
595
|
+
progress?.({ progress: 0.5, message: 'Processing 5/10 apartments...' });
|
|
596
|
+
// ... work ...
|
|
597
|
+
progress?.({ progress: 1.0, message: 'Complete!' });
|
|
598
|
+
}
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
### 4. Built-in Observability
|
|
602
|
+
|
|
603
|
+
Automatic metrics collection and Prometheus-compatible endpoints:
|
|
604
|
+
|
|
605
|
+
- Tool execution count
|
|
606
|
+
- Average execution time
|
|
607
|
+
- Error rate by tool
|
|
608
|
+
- Request tracing
|
|
609
|
+
- Performance monitoring
|
|
610
|
+
|
|
611
|
+
Access metrics at `/metrics` endpoint (Prometheus format).
|
|
612
|
+
|
|
613
|
+
### 5. Rate Limiting
|
|
614
|
+
|
|
615
|
+
Per-tool rate limiting with configurable limits:
|
|
616
|
+
|
|
617
|
+
```typescript
|
|
618
|
+
@McpTool({
|
|
619
|
+
name: 'create_building',
|
|
620
|
+
rateLimit: { max: 10, window: '1m' } // 10 requests per minute
|
|
621
|
+
})
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
### 6. Retry Logic
|
|
625
|
+
|
|
626
|
+
Automatic retry with exponential backoff:
|
|
627
|
+
|
|
628
|
+
```typescript
|
|
629
|
+
@McpTool({
|
|
630
|
+
name: 'create_building',
|
|
631
|
+
retry: {
|
|
632
|
+
maxAttempts: 3,
|
|
633
|
+
backoff: 'exponential',
|
|
634
|
+
initialDelay: 100,
|
|
635
|
+
maxDelay: 10000
|
|
636
|
+
}
|
|
637
|
+
})
|
|
638
|
+
```
|
|
639
|
+
|
|
640
|
+
### 7. Circuit Breaker
|
|
641
|
+
|
|
642
|
+
Automatic circuit breaking when error rate exceeds threshold:
|
|
643
|
+
|
|
644
|
+
- Prevents overwhelming system during outages
|
|
645
|
+
- Automatic recovery with half-open state
|
|
646
|
+
- Per-tool circuit breakers
|
|
647
|
+
|
|
648
|
+
### 8. Error Handling Hooks
|
|
649
|
+
|
|
650
|
+
Centralized error handling with decorators:
|
|
651
|
+
|
|
652
|
+
```typescript
|
|
653
|
+
@McpErrorHandler((error, context) => {
|
|
654
|
+
logErrorSecurely('MCP error', error, context);
|
|
655
|
+
return sanitizeError(error);
|
|
656
|
+
})
|
|
657
|
+
export class MyErrorHandler {}
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
### 9. Middleware System
|
|
661
|
+
|
|
662
|
+
Pre/post execution hooks for cross-cutting concerns:
|
|
663
|
+
|
|
664
|
+
```typescript
|
|
665
|
+
@McpMiddleware(async (req, context, next) => {
|
|
666
|
+
const start = Date.now();
|
|
667
|
+
const result = await next();
|
|
668
|
+
logPerformance(req.method, Date.now() - start);
|
|
669
|
+
return result;
|
|
670
|
+
})
|
|
671
|
+
export class PerformanceMiddleware {}
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
### 10. Batch Tool Execution
|
|
675
|
+
|
|
676
|
+
Execute multiple tools in parallel:
|
|
677
|
+
|
|
678
|
+
```typescript
|
|
679
|
+
// JSON-RPC request
|
|
680
|
+
{
|
|
681
|
+
"jsonrpc": "2.0",
|
|
682
|
+
"method": "tools/batch",
|
|
683
|
+
"params": {
|
|
684
|
+
"tools": [
|
|
685
|
+
{ "name": "create_building", "arguments": {...} },
|
|
686
|
+
{ "name": "add_apartment", "arguments": {...} }
|
|
687
|
+
]
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
```
|
|
691
|
+
|
|
692
|
+
### 11. Health Check Endpoints
|
|
693
|
+
|
|
694
|
+
Production-ready health checks:
|
|
695
|
+
|
|
696
|
+
- `GET /health` - Basic health check
|
|
697
|
+
- `GET /health/ready` - Readiness probe
|
|
698
|
+
- `GET /health/live` - Liveness probe
|
|
699
|
+
- `GET /metrics` - Prometheus metrics
|
|
700
|
+
|
|
701
|
+
### 12. Testing Utilities
|
|
702
|
+
|
|
703
|
+
Easy testing with test helpers:
|
|
704
|
+
|
|
705
|
+
```typescript
|
|
706
|
+
import { createMcpTestApp, mockMcpContext } from 'easy-mcp-nest';
|
|
707
|
+
|
|
708
|
+
const app = await createMcpTestApp([BuildingTools]);
|
|
709
|
+
const context = mockMcpContext({ userId: '123', scopes: ['read', 'write'] });
|
|
710
|
+
const result = await app.callTool('create_building', params, context);
|
|
711
|
+
await app.close();
|
|
712
|
+
```
|
|
713
|
+
|
|
463
714
|
## New Features
|
|
464
715
|
|
|
465
716
|
### Express Adapter
|
package/dist/EasyMCP.js
CHANGED
|
@@ -35,7 +35,6 @@ class EasyMCP {
|
|
|
35
35
|
toolRegistry.registerToolFromConfig(tool);
|
|
36
36
|
}
|
|
37
37
|
catch (error) {
|
|
38
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
39
38
|
const sanitizedToolName = (0, sanitize_util_1.sanitizeName)(tool.name);
|
|
40
39
|
logger_util_1.logger.error("EasyMCP", "Failed to register tool", {
|
|
41
40
|
component: "EasyMCP",
|
|
@@ -57,7 +56,6 @@ class EasyMCP {
|
|
|
57
56
|
resourceRegistry.registerResourceFromConfig(resource);
|
|
58
57
|
}
|
|
59
58
|
catch (error) {
|
|
60
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
61
59
|
const sanitizedUri = (0, sanitize_util_1.sanitizeUri)(resource.uri);
|
|
62
60
|
logger_util_1.logger.error("EasyMCP", "Failed to register resource", {
|
|
63
61
|
component: "EasyMCP",
|
|
@@ -79,7 +77,6 @@ class EasyMCP {
|
|
|
79
77
|
promptRegistry.registerPromptFromConfig(prompt);
|
|
80
78
|
}
|
|
81
79
|
catch (error) {
|
|
82
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
83
80
|
const sanitizedPromptName = (0, sanitize_util_1.sanitizeName)(prompt.name);
|
|
84
81
|
logger_util_1.logger.error("EasyMCP", "Failed to register prompt", {
|
|
85
82
|
component: "EasyMCP",
|
package/dist/EasyMCP.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EasyMCP.js","sourceRoot":"","sources":["../src/EasyMCP.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAE3C,6CAAyC;AAEzC,kDAAkD;AAClD,6EAAwE;AAExE,gEAA4D;AAC5D,yFAAoF;AACpF,qFAAgF;AAChF,+EAA0E;AAC1E,0DAAkD;AAClD,8DAA6F;AAC7F,4EAAuE;AAIvE,MAAa,OAAO;IACV,MAAM,CAAC,GAAG,CAA0B;IAOrC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAiB;QAC9C,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,oBAAM,CAAC,IAAI,CAAC,SAAS,EAAE,gCAAgC,EAAE;gBACvD,SAAS,EAAE,SAAS;aACrB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAGD,kCAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAKjC,MAAM,SAAS,GAAG,MAAM,kBAAW,CAAC,wBAAwB,CAAC,sBAAS,EAAE;YACtE,MAAM,EAAE,IAAI,yCAAkB,EAAE;SACjC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;QAIrB,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAsB,wBAAY,CAAC,CAAC;QACtE,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAG/B,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAsB,2CAAmB,CAAC,CAAC;YAC7E,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,IAAI,CAAC;oBACH,YAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;gBAC5C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,
|
|
1
|
+
{"version":3,"file":"EasyMCP.js","sourceRoot":"","sources":["../src/EasyMCP.ts"],"names":[],"mappings":"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"}
|
|
@@ -120,6 +120,16 @@ function createMcpExpressRouter(options) {
|
|
|
120
120
|
version: config.serverInfo?.version || "unknown",
|
|
121
121
|
});
|
|
122
122
|
});
|
|
123
|
+
router.get(`${pathPrefix}/health/ready`, (req, res) => {
|
|
124
|
+
const ready = tools.length > 0;
|
|
125
|
+
res.status(ready ? 200 : 503).json({ ready });
|
|
126
|
+
});
|
|
127
|
+
router.get(`${pathPrefix}/health/live`, (req, res) => {
|
|
128
|
+
res.status(200).json({ alive: true });
|
|
129
|
+
});
|
|
130
|
+
router.get(`${pathPrefix}/metrics`, (req, res) => {
|
|
131
|
+
res.status(200).set("Content-Type", "text/plain").send("# Metrics endpoint - implement with MetricsService");
|
|
132
|
+
});
|
|
123
133
|
return router;
|
|
124
134
|
}
|
|
125
135
|
//# sourceMappingURL=express-adapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express-adapter.js","sourceRoot":"","sources":["../../../src/adapters/express/express-adapter.ts"],"names":[],"mappings":";;AAsCA,
|
|
1
|
+
{"version":3,"file":"express-adapter.js","sourceRoot":"","sources":["../../../src/adapters/express/express-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ConfigValidator = void 0;
|
|
4
4
|
const easy_mcp_error_1 = require("../core/errors/easy-mcp-error");
|
|
5
5
|
const tool_naming_validator_1 = require("../core/utils/tool-naming-validator");
|
|
6
|
+
const zod_integration_1 = require("../validation/zod-integration");
|
|
6
7
|
class ConfigValidator {
|
|
7
8
|
static validate(config) {
|
|
8
9
|
if (!config) {
|
|
@@ -107,35 +108,46 @@ class ConfigValidator {
|
|
|
107
108
|
if (!tool.inputSchema) {
|
|
108
109
|
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': inputSchema is required`);
|
|
109
110
|
}
|
|
110
|
-
|
|
111
|
-
|
|
111
|
+
let normalizedSchema;
|
|
112
|
+
try {
|
|
113
|
+
normalizedSchema = (0, zod_integration_1.normalizeInputSchema)(tool.inputSchema);
|
|
112
114
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
+
catch (error) {
|
|
116
|
+
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': inputSchema is invalid: ${error instanceof Error ? error.message : String(error)}`);
|
|
117
|
+
}
|
|
118
|
+
if (normalizedSchema.type !== 'object') {
|
|
119
|
+
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': inputSchema.type must be 'object' (JSON Schema 2020-12 format or Zod object schema)`);
|
|
120
|
+
}
|
|
121
|
+
if (normalizedSchema.properties !== undefined) {
|
|
122
|
+
if (typeof normalizedSchema.properties !== 'object' || Array.isArray(normalizedSchema.properties)) {
|
|
115
123
|
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': inputSchema.properties must be an object`);
|
|
116
124
|
}
|
|
117
|
-
for (const [propName, propDef] of Object.entries(
|
|
125
|
+
for (const [propName, propDef] of Object.entries(normalizedSchema.properties)) {
|
|
118
126
|
if (!propDef || typeof propDef !== 'object' || Array.isArray(propDef)) {
|
|
119
127
|
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': property '${propName}' must be an object`);
|
|
120
128
|
}
|
|
121
|
-
|
|
129
|
+
const schemaProp = propDef;
|
|
130
|
+
if (schemaProp.type !== undefined) {
|
|
122
131
|
const validTypes = ['string', 'number', 'integer', 'boolean', 'array', 'object'];
|
|
123
|
-
if (typeof
|
|
124
|
-
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': property '${propName}' has invalid type '${
|
|
132
|
+
if (typeof schemaProp.type !== 'string' || !validTypes.includes(schemaProp.type)) {
|
|
133
|
+
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': property '${propName}' has invalid type '${schemaProp.type}'. Must be one of: ${validTypes.join(', ')} (JSON Schema 2020-12 format)`);
|
|
125
134
|
}
|
|
126
135
|
}
|
|
127
|
-
if (
|
|
136
|
+
if (schemaProp.description !== undefined && typeof schemaProp.description !== 'string') {
|
|
128
137
|
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': property '${propName}' description must be a string if provided`);
|
|
129
138
|
}
|
|
130
139
|
}
|
|
131
140
|
}
|
|
132
|
-
if (
|
|
133
|
-
if (!Array.isArray(
|
|
141
|
+
if (normalizedSchema.required !== undefined) {
|
|
142
|
+
if (!Array.isArray(normalizedSchema.required)) {
|
|
134
143
|
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': inputSchema.required must be an array`);
|
|
135
144
|
}
|
|
136
|
-
if (
|
|
137
|
-
|
|
138
|
-
|
|
145
|
+
if (!normalizedSchema.required.every(r => typeof r === 'string')) {
|
|
146
|
+
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': inputSchema.required must contain only strings`);
|
|
147
|
+
}
|
|
148
|
+
if (normalizedSchema.properties) {
|
|
149
|
+
for (const requiredProp of normalizedSchema.required) {
|
|
150
|
+
if (!(requiredProp in normalizedSchema.properties)) {
|
|
139
151
|
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': required property '${requiredProp}' does not exist in properties`);
|
|
140
152
|
}
|
|
141
153
|
}
|
|
@@ -144,6 +156,16 @@ class ConfigValidator {
|
|
|
144
156
|
if (tool.icon !== undefined && typeof tool.icon !== 'string') {
|
|
145
157
|
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': icon must be a string (URI) if provided`);
|
|
146
158
|
}
|
|
159
|
+
if (tool.requiredScopes !== undefined) {
|
|
160
|
+
if (!Array.isArray(tool.requiredScopes)) {
|
|
161
|
+
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': requiredScopes must be an array if provided`);
|
|
162
|
+
}
|
|
163
|
+
for (const scope of tool.requiredScopes) {
|
|
164
|
+
if (typeof scope !== 'string' || scope.trim().length === 0) {
|
|
165
|
+
throw new easy_mcp_error_1.ConfigurationError(`Tool '${tool.name}': requiredScopes must contain non-empty strings`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
147
169
|
}
|
|
148
170
|
}
|
|
149
171
|
exports.ConfigValidator = ConfigValidator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../../src/config/config-validator.ts"],"names":[],"mappings":";;;AACA,kEAAmE;AACnE,+EAA0E;
|
|
1
|
+
{"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../../src/config/config-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { CancellationToken } from "../tooling/tool.interface";
|
|
3
|
+
import type { McpContext } from "../core/context/mcp-context.interface";
|
|
4
|
+
import type { ProgressCallback } from "../core/progress/progress-notifier.service";
|
|
1
5
|
export interface JsonSchema2020_12 {
|
|
2
6
|
type?: "object" | "string" | "number" | "integer" | "boolean" | "array" | "null";
|
|
3
7
|
properties?: Record<string, JsonSchema2020_12>;
|
|
@@ -13,12 +17,13 @@ export interface JsonSchema2020_12 {
|
|
|
13
17
|
$ref?: string;
|
|
14
18
|
[key: string]: any;
|
|
15
19
|
}
|
|
16
|
-
export interface ToolRegistrationInput {
|
|
20
|
+
export interface ToolRegistrationInput<TArgs = Record<string, any>> {
|
|
17
21
|
name: string;
|
|
18
22
|
description: string;
|
|
19
|
-
function: (args:
|
|
20
|
-
inputSchema: JsonSchema2020_12
|
|
23
|
+
function: (args: TArgs, cancellationToken?: CancellationToken, context?: McpContext, progress?: ProgressCallback) => Promise<any>;
|
|
24
|
+
inputSchema: JsonSchema2020_12 | z.ZodType<TArgs>;
|
|
21
25
|
icon?: string;
|
|
26
|
+
requiredScopes?: string[];
|
|
22
27
|
}
|
|
23
28
|
export interface ServerInfo {
|
|
24
29
|
name: string;
|
|
@@ -30,7 +35,7 @@ export interface ResourceRegistrationInput {
|
|
|
30
35
|
description?: string;
|
|
31
36
|
mimeType?: string;
|
|
32
37
|
icon?: string;
|
|
33
|
-
getContent: () => Promise<string | {
|
|
38
|
+
getContent: (context?: McpContext) => Promise<string | {
|
|
34
39
|
type: string;
|
|
35
40
|
data: string;
|
|
36
41
|
mimeType?: string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ToolRegistryService } from "../../tooling/tool-registry/tool-registry.service";
|
|
2
|
+
import { CancellationToken } from "../../tooling/tool.interface";
|
|
3
|
+
import { McpContext } from "../context/mcp-context.interface";
|
|
4
|
+
import { ProgressCallback } from "../progress/progress-notifier.service";
|
|
5
|
+
export interface BatchToolRequest {
|
|
6
|
+
tool: string;
|
|
7
|
+
args: Record<string, any>;
|
|
8
|
+
}
|
|
9
|
+
export interface BatchToolResult {
|
|
10
|
+
tool: string;
|
|
11
|
+
success: boolean;
|
|
12
|
+
result?: any;
|
|
13
|
+
error?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class BatchExecutorService {
|
|
16
|
+
private readonly toolRegistry;
|
|
17
|
+
private static readonly MAX_BATCH_SIZE;
|
|
18
|
+
private static readonly MAX_CONCURRENCY;
|
|
19
|
+
constructor(toolRegistry: ToolRegistryService);
|
|
20
|
+
executeBatch(requests: BatchToolRequest[], cancellationToken?: CancellationToken, context?: McpContext, progress?: ProgressCallback): Promise<BatchToolResult[]>;
|
|
21
|
+
}
|