import { promises as fs } from "fs" import { join } from "path" import yaml from "js-yaml" import type { SkillMcpConfig } from "../skill-mcp-manager/types" export function parseSkillMcpConfigFromFrontmatter(content: string): SkillMcpConfig | undefined { const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/) if (!frontmatterMatch) return undefined try { const parsed = yaml.load(frontmatterMatch[1]) as Record if (parsed && typeof parsed === "object" && "mcp" in parsed && parsed.mcp) { return parsed.mcp as SkillMcpConfig } } catch { return undefined } return undefined } export async function loadMcpJsonFromDir(skillDir: string): Promise { const mcpJsonPath = join(skillDir, "mcp.json") try { const content = await fs.readFile(mcpJsonPath, "utf-8") const parsed = JSON.parse(content) as Record if (parsed && typeof parsed === "object" && "mcpServers" in parsed && parsed.mcpServers) { return parsed.mcpServers as SkillMcpConfig } if (parsed && typeof parsed === "object" && !("mcpServers" in parsed)) { const hasCommandField = Object.values(parsed).some( (value) => value && typeof value === "object" && "command" in (value as Record) ) if (hasCommandField) { return parsed as SkillMcpConfig } } } catch { return undefined } return undefined }