/** * Manifest Validation Assessor * Validates MCPB manifest.json against spec requirements * * Checks: * - manifest_version (must be 0.3) * - Required fields: name, version, description, author * - mcp_config structure * - icon.png presence * - Version consistency (manifest vs runtime) - Issue #209 * * Reference: MCPB Specification */ import { BaseAssessor } from "./BaseAssessor.js"; import { AssessmentContext } from "../AssessmentOrchestrator.js"; import type { ManifestValidationAssessment } from "../../../lib/assessmentTypes.js"; /** * Calculate Levenshtein distance between two strings * Uses space-optimized two-row algorithm for O(min(n,m)) memory * Used for "did you mean?" suggestions on mismatched tool names (Issue #140) * Exported for testing (Issue #141 - ISSUE-002) */ export declare function levenshteinDistance(a: string, b: string, maxDist?: number): number; export declare class ManifestValidationAssessor extends BaseAssessor { /** * Get mcp_config from manifest (supports both root and nested v0.3 format) * Issue #138: Manifest v0.3 places mcp_config under server object * * @param manifest - The parsed manifest JSON * @returns The mcp_config object or undefined if not found in either location */ private getMcpConfig; /** * Extract contact information from manifest (Issue #141 - D4 check) * Supports: author object, author string (email parsing), repository fallback * * @param manifest - The parsed manifest JSON * @returns Extracted contact info or undefined if no contact info found */ private extractContactInfo; /** * Extract version information from manifest (Issue #141 - D5 check) * * @param manifest - The parsed manifest JSON * @returns Extracted version info or undefined if no version found */ private extractVersionInfo; /** * Run manifest validation assessment */ assess(context: AssessmentContext): Promise; /** * Create result when no manifest is available */ private createNoManifestResult; /** * Create result when manifest JSON is invalid */ private createInvalidJsonResult; /** * Validate manifest_version field */ private validateManifestVersion; /** * Validate required field presence */ private validateRequiredField; /** * Validate recommended field presence */ private validateRecommendedField; /** * Validate mcp_config structure */ private validateMcpConfig; /** * Validate icon presence */ private validateIcon; /** * Validate name format */ private validateNameFormat; /** * Validate version format (semver) */ private validateVersionFormat; /** * Validate version consistency between manifest and runtime (Issue #209) * Compares manifest.version against serverInfo.version from MCP initialize */ private validateVersionConsistency; /** * Validate manifest tool declarations against actual server tools (Issue #140) * Compares tool names in manifest.tools against context.tools from tools/list * Uses Levenshtein distance for "did you mean?" suggestions */ private validateToolNamesMatch; /** * Fetch with retry logic for transient network failures */ private fetchWithRetry; /** * Validate privacy policy URLs are accessible */ private validatePrivacyPolicyUrls; /** * Determine overall status */ private determineManifestStatus; /** * Generate explanation */ private generateExplanation; /** * Generate recommendations */ private generateRecommendations; /** * Build Stage B enrichment data for Claude validation (Issue #199) */ private buildEnrichmentData; /** * Build field inventory from validation results */ private buildFieldInventory; /** * Infer field category from field name */ private inferFieldCategory; /** * Build field coverage showing what was checked */ private buildFieldCoverage; /** * Build flags for review based on validation results and context */ private buildFlagsForReview; } //# sourceMappingURL=ManifestValidationAssessor.d.ts.map