# Uplika Muse connector

From musedirectory.ai, the independent directory of Meta Muse connectors. Not affiliated with Meta.

## Uplika

Publish to Threads, Instagram, YouTube, TikTok and eight other social channels from your AI agent.

- Record: https://musedirectory.ai/connector/uplika
- Category: Marketing & Ads
- Developer: Uplika (https://uplika.com)
- Muse status: Extra setup. Not in Muse's Connectors list yet. Muse can still use it: its page gives you a request to paste into Muse.
- Health: Working, 4937ms, checked 2026-09-28T08:15:51Z
- Endpoint: https://api.uplika.com/mcp
- Auth: No account needed; Pricing: unknown
- Screening: Screened, no issues found (2026-09-24T21:11:04Z)
- Source: Found in the official MCP Registry (com.uplika/uplika) https://registry.modelcontextprotocol.io/v0/servers?search=com.uplika%2Fuplika

Connects to social media platforms including Threads, Instagram, YouTube, Facebook, Bluesky, Telegram, TikTok and Naver Blog. Lets you compose and schedule posts, manage replies and comments, track engagement metrics, and automate responses across all connected accounts.

Example request: "Post this photo to my Instagram and Threads accounts and schedule it for tomorrow at 9am."

How to connect: Not in Muse's Connectors list yet, but Muse can still use it. Paste this into Muse: "Use Uplika to help me. It is a free service with an MCP server at https://api.uplika.com/mcp. It does not need an API key. Ask me before you share anything with it." Muse asks before it shares anything with the app's site. Meta does not review apps used this way, so only use ones you trust. We tested this in the Muse app on September 24, 2026: Muse used an app's link directly this way and returned a live answer.

Tools:
- list_accounts: Connected social accounts. **Call this before publishing anything.** Each item has id, platform (threads etc.), handle and status. The accountIds you pass to publish are these ids, and only "active" ones publish. If the person did not name a channel, target every active account. 
- select_channels: Pick which connected channels to post to. **Call this before publish and show the result to the person.** Leave scope empty to get the candidate list and let them choose. Use scope: "all" for every active channel, or an array mixing platform names ("threads"), handles ("@vibe.tre
- list_platforms: Every channel and its rules: character limit, whether media is required, image and video limits, and what state the channel is in. Read this instead of guessing a platform's limits. status says who can connect: live means anyone; beta means the channel is in platform review and o
- list_posts: Recent publishes made through us and the per-target status of each, scheduled and draft posts included (their status says so and scheduledAt says when). Newest first, 20 by default. Pass limit for more or fewer, up to 100. hasMore means the list was cut short; pass the returned n
- list_channel_posts: What is actually on the channel right now, including posts written in the channel's own app. Use this to find a post when you do not have its link. Each item carries a permalink you can pass straight to open_post, reply or delete_post. An empty list does not always mean the accou
- publish: Post to social channels. Channels open today: threads, instagram, youtube, facebook, bluesky, telegram, naver_blog, tiktok. Get accountIds from select_channels — do not guess which channel the person meant. Naver Blog caps how many posts one ID publishes; when it does, this retur
- open_post: Everything about one post in a single call: the text, the whole reply thread, and its metrics. This is the right tool when someone hands you a post link. Replies or metrics can come back null if the platform refused just that part. If the response carries `bridge`, follow `bridge
- get_post: One publish: per-target status and the reason any target failed. For a post link you probably want open_post instead. If the response carries `bridge`, follow `bridge.nextStep`: `run_wake` means run `bridge.wake` for the user's OS if you have a shell on their computer, wait about
- retry_post: Retry the targets that failed on a publish. Targets that already went out are left alone. Naver Blog caps how many posts one ID publishes; when it does, this returns 429 naver_rate_limited with retryAfterSeconds. Do not call again before that, the draft is already in Naver. Naver
- update_post: Change a scheduled or draft post before it goes out, or edit a post that is already live on a channel that supports editing (list_platforms features: today Naver Blog, YouTube and some Facebook posts). Fields: content, mediaIds, accountIds, options, scheduledAt or draft. Fields y
- publish_now: Send a scheduled or draft post right now instead of waiting. Returns while it is still publishing, like publish; pass wait: true to hold for the result. A draft needs at least one target account first. Posts that already went out return post_not_editable.
- delete_post: Delete a post from the channel for good. This is not reversible, so confirm with the person first. Daily delete limits differ per channel: Threads 100 a day, Instagram only on accounts connected via Facebook, with no documented daily cap, YouTube 20 a day, Facebook 50 a day, Blue
- list_replies: The whole reply thread under a post, nested replies included. `truncated` tells you we stopped before the end. The count here can differ from the replies metric in get_insights, which is normal. If the response carries `bridge`, follow `bridge.nextStep`: `run_wake` means run `bri
- reply: Reply to a post or to a reply. Leave replyTo empty to reply to the post itself; pass a reply id from list_replies to nest a reply under that reply. Like publish, this returns before the reply is live unless you pass wait: true, which holds the response until it is out (up to 10 s
- like: Like a post — or a comment: pass replyTo (a reply id from list_replies) to like that comment instead of the post. Idempotent: if it is already liked the call succeeds with already: true and nothing is toggled. There is no unlike. Works on Naver Blog and on Instagram accounts conn
- follow: Follow an account on the channel. Naver Blog only today: adds the blog as a neighbor. mutual: true sends a mutual-neighbor request that the other blog has to accept, so the result is pending until they do; without it the blog is added as a plain neighbor right away. Already a nei
- hide_reply: Hide a reply on the channel, or show it again with hide: false. The reply id comes from list_replies, and postId is the publish it belongs to.
- delete_reply: Delete a comment for good. This is not hide_reply: it cannot be undone. What it reaches differs by channel and list_platforms says which ones support it at all. On Instagram and Facebook it removes anyone's comment on your post; on Threads and Bluesky a reply is itself a post, so
- get_insights: Views, likes, replies, reposts, quotes and shares for one publish. Views and shares can be null when the platform does not report them yet — null is not zero. If the response carries `bridge`, follow `bridge.nextStep`: `run_wake` means run `bridge.wake` for the user's OS if you h
- describe_grammar: How to write the body for a channel that has its own markup. Naver Blog has one; every other platform returns not_supported, which is not an error to work around. Call this before writing a Naver Blog body for the first time, or whenever you want something the basics do not cover
- naver_layout: Naver Blog only. Shows how publish will lay the body out before anything goes out. By default (layout: template) publish reshapes the markdown into the blog's house form: #/## titles become underlined quote headings, a thin rule sits between sections, photos you did not place wit
- bridge_status: Naver Blog only. Posts to Naver Blog are written by the uplika browser extension inside the user's own Chrome, so nothing goes out while that Chrome is closed. Call this before publishing to Naver Blog. If online is false, the response carries wake commands per OS that open Chrom
- list_naver_drafts: Naver Blog only. Lists the drafts (temp-saved posts) sitting in the blog's draft box: logNo, title and the last-saved time, newest first. A post you published with options.naver_blog.draftOnly is one of them, and so is anything the person saved by hand in the Naver editor. Pass a
- publish_naver_draft: Naver Blog only. Publishes a draft from the blog's draft box exactly as it is in Naver: the extension loads that draft in the editor and presses publish, so edits the person made by hand in Naver are kept. Do not send content. Category, tags and openType are taken from the draft 
- diagnose_naver_blog: Naver Blog only. Reads a blog's public RSS feed (its latest posts, at most 50) and says whether the titles are written for search: the share of titles carrying a search intent word (price, how to, review), how many start with a date or episode label, posts per month, the categori
- expand_naver_keywords: Naver Blog only. Expands seed keywords one level through Naver autocomplete and returns every word found with the seed it came from (found[].from is seed or L1:<seed>). These are candidates to measure with research_naver_keywords, not proven keywords. The person's uplika Chrome e
- research_naver_keywords: Naver Blog only. Measures keywords (monthly searches from Search Ad, blog document count and posts per month from API HUB), judges each one (best, possible, hard, wall, hot, saturated, phantom and so on, with why), and groups them into sets for one post: a main keyword plus two t
- list_naver_keyword_reports: Lists the person's saved keyword research (from research_naver_keywords or the dashboard), newest first: when, what they typed, the first set's main and sub keywords, and every set with its prompt. Reports belong to the person, not a workspace. Returns 403 research_tool_disabled 
- get_naver_keyword_history: The measurement history of one keyword: one point per day it was actually measured, newest first, with search volume, document count and posts per month. Shows whether a keyword is rising or cooling. An empty list means nobody has measured it here yet. Returns 403 research_tool_d
- search_youtube_videos: Beta. Searches YouTube for a keyword and returns the top videos with views, subscribers, the views-to-subscribers ratio (above 1 means the title and topic pulled more people than the channel has), Shorts or long-form (60 seconds or less counts as a Short), duration and publish da
- get_publish_options: What a channel needs to know before you publish to it. Only TikTok has this today; every other channel returns not_supported, which is not an error to work around. For TikTok it returns the creator nickname the post will go out as, the privacy levels this account may use right no
- get_quota: How much of the 24 hour allowance is already used for posts, replies and deletes. Check this before a burst of publishing. This is live usage from the platform, not the static limits in list_platforms. We also cap how fast one account can publish, so publish can return rate_limit
- refresh_account: Re-read one connected channel's metadata. On Naver Blog this re-reads the blog's categories through the user's browser extension and waits up to a minute for it; list_accounts then shows the new list under naverBlog.categories. Call this when a category the person mentions is not
- media_presign: Step 1 of attaching an image or video. Returns a media id and a one-time uploadUrl. PUT the file bytes to uploadUrl with the same contentType, then call media_complete. Images: image/jpeg, image/png, image/webp, image/gif, up to 20MB. Video: video/mp4, video/quicktime, video/webm
- media_from_url: Attach an image or video that is already on the public web. We download it, copy it into our storage and give you a media id you can pass to publish. One step, no upload needed. https only. Google Drive and Dropbox **share** links do not work: they return an HTML preview page, no
- update_media: Mark or unmark an uploaded image or video as AI-made (aiGenerated). Applies to posts published or edited after this call; posts already out do not change (use update_post to rewrite a Naver Blog post). Every copy of the same file in your workspaces follows.
- media_upload_link: Ask the person to upload files from their own device. Returns a short-lived link. **Give the link to the person, then wait.** Poll media_upload_status with the token until it returns ready, and only then call publish with the media ids it gives you. Do not publish before the stat
- media_upload_status: Has the person uploaded yet? Returns waiting, ready or expired, plus every media id uploaded through that link. Pass those ids to publish as mediaIds. Ready images also come back as image blocks so you can SEE each photo and place it in the right paragraph: previewIds[i] is the m
- media_complete: Step 2 of attaching an image or video. Call it after the upload finishes. We check the file really landed before marking it ready. Only a ready media id can be passed to publish.
- list_automation_templates: Ready-made automation templates with the params each one takes. Read this before create_automation. Every template lists the channels it works on. The most used one is comment_to_dm: a comment on a post gets one private reply with a button, and tapping it delivers a link or file 

Screening checks:
- MCP handshake: pass (Answered in 509ms)
- Domain against threat feeds (Cloudflare security DNS): pass (api.uplika.com, uplika.com not flagged)
- Published packages against the OSV malicious-package database: n/a (No npm or PyPI package published)
- Hidden instructions or invisible characters in tool text: warn (publish: Unusually long tool description; send_dm: Tool text tells the model to take extra steps)
- Inputs asking for passwords, card numbers or seed phrases: pass (None found)
- Domain and redirects: pass (Domain registered 49 days ago)
- AI review of purpose and tool behavior: pass (No concerns)
