MCP server for Pulse — free, agent-first social-post metrics (YouTube, X, TikTok, Bluesky, Mastodon, Instagram, LinkedIn). Tools: metrics, metrics_batch, history, profile, profile_batch.
Pulse MCP demonstrates solid tool design with clear naming (verb_noun pattern), comprehensive descriptions (avg 180+ chars), and proper JSON Schema definitions. All 5 tools have input schemas with typed parameters and descriptions. However, output schemas are undocumented, LLMs cannot predict response structure. Error handling is minimal (no recovery guidance, no categorization). Tool descriptions are verbose but lack dependency hints and prerequisites. No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only. Parameter descriptions could be more prescriptive about formats and constraints.
Get the recorded metrics history of a post OR a profile — the growth curve. Every fresh metrics fetch records a { t, views, likes, comments, shares, quotes, bookmarks } snapshot (profiles: { t, followers, posts }); this returns the series (oldest first). Pass `since` (ISO-8601 or unix ms) to get only the points after that moment — poll the delta, not the whole series. An empty series means the URL hasn't been fetched yet: call `metrics` or `profile` on it to start the series.
Get a public social post's metrics. Give a post URL (YouTube, X/Twitter incl. view counts, TikTok incl. photo posts, Bluesky, Mastodon (major instances), Hacker News (points + comments), Stack Overflow (views + score + answers), Instagram, Threads, LinkedIn — short links like vm.tiktok.com and t.co resolve automatically) and get normalized { platform, views, likes, comments, shares, quotes, bookmarks, publishedAt, title, author, thumbnail } — shares = reshares (X retweets, TikTok shares, Bluesky reposts); quotes = quote posts (X, Bluesky); bookmarks = saves (X). Free.
Get metrics for many posts and/or profiles in one call. Pass an array of URLs (max 50, mixed post and profile URLs welcome); returns { count, results }, order preserved — each result is the metrics object or { url, error }.
Get account-level metrics for a profile URL — { platform, handle, name, followers, following, posts, likes, verified, avatar }. Live: YouTube channels (subscribers), TikTok users (exact counts + total hearts), Instagram accounts (exact counts), Facebook pages (page followers), X accounts (followers/following/posts), Bluesky accounts (exact counts), Mastodon accounts (exact, major instances). Threads, LinkedIn, and login-walled Facebook need a session cookie.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting). Responses are JSON-stringified text, not structured objects.
No tool annotations despite all tools being read-only and idempotent. Missing readOnlyHint and idempotentHint in tool definitions.
Error handling returns raw JSON responses without recovery guidance. No categorization of errors as retryable vs user-fixable. LLM cannot determine next action on failure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Get account-level metrics for many profile URLs in one call — same as `profile` but up to 50 URLs at once. Mixed platforms welcome (YouTube, TikTok, Instagram, Facebook, X, Bluesky, Mastodon). Returns { count, results }, order preserved — each result is a profile object or { url, error }. Useful for comparing follower counts across a list of creators/accounts.
Parameter 'since' in history tool lacks format specification. Description says 'ISO-8601 or unix ms' but no regex pattern or example provided. LLMs may pass invalid formats.
Batch tools (metrics_batch, profile_batch) accept 'max 50 URLs' but no validation or error message if exceeded. LLM may pass 100+ URLs expecting silent truncation.