get_trending_tools
Discover AI developer tools with the highest adoption growth rates over specified time periods, filtered by category to identify trending technologies for development workflows.
Instructions
Get the fastest-growing AI developer tools over a time period, ranked by adoption growth rate
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| time_range | No | Time period to analyze for growth trends | 30d |
| limit | No | Maximum number of tools to return (3-10) | |
| category | No | Filter by tool category, or "all" for no filter | all |
Implementation Reference
- src/tools/trending.js:46-99 (handler)The async execute function that performs the core logic: fetches tools, filters by category, computes growth metrics, sorts by growth percentage, limits results, and formats a markdown response with rankings.async execute(args) { const { time_range = '30d', limit = 5, category = 'all' } = args; // Get all tools with their current metrics let toolsList = getToolsByMetric('npm_downloads_monthly'); // Filter by category if specified if (category !== 'all') { toolsList = toolsList.filter(t => t.category === category); } // Calculate growth for each tool const months = time_range === '90d' ? 3 : 1; const toolsWithGrowth = toolsList.map(tool => { const growth = getGrowthMetrics(tool.id, months); return { ...tool, growth_pct: growth?.growth_pct || 0, current_downloads: growth?.current || tool.npm_downloads_monthly }; }); // Sort by growth rate (descending) toolsWithGrowth.sort((a, b) => b.growth_pct - a.growth_pct); // Take top N const trending = toolsWithGrowth.slice(0, limit); // Format output let output = `🚀 Trending AI Developer Tools\n`; output += `📅 Period: ${time_range}`; if (category !== 'all') { output += ` | Category: ${category}`; } output += `\n\n`; // Rankings output += `**Fastest Growing**\n`; trending.forEach((tool, index) => { const rank = index + 1; const growthIcon = tool.growth_pct > 50 ? '🔥' : tool.growth_pct > 20 ? '⚡' : '📈'; output += `${rank}. ${growthIcon} **${tool.name}**\n`; output += ` - Growth: +${tool.growth_pct.toFixed(1)}% over ${time_range}\n`; output += ` - Current: ${formatNumber(tool.current_downloads)} downloads/month\n`; output += ` - ${tool.description}\n`; }); // Context note output += `\n_Growth calculated from ${time_range} historical data_`; return output; }
- src/tools/trending.js:21-44 (schema)JSON Schema defining the input parameters for the tool: time_range (7d/30d/90d), limit (3-10), category filter.inputSchema: { type: 'object', properties: { time_range: { type: 'string', enum: ['7d', '30d', '90d'], default: '30d', description: 'Time period to analyze for growth trends' }, limit: { type: 'integer', minimum: 3, maximum: 10, default: 5, description: 'Maximum number of tools to return (3-10)' }, category: { type: 'string', enum: ['llm-api', 'editor', 'assistant', 'framework', 'all'], default: 'all', description: 'Filter by tool category, or "all" for no filter' } } },
- src/index.js:65-70 (registration)Registration of the trendingTool in the central tools array used by the MCP server for list and call handlers.const tools = [ compareTool, trendingTool, historyTool, searchTool ];
- src/index.js:30-30 (registration)Import statement that brings the trendingTool into the main server index for registration.import { trendingTool } from './tools/trending.js';
- src/tools/trending.js:102-108 (helper)Utility function to format large numbers for display (K/M suffixes).function formatNumber(num) { if (num >= 1_000_000) { return `${(num / 1_000_000).toFixed(1)}M`; } else if (num >= 1_000) { return `${(num / 1_000).toFixed(0)}K`; } return num.toString();