First-class MCP support - 121 tools that let your AI schedule posts, generate captions and images, run analytics, and manage every connected channel. Full create / read / update / delete, not a read-only sidekick. Available on every plan, including Free.
The Model Context Protocol is the open standard that lets AI assistants like Claude, ChatGPT, and Cursor securely call tools in external services. Viraly's MCP server exposes 121 tools - from schedule_post to generate_image - so the AI can act in your Viraly workspace on your behalf, with the same scopes and plan limits as the web app.
One MCP server, every major client.
Built into Anthropic's desktop apps and the Claude.ai web connector directory.
// claude_desktop_config.json
{
"mcpServers": {
"viraly": {
"url": "https://mcp.viraly.io/mcp"
}
}
}Add Viraly as a connector in ChatGPT (Apps & Connectors). OAuth handled automatically.
Settings → Apps & Connectors → Add Connector
URL: https://mcp.viraly.io/mcp
Auth: OAuth (will redirect to Viraly to grant access)Add to .cursor/mcp.json or via the Cursor MCP marketplace.
// .cursor/mcp.json
{
"mcpServers": {
"viraly": {
"url": "https://mcp.viraly.io/mcp"
}
}
}Run via npx - useful for power users and CLI agents.
# After completing the OAuth flow at viraly.io/mcp/authorize
export VIRALY_ACCESS_TOKEN=vat_yourtoken
npx @viraly/mcpThe same tools Copilot uses inside Viraly: create, read, update, and delete across posts, channels, media, analytics, the inbox, and bio links. Your AI sees the tools your connection's scopes and plan allow.
bulk_rescheduleMoves several drafts or scheduled posts to new times under one confirmation.cancel_postStops a scheduled post from publishing by turning it back into a draft.create_draftSaves a draft on one channel of the active social set.delete_draftDeletes a draft.delete_scheduled_postCan't be undoneDeletes a scheduled, pending-approval or failed post from Viraly.duplicate_postCopies a post's text and media into a new draft, on the same channel or another.export_postsThe posts of a date range as CSV text (date, channel, status, title, link), up to 100 rows.find_free_slotsThe empty posting slots of the active social set's channels in a date range, earliest first: each with channel and...get_calendarThe calendar of the active social set for a date range: every post per day with its local time, channel, status and...get_postOne post of the active social set: the full caption, channel, status, local scheduled time, public link, last error and...get_post_diagnosticsWhy a post failed or is stuck: the network's error with its reason and hint, the channel's state, and what usually...get_post_previewHow a post will appear: the full text with its length against the platform's limit, the media in order with type and...list_postsPosts of the active social set, 25 per page, latest scheduled first: id, a short caption, channel, status, local...move_to_queuePuts a draft or scheduled post into its channel's next empty posting slot; it then publishes by itself at that time.publish_nowCan't be undonePublishes a draft or scheduled post to the network right now.reschedule_postMoves a draft, scheduled or pending-approval post of the active social set to a new time.retry_failed_postCan't be undoneTries a failed post again right now.schedule_postSchedules a post to publish by itself at a time, or in the channel's next queue slot: a new post, or an existing draft.search_postsFinds posts of the active social set by words in their text, newest first, among its latest 2,000 posts.update_postChanges the text, media or placement of a draft or scheduled post.validate_postChecks a post before it is saved or scheduled, with the same rules the app enforces: caption length, media formats...disconnect_channelCan't be undoneDisconnects a channel from Viraly: its scheduled posts and inbox history are removed.get_channelOne channel in detail: platform, account type, status and why (an expired token, a locked channel over the plan's...get_media_requirementsEach platform's rules for media and text: formats, file sizes, aspect ratios, video lengths, how many files, caption...get_posting_slotsThe weekly posting slots of each channel (day and local time) that the queue fills.get_reconnect_linkWhere the member reconnects an expired or broken channel.list_channelsThe connected accounts and pages of the active social set: id, name, username, platform and status (Active, Expired...list_pinterest_boardsThe boards of a Pinterest channel, with their ids.set_posting_slotsReplaces one channel's weekly posting slots.create_social_setCreates a new, empty social set (a brand or client with its own channels, calendar and timezone).delete_social_setCan't be undoneDeletes a social set with all its channels, posts and inbox history.get_social_setThe active social set in detail: name, short code, colour, timezone and each connected channel with its status.update_social_setRenames the active social set or changes its timezone.get_workspaceThe workspace and the active social set: names, plan, timezone and how many channels are connected.get_workspace_briefThe brief the members wrote for Copilot: brand voice, audience, do and don't lists, posting rules.list_social_setsThe social sets this member can open, with name, short code and timezone, and which one is active.list_timezonesTimezone ids the app accepts, for setting a social set's timezone.update_workspace_briefReplaces the brief Copilot reads on every request (brand voice, audience, rules), for the whole workspace or this...create_collectionCreates a media library collection (folder) in the active social set.delete_mediaCan't be undoneRemoves a file from the media library.get_mediaOne file of the media library: type, status, size, duration, alt text, tags and collection.import_mediaImports a file from Dropbox or Unsplash into the active social set's media library.list_mediaFiles in one media library collection of the active social set, 25 per page, newest first: id, type, size, alt text and...list_media_collectionsThe media library's collections (folders) in the active social set, with how many files each holds.move_mediaMoves files to another collection of the same social set.request_media_renderMakes an edited copy of a library file on the server: a centred crop to an aspect ratio, a video trim, or both.search_mediaSearches every collection of the active social set's media library by file name, alt text or tag; at most 25 results.update_alt_textSets a library file's alt text, which posts carry to the networks that support it.upload_media_from_urlAdds a file to the active social set's media library from a public link.generate_alt_textLooks at an image in the media library and drafts alt text for it.generate_captionWrites or reworks a caption with the composer's AI assistant: new from a topic, or rephrased, shortened, expanded, more...generate_imageGenerates an image with the app's image model and saves it to the media library.generate_link_titleWrites a short headline for a link preview or a bio link button.generate_variationsWrites alternative versions of a caption, for A/B tests or for posting the same news on several days.rewrite_for_channelRewrites a caption for another platform's length and style, for example a LinkedIn post into a Bluesky one under 300...compare_periodsCompares two date ranges of published posts in the active social set, or one channel: posts, engagement, reach, views...export_analytics_csvPost metrics of a date range as CSV text, one row per published post, up to 100 rows.get_best_timesWhen the active social set's published posts did best: average engagement by weekday and by local hour over a look-back...get_category_analyticsHow each post category performed in the active social set over a date range: posts, reach, impressions, engagement and...get_channel_analyticsA channel's performance in a date range: the posts published and their summed metrics on every platform, plus the...get_post_analyticsWhat one post of the active social set did: reach, impressions, views, likes, comments, shares, saves, clicks and when...get_post_insightsThe published posts of one channel since a date with their metrics, newest first or ranked by engagement, reach or...list_top_postsThe best performing published posts of the active social set in a date range, across its channels, with summary metrics.trigger_analytics_syncAsks the network for a channel's latest numbers now instead of waiting for the next scheduled fetch.add_post_commentAdds an internal team comment to a post, as in the post's comment thread.list_pending_approvalsPosts of the active social set in the approval workflow: by default the ones waiting for this member to approve, with...list_post_commentsThe team's internal comments on a post (not comments from the network), oldest first, with who wrote them.request_approvalSends a post for approval: it waits as Pending approval and does not publish until approved.create_comment_ruleCan't be undoneCreates a comment rule on a post of the active social set: when a new comment matches the conditions, the inbox replies...get_comment_rule_activityWhat a comment rule, or a post's rules, did: totals by status and skip reason, and the recent replies, DMs and hides...list_comment_rulesThe comment rules of the active social set, or of one post: id, post, what triggers them, what they do, status and what...pause_comment_rulePauses a comment rule, or every rule of a post, so no more replies go out; or resumes them.create_hashtag_listSaves a hashtag list in the active social set for the composer.delete_hashtag_listCan't be undoneDeletes a saved hashtag list.generate_hashtagsSuggests hashtags for a post with the composer's hashtag generator.get_hashtag_listOne saved hashtag list in full.list_hashtag_listsThe saved hashtag lists of the active social set: id, topic and the hashtags.update_hashtag_listChanges a saved hashtag list's topic or hashtags.assign_categoryAdds categories to posts of the active social set, or removes them.create_categoryCreates a post category for the workspace.delete_categoryCan't be undoneDeletes a post category; posts that had it lose it.list_categoriesThe workspace's post categories (content pillars such as Promotions or Tips) with id, colour and how many posts use...update_categoryRenames or recolours a post category.create_draft_from_ideaTurns an idea into a draft on a channel: its caption (or title) and media, with the link appended.create_ideaSaves an idea on a board of the active social set.delete_ideaDeletes an idea.generate_ideasSuggests post ideas for a business and audience with the app's idea generator.list_idea_boardsThe idea boards of the active social set with how many ideas each holds.list_ideasThe ideas on one board: title, caption, notes, link, planned date and status.update_ideaChanges an idea's title, caption, notes, status or date.create_draft_from_feed_itemDrafts a post sharing a feed item on a channel, with its link, and marks the item used.list_feed_itemsThe newest items of a feed: title, link, summary and whether they were used.list_feedsThe RSS and Atom feeds the active social set follows, with unread item counts and fetch errors.subscribe_feedFollows an RSS or Atom feed in the active social set so its items appear in Feeds.unsubscribe_feedStops following a feed and removes its items.create_evergreen_scheduleMakes a post evergreen: Viraly schedules a copy of it every so many days, until a count or a date.list_evergreen_schedulesThe evergreen schedules of the active social set: which post recycles, how often, how many times so far and whether it...list_recycled_contentThe copies an evergreen post has produced so far: each copy's time and status.pause_evergreen_schedulePauses an evergreen schedule so no new copies are made, or resumes it.update_evergreen_scheduleChanges how often an evergreen post recycles and when it stops.add_blockAdds a link button or a social icon to a bio page.create_bio_pageCreates a link-in-bio page in the active social set with a profile name and bio; links are added with add_block.delete_bio_pageCan't be undoneDeletes a bio page with its custom domain; its URL stops working.export_subscribersA bio page's subscribers as CSV text (name, email, phone, date), up to 100 rows.get_bio_analyticsA bio page's traffic over a period: views, unique visitors, clicks, click-through rate, bounce rate, and its most...get_bio_pageOne bio page: its profile title and bio, its sections, its links (with ids for update_block and remove_block) and its...get_custom_domainA bio page's custom domain and its DNS status, with the records the member still has to add at their domain registrar.list_bio_integrationsThe email-list integrations (for example AWeber, HubSpot, Kit) the active social set's bio pages can send new...list_bio_pagesThe link-in-bio pages of the active social set: id, title, URL slug and custom domain.list_subscribersPeople who signed up on a bio page's email form, newest first: name, email and date; at most 25, with the total.remove_blockRemoves a link button or a social icon from a bio page.request_custom_domainStarts serving a bio page on the member's own domain.update_bio_pageChanges a bio page's profile name, bio or URL slug.update_blockChanges a link button's text or URL, or a social icon's URL, on a bio page.create_short_linkShortens a URL with the workspace's default shortener; the result says if it fell back to Viraly's own.delete_short_linkCan't be undoneDeletes a short link.get_short_link_statsClicks on one short link: total, by day, by country, by device and the posts that carry it.get_shortener_settingsWhich shortener the workspace uses by default (Viraly's own, Bitly, Dub or Rebrandly) and its default domain.get_url_previewWhat a link shows when shared: its page title, description, site and image.list_short_linksThe workspace's short links, 25 per page, newest first: short URL, original URL, clicks and the shortener that made it.set_default_shortenerChooses which shortener the workspace uses by default.Your AI gets exactly the access you grant - and nothing more.
Industry-standard auth. Tokens are short-lived and rotate automatically.
MCP respects the same per-plan caps as the web app - your AI can't bypass them.
Grant access to one workspace at a time. Revoke any client from Settings → Connected Apps.
Sign up free - connect your AI assistant in under a minute. No credit card.