mcp-adr-analysis-server
Version:
MCP server for analyzing Architectural Decision Records and project architecture
129 lines • 4.34 kB
JavaScript
/**
* Core TypeScript interfaces for MCP ADR Analysis Server
* Based on shrimp-rules.md requirements
*/
import { z } from 'zod';
export const AdrSchema = z.object({
id: z.string(),
title: z.string(),
status: z.enum(['proposed', 'accepted', 'deprecated', 'superseded']),
date: z.string(),
context: z.string(),
decision: z.string(),
consequences: z.string(),
implementationPlan: z.string().optional(),
filePath: z.string(),
tags: z.array(z.string()).optional(),
relatedAdrs: z.array(z.string()).optional(),
});
export const DetectedTechnologySchema = z.object({
name: z.string(),
category: z.enum(['framework', 'library', 'database', 'cloud', 'devops', 'language', 'tool']),
version: z.string().optional(),
confidence: z.number().min(0).max(1),
evidence: z.array(z.string()),
filePaths: z.array(z.string()),
description: z.string().optional(),
});
export const DetectedPatternSchema = z.object({
name: z.string(),
type: z.enum([
'architectural',
'structural',
'organizational',
'communication',
'testing',
'data',
]),
confidence: z.number().min(0).max(1),
description: z.string(),
evidence: z.array(z.string()),
filePaths: z.array(z.string()),
suboptimal: z.boolean().optional(),
recommendations: z.array(z.string()).optional(),
});
export const ArchitecturalKnowledgeGraphSchema = z.object({
projectId: z.string(),
timestamp: z.string(),
adrs: z.array(AdrSchema),
technologies: z.array(DetectedTechnologySchema),
patterns: z.array(DetectedPatternSchema),
rules: z.array(z.any()), // Will be defined by RuleSchema
relationships: z.array(z.object({
source: z.string(),
target: z.string(),
type: z.enum(['implements', 'depends_on', 'conflicts_with', 'supersedes', 'relates_to']),
strength: z.number().min(0).max(1),
description: z.string().optional(),
})),
metadata: z.object({
name: z.string(),
description: z.string().optional(),
version: z.string().optional(),
lastAnalyzed: z.string(),
analysisVersion: z.string(),
fileCount: z.number(),
directoryCount: z.number(),
}),
});
export const AdrTaskSchema = z.object({
id: z.string(),
adrId: z.string(),
title: z.string(),
description: z.string(),
status: z.enum(['pending', 'in_progress', 'completed', 'blocked']),
priority: z.enum(['low', 'medium', 'high', 'critical']),
estimatedEffort: z.string().optional(),
assignee: z.string().optional(),
dueDate: z.string().optional(),
dependencies: z.array(z.string()).optional(),
verificationCriteria: z.string().optional(),
completionEvidence: z.array(z.string()).optional(),
});
export const RuleSchema = z.object({
id: z.string(),
name: z.string(),
description: z.string(),
type: z.enum(['architectural', 'coding', 'security', 'performance', 'documentation']),
severity: z.enum(['info', 'warning', 'error', 'critical']),
pattern: z.string(),
message: z.string(),
source: z.enum(['adr', 'inferred', 'user_defined']),
sourceId: z.string().optional(),
enabled: z.boolean(),
tags: z.array(z.string()).optional(),
});
// ============================================================================
// Error Types
// ============================================================================
export class McpAdrError extends Error {
code;
details;
constructor(message, code, details) {
super(message);
this.name = 'McpAdrError';
this.code = code;
if (details !== undefined) {
this.details = details;
}
}
}
export class ValidationError extends McpAdrError {
constructor(message, details) {
super(message, 'VALIDATION_ERROR', details);
this.name = 'ValidationError';
}
}
export class FileSystemError extends McpAdrError {
constructor(message, details) {
super(message, 'FILESYSTEM_ERROR', details);
this.name = 'FileSystemError';
}
}
export class AnalysisError extends McpAdrError {
constructor(message, details) {
super(message, 'ANALYSIS_ERROR', details);
this.name = 'AnalysisError';
}
}
//# sourceMappingURL=index.js.map