Skip to main content
Glama

validate_structure

Check heading hierarchy and section balance in markdown manuscripts to identify structural issues and improve document organization.

Instructions

Check heading hierarchy and section balance

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
project_pathNoPath to manuscript directory (defaults to current directory)
file_pathNoSpecific file to validate
checksNoChecks to run (heading-levels, duplicates, balance, deep-nesting)

Implementation Reference

  • MCP tool handler for 'validate_structure' that extracts arguments and delegates to WritersAid.validateStructure
    private async validateStructure(args: Record<string, unknown>) { const filePath = args.file_path as string | undefined; const checks = args.checks as string[] | undefined; return this.writersAid.validateStructure({ filePath, checks }); }
  • Tool schema definition including input schema for validate_structure
    { name: "validate_structure", description: "Check heading hierarchy and section balance", inputSchema: { type: "object", properties: { project_path: { type: "string", description: "Path to manuscript directory (defaults to current directory)" }, file_path: { type: "string", description: "Specific file to validate" }, checks: { type: "array", items: { type: "string" }, description: "Checks to run (heading-levels, duplicates, balance, deep-nesting)", }, }, }, },
  • Core implementation of structure validation with checks for heading levels, duplicates, balance, and nesting
    async validateStructure(options: { filePath?: string; checks?: string[]; }): Promise<StructureReport> { const { filePath, checks } = options; const enabledChecks = checks || [ "heading-levels", "duplicate-headings", "section-balance", "deep-nesting", ]; const issues: StructureIssue[] = []; const files = filePath ? [await this.storage.getFile(filePath)] : await this.storage.getAllFiles(); const validFiles = files.filter((f) => f !== null); for (const file of validFiles) { if (enabledChecks.includes("heading-levels")) { issues.push(...(await this.checkHeadingLevels(file.file_path))); } if (enabledChecks.includes("duplicate-headings")) { issues.push(...(await this.checkDuplicateHeadings(file.file_path))); } if (enabledChecks.includes("section-balance")) { issues.push(...(await this.checkSectionBalance(file.file_path))); } if (enabledChecks.includes("deep-nesting")) { issues.push(...(await this.checkDeepNesting(file.file_path))); } } const errors = issues.filter((i) => i.severity === "error").length; const warnings = issues.filter((i) => i.severity === "warning").length; const info = issues.filter((i) => i.severity === "info").length; return { issues, filesChecked: validFiles.length, errors, warnings, info, }; }
  • Delegation method in WritersAid that calls StructureValidator
    async validateStructure(options?: { filePath?: string; checks?: string[] }) { return this.structureValidator.validateStructure(options || {}); }
  • Registration of validate_structure in the tool dispatcher switch statement
    case "validate_structure": return this.validateStructure(args);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/xiaolai/claude-writers-aid-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server