mcp-adr-analysis-server
Version:
MCP server for analyzing Architectural Decision Records and project architecture
124 lines • 4 kB
TypeScript
/**
* ADRs Discovered Resource - ADR discovery and summary
* URI Pattern: adr://adrs/discovered
*/
import { URLSearchParams } from 'url';
import { ResourceGenerationResult } from './index.js';
export interface AdrsDiscoveredData {
directory: string;
totalAdrs: number;
adrs: Array<{
filename: string;
title: string;
status: string;
date?: string;
path: string;
number?: string;
category?: string;
tags?: string[];
}>;
summary: {
byStatus: Record<string, number>;
byCategory: Record<string, number>;
};
recommendations: string[];
timestamp: string;
}
/**
* Generate ADRs discovered resource with discovery results and summary.
*
* Discovers and catalogs all Architectural Decision Records (ADRs) in a project:
* - Scans configured ADR directory for decision records
* - Extracts metadata (title, status, date, category)
* - Generates summary statistics by status and category
* - Provides recommendations for ADR management
*
* **URI Pattern:** `adr://adrs/discovered`
*
* **Query Parameters:**
* - `projectPath`: Override project root path (default: process.cwd())
* - `adrDirectory`: Override ADR directory (default: docs/adrs)
* - `includeContent`: Include full ADR content (default: false)
* - `includeTimeline`: Include timeline analysis (default: false)
*
* @param params - URL path parameters (none for this resource)
* @param searchParams - URL query parameters for customization
*
* @returns Promise resolving to resource generation result containing:
* - data: ADR discovery results with summaries
* - contentType: "application/json"
* - lastModified: ISO timestamp of generation
* - cacheKey: Unique identifier "adrs-discovered" or "adrs-discovered:{projectPath}"
* - ttl: Cache duration (120 seconds / 2 minutes)
* - etag: Entity tag for cache validation
*
* @throws {McpAdrError} When:
* - RESOURCE_NOT_FOUND: ADR directory not found or inaccessible
* - RESOURCE_GENERATION_ERROR: ADR discovery or parsing fails
*
* @example
* ```typescript
* // Discover ADRs in default location
* const discovered = await generateAdrsDiscoveredResource(
* {},
* new URLSearchParams()
* );
*
* console.log(`Found ${discovered.data.totalAdrs} ADRs`);
* console.log(`Accepted: ${discovered.data.summary.byStatus.accepted}`);
* console.log(`Proposed: ${discovered.data.summary.byStatus.proposed}`);
*
* // Discover ADRs in custom location
* const custom = await generateAdrsDiscoveredResource(
* {},
* new URLSearchParams('projectPath=/custom/path&adrDirectory=decisions')
* );
*
* // Expected output structure:
* {
* data: {
* directory: "/project/docs/adrs",
* totalAdrs: 25,
* adrs: [
* {
* filename: "001-use-postgresql.md",
* title: "Use PostgreSQL for primary database",
* status: "accepted",
* date: "2025-01-15",
* path: "/project/docs/adrs/001-use-postgresql.md",
* number: "001",
* category: "database",
* tags: ["postgresql", "database"]
* },
* ...
* ],
* summary: {
* byStatus: {
* accepted: 20,
* proposed: 3,
* deprecated: 2
* },
* byCategory: {
* database: 5,
* api: 8,
* infrastructure: 7,
* security: 5
* }
* },
* recommendations: [
* "Consider reviewing deprecated ADRs",
* "3 proposed ADRs need decisions"
* ],
* timestamp: "2025-12-16T04:30:00.000Z"
* },
* contentType: "application/json",
* cacheKey: "adrs-discovered",
* ttl: 120
* }
* ```
*
* @since v2.2.0
* @see {@link discoverAdrsInDirectory} for ADR discovery logic
*/
export declare function generateAdrsDiscoveredResource(_params: Record<string, string>, searchParams: URLSearchParams): Promise<ResourceGenerationResult>;
//# sourceMappingURL=adrs-discovered-resource.d.ts.map