LIVE · MCP-ENABLED · OAUTH 2.0 + PKCE

ViralDM
Instagram Automation

India-first Instagram automation SaaS exposed via Model Context Protocol. 36 tools for scheduling posts/reels/stories, AI content generation (English/Hindi/Hinglish), auto-DM sequences, broadcasts, subscriber CRM, analytics, A/B testing, content safety, revenue attribution, and more — all accessible to Claude, Gemini, Cursor, or any MCP-compatible agent.

Endpoint
/mcp
Transport
StreamableHTTP
Protocol
2025-03-26
Tools
36 available
Version
1.0.0
Auth
OAuth + API Key

1 Connect from your AI agent

// ~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "viraldm": {
      "url": "https://mcp.viraldm.app/mcp"
    }
  }
}

// Then restart Claude Desktop — you'll see ViralDM tools available.
// First call will trigger OAuth — sign in at viraldm.app.

2 Available tools

schedule_post
Schedule an Instagram, Facebook, or LinkedIn post, carousel, Reel, or Story to publish automatically at a future date and time. Supports image and video media, custom captions with hashtags, and post type selection (POST, CAROUSEL, REEL, STORY). REEL and STORY are Instagram-only; LinkedIn supports text posts (image scheduling coming soon). Reels require a vertical video file (9:16) and accept an optional custom cover/thumbnail image (cover_url). Pass account_id (from list_social_accounts) to choose WHICH connected account posts — required when more than one is connected on that platform, since publishing to the wrong profile cannot be undone. Useful when a user says "post this tomorrow at 8 PM" or wants to plan content in advance.
initiate_media_upload
Step 1 of the preferred 2-step file upload: returns a short-lived upload URL and a mediaId so the file bytes go straight from your shell to storage, never through the conversation. Use for any real file — images, Reels, carousel slides.
finalize_media_upload
Step 2 of the 2-step upload: verifies what was actually uploaded (real format and size read from storage, not from what was claimed) and returns the public URL to pass to schedule_post as media_url or media_urls.
upload_media
One-shot base64 upload of a small image. Only viable under ~100 KB, because the base64 has to be written out inside the tool call itself — use initiate_media_upload + finalize_media_upload for anything bigger.
generate_content
Generate AI-powered social media captions, hooks, and hashtags for any topic. Supports English, Hinglish, Hindi, Tamil, Telugu, and Marathi. Customizable tone (engaging, professional, funny, urgent, inspirational). Returns 1-3 caption variations under 150 words with a call-to-action and relevant hashtags. Useful for content brainstorming.
get_analytics
Retrieve DM automation performance for connected accounts: DMs sent, failed sends, success rate, total automation actions, revenue attributed, and the top-performing automations by volume. Filter by platform and period (today, last 7/30/90 days). Does NOT return reach, impressions or follower counts — those require Instagram Insights permissions this app does not hold.
setup_auto_dm
Create an automated DM rule that sends a personalized reply when triggered. Triggers: keyword in DM, comment on post, story reply, or new follower. Supports anti-suspension humanizer (variable delays, working hours, typing indicator). Required: trigger keywords, reply message, social account ID.
get_scheduled_posts
List all upcoming, published, failed, or cancelled posts for the user. Filter by status and date range. Returns post ID, type (POST/REEL/STORY), scheduled time in IST, caption preview, media URL, and account name. Use before delete_scheduled_post to find the post ID.
delete_scheduled_post
Cancel a scheduled post before it publishes to Instagram or Facebook. Cannot delete already-published posts. Also frees the associated Cloudinary media storage automatically. Requires the post_id from get_scheduled_posts.
update_scheduled_post
Edit a still-scheduled post before it goes live — change the caption, reschedule the date/time, swap the media, change the post type (POST/REEL/STORY), or move it to a different platform account. Only works while the post is SCHEDULED (not yet published). All fields optional; omitted fields keep their current value. Pass account_id to move it to a specific connected account. Useful when a user says "move tomorrow's post to 9 PM" or "fix the caption on my scheduled reel".
get_best_posting_time
Rank the day/hour slots (in IST) where this account's own automations have actually engaged people, from the last 90 days of successful sends. Returns each slot with a relative score and the sample size it was computed from. Below 30 sends it returns India-wide benchmarks instead, and says so via the "source" field.
generate_content_calendar
Create a 7- or 14-day Instagram content calendar for a specific niche (e.g., fitness, fashion, finance). Each day includes: unique topic, scroll-stopping hook, 50-100 word caption, 5 niche-specific hashtags, best posting time in IST, and content type (reel/carousel/story/post). AI generates fresh ideas — no repeated patterns.
manage_sequences
Create, list, update, pause, or delete multi-step drip campaign DM sequences. Sequences enroll subscribers based on keywords, comments, tags, or new-follower events, then send timed messages at configured intervals (minutes, hours, days). Track enrollment and completion counts per sequence.
send_broadcast
Send a mass DM to all subscribers, a filtered segment (by tag, lead score, VIP), or specific recipients. Includes 5-30 second randomized delays per send to mimic human behavior and avoid Instagram rate limits. Returns send success/failure counts. Requires explicit user confirmation before executing.
manage_dm_templates
Save, list, update, or delete reusable DM script templates. Templates support {name}, {username}, {first_name} variable substitution. Organize by category (Welcome, Pricing, FAQ, Closing) and language (English, Hindi, Hinglish, Tamil). Reuse high-converting messages across multiple automations.
humanize_text
Rewrite robotic or template-style DM text into natural, human-sounding language to bypass Instagram's automation detection. Three intensity levels: low (minimal tweaks), medium (conversational rewrite), high (aggressive casual texting with abbreviations, fillers). Preserves URLs, mentions, hashtags, and template variables exactly.
list_subscribers
Retrieve Instagram subscribers (people who have DMd the user) with filters: recent activity, VIP status, by tag, or by lead score range. Returns subscriber ID, username, total DMs, last interaction time, tags, lead score, and detected mood (excited/neutral/angry/sad).
tag_subscribers
Add or remove tags from one or multiple subscribers in bulk. Tags enable segmented broadcasts, sequence enrollment, and CRM organization. Common tags: vip, hot-lead, course-buyer, cold, follow-up-needed. Returns count of subscribers updated.
manage_coupons
Create, list, distribute, or deactivate discount coupon codes that can be auto-sent in DM flows. Supports PERCENTAGE (e.g., 20% off), FIXED (₹500 off), and FREE_SHIPPING types. Configure usage limit, per-user limit, and expiry date. Track redemptions.
manage_ab_test
Set up A/B tests on DM message variants to find which copy converts better. Configure two message variants per automation, automatic 50/50 split, and track open/reply/conversion rates per variant. Returns winning variant after statistical significance.
manage_webhooks
CRUD outgoing webhooks that fire on ViralDM events (new subscriber, DM sent, sale attributed, sequence completed). Use to integrate with n8n, Make.com, Zapier, custom backends, or any HTTP endpoint. Supports HMAC-SHA256 signatures for security.
list_integrations
List all 3rd-party integrations available to connect (Notion, Google Sheets, Airtable, Slack, Discord, Mailchimp, ConvertKit, Shopify, Calendly, Stripe) and their current connection status for this user.
send_to_integration
Push subscriber data, lead info, or DM events to a connected integration. Examples: add new subscriber to Notion database, append row to Google Sheet, create Airtable record, send Slack notification. Requires the integration to be pre-connected.
get_affiliate_stats
Retrieve affiliate program stats: referral count, signups attributed, total commissions earned, pending payouts, and individual referral details. Useful when the user wants to track their referrer earnings on ViralDM.
list_social_accounts
List all connected Instagram, Facebook Pages, LinkedIn, YouTube channels, and WhatsApp Business accounts for the user. Returns account ID (needed by other tools), platform, account name, avatar URL, and active/inactive status.
get_subscription_info
Retrieve the user's current ViralDM subscription: plan name (Free, Starter, Growth, Agency), status (Trial, Active, Past Due), trial end date, billing cycle, plan price in INR, feature limits, and current usage against limits.
get_bio_page
Read the user's ViralDM bio page (their link-in-bio at viraldm.app/@handle): handle, published state, theme, profile text, every block, and total views. Use before update_bio_page so you edit from the current state rather than overwriting it.
update_bio_page
Create or edit the user's bio page at viraldm.app/@handle. Partial update — send only what changes. Blocks go beyond ordinary links: 'dm' opens an Instagram DM with a keyword so an existing automation replies, 'whatsapp' opens a chat with a prefilled message, 'payment' shows a UPI button (money goes buyer→creator directly), 'lead' collects an email that becomes a subscriber. Also link, video (YouTube), socials, header, text, divider. Invalid blocks are dropped and reported, not saved.
get_bio_page_stats
Views, clicks, emails collected, DM taps and payment taps for the bio page over the last 30 days, plus the top 5 blocks by clicks. Use to tell the user which link is actually working.
run_profile_audit
Audit a connected Instagram profile against its real Graph API data. Scores nine measured checks — bio length, link in bio, profile picture, post count, 30-day posting cadence, Reels share, caption depth, hashtag usage, and engagement rate where Instagram exposes it — and returns each check with the value it was scored on, plus AI suggestions written from those numbers. Highlights and Stories are not covered: the API does not expose them.
check_content_safety
Pre-check any message or caption text against Meta's automated DM policy violations BEFORE posting/sending. Detects spam patterns, excessive emojis, repeated content, banned phrases, and link-spam triggers. Returns block/warn/ok verdict with specific reason.
get_revenue_stats
Retrieve revenue attribution data — which DM automations, sequences, and coupons led to actual sales. Tracks customer journey from DM open → coupon click → purchase. Returns total revenue in INR, top-converting flows, and per-subscriber lifetime value.
get_consent_stats
DPDP Act compliance: get current consent state counts per purpose (order_updates, marketing, broadcast) — how many leads are opted-in, refused, or withdrawn — plus total consent events in the append-only legal ledger. Use to report compliance status.
expect_payment
Start a fraud-proof UPI sell flow: tell ViralDM to expect a payment from a specific lead. When that lead sends a payment screenshot in DM, it is auto-verified (amount, UTR, tampering) via AI vision; genuine → auto-deliver the product, unclear → held for review, fake → politely declined. Provide subscriber_id, amount in rupees, and the delivery message/link.
list_payment_verifications
List UPI payment-screenshot verifications with their verdict (genuine/suspicious/fake), status (verified/manual_review/rejected), extracted amount + UTR. Filter by status. Use to review which payments were auto-verified vs need manual review.
generate_evidence_pack
Generate a one-click, court/dispute-ready PDF evidence pack for a lead — full DM transcript + DPDP consent summary + payment-verification proof + a SHA-256 integrity hash. For Razorpay chargebacks or consumer complaints. Returns a download link + the pack hash.

3 Raw discovery JSON (for scanners)

Send Accept: application/json header — or visit /?format=json — to get the machine-readable spec.