@bryan-thompson/inspector-assessment 1.26.2 → 1.26.4
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/cli/package.json +2 -2
- package/client/dist/assets/{OAuthCallback-SCHNovei.js → OAuthCallback-DRmaIku9.js} +1 -1
- package/client/dist/assets/{OAuthDebugCallback-HE-0Fvvk.js → OAuthDebugCallback-BU8UZdx8.js} +1 -1
- package/client/dist/assets/{index-Cdl4SWmV.js → index-Dd4pL57l.js} +439 -368
- package/client/dist/index.html +1 -1
- package/client/lib/lib/assessment/extendedTypes.d.ts +2 -1
- package/client/lib/lib/assessment/extendedTypes.d.ts.map +1 -1
- package/client/lib/lib/assessment/resultTypes.d.ts +9 -0
- package/client/lib/lib/assessment/resultTypes.d.ts.map +1 -1
- package/client/lib/lib/securityPatterns.d.ts +2 -1
- package/client/lib/lib/securityPatterns.d.ts.map +1 -1
- package/client/lib/lib/securityPatterns.js +83 -1
- package/client/lib/services/assessment/AssessmentOrchestrator.d.ts +1 -0
- package/client/lib/services/assessment/AssessmentOrchestrator.d.ts.map +1 -1
- package/client/lib/services/assessment/AssessmentOrchestrator.js +26 -0
- package/client/lib/services/assessment/modules/AuthenticationAssessor.d.ts.map +1 -1
- package/client/lib/services/assessment/modules/AuthenticationAssessor.js +94 -0
- package/client/lib/services/assessment/modules/SecurityAssessor.d.ts +5 -0
- package/client/lib/services/assessment/modules/SecurityAssessor.d.ts.map +1 -1
- package/client/lib/services/assessment/modules/SecurityAssessor.js +42 -0
- package/client/lib/services/assessment/modules/securityTests/SecurityPayloadTester.d.ts.map +1 -1
- package/client/lib/services/assessment/modules/securityTests/SecurityPayloadTester.js +12 -0
- package/client/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.d.ts +17 -0
- package/client/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.d.ts.map +1 -1
- package/client/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.js +90 -0
- package/client/package.json +2 -2
- package/package.json +1 -1
- package/server/package.json +2 -2
|
@@ -175,12 +175,15 @@ export class SecurityAssessor extends BaseAssessor {
|
|
|
175
175
|
const status = this.determineSecurityStatus(validTests, vulnerabilities.length, validTests.length, connectionErrors.length);
|
|
176
176
|
// Generate explanation (pass both validTests and connectionErrors)
|
|
177
177
|
const explanation = this.generateSecurityExplanation(validTests, connectionErrors, vulnerabilities, overallRiskLevel);
|
|
178
|
+
// Issue #75: Aggregate auth bypass detection results
|
|
179
|
+
const authBypassSummary = this.aggregateAuthBypassResults(allTests);
|
|
178
180
|
return {
|
|
179
181
|
promptInjectionTests: allTests,
|
|
180
182
|
vulnerabilities,
|
|
181
183
|
overallRiskLevel,
|
|
182
184
|
status,
|
|
183
185
|
explanation,
|
|
186
|
+
authBypassSummary,
|
|
184
187
|
};
|
|
185
188
|
}
|
|
186
189
|
/**
|
|
@@ -308,4 +311,43 @@ export class SecurityAssessor extends BaseAssessor {
|
|
|
308
311
|
`Flagged ${lowConfidenceCount} uncertain detection${lowConfidenceCount !== 1 ? "s" : ""} across ${testCount} security tests. Manual verification needed to confirm if these are actual vulnerabilities or false positives.`);
|
|
309
312
|
}
|
|
310
313
|
}
|
|
314
|
+
/**
|
|
315
|
+
* Aggregate auth bypass detection results from security tests (Issue #75)
|
|
316
|
+
* Summarizes fail-open/fail-closed patterns across all tested tools
|
|
317
|
+
*/
|
|
318
|
+
aggregateAuthBypassResults(tests) {
|
|
319
|
+
const toolsWithAuthBypass = [];
|
|
320
|
+
let failOpenCount = 0;
|
|
321
|
+
let failClosedCount = 0;
|
|
322
|
+
let unknownCount = 0;
|
|
323
|
+
// Filter to Auth Bypass tests only
|
|
324
|
+
const authBypassTests = tests.filter((t) => t.testName === "Auth Bypass" && t.authFailureMode);
|
|
325
|
+
// Track unique tools with auth bypass detected
|
|
326
|
+
const seenTools = new Set();
|
|
327
|
+
for (const test of authBypassTests) {
|
|
328
|
+
const toolName = test.toolName || "unknown";
|
|
329
|
+
if (test.authBypassDetected && !seenTools.has(toolName)) {
|
|
330
|
+
toolsWithAuthBypass.push(toolName);
|
|
331
|
+
seenTools.add(toolName);
|
|
332
|
+
}
|
|
333
|
+
// Count failure modes
|
|
334
|
+
switch (test.authFailureMode) {
|
|
335
|
+
case "FAIL_OPEN":
|
|
336
|
+
failOpenCount++;
|
|
337
|
+
break;
|
|
338
|
+
case "FAIL_CLOSED":
|
|
339
|
+
failClosedCount++;
|
|
340
|
+
break;
|
|
341
|
+
case "UNKNOWN":
|
|
342
|
+
unknownCount++;
|
|
343
|
+
break;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return {
|
|
347
|
+
toolsWithAuthBypass,
|
|
348
|
+
failOpenCount,
|
|
349
|
+
failClosedCount,
|
|
350
|
+
unknownCount,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
311
353
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecurityPayloadTester.d.ts","sourceRoot":"","sources":["../../../../../src/services/assessment/modules/securityTests/SecurityPayloadTester.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAGjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,2BAA2B,EAC3B,IAAI,EACL,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAGL,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAOhC;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAO9B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,kBAAkB;IAR5B,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,SAAS,CAAK;gBAGZ,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,UAAU,EAClB,kBAAkB,EAAE,CAAC,CAAC,EAC5B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,CAAC,CAAC;IAOjB;;;OAGG;IACG,yBAAyB,CAC7B,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,oBAAoB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA2JhC;;;OAGG;IACG,qBAAqB,CACzB,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,oBAAoB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA8IhC;;OAEG;IACG,WAAW,CACf,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC,2BAA2B,CAAC,GACxC,OAAO,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"SecurityPayloadTester.d.ts","sourceRoot":"","sources":["../../../../../src/services/assessment/modules/securityTests/SecurityPayloadTester.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EACL,gBAAgB,EAGjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,2BAA2B,EAC3B,IAAI,EACL,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAGL,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAOhC;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACrD;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAO9B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,kBAAkB;IAR5B,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,SAAS,CAAK;gBAGZ,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,UAAU,EAClB,kBAAkB,EAAE,CAAC,CAAC,EAC5B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,CAAC,CAAC;IAOjB;;;OAGG;IACG,yBAAyB,CAC7B,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,oBAAoB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA2JhC;;;OAGG;IACG,qBAAqB,CACzB,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,oBAAoB,GAChC,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA8IhC;;OAEG;IACG,WAAW,CACf,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC,2BAA2B,CAAC,GACxC,OAAO,CAAC,kBAAkB,CAAC;IAyJ9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -309,6 +309,16 @@ export class SecurityPayloadTester {
|
|
|
309
309
|
const combinedSanitization = this.sanitizationDetector.mergeResults(toolSanitization, responseSanitization);
|
|
310
310
|
// Calculate confidence with sanitization awareness
|
|
311
311
|
const confidenceResult = this.responseAnalyzer.calculateConfidence(tool, isVulnerable, evidence || "", responseText, payload, combinedSanitization);
|
|
312
|
+
// Issue #75: Analyze auth bypass patterns for "Auth Bypass" attack type
|
|
313
|
+
let authBypassFields = {};
|
|
314
|
+
if (attackName === "Auth Bypass") {
|
|
315
|
+
const authResult = this.responseAnalyzer.analyzeAuthBypassResponse(response);
|
|
316
|
+
authBypassFields = {
|
|
317
|
+
authBypassDetected: authResult.detected,
|
|
318
|
+
authFailureMode: authResult.failureMode,
|
|
319
|
+
authBypassEvidence: authResult.evidence,
|
|
320
|
+
};
|
|
321
|
+
}
|
|
312
322
|
return {
|
|
313
323
|
testName: attackName,
|
|
314
324
|
description: payload.description,
|
|
@@ -321,6 +331,8 @@ export class SecurityPayloadTester {
|
|
|
321
331
|
// Issue #56: Include sanitization info for transparency
|
|
322
332
|
sanitizationDetected: combinedSanitization.detected,
|
|
323
333
|
sanitizationLibraries: combinedSanitization.libraries,
|
|
334
|
+
// Issue #75: Auth bypass detection fields
|
|
335
|
+
...authBypassFields,
|
|
324
336
|
...confidenceResult,
|
|
325
337
|
};
|
|
326
338
|
}
|
|
@@ -32,6 +32,15 @@ export interface MathResultAnalysis {
|
|
|
32
32
|
confidence: "high" | "medium" | "low";
|
|
33
33
|
reason?: string;
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Result of auth bypass response analysis (Issue #75)
|
|
37
|
+
* Detects fail-open authentication vulnerabilities (CVE-2025-52882)
|
|
38
|
+
*/
|
|
39
|
+
export interface AuthBypassResult {
|
|
40
|
+
detected: boolean;
|
|
41
|
+
failureMode: "FAIL_OPEN" | "FAIL_CLOSED" | "UNKNOWN";
|
|
42
|
+
evidence?: string;
|
|
43
|
+
}
|
|
35
44
|
/**
|
|
36
45
|
* Error classification types
|
|
37
46
|
*/
|
|
@@ -162,6 +171,14 @@ export declare class SecurityResponseAnalyzer {
|
|
|
162
171
|
* Check if response is returning search results
|
|
163
172
|
*/
|
|
164
173
|
isSearchResultResponse(responseText: string): boolean;
|
|
174
|
+
/**
|
|
175
|
+
* Analyze response for auth bypass patterns (Issue #75)
|
|
176
|
+
* Detects fail-open authentication vulnerabilities (CVE-2025-52882)
|
|
177
|
+
*
|
|
178
|
+
* @param response The tool response to analyze
|
|
179
|
+
* @returns AuthBypassResult with detection status and failure mode classification
|
|
180
|
+
*/
|
|
181
|
+
analyzeAuthBypassResponse(response: CompatibilityCallToolResult): AuthBypassResult;
|
|
165
182
|
/**
|
|
166
183
|
* Check if response is from a creation/modification operation
|
|
167
184
|
*/
|
package/client/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecurityResponseAnalyzer.d.ts","sourceRoot":"","sources":["../../../../../src/services/assessment/modules/securityTests/SecurityResponseAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SecurityResponseAnalyzer.d.ts","sourceRoot":"","sources":["../../../../../src/services/assessment/modules/securityTests/SecurityResponseAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1148,6 +1148,96 @@ export class SecurityResponseAnalyzer {
|
|
|
1148
1148
|
];
|
|
1149
1149
|
return searchResultPatterns.some((pattern) => pattern.test(responseText));
|
|
1150
1150
|
}
|
|
1151
|
+
/**
|
|
1152
|
+
* Analyze response for auth bypass patterns (Issue #75)
|
|
1153
|
+
* Detects fail-open authentication vulnerabilities (CVE-2025-52882)
|
|
1154
|
+
*
|
|
1155
|
+
* @param response The tool response to analyze
|
|
1156
|
+
* @returns AuthBypassResult with detection status and failure mode classification
|
|
1157
|
+
*/
|
|
1158
|
+
analyzeAuthBypassResponse(response) {
|
|
1159
|
+
const responseText = this.extractResponseContent(response);
|
|
1160
|
+
// Fail-open indicators (VULNERABLE - CVE-2025-52882 pattern)
|
|
1161
|
+
const failOpenPatterns = [
|
|
1162
|
+
{
|
|
1163
|
+
pattern: /"auth_status"\s*:\s*"bypassed"/i,
|
|
1164
|
+
evidence: "auth_status: bypassed",
|
|
1165
|
+
},
|
|
1166
|
+
{
|
|
1167
|
+
pattern: /access.*granted.*despite/i,
|
|
1168
|
+
evidence: "access granted despite failure",
|
|
1169
|
+
},
|
|
1170
|
+
{
|
|
1171
|
+
pattern: /authentication.*skipped/i,
|
|
1172
|
+
evidence: "authentication skipped",
|
|
1173
|
+
},
|
|
1174
|
+
{ pattern: /fail[\s-]?open/i, evidence: "fail-open pattern detected" },
|
|
1175
|
+
{ pattern: /bypassed.*auth/i, evidence: "auth bypassed" },
|
|
1176
|
+
{
|
|
1177
|
+
pattern: /authentication.*bypassed/i,
|
|
1178
|
+
evidence: "authentication bypassed",
|
|
1179
|
+
},
|
|
1180
|
+
{
|
|
1181
|
+
pattern: /"vulnerable"\s*:\s*true/i,
|
|
1182
|
+
evidence: "vulnerable: true flag",
|
|
1183
|
+
},
|
|
1184
|
+
{
|
|
1185
|
+
pattern: /auth.*succeeded.*null/i,
|
|
1186
|
+
evidence: "auth succeeded with null token",
|
|
1187
|
+
},
|
|
1188
|
+
{
|
|
1189
|
+
pattern: /granted.*without.*valid/i,
|
|
1190
|
+
evidence: "granted without valid token",
|
|
1191
|
+
},
|
|
1192
|
+
{
|
|
1193
|
+
pattern: /"action_performed"/i,
|
|
1194
|
+
evidence: "action performed indicator",
|
|
1195
|
+
},
|
|
1196
|
+
];
|
|
1197
|
+
// Fail-closed indicators (SAFE - proper auth handling)
|
|
1198
|
+
const failClosedPatterns = [
|
|
1199
|
+
{
|
|
1200
|
+
pattern: /"auth_status"\s*:\s*"denied"/i,
|
|
1201
|
+
evidence: "auth_status: denied",
|
|
1202
|
+
},
|
|
1203
|
+
{ pattern: /access.*denied/i, evidence: "access denied" },
|
|
1204
|
+
{ pattern: /authentication.*failed/i, evidence: "authentication failed" },
|
|
1205
|
+
{
|
|
1206
|
+
pattern: /fail[\s-]?closed/i,
|
|
1207
|
+
evidence: "fail-closed pattern detected",
|
|
1208
|
+
},
|
|
1209
|
+
{ pattern: /"status"\s*:\s*"blocked"/i, evidence: "status: blocked" },
|
|
1210
|
+
{
|
|
1211
|
+
pattern: /invalid.*token/i,
|
|
1212
|
+
evidence: "invalid token rejection",
|
|
1213
|
+
},
|
|
1214
|
+
{
|
|
1215
|
+
pattern: /token.*required/i,
|
|
1216
|
+
evidence: "token required",
|
|
1217
|
+
},
|
|
1218
|
+
{
|
|
1219
|
+
pattern: /unauthorized/i,
|
|
1220
|
+
evidence: "unauthorized response",
|
|
1221
|
+
},
|
|
1222
|
+
{
|
|
1223
|
+
pattern: /"denial_reason"/i,
|
|
1224
|
+
evidence: "denial reason provided",
|
|
1225
|
+
},
|
|
1226
|
+
];
|
|
1227
|
+
// Check for fail-open (vulnerable) patterns first
|
|
1228
|
+
for (const { pattern, evidence } of failOpenPatterns) {
|
|
1229
|
+
if (pattern.test(responseText)) {
|
|
1230
|
+
return { detected: true, failureMode: "FAIL_OPEN", evidence };
|
|
1231
|
+
}
|
|
1232
|
+
}
|
|
1233
|
+
// Check for fail-closed (safe) patterns
|
|
1234
|
+
for (const { pattern, evidence } of failClosedPatterns) {
|
|
1235
|
+
if (pattern.test(responseText)) {
|
|
1236
|
+
return { detected: false, failureMode: "FAIL_CLOSED", evidence };
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
return { detected: false, failureMode: "UNKNOWN" };
|
|
1240
|
+
}
|
|
1151
1241
|
/**
|
|
1152
1242
|
* Check if response is from a creation/modification operation
|
|
1153
1243
|
*/
|
package/client/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bryan-thompson/inspector-assessment-client",
|
|
3
|
-
"version": "1.26.
|
|
3
|
+
"version": "1.26.4",
|
|
4
4
|
"description": "Client-side application for the Enhanced MCP Inspector with assessment capabilities",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Bryan Thompson <bryan@triepod.ai>",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"cleanup:e2e": "node e2e/global-teardown.js"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
49
|
+
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
50
50
|
"@radix-ui/react-checkbox": "^1.1.4",
|
|
51
51
|
"@radix-ui/react-dialog": "^1.1.3",
|
|
52
52
|
"@radix-ui/react-icons": "^1.3.0",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bryan-thompson/inspector-assessment",
|
|
3
|
-
"version": "1.26.
|
|
3
|
+
"version": "1.26.4",
|
|
4
4
|
"description": "Enhanced MCP Inspector with comprehensive assessment capabilities for server validation",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Bryan Thompson <bryan@triepod.ai>",
|
package/server/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bryan-thompson/inspector-assessment-server",
|
|
3
|
-
"version": "1.26.
|
|
3
|
+
"version": "1.26.4",
|
|
4
4
|
"description": "Server-side application for the Enhanced MCP Inspector with assessment capabilities",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Bryan Thompson <bryan@triepod.ai>",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"typescript": "^5.6.2"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
47
|
+
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
48
48
|
"cors": "^2.8.5",
|
|
49
49
|
"express": "^5.1.0",
|
|
50
50
|
"express-rate-limit": "^8.2.1",
|