mcp-adr-analysis-server
Version:
MCP server for analyzing Architectural Decision Records and project architecture
116 lines • 3.92 kB
TypeScript
/**
* ADR by ID Resource - Individual ADR access
* URI Pattern: adr://adr/{id}
*/
import { URLSearchParams } from 'url';
import { ResourceGenerationResult } from './index.js';
export interface AdrDetails {
id: string;
title: string;
status: string;
date: string;
context: string;
decision: string;
consequences: string;
implementationPlan?: string;
filePath: string;
fileName: string;
fileSize: number;
tags: string[];
relatedAdrs: string[];
priority: string;
complexity: string;
implementationStatus: 'not-started' | 'in-progress' | 'completed';
validationResults?: {
isValid: boolean;
issues: string[];
score: number;
};
}
/**
* Generate individual ADR (Architectural Decision Record) resource with enhanced metadata and validation.
*
* Retrieves a specific ADR by its unique identifier and enriches it with:
* - Structural validation scoring
* - Related ADR discovery through content analysis
* - Implementation status tracking
* - Priority and complexity assessment
* - File metadata (size, location, tags)
*
* **URI Pattern:** `adr://adr/{id}`
*
* **Query Parameters:**
* - `projectPath`: Override project root path (default: process.cwd())
*
* @param params - URL path parameters containing:
* - id: ADR identifier (e.g., "001", "database-architecture", or full filename)
* @param searchParams - URL query parameters for path customization
*
* @returns Promise resolving to resource generation result containing:
* - data: Complete ADR details with validation, relationships, and metadata
* - contentType: "application/json"
* - lastModified: ISO timestamp of generation
* - cacheKey: Unique identifier "adr:{id}"
* - ttl: Cache duration (600 seconds / 10 minutes)
* - etag: Entity tag for cache validation
*
* @throws {McpAdrError} When ADR retrieval fails due to:
* - INVALID_PARAMS: Missing required 'id' parameter
* - RESOURCE_NOT_FOUND: ADR with specified ID not found in directory
* - RESOURCE_GENERATION_ERROR: ADR discovery or parsing failure
*
* @example
* ```typescript
* // Get ADR by numeric ID
* const adr = await generateAdrByIdResource(
* { id: '001' },
* new URLSearchParams()
* );
*
* console.log(`Title: ${adr.data.title}`);
* console.log(`Status: ${adr.data.status}`);
* console.log(`Validation score: ${adr.data.validationResults.score}/100`);
* console.log(`Related ADRs: ${adr.data.relatedAdrs.join(', ')}`);
*
* // Get ADR from custom project path
* const customAdr = await generateAdrByIdResource(
* { id: 'database-architecture' },
* new URLSearchParams('projectPath=/path/to/project')
* );
*
* // Expected output structure:
* {
* data: {
* id: "001",
* title: "Use PostgreSQL for primary database",
* status: "accepted",
* date: "2025-01-15",
* context: "We need a reliable RDBMS...",
* decision: "We will use PostgreSQL...",
* consequences: "- Positive: ACID compliance...",
* implementationStatus: "completed",
* priority: "high",
* complexity: "medium",
* relatedAdrs: ["002-database-migrations", "005-data-access-layer"],
* validationResults: {
* isValid: true,
* issues: [],
* score: 95
* },
* filePath: "/project/docs/adrs/001-database-choice.md",
* fileSize: 2048,
* tags: ["database", "infrastructure"]
* },
* contentType: "application/json",
* cacheKey: "adr:001",
* ttl: 600
* }
* ```
*
* @since v2.0.0
* @see {@link discoverAdrsInDirectory} for ADR discovery logic
* @see {@link validateAdr} for ADR validation rules
* @see {@link findRelatedAdrs} for relationship detection
*/
export declare function generateAdrByIdResource(params: Record<string, string>, searchParams: URLSearchParams): Promise<ResourceGenerationResult>;
//# sourceMappingURL=adr-by-id-resource.d.ts.map