Skip to main content
Glama
MUSE-CODE-SPACE

Vibe Coding Documentation MCP (MUSE)

schemas.ts5.8 kB
import { z } from 'zod'; /** * Zod schemas for input validation * Aligned with existing type definitions in types/index.ts */ // Common schemas - matching existing types export const CodeBlockSchema = z.object({ language: z.string().default('text'), code: z.string(), filename: z.string().optional(), description: z.string().optional() }); export const DesignDecisionSchema = z.object({ id: z.string(), title: z.string(), description: z.string(), rationale: z.string(), alternatives: z.array(z.string()).optional(), category: z.enum(['architecture', 'library', 'pattern', 'implementation', 'other']).default('other'), timestamp: z.string().default(() => new Date().toISOString()) }); export const CodeContextSchema = z.object({ sessionId: z.string(), timestamp: z.string(), codeBlocks: z.array(CodeBlockSchema), conversationSummary: z.string(), tags: z.array(z.string()).optional() }); export const SessionLogOptionsSchema = z.object({ logType: z.enum(['daily', 'session']).default('session'), outputPath: z.string().optional(), format: z.enum(['markdown', 'json']).optional().default('markdown') }); // Tool input schemas - matching existing tool interfaces export const CollectCodeContextSchema = z.object({ codeBlocks: z.array(CodeBlockSchema).optional(), rawText: z.string().optional(), conversationSummary: z.string().min(1, 'Conversation summary is required'), tags: z.array(z.string()).optional(), autoDetectLanguage: z.boolean().optional().default(true), removeDuplicates: z.boolean().optional().default(true), includeStats: z.boolean().optional().default(false) }); export const SummarizeDesignDecisionsSchema = z.object({ conversationLog: z.string().min(1, 'Conversation log is required'), language: z.enum(['en', 'ko']).optional().default('en') }); export const GenerateDevDocumentSchema = z.object({ documentType: z.enum(['README', 'DESIGN', 'TUTORIAL', 'CHANGELOG', 'API', 'ARCHITECTURE']), title: z.string().optional(), description: z.string().optional(), projectName: z.string().optional(), author: z.string().optional(), version: z.string().optional(), license: z.string().optional(), language: z.enum(['en', 'ko']).optional().default('en'), features: z.array(z.string()).optional(), installation: z.object({ requirements: z.array(z.string()).optional(), steps: z.array(z.string()).optional() }).optional(), apiReference: z.array(z.object({ name: z.string(), description: z.string(), params: z.array(z.string()).optional(), returns: z.string().optional() })).optional(), designDecisions: z.array(DesignDecisionSchema).optional(), codeContexts: z.array(CodeContextSchema).optional(), changelog: z.array(z.object({ version: z.string(), date: z.string(), changes: z.array(z.string()) })).optional(), includeTableOfContents: z.boolean().optional().default(false), faq: z.array(z.object({ question: z.string(), answer: z.string() })).optional(), contributors: z.array(z.object({ name: z.string(), role: z.string().optional() })).optional() }); export const NormalizeForPlatformSchema = z.object({ document: z.string().min(1, 'Document is required'), platform: z.enum(['notion', 'github-wiki', 'obsidian']), options: z.object({ addFrontmatter: z.boolean().optional(), addTimestamp: z.boolean().optional(), customMetadata: z.record(z.string()).optional() }).optional() }); export const PublishDocumentSchema = z.object({ document: z.string().min(1, 'Document is required'), platform: z.enum(['notion', 'github-wiki', 'obsidian', 'confluence', 'slack', 'discord']), title: z.string().min(1, 'Title is required'), options: z.object({ filename: z.string().optional(), wikiPath: z.string().optional(), vaultPath: z.string().optional(), tags: z.array(z.string()).optional() }).optional() }); export const CreateSessionLogSchema = z.object({ title: z.string().min(1, 'Title is required'), summary: z.string().min(1, 'Summary is required'), codeContexts: z.array(CodeContextSchema).optional(), designDecisions: z.array(DesignDecisionSchema).optional(), duration: z.number().optional(), tags: z.array(z.string()).optional(), options: SessionLogOptionsSchema.optional() }); export const AnalyzeCodeSchema = z.object({ code: z.string().min(1, 'Code is required'), language: z.enum(['typescript', 'javascript', 'python', 'go']), filename: z.string().optional(), options: z.object({ includeComplexity: z.boolean().optional().default(true), includeDependencies: z.boolean().optional().default(true), generateDiagram: z.boolean().optional().default(true), diagramType: z.enum(['class', 'flowchart', 'dependency', 'architecture']).optional().default('class') }).optional() }); // Type exports from schemas export type CollectCodeContextInput = z.infer<typeof CollectCodeContextSchema>; export type SummarizeDesignDecisionsInput = z.infer<typeof SummarizeDesignDecisionsSchema>; export type GenerateDevDocumentInput = z.infer<typeof GenerateDevDocumentSchema>; export type NormalizeForPlatformInput = z.infer<typeof NormalizeForPlatformSchema>; export type PublishDocumentInput = z.infer<typeof PublishDocumentSchema>; export type CreateSessionLogInput = z.infer<typeof CreateSessionLogSchema>; export type AnalyzeCodeInput = z.infer<typeof AnalyzeCodeSchema>; /** * Validates input against schema and returns typed result */ export function validateInput<T>(schema: z.ZodSchema<T>, input: unknown): T { const result = schema.safeParse(input); if (!result.success) { const errors = result.error.errors.map(e => `${e.path.join('.')}: ${e.message}`).join(', '); throw new Error(`Validation failed: ${errors}`); } return result.data; }

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/MUSE-CODE-SPACE/vibe-coding-mcp'

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