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