Skip to main content
Glama

generate_prd

Create detailed Product Requirements Documents (PRD) by transforming project ideas into structured plans using AI analysis and industry standards. Ideal for defining scope, target users, timelines, and stakeholder roles efficiently.

Instructions

Generate a comprehensive Product Requirements Document (PRD) from a project idea using AI analysis and industry best practices

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
authorYes
complexityYes
includeResearchYes
industryContextNo
projectIdeaYes
projectNameYes
stakeholdersNo
targetUsersNo
timelineNo

Implementation Reference

  • Main execution handler for the generate_prd tool. Creates PRDGenerationService, generates PRD from inputs, validates it, formats summary and response.
    async function executeGeneratePRD(args: GeneratePRDArgs): Promise<MCPResponse> { const prdService = new PRDGenerationService(); try { // Generate comprehensive PRD from project idea const prd = await prdService.generatePRDFromIdea({ projectIdea: args.projectIdea, projectName: args.projectName, targetUsers: args.targetUsers, timeline: args.timeline, complexity: args.complexity, author: args.author, stakeholders: args.stakeholders }); // Validate PRD completeness const validation = await prdService.validatePRDCompleteness(prd); // Format response const summary = formatPRDGenerationSummary(prd, validation); return ToolResultFormatter.formatSuccess('generate_prd', { summary, prd, validation, completenessScore: validation.score, isComplete: validation.isComplete }); } catch (error) { process.stderr.write(`Error in generate_prd tool: ${error}\n`); // Check if this is an AI availability error const errorMessage = error instanceof Error ? error.message : 'Unknown error'; const isAIUnavailable = errorMessage.includes('AI service is not available') || errorMessage.includes('API key') || errorMessage.includes('provider'); if (isAIUnavailable) { const aiErrorSummary = formatAIUnavailableMessage('generate_prd', errorMessage); return ToolResultFormatter.formatSuccess('generate_prd', { content: [{ type: 'text', text: aiErrorSummary }], success: false, aiAvailable: false }); } return ToolResultFormatter.formatSuccess('generate_prd', { content: [{ type: 'text', text: `# Failed to generate PRD\n\n**Error:** ${errorMessage}\n\nPlease check your input parameters and try again.` }], success: false }); } }
  • Zod schema defining input parameters for the generate_prd tool.
    const generatePRDSchema = z.object({ projectIdea: z.string().min(20).describe('The project idea or concept to create a PRD for'), projectName: z.string().min(3).describe('Name of the project'), targetUsers: z.array(z.string()).optional().describe('Target user groups'), timeline: z.string().optional().describe('Expected project timeline (e.g., "3 months", "Q1 2024")'), complexity: z.enum(['low', 'medium', 'high']).default('medium').describe('Expected project complexity'), author: z.string().describe('Author of the PRD'), stakeholders: z.array(z.string()).optional().describe('Project stakeholders'), includeResearch: z.boolean().default(false).describe('Whether to include market research and competitive analysis'), industryContext: z.string().optional().describe('Industry or domain context for the project') });
  • Registers the generatePRDTool in the central ToolRegistry during initialization.
    this.registerTool(generatePRDTool);
  • src/index.ts:444-445 (registration)
    MCP server router dispatches generate_prd calls to executeGeneratePRD handler.
    case "generate_prd": return await executeGeneratePRD(args);
  • Helper service method that orchestrates AI generation of PRD from project idea, adds metadata, and validates the output.
    async generatePRDFromIdea(params: { projectIdea: string; projectName: string; targetUsers?: string[]; timeline?: string; complexity?: 'low' | 'medium' | 'high'; author: string; stakeholders?: string[]; }): Promise<PRDDocument> { try { // Validate input if (!params.projectIdea.trim()) { throw new Error('Project idea is required'); } if (!params.projectName.trim()) { throw new Error('Project name is required'); } // Generate PRD using AI const generatedPRD = await this.aiProcessor.generatePRDFromIdea({ projectIdea: params.projectIdea, targetUsers: params.targetUsers?.join(', '), timeline: params.timeline, complexity: params.complexity }); // Enhance with provided metadata const enhancedPRD: PRDDocument = { ...generatedPRD, title: params.projectName, author: params.author, stakeholders: params.stakeholders || [], version: '1.0.0' }; // Validate the generated PRD const validatedPRD = PRDDocumentSchema.parse(enhancedPRD); return validatedPRD; } catch (error) { process.stderr.write(`Error generating PRD from idea: ${error instanceof Error ? error.message : String(error)}\n`); throw new Error(`Failed to generate PRD: ${error instanceof Error ? error.message : 'Unknown error'}`); } }

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/kunwarVivek/mcp-github-project-manager'

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