Skip to main content
Glama

recommend_stack_demo

Get free technology stack recommendations for software projects by specifying project type and scale. Uses deterministic scoring across 30+ technologies to identify optimal options.

Instructions

Try StacksFinder's tech stack recommendations for FREE - once per day, no account required.

Returns the optimal technology for each category based on deterministic scoring. For unlimited access, priorities, constraints, and AI-generated narratives, upgrade to Pro at https://stacksfinder.com/pricing

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
projectTypeYesType of project
scaleNoProject scale

Implementation Reference

  • The core handler function executeRecommendStackDemo that implements the tool's logic: checks daily usage limit, selects best technologies for project categories based on scores, formats a markdown table response, and promotes the pro version.
    export function executeRecommendStackDemo( input: RecommendStackDemoInput ): { text: string; isError?: boolean } { const { projectType, scale = 'mvp' } = input; debug('recommend_stack_demo called', { projectType, scale }); // Check rate limit if (wasDemoUsedToday()) { const deviceId = getDeviceId(); return { text: `## Daily Demo Limit Reached You've already used your free demo today. **Options:** 1. Come back tomorrow for another free demo 2. Create a free account at https://stacksfinder.com/register 3. Upgrade to Pro for unlimited recommendations: https://stacksfinder.com/pricing **Pro benefits:** - Unlimited stack recommendations - Custom priorities (time-to-market, scalability, security, etc.) - Technology constraints - AI-generated implementation narratives - API access for automation - MCP integration with full features --- *Device ID: ${deviceId.slice(0, 8)}...*`, isError: true }; } // Get categories for this project type const categories = PROJECT_TYPE_CATEGORIES[projectType] || ['meta-framework', 'database', 'auth', 'hosting']; // Get scoring context const context = scaleToContext(scale); // Select best tech per category const recommendations = selectBestTechPerCategory(categories, context, projectType); // Record usage recordDemoUsage(); // Format response const projectLabel = projectType.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase()); let text = `## Recommended Stack for ${projectLabel} (${scale}) | Category | Technology | Score | Grade | |----------|------------|-------|-------| `; for (const rec of recommendations) { text += `| ${rec.category} | ${rec.technology} | ${rec.score} | ${rec.grade} |\n`; } text += ` **Confidence**: medium (demo mode - no priorities/constraints applied) --- ### Want More? This is a **simplified demo**. The full version includes: - Custom priorities (time-to-market, scalability, security, etc.) - Technology constraints ("must use PostgreSQL", "no AWS") - Compatibility scoring between all selected technologies - AI-generated implementation narrative with setup guides - Confidence scoring (high/medium/low) based on your inputs **Upgrade to Pro**: https://stacksfinder.com/pricing **Create free account**: https://stacksfinder.com/register --- *Data version: ${DATA_VERSION} | Demo (1/day limit)*`; return { text }; }
  • Zod input schema validation for the tool parameters: projectType (required enum) and scale (optional enum).
    export const RecommendStackDemoInputSchema = z.object({ projectType: z.enum(PROJECT_TYPES).describe('Type of project'), scale: z.enum(SCALES).optional().default('mvp').describe('Project scale') });
  • src/server.ts:124-161 (registration)
    MCP server tool registration for 'recommend_stack_demo', including input schema definition, annotations, and handler wrapper that parses input and calls executeRecommendStackDemo.
    // Register recommend_stack_demo tool (FREE, local scoring, 1/day limit) server.registerTool( recommendStackDemoToolDefinition.name, { title: 'Recommend Stack (Demo)', description: recommendStackDemoToolDefinition.description, inputSchema: { projectType: z .enum([ 'web-app', 'mobile-app', 'api', 'desktop', 'cli', 'library', 'e-commerce', 'saas', 'marketplace' ]) .describe('Type of project'), scale: z.enum(['mvp', 'startup', 'growth', 'enterprise']).optional().describe('Project scale') }, annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: false } }, async (args) => { debug('recommend_stack_demo called', args); const input = RecommendStackDemoInputSchema.parse(args); const { text, isError } = executeRecommendStackDemo(input); return { content: [{ type: 'text', text }], isError }; } );
  • Tool definition object with name, description, and JSON schema for MCP tool listing/discovery.
    export const recommendStackDemoToolDefinition = { name: 'recommend_stack_demo', description: `Try StacksFinder's tech stack recommendations for FREE - once per day, no account required. Returns the optimal technology for each category based on deterministic scoring. For unlimited access, priorities, constraints, and AI-generated narratives, upgrade to Pro at https://stacksfinder.com/pricing`, inputSchema: { type: 'object' as const, properties: { projectType: { type: 'string', enum: PROJECT_TYPES, description: 'Type of project (e.g., saas, web-app, api)' }, scale: { type: 'string', enum: SCALES, description: 'Project scale (mvp, startup, growth, enterprise)' } }, required: ['projectType'] } };
  • Helper function that selects the best technology for each category by calculating weighted overall scores from data module, used by the handler.
    function selectBestTechPerCategory( categories: Category[], context: Context, projectType: string ): Array<{ category: Category; technology: string; score: number; grade: string }> { const results: Array<{ category: Category; technology: string; score: number; grade: string }> = []; const weights = PROJECT_TYPE_WEIGHTS[projectType] || {}; for (const category of categories) { const techs = getTechnologiesByCategory(category); if (techs.length === 0) continue; let bestTech = techs[0]; let bestScore = 0; for (const tech of techs) { const scores = getScores(tech.id, context); if (!scores) continue; let overall = calculateOverallScore(scores); // Apply project-type specific weight const weight = weights[category] || 1.0; overall = Math.round(overall * weight); if (overall > bestScore) { bestScore = overall; bestTech = tech; } } const finalScores = getScores(bestTech.id, context); const finalScore = finalScores ? calculateOverallScore(finalScores) : 0; results.push({ category, technology: bestTech.name, score: finalScore, grade: scoreToGrade(finalScore) }); } return results; }

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/hoklims/stacksfinder-mcp'

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