# Task ID: 75 **Title:** Implement section-split Stage **Status:** done **Dependencies:** 71 ✓, 74 ✓ **Priority:** high **Description:** Create the built-in section-split stage that splits content based on detected content type, using structural boundaries for JSON/YAML/XML and headers for prose. **Details:** Create `src/mcplocal/src/proxymodel/stages/section-split.ts`: ```typescript import type { StageHandler, Section } from '../types'; import { detectContentType } from '../content-detection'; const handler: StageHandler = async (content, ctx) => { const minSize = (ctx.config.minSectionSize as number) ?? 2000; const maxSize = (ctx.config.maxSectionSize as number) ?? 15000; const contentType = detectContentType(content); let sections: Section[]; switch (contentType) { case 'json': sections = splitJson(content, minSize, maxSize); break; case 'yaml': sections = splitYaml(content, minSize, maxSize); break; case 'xml': sections = splitXml(content, minSize, maxSize); break; case 'code': sections = splitCode(content, minSize); break; default: sections = splitProse(content, minSize); } if (sections.length === 0) { return { content, sections: [{ id: 'main', title: 'Content', content }] }; } const toc = sections.map((s, i) => `[${s.id}] ${s.title}`).join('\n'); return { content: `${sections.length} sections (${contentType}):\n${toc}`, sections, }; }; function splitJson(content: string, minSize: number, maxSize: number): Section[] { const parsed = JSON.parse(content); if (Array.isArray(parsed)) { return parsed.map((item, i) => ({ id: item.id ?? item.name ?? `item-${i}`, title: item.label ?? item.title ?? item.name ?? `Item ${i}`, content: JSON.stringify(item, null, 2), })); } return Object.entries(parsed).map(([key, value]) => ({ id: key, title: key, content: JSON.stringify(value, null, 2), })); } // Similar implementations for splitYaml, splitXml, splitCode, splitProse ``` **Test Strategy:** Unit tests for each content type: JSON arrays split by element, JSON objects split by key, YAML split by top-level keys, XML split by elements, prose split by markdown headers. Test minSize/maxSize thresholds. Test fallback when content can't be parsed.