@bryan-thompson/inspector-assessment 1.6.0 → 1.7.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 (76) hide show
  1. package/cli/build/assess-full.js +528 -0
  2. package/cli/build/assess-security.js +342 -0
  3. package/client/dist/assets/{OAuthCallback-ZcXdfhZQ.js → OAuthCallback-Xo9zS7pv.js} +1 -1
  4. package/client/dist/assets/{OAuthDebugCallback-xt1SlIHS.js → OAuthDebugCallback-CaIey8K_.js} +1 -1
  5. package/client/dist/assets/{index-B3lTiDVe.js → index-nCPw6E-c.js} +4 -4
  6. package/client/dist/index.html +1 -1
  7. package/client/lib/lib/assessmentTypes.d.ts +670 -0
  8. package/client/lib/lib/assessmentTypes.d.ts.map +1 -0
  9. package/client/lib/lib/assessmentTypes.js +220 -0
  10. package/client/lib/lib/aupPatterns.d.ts +63 -0
  11. package/client/lib/lib/aupPatterns.d.ts.map +1 -0
  12. package/client/lib/lib/aupPatterns.js +344 -0
  13. package/client/lib/lib/prohibitedLibraries.d.ts +76 -0
  14. package/client/lib/lib/prohibitedLibraries.d.ts.map +1 -0
  15. package/client/lib/lib/prohibitedLibraries.js +364 -0
  16. package/client/lib/lib/securityPatterns.d.ts +64 -0
  17. package/client/lib/lib/securityPatterns.d.ts.map +1 -0
  18. package/client/lib/lib/securityPatterns.js +453 -0
  19. package/client/lib/services/assessment/AssessmentOrchestrator.d.ts +88 -0
  20. package/client/lib/services/assessment/AssessmentOrchestrator.d.ts.map +1 -0
  21. package/client/lib/services/assessment/AssessmentOrchestrator.js +418 -0
  22. package/client/lib/services/assessment/ResponseValidator.d.ts +69 -0
  23. package/client/lib/services/assessment/ResponseValidator.d.ts.map +1 -0
  24. package/client/lib/services/assessment/ResponseValidator.js +1038 -0
  25. package/client/lib/services/assessment/TestDataGenerator.d.ts +86 -0
  26. package/client/lib/services/assessment/TestDataGenerator.d.ts.map +1 -0
  27. package/client/lib/services/assessment/TestDataGenerator.js +669 -0
  28. package/client/lib/services/assessment/TestScenarioEngine.d.ts +91 -0
  29. package/client/lib/services/assessment/TestScenarioEngine.d.ts.map +1 -0
  30. package/client/lib/services/assessment/TestScenarioEngine.js +505 -0
  31. package/client/lib/services/assessment/ToolClassifier.d.ts +61 -0
  32. package/client/lib/services/assessment/ToolClassifier.d.ts.map +1 -0
  33. package/client/lib/services/assessment/ToolClassifier.js +349 -0
  34. package/client/lib/services/assessment/lib/claudeCodeBridge.d.ts +160 -0
  35. package/client/lib/services/assessment/lib/claudeCodeBridge.d.ts.map +1 -0
  36. package/client/lib/services/assessment/lib/claudeCodeBridge.js +357 -0
  37. package/client/lib/services/assessment/modules/AUPComplianceAssessor.d.ts +100 -0
  38. package/client/lib/services/assessment/modules/AUPComplianceAssessor.d.ts.map +1 -0
  39. package/client/lib/services/assessment/modules/AUPComplianceAssessor.js +474 -0
  40. package/client/lib/services/assessment/modules/BaseAssessor.d.ts +71 -0
  41. package/client/lib/services/assessment/modules/BaseAssessor.d.ts.map +1 -0
  42. package/client/lib/services/assessment/modules/BaseAssessor.js +171 -0
  43. package/client/lib/services/assessment/modules/DocumentationAssessor.d.ts +45 -0
  44. package/client/lib/services/assessment/modules/DocumentationAssessor.d.ts.map +1 -0
  45. package/client/lib/services/assessment/modules/DocumentationAssessor.js +355 -0
  46. package/client/lib/services/assessment/modules/ErrorHandlingAssessor.d.ts +25 -0
  47. package/client/lib/services/assessment/modules/ErrorHandlingAssessor.d.ts.map +1 -0
  48. package/client/lib/services/assessment/modules/ErrorHandlingAssessor.js +564 -0
  49. package/client/lib/services/assessment/modules/FunctionalityAssessor.d.ts +20 -0
  50. package/client/lib/services/assessment/modules/FunctionalityAssessor.d.ts.map +1 -0
  51. package/client/lib/services/assessment/modules/FunctionalityAssessor.js +253 -0
  52. package/client/lib/services/assessment/modules/MCPSpecComplianceAssessor.d.ts +70 -0
  53. package/client/lib/services/assessment/modules/MCPSpecComplianceAssessor.d.ts.map +1 -0
  54. package/client/lib/services/assessment/modules/MCPSpecComplianceAssessor.js +508 -0
  55. package/client/lib/services/assessment/modules/ManifestValidationAssessor.d.ts +70 -0
  56. package/client/lib/services/assessment/modules/ManifestValidationAssessor.d.ts.map +1 -0
  57. package/client/lib/services/assessment/modules/ManifestValidationAssessor.js +430 -0
  58. package/client/lib/services/assessment/modules/PortabilityAssessor.d.ts +43 -0
  59. package/client/lib/services/assessment/modules/PortabilityAssessor.d.ts.map +1 -0
  60. package/client/lib/services/assessment/modules/PortabilityAssessor.js +347 -0
  61. package/client/lib/services/assessment/modules/ProhibitedLibrariesAssessor.d.ts +41 -0
  62. package/client/lib/services/assessment/modules/ProhibitedLibrariesAssessor.d.ts.map +1 -0
  63. package/client/lib/services/assessment/modules/ProhibitedLibrariesAssessor.js +256 -0
  64. package/client/lib/services/assessment/modules/SecurityAssessor.d.ts +176 -0
  65. package/client/lib/services/assessment/modules/SecurityAssessor.d.ts.map +1 -0
  66. package/client/lib/services/assessment/modules/SecurityAssessor.js +1333 -0
  67. package/client/lib/services/assessment/modules/ToolAnnotationAssessor.d.ts +96 -0
  68. package/client/lib/services/assessment/modules/ToolAnnotationAssessor.d.ts.map +1 -0
  69. package/client/lib/services/assessment/modules/ToolAnnotationAssessor.js +593 -0
  70. package/client/lib/services/assessment/modules/UsabilityAssessor.d.ts +21 -0
  71. package/client/lib/services/assessment/modules/UsabilityAssessor.d.ts.map +1 -0
  72. package/client/lib/services/assessment/modules/UsabilityAssessor.js +241 -0
  73. package/client/lib/services/assessment/modules/index.d.ts +33 -0
  74. package/client/lib/services/assessment/modules/index.d.ts.map +1 -0
  75. package/client/lib/services/assessment/modules/index.js +35 -0
  76. package/package.json +5 -2
@@ -0,0 +1,453 @@
1
+ /**
2
+ * Backend API Security Patterns
3
+ * Tests MCP server API security with 13 focused patterns
4
+ *
5
+ * Architecture: Attack-Type with Specific Payloads
6
+ * - Critical Injection (4 patterns): Command, Calculator, SQL, Path Traversal
7
+ * - Input Validation (3 patterns): Type Safety, Boundary Testing, Required Fields
8
+ * - Protocol Compliance (2 patterns): MCP Error Format, Timeout Handling
9
+ * - Tool-Specific Vulnerabilities (4 patterns): Indirect Injection, Unicode Bypass, Nested Injection, Package Squatting
10
+ *
11
+ * Scope: Backend API Security ONLY
12
+ * - Tests structured data inputs to API endpoints
13
+ * - Validates server-side security controls
14
+ * - Tests MCP protocol compliance
15
+ * - Tests tool-specific vulnerability patterns with parameter-aware payloads
16
+ *
17
+ * Out of Scope: LLM Prompt Injection
18
+ * - MCP servers are APIs that receive structured data, not prompts
19
+ * - If a server uses an LLM internally, that's the LLM's responsibility
20
+ * - We test the MCP API layer, not the LLM behavior layer
21
+ */
22
+ /**
23
+ * ========================================
24
+ * BACKEND API SECURITY PATTERNS
25
+ * ========================================
26
+ *
27
+ * 13 focused patterns for MCP server API security
28
+ */
29
+ export const SECURITY_ATTACK_PATTERNS = [
30
+ // ==========================================
31
+ // CRITICAL INJECTION TESTS (4)
32
+ // ==========================================
33
+ // 1. COMMAND INJECTION
34
+ {
35
+ attackName: "Command Injection",
36
+ description: "Test if tool executes system commands instead of treating them as safe parameters",
37
+ payloads: [
38
+ // System command payloads - might trigger command execution tools
39
+ {
40
+ payload: "whoami",
41
+ evidence: /\b(root|user|admin)\b/i,
42
+ riskLevel: "HIGH",
43
+ description: "System identity command",
44
+ payloadType: "injection",
45
+ },
46
+ {
47
+ payload: "ls -la",
48
+ evidence: /(total|drwx|rwx|-rw-|permissions|directory)/i,
49
+ riskLevel: "HIGH",
50
+ description: "Directory listing command",
51
+ payloadType: "injection",
52
+ },
53
+ {
54
+ payload: "pwd",
55
+ evidence: /\/[a-z]+/i,
56
+ riskLevel: "HIGH",
57
+ description: "Working directory command",
58
+ payloadType: "injection",
59
+ },
60
+ {
61
+ payload: "; rm -rf /",
62
+ evidence: /(deleted|removed|rm.*rf)/i,
63
+ riskLevel: "HIGH",
64
+ description: "Command chaining with destructive command",
65
+ payloadType: "injection",
66
+ },
67
+ {
68
+ payload: "| cat /etc/passwd",
69
+ evidence: /(root:x:|file.*protocol.*executed|local.*file.*ran)/i,
70
+ riskLevel: "HIGH",
71
+ description: "Pipe to file access command",
72
+ payloadType: "injection",
73
+ },
74
+ ],
75
+ },
76
+ // 2. SQL INJECTION
77
+ {
78
+ attackName: "SQL Injection",
79
+ description: "Test if tool properly escapes SQL commands",
80
+ payloads: [
81
+ {
82
+ payload: "'; DROP TABLE users;--",
83
+ evidence: /(dropped|deleted|table.*users|sql.*error|syntax.*error)/i,
84
+ riskLevel: "HIGH",
85
+ description: "SQL command injection",
86
+ payloadType: "injection",
87
+ },
88
+ {
89
+ payload: "' OR '1'='1",
90
+ evidence: /(sql|query|select|where.*1.*1|syntax.*error)/i,
91
+ riskLevel: "HIGH",
92
+ description: "Boolean-based SQL injection",
93
+ payloadType: "injection",
94
+ },
95
+ {
96
+ payload: "admin'--",
97
+ evidence: /(sql.*executed|admin.*query|syntax.*error)/i,
98
+ riskLevel: "HIGH",
99
+ description: "Comment-based SQL injection",
100
+ payloadType: "injection",
101
+ },
102
+ {
103
+ payload: "' UNION SELECT * FROM passwords--",
104
+ evidence: /(union.*select|password|sql.*error|syntax.*error)/i,
105
+ riskLevel: "HIGH",
106
+ description: "UNION-based SQL injection",
107
+ payloadType: "injection",
108
+ },
109
+ ],
110
+ },
111
+ // 3. CALCULATOR INJECTION
112
+ {
113
+ attackName: "Calculator Injection",
114
+ description: "Test if calculator/math tools execute arbitrary expressions instead of safely storing them",
115
+ payloads: [
116
+ // Simple arithmetic - triggers eval() in vulnerable calculator tools
117
+ {
118
+ payload: "2+2",
119
+ evidence: /The answer is 4/i,
120
+ riskLevel: "HIGH",
121
+ description: "Simple arithmetic expression (common trigger)",
122
+ payloadType: "injection",
123
+ },
124
+ {
125
+ payload: "5*5",
126
+ evidence: /The answer is 25/i,
127
+ riskLevel: "HIGH",
128
+ description: "Multiplication expression",
129
+ payloadType: "injection",
130
+ },
131
+ {
132
+ payload: "100+200",
133
+ evidence: /The answer is 300/i,
134
+ riskLevel: "HIGH",
135
+ description: "Addition with larger numbers",
136
+ payloadType: "injection",
137
+ },
138
+ // Natural language triggers
139
+ {
140
+ payload: "what is 10*10",
141
+ evidence: /The answer is 100/i,
142
+ riskLevel: "HIGH",
143
+ description: "Natural language math query",
144
+ payloadType: "injection",
145
+ },
146
+ {
147
+ payload: "calculate 50+50",
148
+ evidence: /The answer is 100/i,
149
+ riskLevel: "HIGH",
150
+ description: "Calculate command",
151
+ payloadType: "injection",
152
+ },
153
+ // Code injection via eval()
154
+ {
155
+ payload: "__import__('os').system('whoami')",
156
+ evidence: /\b(root|user|admin|ubuntu)\b/i,
157
+ riskLevel: "HIGH",
158
+ description: "Python code injection via eval",
159
+ payloadType: "injection",
160
+ },
161
+ {
162
+ payload: "1+1; __import__('subprocess').run(['whoami'])",
163
+ evidence: /\b(root|user|admin|ubuntu)\b/i,
164
+ riskLevel: "HIGH",
165
+ description: "eval chain to system command",
166
+ payloadType: "injection",
167
+ },
168
+ ],
169
+ },
170
+ // 4. PATH TRAVERSAL
171
+ {
172
+ attackName: "Path Traversal",
173
+ description: "Test if tool allows access to files outside intended directory",
174
+ payloads: [
175
+ {
176
+ payload: "../../../etc/passwd",
177
+ evidence: /(root:x:0:0|file.*accessed|passwd.*file)/i,
178
+ riskLevel: "HIGH",
179
+ description: "Unix path traversal",
180
+ payloadType: "injection",
181
+ },
182
+ {
183
+ payload: "..\\..\\..\\windows\\system32\\config\\sam",
184
+ evidence: /(\[boot loader\]|sam.*file|system32)/i,
185
+ riskLevel: "HIGH",
186
+ description: "Windows path traversal",
187
+ payloadType: "injection",
188
+ },
189
+ {
190
+ payload: "/etc/passwd",
191
+ evidence: /(root:x:0:0|file.*accessed)/i,
192
+ riskLevel: "HIGH",
193
+ description: "Absolute path access",
194
+ payloadType: "injection",
195
+ },
196
+ {
197
+ payload: "file:///etc/passwd",
198
+ evidence: /(root:x:|file.*protocol.*executed|local.*file.*accessed)/i,
199
+ riskLevel: "HIGH",
200
+ description: "File protocol exploitation",
201
+ payloadType: "injection",
202
+ },
203
+ ],
204
+ },
205
+ // ==========================================
206
+ // INPUT VALIDATION TESTS (3)
207
+ // ==========================================
208
+ // 5. TYPE SAFETY
209
+ {
210
+ attackName: "Type Safety",
211
+ description: "Test if tool validates parameter types correctly",
212
+ payloads: [
213
+ {
214
+ payload: "not_a_number",
215
+ evidence: /(type.*error|invalid.*type|expected.*number|cannot.*convert)/i,
216
+ riskLevel: "MEDIUM",
217
+ description: "String instead of number",
218
+ payloadType: "validation",
219
+ },
220
+ {
221
+ payload: "999999999999999",
222
+ evidence: /(overflow|out.*of.*range|exceeds.*maximum|number.*too.*large)/i,
223
+ riskLevel: "MEDIUM",
224
+ description: "Numeric overflow",
225
+ payloadType: "validation",
226
+ },
227
+ {
228
+ payload: "true",
229
+ evidence: /(type.*error|invalid.*type|expected.*string|cannot.*convert)/i,
230
+ riskLevel: "LOW",
231
+ description: "Boolean instead of string",
232
+ payloadType: "validation",
233
+ },
234
+ ],
235
+ },
236
+ // 6. BOUNDARY TESTING
237
+ {
238
+ attackName: "Boundary Testing",
239
+ description: "Test edge cases and boundary conditions",
240
+ payloads: [
241
+ {
242
+ payload: "",
243
+ evidence: /(empty.*not.*allowed|required|cannot.*be.*empty|must.*not.*be.*empty)/i,
244
+ riskLevel: "LOW",
245
+ description: "Empty string validation",
246
+ payloadType: "validation",
247
+ },
248
+ {
249
+ payload: "A".repeat(10000),
250
+ evidence: /(too.*long|exceeds.*length|maximum.*length|length.*limit)/i,
251
+ riskLevel: "MEDIUM",
252
+ description: "Maximum length validation",
253
+ payloadType: "validation",
254
+ },
255
+ {
256
+ payload: "-1",
257
+ evidence: /(negative.*not.*allowed|must.*be.*positive|invalid.*value)/i,
258
+ riskLevel: "LOW",
259
+ description: "Negative number validation",
260
+ payloadType: "validation",
261
+ },
262
+ ],
263
+ },
264
+ // 7. REQUIRED FIELDS
265
+ {
266
+ attackName: "Required Fields",
267
+ description: "Test if tool validates required parameters",
268
+ payloads: [
269
+ {
270
+ payload: "MISSING_REQUIRED",
271
+ evidence: /(required|missing.*parameter|field.*required|parameter.*required)/i,
272
+ riskLevel: "MEDIUM",
273
+ description: "Missing required fields",
274
+ payloadType: "validation",
275
+ },
276
+ ],
277
+ },
278
+ // ==========================================
279
+ // PROTOCOL COMPLIANCE TESTS (2)
280
+ // ==========================================
281
+ // 8. MCP ERROR FORMAT
282
+ {
283
+ attackName: "MCP Error Format",
284
+ description: "Verify errors follow MCP protocol specification",
285
+ payloads: [
286
+ {
287
+ payload: "INVALID_TRIGGER_ERROR",
288
+ evidence: /(isError|error|invalid|failed)/i,
289
+ riskLevel: "LOW",
290
+ description: "Error response compliance check",
291
+ payloadType: "protocol",
292
+ },
293
+ ],
294
+ },
295
+ // 9. TIMEOUT HANDLING
296
+ {
297
+ attackName: "Timeout Handling",
298
+ description: "Test if tool handles long operations gracefully",
299
+ payloads: [
300
+ {
301
+ payload: "SIMULATE_LONG_OPERATION",
302
+ evidence: /(timeout|timed.*out|exceeded.*time|operation.*timeout)/i,
303
+ riskLevel: "LOW",
304
+ description: "Operation timeout handling",
305
+ payloadType: "protocol",
306
+ },
307
+ ],
308
+ },
309
+ // ==========================================
310
+ // TOOL-SPECIFIC VULNERABILITY TESTS (4)
311
+ // ==========================================
312
+ // 10. INDIRECT PROMPT INJECTION (HTTP URL Fetching)
313
+ {
314
+ attackName: "Indirect Prompt Injection",
315
+ description: "Test if tool fetches and executes external content",
316
+ payloads: [
317
+ {
318
+ payload: "http://example.com",
319
+ evidence: /(status_code.*200|status.*200.*content|<html|<!DOCTYPE|fetched.*http.*content)/i,
320
+ riskLevel: "HIGH",
321
+ description: "Benign URL fetch test",
322
+ payloadType: "injection",
323
+ parameterTypes: ["url", "uri", "link", "endpoint", "address"],
324
+ },
325
+ {
326
+ payload: "http://evil.com/inject.txt",
327
+ evidence: /(fetched|retrieved|evil\.com|malicious|injected)/i,
328
+ riskLevel: "HIGH",
329
+ description: "Malicious URL fetch test",
330
+ payloadType: "injection",
331
+ parameterTypes: ["url", "uri", "link"],
332
+ },
333
+ ],
334
+ },
335
+ // 11. UNICODE BYPASS
336
+ {
337
+ attackName: "Unicode Bypass",
338
+ description: "Test if tool decodes and executes unicode-encoded commands",
339
+ payloads: [
340
+ {
341
+ payload: "\\u0077\\u0068\\u006f\\u0061\\u006d\\u0069", // "whoami"
342
+ evidence: /(root|user|admin|decoded.*executed|unicode.*executed)/i,
343
+ riskLevel: "MEDIUM",
344
+ description: "Unicode-encoded system command",
345
+ payloadType: "injection",
346
+ parameterTypes: ["text", "content", "message", "input", "data"],
347
+ },
348
+ {
349
+ payload: "\\u0069\\u0067\\u006e\\u006f\\u0072\\u0065", // "ignore"
350
+ evidence: /(decoded|unicode|ignore.*previous|executed)/i,
351
+ riskLevel: "MEDIUM",
352
+ description: "Unicode-encoded instruction",
353
+ payloadType: "injection",
354
+ parameterTypes: ["text", "content", "message"],
355
+ },
356
+ ],
357
+ },
358
+ // 12. NESTED INJECTION
359
+ {
360
+ attackName: "Nested Injection",
361
+ description: "Test if tool executes hidden instructions in nested JSON",
362
+ payloads: [
363
+ {
364
+ payload: '{"query":"normal","hidden":"whoami"}',
365
+ evidence: /(executed.*hidden|nested.*instruction|root|user|admin)/i,
366
+ riskLevel: "MEDIUM",
367
+ description: "Hidden command in JSON field",
368
+ payloadType: "injection",
369
+ parameterTypes: ["data", "json", "payload", "body", "params"],
370
+ },
371
+ {
372
+ payload: '{"visible":"safe","_execute":"delete all"}',
373
+ evidence: /(executed|deleted|internal.*field|hidden)/i,
374
+ riskLevel: "HIGH",
375
+ description: "Hidden instruction in internal field",
376
+ payloadType: "injection",
377
+ parameterTypes: ["data", "json", "input"],
378
+ },
379
+ ],
380
+ },
381
+ // 13. PACKAGE SQUATTING
382
+ {
383
+ attackName: "Package Squatting",
384
+ description: "Test if tool downloads typosquatted packages",
385
+ payloads: [
386
+ {
387
+ payload: "install nmpy",
388
+ evidence: /(downloaded|installed|nmpy|typosquatted|pip.*output)/i,
389
+ riskLevel: "MEDIUM",
390
+ description: "Typosquatted package (nmpy instead of numpy)",
391
+ payloadType: "injection",
392
+ parameterTypes: ["package", "pkg", "module", "library", "dependency"],
393
+ },
394
+ {
395
+ payload: "requsts",
396
+ evidence: /(downloaded|installed|requsts|typosquatted)/i,
397
+ riskLevel: "MEDIUM",
398
+ description: "Typosquatted package (requsts instead of requests)",
399
+ payloadType: "injection",
400
+ parameterTypes: ["package", "pkg", "module"],
401
+ },
402
+ ],
403
+ },
404
+ ];
405
+ /**
406
+ * Get all payloads for an attack type
407
+ */
408
+ export function getPayloadsForAttack(attackName, limit) {
409
+ const pattern = SECURITY_ATTACK_PATTERNS.find((p) => p.attackName === attackName);
410
+ if (!pattern)
411
+ return [];
412
+ const payloads = pattern.payloads;
413
+ return limit ? payloads.slice(0, limit) : payloads;
414
+ }
415
+ /**
416
+ * Get all attack patterns (for testing all tools)
417
+ */
418
+ export function getAllAttackPatterns() {
419
+ return SECURITY_ATTACK_PATTERNS;
420
+ }
421
+ /**
422
+ * Get pattern statistics
423
+ */
424
+ export function getPatternStatistics() {
425
+ const totalAttackTypes = SECURITY_ATTACK_PATTERNS.length;
426
+ let totalPayloads = 0;
427
+ let highRiskPayloads = 0;
428
+ let mediumRiskPayloads = 0;
429
+ let lowRiskPayloads = 0;
430
+ const payloadTypeBreakdown = {};
431
+ SECURITY_ATTACK_PATTERNS.forEach((pattern) => {
432
+ totalPayloads += pattern.payloads.length;
433
+ pattern.payloads.forEach((payload) => {
434
+ if (payload.riskLevel === "HIGH")
435
+ highRiskPayloads++;
436
+ else if (payload.riskLevel === "MEDIUM")
437
+ mediumRiskPayloads++;
438
+ else
439
+ lowRiskPayloads++;
440
+ payloadTypeBreakdown[payload.payloadType] =
441
+ (payloadTypeBreakdown[payload.payloadType] || 0) + 1;
442
+ });
443
+ });
444
+ return {
445
+ totalAttackTypes,
446
+ totalPayloads,
447
+ highRiskPayloads,
448
+ mediumRiskPayloads,
449
+ lowRiskPayloads,
450
+ payloadTypeBreakdown,
451
+ averagePayloadsPerAttack: Math.round(totalPayloads / totalAttackTypes),
452
+ };
453
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Assessment Orchestrator
3
+ * Coordinates all assessment modules and manages the assessment workflow
4
+ */
5
+ import { MCPDirectoryAssessment, AssessmentConfiguration, ManifestJsonSchema } from "../../lib/assessmentTypes.js";
6
+ import { Tool, CompatibilityCallToolResult } from "@modelcontextprotocol/sdk/types.js";
7
+ import { ClaudeCodeBridge, ClaudeCodeBridgeConfig } from "./lib/claudeCodeBridge.js";
8
+ export interface AssessmentContext {
9
+ serverName: string;
10
+ tools: Tool[];
11
+ callTool: (name: string, params: Record<string, unknown>) => Promise<CompatibilityCallToolResult>;
12
+ readmeContent?: string;
13
+ packageJson?: unknown;
14
+ packageLock?: unknown;
15
+ privacyPolicy?: unknown;
16
+ config: AssessmentConfiguration;
17
+ serverInfo?: {
18
+ name: string;
19
+ version?: string;
20
+ metadata?: unknown;
21
+ };
22
+ sourceCodePath?: string;
23
+ sourceCodeFiles?: Map<string, string>;
24
+ manifestJson?: ManifestJsonSchema;
25
+ manifestRaw?: string;
26
+ }
27
+ export declare class AssessmentOrchestrator {
28
+ private config;
29
+ private startTime;
30
+ private totalTestsRun;
31
+ private claudeBridge?;
32
+ private claudeEnabled;
33
+ private functionalityAssessor;
34
+ private securityAssessor;
35
+ private documentationAssessor;
36
+ private errorHandlingAssessor;
37
+ private usabilityAssessor;
38
+ private mcpSpecAssessor?;
39
+ private aupComplianceAssessor?;
40
+ private toolAnnotationAssessor?;
41
+ private prohibitedLibrariesAssessor?;
42
+ private manifestValidationAssessor?;
43
+ private portabilityAssessor?;
44
+ constructor(config?: Partial<AssessmentConfiguration>);
45
+ /**
46
+ * Initialize Claude Code Bridge for intelligent analysis
47
+ * This enables semantic AUP violation analysis, behavior inference, and intelligent test generation
48
+ */
49
+ private initializeClaudeBridge;
50
+ /**
51
+ * Enable Claude Code integration programmatically
52
+ * Call this method to enable Claude features after construction
53
+ */
54
+ enableClaudeCode(config?: Partial<ClaudeCodeBridgeConfig>): void;
55
+ /**
56
+ * Check if Claude Code integration is enabled and available
57
+ */
58
+ isClaudeEnabled(): boolean;
59
+ /**
60
+ * Get Claude Code Bridge for external access
61
+ */
62
+ getClaudeBridge(): ClaudeCodeBridge | undefined;
63
+ /**
64
+ * Reset test counts for all assessors
65
+ */
66
+ private resetAllTestCounts;
67
+ /**
68
+ * Run a complete assessment on an MCP server
69
+ */
70
+ runFullAssessment(context: AssessmentContext): Promise<MCPDirectoryAssessment>;
71
+ /**
72
+ * Legacy assess method for backward compatibility
73
+ */
74
+ assess(serverName: string, tools: Tool[], callTool: (name: string, params: Record<string, unknown>) => Promise<CompatibilityCallToolResult>, serverInfo?: any, readmeContent?: string, packageJson?: any): Promise<MCPDirectoryAssessment>;
75
+ private collectTotalTestCount;
76
+ private determineOverallStatus;
77
+ private generateSummary;
78
+ private generateRecommendations;
79
+ /**
80
+ * Get assessment configuration
81
+ */
82
+ getConfig(): AssessmentConfiguration;
83
+ /**
84
+ * Update assessment configuration
85
+ */
86
+ updateConfig(config: Partial<AssessmentConfiguration>): void;
87
+ }
88
+ //# sourceMappingURL=AssessmentOrchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssessmentOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/services/assessment/AssessmentOrchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,IAAI,EACJ,2BAA2B,EAC5B,MAAM,oCAAoC,CAAC;AAoB5C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EAEvB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,uBAAuB,CAAC;IAChC,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IAIF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGtC,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAAa;IAGlC,OAAO,CAAC,YAAY,CAAC,CAAmB;IACxC,OAAO,CAAC,aAAa,CAAkB;IAGvC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,iBAAiB,CAAoB;IAG7C,OAAO,CAAC,eAAe,CAAC,CAA4B;IAGpD,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,sBAAsB,CAAC,CAAyB;IACxD,OAAO,CAAC,2BAA2B,CAAC,CAA8B;IAClE,OAAO,CAAC,0BAA0B,CAAC,CAA6B;IAChE,OAAO,CAAC,mBAAmB,CAAC,CAAsB;gBAEtC,MAAM,GAAE,OAAO,CAAC,uBAAuB,CAAM;IAyDzD;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;;OAGG;IACH,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,IAAI;IAqBhE;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,eAAe,IAAI,gBAAgB,GAAG,SAAS;IAI/C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IACG,iBAAiB,CACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,sBAAsB,CAAC;IA8IlC;;OAEG;IACG,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,IAAI,EAAE,EACb,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC,2BAA2B,CAAC,EACzC,UAAU,CAAC,EAAE,GAAG,EAChB,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,GAAG,GAChB,OAAO,CAAC,sBAAsB,CAAC;IAclC,OAAO,CAAC,qBAAqB;IAmD7B,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,eAAe;IA8DvB,OAAO,CAAC,uBAAuB;IAc/B;;OAEG;IACH,SAAS,IAAI,uBAAuB;IAIpC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,IAAI;CAG7D"}