/** * Developer Experience Assessor Module * * Unified module for evaluating developer experience aspects of MCP servers. * Merges DocumentationAssessor and UsabilityAssessor functionality. * * Assessment Areas: * 1. Documentation Quality - README completeness, examples, guides * 2. Usability - Tool naming, parameter clarity, best practices * * This module is part of Tier 4 (Extended) and is optional for security-focused audits. * * @module assessment/modules/DeveloperExperienceAssessor */ import { DocumentationMetrics, UsabilityMetrics, AssessmentStatus, NamespaceDetectionResult } from "../../../lib/assessmentTypes.js"; import { BaseAssessor } from "./BaseAssessor.js"; import { AssessmentContext } from "../AssessmentOrchestrator.js"; /** * Combined Developer Experience Assessment Result */ export interface DeveloperExperienceAssessment { /** Documentation metrics and analysis */ documentation: DocumentationMetrics; /** Usability metrics and analysis */ usability: UsabilityMetrics; /** Overall status combining both assessments */ status: AssessmentStatus; /** Human-readable explanation */ explanation: string; /** Recommendations for improvement */ recommendations: string[]; /** Individual scores for downstream consumers */ scores: { documentation: number; usability: number; overall: number; }; /** Namespace detection results (Issue #142) */ namespaceDetection?: NamespaceDetectionResult; } export declare class DeveloperExperienceAssessor extends BaseAssessor { assess(context: AssessmentContext): Promise; private analyzeDocumentation; private extractFunctionalExamples; private isNonFunctionalCodeBlock; private scoreFunctionalExample; private getLineNumber; private deduplicateExamples; private extractCodeExamples; private checkInstallInstructions; private checkUsageGuide; private checkAPIReference; private extractSection; private extractSectionHeadings; private classifyCodeExample; /** * Assess documentation quality using Issue #55 point-based scoring * Max 100 points: README (30), Install (20), Config (20), Examples (20), License (10) * * Issue #208: License check now distinguishes between: * - hasLicenseFile: Actual LICENSE file exists (PASS) * - hasLicenseDeclaration: Only package.json/README mention (WARNING) */ private assessDocumentationQuality; /** * Determine README quality tier based on size * - minimal: <5KB * - adequate: 5KB-15KB * - comprehensive: >15KB */ private determineReadmeQuality; /** * Calculate point-based quality score per Issue #55 * Max 100 points: * - README exists: +10 * - README >5KB: +10 (adequate) * - README >15KB: +10 more (comprehensive = +20 total) * - Installation section: +20 * - Configuration section: +20 * - Examples present: +20 * - License file: +10 (full), +5 (declaration only, Issue #208) */ private calculateQualityScore; /** * Check for configuration/environment section * Looks for: configuration, config, environment, env vars, .env */ private checkConfigurationSection; /** * Detect license type (MIT, Apache-2.0, GPL, BSD, etc.) */ private detectLicenseType; /** * Issue #208: Validate license file existence vs declaration * * This method distinguishes between: * - Actual LICENSE file in repository (PASS) * - License declared in package.json/manifest but no file (WARNING) * - No license file AND no declaration (FAIL) * * The old detectLicense() method returned true for README "## License" sections, * causing false positives. This method only counts actual LICENSE files. */ private validateLicenseFile; private analyzeUsability; private analyzeNamingConvention; private analyzeParameterClarity; private checkDescriptions; private checkBestPractices; private isDescriptiveName; private getToolSchema; private calculateUsabilityScore; /** * Detect namespace/prefix patterns in tool names. * This helps identify intentional naming conventions like: * - calc_add, calc_subtract -> namespace "calc" * - fileRead, fileWrite -> namespace "file" * - myserver_tool1, myserver_tool2 -> matches server name */ private detectNamespace; /** * Find common prefix among tool names. * Handles both snake_case (calc_add) and camelCase (calcAdd) conventions. */ private findCommonPrefix; /** * Check if tool names use the server name as a prefix. * Normalizes server name to match common patterns. */ private checkServerNamePrefix; /** * Normalize server name for prefix matching. * Converts "My-Server" -> "myserver", "my_server" -> "myserver" */ private normalizeServerName; private determineOverallStatus; private generateExplanation; private generateRecommendations; } //# sourceMappingURL=DeveloperExperienceAssessor.d.ts.map