UNPKG

@specstory/tnydev-mcp

Version:

MCP server for tny.dev URL shortening service - AI agent integration for link management

70 lines (64 loc) • 2.54 kB
import { z } from 'zod'; const GetAnalyticsSchema = z.object({ slug: z.string().describe('The slug of the shortened URL to get analytics for') }); export async function handleGetAnalytics(params, client) { const parsed = GetAnalyticsSchema.parse(params); try { const result = await client.getAnalytics(parsed.slug); const rateLimitInfo = client.getRateLimitInfo(); // Format analytics for display const analytics = result.analytics; const link = result.link; const analyticsText = `Analytics for ${link.long_url}: šŸ“Š **Total Clicks**: ${analytics.total_clicks} - Actual clicks: ${analytics.actual_clicks} - Previews: ${analytics.previews} - QR scans: ${analytics.qr_scans} - Email clicks: ${analytics.email_clicks} - Bot visits: ${analytics.bot_visits} šŸ“± **Devices**: ${Object.entries(analytics.devices).map(([device, count]) => `- ${device}: ${count}`).join('\n')} šŸŒ **Top Countries**: ${Object.entries(analytics.countries).slice(0, 5).map(([country, count]) => `- ${country}: ${count}`).join('\n')} šŸ”— **Top Referrers**: ${Object.entries(analytics.referrers).slice(0, 5).map(([referrer, count]) => `- ${referrer}: ${count}`).join('\n')} ${analytics.utm.total > 0 ? ` šŸ“ˆ **UTM Parameters**: - Sources: ${Object.keys(analytics.utm.sources).join(', ')} - Mediums: ${Object.keys(analytics.utm.mediums).join(', ')} - Campaigns: ${Object.keys(analytics.utm.campaigns).join(', ')} - Total UTM clicks: ${analytics.utm.total} ` : ''} šŸ”— **Short URL**: https://www.tny.dev/${parsed.slug} šŸ“… **Created**: ${new Date(link.created_at).toLocaleString()}${rateLimitInfo ? `\n\n⚔ Rate Limit: ${rateLimitInfo.remaining}/${rateLimitInfo.limit} requests remaining (${rateLimitInfo.tier} tier)` : ''}`; return { content: [ { type: "text", text: analyticsText } ] }; } catch (error) { throw new Error(`Failed to get analytics: ${error instanceof Error ? error.message : 'Unknown error'}`); } } export const getAnalyticsTool = { name: "get_link_analytics", description: "Get click analytics for a shortened link", inputSchema: { type: "object", properties: { slug: { type: "string", description: "The slug of the shortened URL to get analytics for" } }, required: ["slug"] } }; //# sourceMappingURL=analytics.js.map