# Task ID: 55 **Title:** Implement system prompt fetching and caching in mcplocal **Status:** done **Dependencies:** 54 ✓ **Priority:** high **Description:** Add functionality to mcplocal router to fetch system prompts from mcpd and cache them with 60s TTL, supporting template variable replacement. **Details:** 1. Add system prompt fetching in `/src/mcplocal/src/router.ts`: ```typescript private systemPromptCache: Map = new Map(); async getSystemPrompt(name: string): Promise { const cached = this.systemPromptCache.get(name); if (cached && cached.expiresAt > Date.now()) { return cached.content; } const prompts = await this.mcpdClient.fetch( '/api/v1/projects/mcpctl-system/prompts/visible' ); const prompt = prompts.find(p => p.name === name); if (!prompt) { throw new Error(`System prompt not found: ${name}`); } this.systemPromptCache.set(name, { content: prompt.content, expiresAt: Date.now() + 60000, // 60s TTL }); return prompt.content; } ``` 2. Add template variable replacement: ```typescript replaceTemplateVariables(content: string, vars: Record): string { return content .replace(/\{\{prompt_index\}\}/g, vars.prompt_index || '') .replace(/\{\{project_name\}\}/g, vars.project_name || '') .replace(/\{\{matched_prompts\}\}/g, vars.matched_prompts || '') .replace(/\{\{remaining_prompts\}\}/g, vars.remaining_prompts || ''); } ``` **Test Strategy:** - Unit test: System prompt fetched from mcpd - Unit test: Cached prompt returned within TTL - Unit test: Cache miss triggers fresh fetch - Unit test: Missing system prompt throws error - Unit test: Template variables replaced correctly - Unit test: Unknown template variables left as-is - Integration test: End-to-end fetch and cache