Skip to main content
Glama
wspotter

MCP Art Supply Store

by wspotter

generate_post_ideas

Generate creative social media post ideas for art supply products based on themes, seasons, or specific items to help with content planning and marketing strategy.

Instructions

Generate creative post ideas based on products, themes, or seasons. Perfect for content planning.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
countNoNumber of ideas to generate (default: 5)
productsYesComma-separated product names to feature
themeYesTheme or season: fall, winter, spring, summer, sale, new_arrival, etc.

Implementation Reference

  • Core handler function that generates creative social media post ideas based on provided theme and products list. Uses templates for seasonal and product-focused content.
    generatePostIdeas(theme: string, products: string[]): string[] {
      const ideas: string[] = [];
    
      // Seasonal/theme-based ideas
      const seasonalTemplates = {
        'fall': [
          `šŸ‚ Fall into creativity! Our ${products[0]} are perfect for capturing autumn's warm colors. What's your favorite season to paint?`,
          `Cozy up with some art this fall! ✨ Check out our ${products[0]} - perfect for your next masterpiece.`,
          `Fall art vibes šŸŽØ Featuring: ${products.join(', ')}. Come visit us and get inspired!`
        ],
        'winter': [
          `ā„ļø Winter creativity is in the air! Stay warm and paint with our ${products[0]}.`,
          `Snowy days call for indoor art projects! ā˜ƒļø We've got everything you need including ${products.join(' and ')}.`
        ],
        'spring': [
          `🌸 Spring into art! Fresh new ${products[0]} just arrived. Perfect for capturing the season's vibrant colors!`,
          `Bloom where you're planted 🌷 Create something beautiful with our ${products.join(', ')}.`
        ],
        'summer': [
          `ā˜€ļø Summer art fun! Beat the heat with a creative project using our ${products[0]}.`,
          `Sunshine and art supplies ā˜€ļø The perfect summer combo! Featuring ${products.join(' and ')}.`
        ]
      };
    
      // Product-focused ideas
      const productTemplates = [
        `✨ New arrival alert! ${products[0]} now in stock. Limited quantities available!`,
        `Artist spotlight: ${products[0]} šŸŽØ Perfect for ${this.getProductUseCase(products[0])}. In store now!`,
        `Did you know? Our ${products[0]} are customer favorites! ⭐ Stop by and see why everyone loves them.`,
        `Weekend project idea: Try ${products[0]} for your next creation! šŸ–Œļø Tag us in your finished work!`,
        `Behind the counter: We love our ${products[0]}! šŸ’™ What's your go-to art supply?`
      ];
    
      // Engagement ideas
      const engagementTemplates = [
        `šŸ’­ Question for our creative community: What's your favorite medium to work with? (We love ${products[0]}!)`,
        `šŸŽØ Share your progress! Drop a photo of what you're working on in the comments. Need supplies? We've got ${products.join(', ')} and more!`,
        `⭐ Customer appreciation post! Thank you for supporting our small business. Come see what's new - ${products[0]} just restocked!`
      ];
    
      // Select appropriate ideas based on theme
      const themeKey = theme.toLowerCase();
      if (themeKey in seasonalTemplates) {
        ideas.push(...(seasonalTemplates as any)[themeKey]);
      } else {
        ideas.push(...productTemplates.slice(0, 3));
      }
    
      ideas.push(...engagementTemplates.slice(0, 2));
    
      return ideas.slice(0, 5);
  • Tool schema definition including input schema with parameters theme (string, required), products (string, required), and optional count (number).
      name: 'generate_post_ideas',
      description: 'Generate creative post ideas based on products, themes, or seasons. Perfect for content planning.',
      inputSchema: {
        type: 'object',
        properties: {
          theme: { type: 'string', description: 'Theme or season: fall, winter, spring, summer, sale, new_arrival, etc.' },
          products: { type: 'string', description: 'Comma-separated product names to feature' },
          count: { type: 'number', description: 'Number of ideas to generate (default: 5)' },
        },
        required: ['theme', 'products'],
      },
    },
  • src/index.ts:1141-1157 (registration)
    Registration and execution handler in the MCP server's CallToolRequestSchema switch statement. Parses arguments, calls the socialMediaManager.generatePostIdeas, formats and returns the result as MCP content.
    case 'generate_post_ideas': {
      const theme = String(args?.theme || '');
      const productsArg = String(args?.products || '');
      const count = Number(args?.count || 5);
      
      const products = productsArg.split(',').map(p => p.trim());
      const ideas = socialMediaManager.generatePostIdeas(theme, products);
    
      return {
        content: [{
          type: 'text',
          text: `šŸ’” Post Ideas - ${theme}\n\n${ideas.slice(0, count).map((idea, i) =>
            `${i + 1}. ${idea}`
          ).join('\n\n')}\n\n✨ Pro tip: Customize these ideas with your store's personality and current promotions!`
        }]
      };
    }
  • Private helper method used by generatePostIdeas to map product names to descriptive use cases for more engaging post copy.
    private getProductUseCase(product: string): string {
      const useCases: { [key: string]: string } = {
        'paint': 'both beginners and professionals',
        'brush': 'detailed work and bold strokes',
        'canvas': 'your next masterpiece',
        'pencil': 'sketching and drawing',
        'watercolor': 'beautiful transparent effects',
        'acrylic': 'vibrant, versatile painting',
        'oil': 'rich, blendable colors',
        'easel': 'studio or plein air painting'
      };
    
      const lowerProduct = product.toLowerCase();
      for (const [key, useCase] of Object.entries(useCases)) {
        if (lowerProduct.includes(key)) {
          return useCase;
        }
      }
    
      return 'all your creative projects';
    }
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool 'generates' ideas, implying a read-only or creative operation, but fails to detail behavioral traits such as whether it uses AI, has rate limits, requires specific permissions, or what the output format looks like (e.g., list of ideas). This leaves significant gaps in understanding how the tool behaves in practice.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, with two sentences that efficiently state the purpose and usage context. Every sentence earns its place by adding value, but it could be slightly more structured (e.g., by explicitly listing key parameters). Overall, it's appropriately sized without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a generative tool with no annotations and no output schema, the description is incomplete. It lacks details on behavioral aspects (e.g., how ideas are generated, output format), and while the schema covers parameters, the description doesn't add context for usage or results. This leaves the agent with insufficient information to fully understand the tool's operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning the input schema already documents all parameters (count, products, theme) with descriptions. The description adds no additional meaning beyond what's in the schema, such as explaining how products and themes interact or providing examples. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Generate creative post ideas based on products, themes, or seasons.' It specifies the verb ('generate') and resources ('post ideas'), and distinguishes it from siblings like 'generate_hashtags' or 'get_instagram_story_ideas' by focusing on general post ideas rather than specific content types. However, it doesn't explicitly differentiate from all siblings, keeping it from a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context with 'Perfect for content planning,' suggesting it's for planning phases, but lacks explicit guidance on when to use this tool versus alternatives like 'generate_hashtags' or 'schedule_weekly_posts.' No exclusions or specific alternatives are named, leaving usage somewhat vague beyond the implied planning scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/wspotter/mcpart'

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