Skip to main content
Glama

generate_optimization_recommendations

Generate Clarity contract optimization recommendations based on SIP-012 improvements and best practices to address performance issues and achieve target throughput goals.

Instructions

Generate specific optimization recommendations for Clarity contracts based on SIP-012 improvements and best practices.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
contractPatternYesType of contract pattern
currentIssuesYesCurrent performance issues identified
targetThroughputNoTarget performance goals

Implementation Reference

  • The main execution handler for the 'generate_optimization_recommendations' tool. It takes contract pattern and issues, calls generatePatternOptimizations, and formats a comprehensive Markdown report with recommendations, roadmap, and SIP-012 specific advice.
    export const generateOptimizationRecommendationsTool: Tool<undefined, typeof OptimizationRecommendationScheme> = { name: "generate_optimization_recommendations", description: "Generate specific optimization recommendations for Clarity contracts based on SIP-012 improvements and best practices.", parameters: OptimizationRecommendationScheme, execute: async (args, context) => { try { await recordTelemetry({ action: "generate_optimization_recommendations" }, context); const recommendations = generatePatternOptimizations(args.contractPattern, args.currentIssues); return `# SIP-012 Optimization Recommendations ## Contract Pattern: ${args.contractPattern.toUpperCase()} ${args.targetThroughput ? `**Target Performance**: ${args.targetThroughput}` : ''} ## Current Issues Analysis ${args.currentIssues.map(issue => `- ${issue}`).join('\n')} ## Optimization Strategy ${recommendations.map((rec: any, index: number) => ` ### ${index + 1}. ${rec.title} **Priority**: ${rec.priority.toUpperCase()} **Expected Impact**: ${rec.impact} **Implementation Effort**: ${rec.effort} **Problem**: ${rec.problem} **Solution**: ${rec.solution} **Implementation**: \`\`\`clarity ${rec.code} \`\`\` **Benefits**: ${rec.benefits.map((b: string) => `- ${b}`).join('\n')} **SIP-012 Advantages**: ${rec.sip012Benefits} `).join('\n')} ## Implementation Roadmap ### Phase 1: Critical Optimizations (Week 1-2) ${recommendations.filter((r: any) => r.priority === 'high').map((r: any) => `- ${r.title}: ${r.impact}`).join('\n')} ### Phase 2: Performance Improvements (Week 3-4) ${recommendations.filter((r: any) => r.priority === 'medium').map((r: any) => `- ${r.title}: ${r.impact}`).join('\n')} ### Phase 3: Advanced Optimizations (Week 5-6) ${recommendations.filter((r: any) => r.priority === 'low').map((r: any) => `- ${r.title}: ${r.impact}`).join('\n')} ## SIP-012 Specific Optimizations ### Database Operations - **Leverage 2x Capacity**: Use increased read/write limits for complex operations - **Batch Processing**: Group operations to minimize overhead - **Efficient Indexing**: Optimize map key structures ### Storage Efficiency - **Dynamic Lists**: Take advantage of actual-size pricing - **Data Packing**: Combine related data into tuples - **Lazy Loading**: Defer expensive computations ### Performance Monitoring \`\`\`clarity ;; Add performance monitoring to your contracts (define-read-only (get-operation-cost) { estimated-runtime: u50000, read-operations: u2, write-operations: u1 } ) \`\`\` ## Testing Strategy 1. **Clarinet Performance Tests**: Measure actual costs 2. **Load Testing**: Test with maximum data sizes 3. **Benchmark Comparisons**: Before/after optimization 4. **Production Monitoring**: Track real-world performance ## Success Metrics - [ ] Runtime costs reduced by ${recommendations.filter(r => r.priority === 'high').length * 25}% - [ ] Database operations optimized for SIP-012 limits - [ ] Storage costs minimized with dynamic sizing - [ ] Transaction throughput improved - [ ] User experience enhanced with faster confirmations`; } catch (error) { return `❌ Failed to generate optimization recommendations: ${error}`; } }, };
  • Zod schema defining the input parameters for the tool: contractPattern (enum), currentIssues (array of strings), and optional targetThroughput.
    const OptimizationRecommendationScheme = z.object({ contractPattern: z.enum([ "token-contract", "nft-collection", "defi-pool", "dao-governance", "marketplace", "staking-pool", "generic" ]).describe("Type of contract pattern"), currentIssues: z.array(z.string()).describe("Current performance issues identified"), targetThroughput: z.string().optional().describe("Target performance goals"), });
  • Registration of the tool in the FastMCP server within the registerTools function.
    server.addTool(generateOptimizationRecommendationsTool);
  • Core helper function that provides pattern-specific optimization recommendations (e.g., for token-contract, nft-collection) used in the tool's execute function.
    function generatePatternOptimizations(pattern: string, issues: string[]) { const baseOptimizations = { "token-contract": [ { title: "Implement Batch Transfers", priority: "high", impact: "50-70% cost reduction for multiple transfers", effort: "Medium", problem: "Individual transfers are expensive", solution: "Batch multiple transfers in single transaction", code: "(define-public (batch-transfer (transfers (list 25 {recipient: principal, amount: uint})))\n (fold execute-transfer transfers (ok u0)))", benefits: ["Reduced per-transfer overhead", "Better UX for airdrops", "Lower gas costs"], sip012Benefits: "Leverages increased write capacity for efficient batch processing" }, { title: "Optimize Balance Storage", priority: "medium", impact: "20-30% storage cost reduction", effort: "Low", problem: "Separate maps for different user data", solution: "Consolidate user data into single map with tuple", code: "(define-map user-data principal {balance: uint, last-transfer: uint, flags: uint})", benefits: ["Fewer database operations", "Consolidated user data", "Easier maintenance"], sip012Benefits: "Reduced read/write operations with tuple-based storage" } ], "nft-collection": [ { title: "Dynamic Metadata Storage", priority: "high", impact: "40-60% metadata storage savings", effort: "Medium", problem: "Fixed-size metadata allocations waste storage", solution: "Use SIP-012 dynamic list sizing for variable metadata", code: "(define-map token-metadata uint {name: (string-ascii 64), traits: (list 20 (string-ascii 32))})", benefits: ["Pay only for actual metadata size", "Flexible trait system", "Reduced costs"], sip012Benefits: "Dynamic list storage assessment based on actual content" } ], "defi-pool": [ { title: "State Consolidation", priority: "high", impact: "30-50% operation cost reduction", effort: "High", problem: "Multiple state variables require separate reads/writes", solution: "Consolidate pool state into single tuple", code: "(define-data-var pool-state {reserve-a: uint, reserve-b: uint, k: uint, fees: uint} ...)", benefits: ["Atomic state updates", "Consistent data", "Fewer operations"], sip012Benefits: "Single read/write operations for complete state updates" } ], "generic": [ { title: "Implement Caching Strategy", priority: "medium", impact: "Variable (20-80% for repeated operations)", effort: "Medium", problem: "Expensive computations repeated multiple times", solution: "Cache computation results in maps", code: "(define-map computation-cache uint uint)\n(define-private (cached-compute (input uint))\n (match (map-get? computation-cache input)\n cached cached\n (let ((result (expensive-computation input)))\n (map-set computation-cache input result)\n result)))", benefits: ["Avoid redundant computations", "Predictable costs", "Better performance"], sip012Benefits: "Efficient caching with optimized map operations" } ] }; return baseOptimizations[pattern as keyof typeof baseOptimizations] || baseOptimizations["generic"]; }

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/exponentlabshq/stacks-clarity-mcp'

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