@bryan-thompson/inspector-assessment 1.5.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.
- package/cli/build/assess-full.js +528 -0
- package/cli/build/assess-security.js +342 -0
- package/cli/build/cli.js +10 -1
- package/client/dist/assets/{OAuthCallback-TeTvKfWE.js → OAuthCallback-Xo9zS7pv.js} +1 -1
- package/client/dist/assets/{OAuthDebugCallback-DwA2sKy9.js → OAuthDebugCallback-CaIey8K_.js} +1 -1
- package/client/dist/assets/{index-BwAoxcvr.js → index-nCPw6E-c.js} +4 -4
- package/client/dist/index.html +1 -1
- package/client/lib/lib/assessmentTypes.d.ts +670 -0
- package/client/lib/lib/assessmentTypes.d.ts.map +1 -0
- package/client/lib/lib/assessmentTypes.js +220 -0
- package/client/lib/lib/aupPatterns.d.ts +63 -0
- package/client/lib/lib/aupPatterns.d.ts.map +1 -0
- package/client/lib/lib/aupPatterns.js +344 -0
- package/client/lib/lib/prohibitedLibraries.d.ts +76 -0
- package/client/lib/lib/prohibitedLibraries.d.ts.map +1 -0
- package/client/lib/lib/prohibitedLibraries.js +364 -0
- package/client/lib/lib/securityPatterns.d.ts +64 -0
- package/client/lib/lib/securityPatterns.d.ts.map +1 -0
- package/client/lib/lib/securityPatterns.js +453 -0
- package/client/lib/services/assessment/AssessmentOrchestrator.d.ts +88 -0
- package/client/lib/services/assessment/AssessmentOrchestrator.d.ts.map +1 -0
- package/client/lib/services/assessment/AssessmentOrchestrator.js +418 -0
- package/client/lib/services/assessment/ResponseValidator.d.ts +69 -0
- package/client/lib/services/assessment/ResponseValidator.d.ts.map +1 -0
- package/client/lib/services/assessment/ResponseValidator.js +1038 -0
- package/client/lib/services/assessment/TestDataGenerator.d.ts +86 -0
- package/client/lib/services/assessment/TestDataGenerator.d.ts.map +1 -0
- package/client/lib/services/assessment/TestDataGenerator.js +669 -0
- package/client/lib/services/assessment/TestScenarioEngine.d.ts +91 -0
- package/client/lib/services/assessment/TestScenarioEngine.d.ts.map +1 -0
- package/client/lib/services/assessment/TestScenarioEngine.js +505 -0
- package/client/lib/services/assessment/ToolClassifier.d.ts +61 -0
- package/client/lib/services/assessment/ToolClassifier.d.ts.map +1 -0
- package/client/lib/services/assessment/ToolClassifier.js +349 -0
- package/client/lib/services/assessment/lib/claudeCodeBridge.d.ts +160 -0
- package/client/lib/services/assessment/lib/claudeCodeBridge.d.ts.map +1 -0
- package/client/lib/services/assessment/lib/claudeCodeBridge.js +357 -0
- package/client/lib/services/assessment/modules/AUPComplianceAssessor.d.ts +100 -0
- package/client/lib/services/assessment/modules/AUPComplianceAssessor.d.ts.map +1 -0
- package/client/lib/services/assessment/modules/AUPComplianceAssessor.js +474 -0
- package/client/lib/services/assessment/modules/BaseAssessor.d.ts +71 -0
- package/client/lib/services/assessment/modules/BaseAssessor.d.ts.map +1 -0
- package/client/lib/services/assessment/modules/BaseAssessor.js +171 -0
- package/client/lib/services/assessment/modules/DocumentationAssessor.d.ts +45 -0
- package/client/lib/services/assessment/modules/DocumentationAssessor.d.ts.map +1 -0
- package/client/lib/services/assessment/modules/DocumentationAssessor.js +355 -0
- package/client/lib/services/assessment/modules/ErrorHandlingAssessor.d.ts +25 -0
- package/client/lib/services/assessment/modules/ErrorHandlingAssessor.d.ts.map +1 -0
- package/client/lib/services/assessment/modules/ErrorHandlingAssessor.js +564 -0
- package/client/lib/services/assessment/modules/FunctionalityAssessor.d.ts +20 -0
- package/client/lib/services/assessment/modules/FunctionalityAssessor.d.ts.map +1 -0
- package/client/lib/services/assessment/modules/FunctionalityAssessor.js +253 -0
- package/client/lib/services/assessment/modules/MCPSpecComplianceAssessor.d.ts +70 -0
- package/client/lib/services/assessment/modules/MCPSpecComplianceAssessor.d.ts.map +1 -0
- package/client/lib/services/assessment/modules/MCPSpecComplianceAssessor.js +508 -0
- package/client/lib/services/assessment/modules/ManifestValidationAssessor.d.ts +70 -0
- package/client/lib/services/assessment/modules/ManifestValidationAssessor.d.ts.map +1 -0
- package/client/lib/services/assessment/modules/ManifestValidationAssessor.js +430 -0
- package/client/lib/services/assessment/modules/PortabilityAssessor.d.ts +43 -0
- package/client/lib/services/assessment/modules/PortabilityAssessor.d.ts.map +1 -0
- package/client/lib/services/assessment/modules/PortabilityAssessor.js +347 -0
- package/client/lib/services/assessment/modules/ProhibitedLibrariesAssessor.d.ts +41 -0
- package/client/lib/services/assessment/modules/ProhibitedLibrariesAssessor.d.ts.map +1 -0
- package/client/lib/services/assessment/modules/ProhibitedLibrariesAssessor.js +256 -0
- package/client/lib/services/assessment/modules/SecurityAssessor.d.ts +176 -0
- package/client/lib/services/assessment/modules/SecurityAssessor.d.ts.map +1 -0
- package/client/lib/services/assessment/modules/SecurityAssessor.js +1333 -0
- package/client/lib/services/assessment/modules/ToolAnnotationAssessor.d.ts +96 -0
- package/client/lib/services/assessment/modules/ToolAnnotationAssessor.d.ts.map +1 -0
- package/client/lib/services/assessment/modules/ToolAnnotationAssessor.js +593 -0
- package/client/lib/services/assessment/modules/UsabilityAssessor.d.ts +21 -0
- package/client/lib/services/assessment/modules/UsabilityAssessor.d.ts.map +1 -0
- package/client/lib/services/assessment/modules/UsabilityAssessor.js +241 -0
- package/client/lib/services/assessment/modules/index.d.ts +33 -0
- package/client/lib/services/assessment/modules/index.d.ts.map +1 -0
- package/client/lib/services/assessment/modules/index.js +35 -0
- package/package.json +7 -2
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Usability Assessor Module
|
|
3
|
+
* Evaluates tool naming, parameter clarity, and best practices
|
|
4
|
+
*/
|
|
5
|
+
import { UsabilityAssessment } from "../../../lib/assessmentTypes.js";
|
|
6
|
+
import { BaseAssessor } from "./BaseAssessor.js";
|
|
7
|
+
import { AssessmentContext } from "../AssessmentOrchestrator.js";
|
|
8
|
+
export declare class UsabilityAssessor extends BaseAssessor {
|
|
9
|
+
assess(context: AssessmentContext): Promise<UsabilityAssessment>;
|
|
10
|
+
private analyzeUsability;
|
|
11
|
+
private analyzeNamingConvention;
|
|
12
|
+
private analyzeParameterClarity;
|
|
13
|
+
private checkDescriptions;
|
|
14
|
+
private checkBestPractices;
|
|
15
|
+
private isDescriptiveName;
|
|
16
|
+
private getToolSchema;
|
|
17
|
+
private determineUsabilityStatus;
|
|
18
|
+
private generateExplanation;
|
|
19
|
+
private generateRecommendations;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=UsabilityAssessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsabilityAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/UsabilityAssessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,mBAAmB,EAGpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,qBAAa,iBAAkB,SAAQ,YAAY;IAC3C,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAgBtE,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,uBAAuB;IAqC/B,OAAO,CAAC,uBAAuB;IAwC/B,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,kBAAkB;IA6C1B,OAAO,CAAC,iBAAiB;IAoCzB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,uBAAuB;CAyBhC"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Usability Assessor Module
|
|
3
|
+
* Evaluates tool naming, parameter clarity, and best practices
|
|
4
|
+
*/
|
|
5
|
+
import { BaseAssessor } from "./BaseAssessor.js";
|
|
6
|
+
export class UsabilityAssessor extends BaseAssessor {
|
|
7
|
+
async assess(context) {
|
|
8
|
+
this.log("Starting usability assessment");
|
|
9
|
+
const metrics = this.analyzeUsability(context.tools);
|
|
10
|
+
const status = this.determineUsabilityStatus(metrics);
|
|
11
|
+
const explanation = this.generateExplanation(metrics, context.tools);
|
|
12
|
+
const recommendations = this.generateRecommendations(metrics);
|
|
13
|
+
return {
|
|
14
|
+
metrics,
|
|
15
|
+
status,
|
|
16
|
+
explanation,
|
|
17
|
+
recommendations,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
analyzeUsability(tools) {
|
|
21
|
+
const toolNamingConvention = this.analyzeNamingConvention(tools);
|
|
22
|
+
const parameterClarity = this.analyzeParameterClarity(tools);
|
|
23
|
+
const hasHelpfulDescriptions = this.checkDescriptions(tools);
|
|
24
|
+
const followsBestPractices = this.checkBestPractices(tools);
|
|
25
|
+
return {
|
|
26
|
+
toolNamingConvention,
|
|
27
|
+
parameterClarity,
|
|
28
|
+
hasHelpfulDescriptions,
|
|
29
|
+
followsBestPractices,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
analyzeNamingConvention(tools) {
|
|
33
|
+
if (tools.length === 0)
|
|
34
|
+
return "consistent";
|
|
35
|
+
const namingPatterns = {
|
|
36
|
+
camelCase: 0,
|
|
37
|
+
snake_case: 0,
|
|
38
|
+
kebab_case: 0,
|
|
39
|
+
PascalCase: 0,
|
|
40
|
+
};
|
|
41
|
+
for (const tool of tools) {
|
|
42
|
+
const name = tool.name;
|
|
43
|
+
if (/^[a-z][a-zA-Z0-9]*$/.test(name)) {
|
|
44
|
+
namingPatterns.camelCase++;
|
|
45
|
+
}
|
|
46
|
+
else if (/^[a-z]+(_[a-z]+)*$/.test(name)) {
|
|
47
|
+
namingPatterns.snake_case++;
|
|
48
|
+
}
|
|
49
|
+
else if (/^[a-z]+(-[a-z]+)*$/.test(name)) {
|
|
50
|
+
namingPatterns.kebab_case++;
|
|
51
|
+
}
|
|
52
|
+
else if (/^[A-Z][a-zA-Z0-9]*$/.test(name)) {
|
|
53
|
+
namingPatterns.PascalCase++;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Check if one pattern dominates (>70%)
|
|
57
|
+
const total = tools.length;
|
|
58
|
+
const threshold = total * 0.7;
|
|
59
|
+
for (const count of Object.values(namingPatterns)) {
|
|
60
|
+
if (count >= threshold) {
|
|
61
|
+
return "consistent";
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return "inconsistent";
|
|
65
|
+
}
|
|
66
|
+
analyzeParameterClarity(tools) {
|
|
67
|
+
if (tools.length === 0)
|
|
68
|
+
return "clear";
|
|
69
|
+
let clearCount = 0;
|
|
70
|
+
let unclearCount = 0;
|
|
71
|
+
for (const tool of tools) {
|
|
72
|
+
const schema = this.getToolSchema(tool);
|
|
73
|
+
if (!schema?.properties)
|
|
74
|
+
continue;
|
|
75
|
+
for (const [paramName, paramDef] of Object.entries(schema.properties)) {
|
|
76
|
+
// Check if parameter name is self-descriptive
|
|
77
|
+
if (this.isDescriptiveName(paramName)) {
|
|
78
|
+
clearCount++;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
unclearCount++;
|
|
82
|
+
}
|
|
83
|
+
// Check if parameter has description
|
|
84
|
+
if (paramDef.description) {
|
|
85
|
+
clearCount++;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
unclearCount++;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const total = clearCount + unclearCount;
|
|
93
|
+
if (total === 0)
|
|
94
|
+
return "clear";
|
|
95
|
+
const clarityRatio = clearCount / total;
|
|
96
|
+
if (clarityRatio >= 0.8)
|
|
97
|
+
return "clear";
|
|
98
|
+
if (clarityRatio <= 0.3)
|
|
99
|
+
return "unclear";
|
|
100
|
+
return "mixed";
|
|
101
|
+
}
|
|
102
|
+
checkDescriptions(tools) {
|
|
103
|
+
if (tools.length === 0)
|
|
104
|
+
return false;
|
|
105
|
+
let toolsWithDescriptions = 0;
|
|
106
|
+
for (const tool of tools) {
|
|
107
|
+
if (tool.description && tool.description.length > 10) {
|
|
108
|
+
toolsWithDescriptions++;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Consider helpful if >70% of tools have descriptions
|
|
112
|
+
return toolsWithDescriptions / tools.length >= 0.7;
|
|
113
|
+
}
|
|
114
|
+
checkBestPractices(tools) {
|
|
115
|
+
const practices = {
|
|
116
|
+
hasVersioning: false,
|
|
117
|
+
hasErrorHandling: false,
|
|
118
|
+
hasValidation: false,
|
|
119
|
+
hasDocumentation: false,
|
|
120
|
+
};
|
|
121
|
+
// Check various best practices
|
|
122
|
+
for (const tool of tools) {
|
|
123
|
+
const schema = this.getToolSchema(tool);
|
|
124
|
+
// Check for validation (required fields, enums, etc.)
|
|
125
|
+
if (schema?.required && schema.required.length > 0) {
|
|
126
|
+
practices.hasValidation = true;
|
|
127
|
+
}
|
|
128
|
+
// Check for proper parameter constraints
|
|
129
|
+
if (schema?.properties) {
|
|
130
|
+
for (const prop of Object.values(schema.properties)) {
|
|
131
|
+
if (prop.enum ||
|
|
132
|
+
prop.minimum !== undefined ||
|
|
133
|
+
prop.maximum !== undefined) {
|
|
134
|
+
practices.hasValidation = true;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Check for documentation
|
|
139
|
+
if (tool.description) {
|
|
140
|
+
practices.hasDocumentation = true;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Count how many practices are followed
|
|
144
|
+
const followedPractices = Object.values(practices).filter((v) => v).length;
|
|
145
|
+
// Consider following best practices if at least 2 are met
|
|
146
|
+
return followedPractices >= 2;
|
|
147
|
+
}
|
|
148
|
+
isDescriptiveName(name) {
|
|
149
|
+
// Check if name is self-descriptive
|
|
150
|
+
const goodNames = [
|
|
151
|
+
"query",
|
|
152
|
+
"search",
|
|
153
|
+
"input",
|
|
154
|
+
"output",
|
|
155
|
+
"data",
|
|
156
|
+
"content",
|
|
157
|
+
"message",
|
|
158
|
+
"text",
|
|
159
|
+
"file",
|
|
160
|
+
"path",
|
|
161
|
+
"url",
|
|
162
|
+
"name",
|
|
163
|
+
"id",
|
|
164
|
+
"value",
|
|
165
|
+
"result",
|
|
166
|
+
"response",
|
|
167
|
+
"request",
|
|
168
|
+
"params",
|
|
169
|
+
];
|
|
170
|
+
const nameLower = name.toLowerCase();
|
|
171
|
+
// Check if name contains any good keywords
|
|
172
|
+
for (const goodName of goodNames) {
|
|
173
|
+
if (nameLower.includes(goodName)) {
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Check if name is not too short or cryptic
|
|
178
|
+
return name.length > 3 && !/^[a-z]$/.test(name);
|
|
179
|
+
}
|
|
180
|
+
getToolSchema(tool) {
|
|
181
|
+
if (!tool.inputSchema)
|
|
182
|
+
return null;
|
|
183
|
+
return typeof tool.inputSchema === "string"
|
|
184
|
+
? this.safeJsonParse(tool.inputSchema)
|
|
185
|
+
: tool.inputSchema;
|
|
186
|
+
}
|
|
187
|
+
determineUsabilityStatus(metrics) {
|
|
188
|
+
let score = 0;
|
|
189
|
+
const maxScore = 4;
|
|
190
|
+
if (metrics.toolNamingConvention === "consistent")
|
|
191
|
+
score++;
|
|
192
|
+
if (metrics.parameterClarity === "clear")
|
|
193
|
+
score++;
|
|
194
|
+
if (metrics.hasHelpfulDescriptions)
|
|
195
|
+
score++;
|
|
196
|
+
if (metrics.followsBestPractices)
|
|
197
|
+
score++;
|
|
198
|
+
const percentage = (score / maxScore) * 100;
|
|
199
|
+
if (percentage >= 75)
|
|
200
|
+
return "PASS";
|
|
201
|
+
if (percentage >= 50)
|
|
202
|
+
return "NEED_MORE_INFO";
|
|
203
|
+
return "FAIL";
|
|
204
|
+
}
|
|
205
|
+
generateExplanation(metrics, tools) {
|
|
206
|
+
const parts = [];
|
|
207
|
+
parts.push(`Analyzed ${tools.length} tools for usability.`);
|
|
208
|
+
parts.push(`Naming convention: ${metrics.toolNamingConvention}.`);
|
|
209
|
+
parts.push(`Parameter clarity: ${metrics.parameterClarity}.`);
|
|
210
|
+
const features = [];
|
|
211
|
+
if (metrics.hasHelpfulDescriptions)
|
|
212
|
+
features.push("helpful descriptions");
|
|
213
|
+
if (metrics.followsBestPractices)
|
|
214
|
+
features.push("follows best practices");
|
|
215
|
+
if (features.length > 0) {
|
|
216
|
+
parts.push(`Features: ${features.join(", ")}.`);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
parts.push("Missing key usability features.");
|
|
220
|
+
}
|
|
221
|
+
return parts.join(" ");
|
|
222
|
+
}
|
|
223
|
+
generateRecommendations(metrics) {
|
|
224
|
+
const recommendations = [];
|
|
225
|
+
if (metrics.toolNamingConvention === "inconsistent") {
|
|
226
|
+
recommendations.push("Adopt a consistent naming convention for all tools");
|
|
227
|
+
}
|
|
228
|
+
if (metrics.parameterClarity !== "clear") {
|
|
229
|
+
recommendations.push("Use descriptive parameter names");
|
|
230
|
+
recommendations.push("Add descriptions for all parameters");
|
|
231
|
+
}
|
|
232
|
+
if (!metrics.hasHelpfulDescriptions) {
|
|
233
|
+
recommendations.push("Provide detailed descriptions for each tool");
|
|
234
|
+
}
|
|
235
|
+
if (!metrics.followsBestPractices) {
|
|
236
|
+
recommendations.push("Implement input validation with constraints");
|
|
237
|
+
recommendations.push("Follow MCP best practices for tool design");
|
|
238
|
+
}
|
|
239
|
+
return recommendations;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Assessment Modules
|
|
3
|
+
*
|
|
4
|
+
* This module exports all assessors for comprehensive MCP server evaluation.
|
|
5
|
+
*
|
|
6
|
+
* Original Assessors (from MCP Inspector):
|
|
7
|
+
* - FunctionalityAssessor - Tests tool execution and response handling
|
|
8
|
+
* - DocumentationAssessor - Evaluates README and tool documentation
|
|
9
|
+
* - SecurityAssessor - Checks for security vulnerabilities
|
|
10
|
+
* - ErrorHandlingAssessor - Tests error handling patterns
|
|
11
|
+
* - UsabilityAssessor - Evaluates tool naming and schemas
|
|
12
|
+
* - MCPSpecComplianceAssessor - Verifies MCP specification compliance
|
|
13
|
+
*
|
|
14
|
+
* MCP Directory Compliance Assessors (new):
|
|
15
|
+
* - AUPComplianceAssessor - Checks for Acceptable Use Policy violations (14 categories)
|
|
16
|
+
* - ToolAnnotationAssessor - Verifies tool annotations per Policy #17
|
|
17
|
+
* - ProhibitedLibrariesAssessor - Detects prohibited libraries per Policy #28-30
|
|
18
|
+
* - ManifestValidationAssessor - Validates MCPB manifest.json
|
|
19
|
+
* - PortabilityAssessor - Checks for portability issues
|
|
20
|
+
*/
|
|
21
|
+
export { BaseAssessor } from "./BaseAssessor.js";
|
|
22
|
+
export { FunctionalityAssessor } from "./FunctionalityAssessor.js";
|
|
23
|
+
export { DocumentationAssessor } from "./DocumentationAssessor.js";
|
|
24
|
+
export { SecurityAssessor } from "./SecurityAssessor.js";
|
|
25
|
+
export { ErrorHandlingAssessor } from "./ErrorHandlingAssessor.js";
|
|
26
|
+
export { UsabilityAssessor } from "./UsabilityAssessor.js";
|
|
27
|
+
export { MCPSpecComplianceAssessor } from "./MCPSpecComplianceAssessor.js";
|
|
28
|
+
export { AUPComplianceAssessor } from "./AUPComplianceAssessor.js";
|
|
29
|
+
export { ToolAnnotationAssessor } from "./ToolAnnotationAssessor.js";
|
|
30
|
+
export { ProhibitedLibrariesAssessor } from "./ProhibitedLibrariesAssessor.js";
|
|
31
|
+
export { ManifestValidationAssessor } from "./ManifestValidationAssessor.js";
|
|
32
|
+
export { PortabilityAssessor } from "./PortabilityAssessor.js";
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAGxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server Assessment Modules
|
|
3
|
+
*
|
|
4
|
+
* This module exports all assessors for comprehensive MCP server evaluation.
|
|
5
|
+
*
|
|
6
|
+
* Original Assessors (from MCP Inspector):
|
|
7
|
+
* - FunctionalityAssessor - Tests tool execution and response handling
|
|
8
|
+
* - DocumentationAssessor - Evaluates README and tool documentation
|
|
9
|
+
* - SecurityAssessor - Checks for security vulnerabilities
|
|
10
|
+
* - ErrorHandlingAssessor - Tests error handling patterns
|
|
11
|
+
* - UsabilityAssessor - Evaluates tool naming and schemas
|
|
12
|
+
* - MCPSpecComplianceAssessor - Verifies MCP specification compliance
|
|
13
|
+
*
|
|
14
|
+
* MCP Directory Compliance Assessors (new):
|
|
15
|
+
* - AUPComplianceAssessor - Checks for Acceptable Use Policy violations (14 categories)
|
|
16
|
+
* - ToolAnnotationAssessor - Verifies tool annotations per Policy #17
|
|
17
|
+
* - ProhibitedLibrariesAssessor - Detects prohibited libraries per Policy #28-30
|
|
18
|
+
* - ManifestValidationAssessor - Validates MCPB manifest.json
|
|
19
|
+
* - PortabilityAssessor - Checks for portability issues
|
|
20
|
+
*/
|
|
21
|
+
// Base class
|
|
22
|
+
export { BaseAssessor } from "./BaseAssessor.js";
|
|
23
|
+
// Original MCP Inspector Assessors
|
|
24
|
+
export { FunctionalityAssessor } from "./FunctionalityAssessor.js";
|
|
25
|
+
export { DocumentationAssessor } from "./DocumentationAssessor.js";
|
|
26
|
+
export { SecurityAssessor } from "./SecurityAssessor.js";
|
|
27
|
+
export { ErrorHandlingAssessor } from "./ErrorHandlingAssessor.js";
|
|
28
|
+
export { UsabilityAssessor } from "./UsabilityAssessor.js";
|
|
29
|
+
export { MCPSpecComplianceAssessor } from "./MCPSpecComplianceAssessor.js";
|
|
30
|
+
// MCP Directory Compliance Assessors
|
|
31
|
+
export { AUPComplianceAssessor } from "./AUPComplianceAssessor.js";
|
|
32
|
+
export { ToolAnnotationAssessor } from "./ToolAnnotationAssessor.js";
|
|
33
|
+
export { ProhibitedLibrariesAssessor } from "./ProhibitedLibrariesAssessor.js";
|
|
34
|
+
export { ManifestValidationAssessor } from "./ManifestValidationAssessor.js";
|
|
35
|
+
export { PortabilityAssessor } from "./PortabilityAssessor.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bryan-thompson/inspector-assessment",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
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>",
|
|
@@ -24,11 +24,14 @@
|
|
|
24
24
|
],
|
|
25
25
|
"type": "module",
|
|
26
26
|
"bin": {
|
|
27
|
-
"mcp-inspector-assess": "cli/build/cli.js"
|
|
27
|
+
"mcp-inspector-assess": "cli/build/cli.js",
|
|
28
|
+
"mcp-assess-full": "cli/build/assess-full.js",
|
|
29
|
+
"mcp-assess-security": "cli/build/assess-security.js"
|
|
28
30
|
},
|
|
29
31
|
"files": [
|
|
30
32
|
"client/bin",
|
|
31
33
|
"client/dist",
|
|
34
|
+
"client/lib",
|
|
32
35
|
"server/build",
|
|
33
36
|
"cli/build"
|
|
34
37
|
],
|
|
@@ -48,6 +51,7 @@
|
|
|
48
51
|
"kill": "node scripts/kill-server.js",
|
|
49
52
|
"restart": "npm run kill && npm run dev",
|
|
50
53
|
"assess": "tsx --tsconfig client/tsconfig.app.json scripts/run-security-assessment.ts",
|
|
54
|
+
"assess:full": "tsx --tsconfig client/tsconfig.app.json scripts/run-full-assessment.ts",
|
|
51
55
|
"dev:sdk": "npm run link:sdk && concurrently \"npm run dev\" \"cd sdk && npm run build:esm:w\"",
|
|
52
56
|
"link:sdk": "(test -d sdk || ln -sf ${MCP_SDK:-$PWD/../typescript-sdk} sdk) && (cd sdk && npm link && (test -d node_modules || npm i)) && npm link @modelcontextprotocol/sdk",
|
|
53
57
|
"unlink:sdk": "(cd sdk && npm unlink -g) && rm sdk && npm unlink @modelcontextprotocol/sdk",
|
|
@@ -73,6 +77,7 @@
|
|
|
73
77
|
"@bryan-thompson/inspector-assessment-cli": "^1.0.0",
|
|
74
78
|
"@bryan-thompson/inspector-assessment-client": "^1.0.0",
|
|
75
79
|
"@bryan-thompson/inspector-assessment-server": "^1.0.0",
|
|
80
|
+
"@esbuild/darwin-arm64": "^0.27.1",
|
|
76
81
|
"@modelcontextprotocol/sdk": "^1.23.0",
|
|
77
82
|
"concurrently": "^9.2.0",
|
|
78
83
|
"node-fetch": "^3.3.2",
|