Google Search Console integration for Model Context Protocol (MCP)
uplika is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Your AI agent publishes to Threads, Instagram, YouTube and the other social channels you connect.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http uplika-mcp https://api.uplika.com/mcp
# 2 — ask your agent for something these tools do
# list_accounts, select_channels, list_platforms and 62 more
uplika costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http uplika-mcp https://api.uplika.com/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
65 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
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. If the list is empty, no channel is connected yet. Send the person to https://uplika.com/dashboard/connections.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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.trender") and account ids. Duplicates are folded, expired and not-yet-live channels are dropped into skipped with a reaso
| Parameter | Type | Required | Notes |
|---|---|---|---|
| scope | no | Omit to list candidates, "all" for every active channel, or an array of platform names, handles or account ids. | |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 only accounts registered as testers on our app can connect yet, though publishing works normally for those accounts; brid
| Parameter | Type | Required | Notes |
|---|---|---|---|
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Uplika's troubleshooting answers: why something did not work and what the person can do about it. Call it with the error code you got (code), or with a short question in any language (query), when a call fails, when an automation did not react or a DM did not arrive, or when the person asks why something happened. Without arguments it lists every question with its id; pass id for one answer in ful
| Parameter | Type | Required | Notes |
|---|---|---|---|
| code | string | no | An error code from an Uplika response, e.g. reconsent_required or window_closed. |
| query | string | no | A short question or a few words in any language, e.g. "DM not sent after button" or "ManyChat". |
| id | string | no | One answer's id from the list, e.g. thread-control. |
| platform | string | no | Only answers about this platform id (plus general ones), e.g. instagram. |
| locale | string | no | Language of the answer. en (default) or ko; use the person's language. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 nextBefore as before to keep going. To answer "what is scheduled this week", pass status scheduled with since and until a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| status | string | no | Narrow to one or more statuses, comma separated: scheduled, draft, publishing, published, partial, failed or cancelled. Omit for everything. |
| since | string | no | YYYY-MM-DD or ISO 8601. Only posts dated at or after this. A scheduled post is dated by its scheduledAt, a sent post by when it was created. |
| until | string | no | YYYY-MM-DD or ISO 8601. Only posts dated at or before this (a date means the whole day). |
| sort | string | no | scheduled orders by the post's date ascending (soonest first) and drops paging. Omit for newest first. |
| limit | number | no | 1-100, defaults to 20 |
| before | string | no | A publish id from a previous page's nextBefore. Returns the ones older than it. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 account has no posts: on TikTok this reads public videos only, so videos set to Only me, videos still waiting in the creator'
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountId | string | no | Limit to one account. Omit to cover every connected channel. |
| limit | number | no | 1-100, defaults to 25 |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 returns 429 naver_rate_limited with retryAfterSeconds. Do not call again before that, the draft is already in Naver. Naver Bl
| Parameter | Type | Required | Notes |
|---|---|---|---|
| content | string | no | Post text |
| accountIds | array | yes | Account ids from select_channels |
| mediaIds | array | no | Media ids from media_presign (confirmed with media_complete), media_from_url or media_upload_link. On Naver Blog you can leave out ids the body already points at with media:<id>; we pick those up from |
| threadItems | array | no | Split a long post into a chain instead of calling publish and then reply. The first item is the root and the rest become replies under it, in order. We handle the ordering and the waiting. Each item o |
| topicTag | string | no | One topic to tag the post with, like a category. Only some channels take one, and those reject periods and ampersands in it. If any channel in accountIds does not take topics the whole call is refused |
| options | object | no | Per-channel settings, keyed by channel id. Only the channels you are posting to need an entry. Every channel takes content to override the shared text for that channel alone. |
| wait | boolean | no | Hold the response until the post is really out. Text waits up to 10 seconds, posts with media up to 75 seconds. If it is still going after that you get the usual publishing response and should poll ge |
| scheduledAt | string | no | ISO 8601 time with a timezone offset (2026-09-20T09:00:00+09:00) to send the post at, on every channel. 10 minutes to 365 days from now. We keep the post as scheduled until then; the person can still |
| draft | boolean | no | true saves the post as a draft on uplika without sending anything. Use it when the person wants to review before it goes out. They finish it in the dashboard, or you call update_post and publish_now. |
| automation | object | no | Attach an automation to this post in the same call. template defaults to comment_to_dm; params are that template's params (see list_automation_templates) minus post, which is this post. Created as a d |
| batchId | string | no | Optional tag (letters, digits, - or _) to group posts made together, for example the same text sent to two workspaces. Pass the same value on each call. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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, bridge.nextStep says what is needed: run_wake means the browser with the extension is closed (bridge.browser says which: Chrome,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | A publish id (post_…), the post's own id on the channel, or a post link (the URL you would open in a browser to see it). Links work for posts written in the channel's own app too, as long as the accou |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
One publish: per-target status and the reason any target failed. For a post link you probably want open_post instead. A target whose account was disconnected keeps its status and link, with connectionId null and accountHandle set to that account's handle; editing, deleting or retrying the post then returns 409 account_disconnected until the same account is reconnected, and the same post id comes b
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | A publish id (post_…), the post's own id on the channel, or a post link (the URL you would open in a browser to see it). Links work for posts written in the channel's own app too, as long as the accou |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 Blog asks which form to publish with, every post: if options.naver_blog.form is missing this returns 400 naver_form_req
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | A publish id (post_…), the post's own id on the channel, or a post link (the URL you would open in a browser to see it). Links work for posts written in the channel's own app too, as long as the accou |
| force | boolean | no | Retry even though a Naver target is naver_draft_unknown (pass it only after list_naver_drafts shows the draft is not there) or naver_reply_unknown (pass it only after the comment on the blog shows no |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 you leave out keep their current value (on a Naver Blog post, see media below); options you pass replace the whole option
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | A publish id (post_…), the post's own id on the channel, or a post link (the URL you would open in a browser to see it). Links work for posts written in the channel's own app too, as long as the accou |
| content | string | no | New post text. |
| accountIds | array | no | New target accounts, from select_channels. Replaces the current set. |
| mediaIds | array | no | New media, in order. Replaces the current set. On a Naver Blog post the body's media: references already are the list, so leave this out unless you add media to the end of the post without placing it. |
| threadItems | array | no | Replace the whole chain: [{ content, mediaIds? }], first item is the root. Only while the post is scheduled or a draft, and only for Threads and Bluesky. Leave it out to keep the current items (conten |
| options | object | no | Per-channel settings, same shape as on publish. Replaces the whole object. |
| scheduledAt | string/null | no | New send time (ISO 8601 with offset, 10 minutes to 365 days out), or null to keep the post as a draft instead. |
| draft | boolean | no | true turns a scheduled post back into a draft. |
| sourceVersion | string | no | Only for a Naver post written in Naver's editor: the sourceVersion that came with the source you edited (from naver_source_required or get_post). It tells uplika the content was made from the post's c |
| wait | boolean | no | Only when editing a post that is already live: hold the response until the edit has gone through or not, up to 75 seconds. Past that it returns while still working, with next telling you to read get_p |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | A publish id (post_…), the post's own id on the channel, or a post link (the URL you would open in a browser to see it). Links work for posts written in the channel's own app too, as long as the accou |
| wait | boolean | no | Hold the response until the post is really out, same as on publish. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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, Bluesky 35000 a day, Telegram only within 48 hours of publishing, with no documented daily cap, Naver Blog through the brows
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | A publish id (post_…), the post's own id on the channel, or a post link (the URL you would open in a browser to see it). Links work for posts written in the channel's own app too, as long as the accou |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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, bridge.nextStep says what is needed: run_wake means the browser with the extension is closed (bridge.browser says which: Chrome, Edge or Whale), so tell the person `
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | A publish id (post_…), the post's own id on the channel, or a post link (the URL you would open in a browser to see it). Links work for posts written in the channel's own app too, as long as the accou |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 seconds). Otherwise call get_post with the returned id to see the final status and link. If the response carries bridge
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | A publish id (post_…), the post's own id on the channel, or a post link (the URL you would open in a browser to see it). Links work for posts written in the channel's own app too, as long as the accou |
| content | string | yes | — |
| replyTo | string | no | Reply id from list_replies. Omit to reply to the post itself. |
| secret | boolean | no | Naver Blog only: post it as a secret comment that only the blog owner can read. Other channels refuse it. |
| wait | boolean | no | Hold the response until the reply is really out, up to 10 seconds, so you can say it is live. If it is still going you get the usual publishing response; poll get_post. Defaults to false. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 connected through Facebook that hold the like permission; any other Instagram account and every other channel answer not_sup
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | A publish id (post_…), the post's own id on the channel, or a post link (the URL you would open in a browser to see it). Links work for posts written in the channel's own app too, as long as the accou |
| replyTo | string | no | Reply id from list_replies to like that reply instead of the post. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 neighbor comes back as already. There is no unfollow. If the response carries bridge, bridge.nextStep says what is need
| Parameter | Type | Required | Notes |
|---|---|---|---|
| blog | string | yes | The blog to follow: its id (the part after blog.naver.com/) or any link to it. |
| mutual | boolean | no | true for a mutual-neighbor request. Default false. |
| message | string | no | Message sent with a mutual request. Naver shows it to the other blog. Ignored otherwise. |
| accountId | string | no | Which connected account to act as. Only needed when the workspace has more than one Naver Blog. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| replyId | string | yes | Reply id from list_replies |
| postId | string | yes | The post the reply sits under. A publish id (post_…), the post's own id on the channel, or a post link (the URL you would open in a browser to see it). Links work for posts written in the channel's ow |
| hide | boolean | no | true hides it, false shows it again. Defaults to true. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 it only removes replies the connected account wrote. Prefer hide_reply when the person just wants it out of sight.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| replyId | string | yes | Reply id from list_replies |
| postId | string | yes | The post the reply sits under. A publish id (post_…), the post's own id on the channel, or a post link (the URL you would open in a browser to see it). Links work for posts written in the channel's ow |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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, bridge.nextStep says what is needed: run_wake means the browser with the extension is closed (bridge.browser says which: Chrome, Edge or Whale), so tell the person bridge.userMessage with the `bridge
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | A publish id (post_…), the post's own id on the channel, or a post link (the URL you would open in a browser to see it). Links work for posts written in the channel's own app too, as long as the accou |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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: highlighting a phrase, a styled table, a collage, an event block, a map with several places. Without a topic you get a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| platform | string | yes | Platform id, e.g. naver_blog. Only naver_blog has body markup today. |
| topic | string | no | Which section. overview (default) sketches the whole thing; directives, attributes, inline, blocks, highlight, media and limits go deep. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 with media: references go one per section and the rest pair up at the end. Text never changes. Call this with the same cont
| Parameter | Type | Required | Notes |
|---|---|---|---|
| content | string | yes | The markdown body you plan to publish. |
| mediaIds | array | no | The media ids you will attach. Photos not referenced in the body get placed. |
| form | string | no | Form preset id (default photo-story). GET /v1/naver/forms lists them. |
| forms | no | "all" for every preset, or a list of preset ids. Returns layouts[] instead of one layout. | |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Naver Blog only. Posts to Naver Blog are written by the uplika browser extension inside the user's own browser (Chrome, Edge or Whale), so nothing goes out while that browser is closed. Call this before publishing to Naver Blog. If online is false, the response carries wake commands per OS that open that browser (browser says which) on the user's computer in the profile that has the extension (fou
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountId | string | no | Limit to one Naver Blog account. Omit to cover every connected Naver Blog account. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 logNo from here to publish_naver_draft. Needs the extension 0.7.2 or later in the person's browser; otherwise you get e
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountId | string | no | Limit to one Naver Blog account. Omit to cover every connected Naver Blog account. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 unless you pass them. Returns the same shape as publish (202 with a target that resolves to published, or the bridge obj
| Parameter | Type | Required | Notes |
|---|---|---|---|
| logNo | string | yes | The draft's logNo from list_naver_drafts. |
| accountId | string | no | Which Naver Blog account. Required only when the workspace has more than one. |
| title | string | no | Replace the draft's title. |
| categoryId | string | no | Category id from list_accounts. Default: the draft's own. |
| category | string | no | Category by name instead of id. |
| tags | array | no | Replace the draft's tags (no #). |
| openType | string | no | Visibility. Default: the draft's own setting. |
| wait | boolean | no | Hold until the extension finishes, up to 75 seconds. Past that it returns while still going out; read it with get_post. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 categories, and the words the blog repeats in titles (seedCandidates: candidates to research, not proven keywords). summary.olde
| Parameter | Type | Required | Notes |
|---|---|---|---|
| blog | string | yes | The blog id or any link to the blog (blog.naver.com/<id>, m.blog.naver.com/<id>/<logNo>, PostView.naver?blogId=<id>). |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 browser extension looks them up in the background when it is on (no window opens); otherwise our server does, and via says which
| Parameter | Type | Required | Notes |
|---|---|---|---|
| seeds | array | yes | 1-10 seed keywords. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 to five subs with the same search intent. Every set carries prompt, a ready-to-paste Korean brief for writing the skeleto
| Parameter | Type | Required | Notes |
|---|---|---|---|
| keywords | array | yes | 1-60 keywords, as the person would search them. |
| seedText | string | no | What the person asked for, kept as the report's label. Defaults to the first five keywords. |
| topic | string | no | What the post is about, one line. Goes into draftPrompt; without it the prompt tells the writer to pick a subject that fits the main keyword. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | number | no | How many, default 50. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| keyword | string | yes | The keyword, as you would send it to research_naver_keywords. |
| limit | number | no | How many days, default 100. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Searches YouTube for a keyword and returns the top videos with views, subscribers, duration and publish date as YouTube gives them, plus two values uplika calculates from them that are not YouTube metrics (dataNotes says so): the views-to-subscribers ratio (above 1 means the title and topic pulled more people than the channel has) and Shorts or long-form (60 seconds or less counts as a Short). ord
| Parameter | Type | Required | Notes |
|---|---|---|---|
| q | string | yes | The search words, as a viewer would type them. |
| order | string | no | Default viewCount. |
| period | string | no | How far back. Omit for no limit. |
| format | string | no | Default all. |
| max | number | no | 1-50, default 25. |
| topic | string | no | The video the person wants to make, one line. Goes into prompt. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Naver search only. Looks each keyword up on Naver's integrated search through the person's uplika browser extension (it reads the public result page in their own browser, about 3 seconds apart; no window opens) and returns, per keyword, whether an AI briefing answers it and in which form, the briefing's body sources (rank, site, title, how many answer paragraphs cite each) and image sources, where
| Parameter | Type | Required | Notes |
|---|---|---|---|
| keywords | array | yes | 1-10 keywords, as a reader would search them. |
| blog | string | no | A Naver blog id or any link to the blog, to mark its posts and judge them. |
| fresh | boolean | no | Read again even if this keyword was read in the last 30 minutes (spends the daily allowance). |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Naver search only. Starts a report card for a Naver blog: reads its latest posts from the public RSS feed, picks each post's main keyword (from its title, or the keyword chosen when it was written in Uplika, or one the person set), and checks every keyword through the person's uplika browser extension in the background. Returns runId and etaSeconds right away and does not wait; read the result wit
| Parameter | Type | Required | Notes |
|---|---|---|---|
| blog | string | yes | The blog id or any link to the blog. |
| limit | number | no | How many recent posts, 1-50. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Reads what uplika has recorded about Naver search and AI briefings, without reading Naver again. With blog: the report card (cards: AI citation rate, search exposure rate, keywords with an AI briefing, cited posts; axes: five scores out of 10 on uplika's own scale with the raw value and threshold of each, not a Naver score; firstThing: the lowest axis; posts with their main keyword and latest verd
| Parameter | Type | Required | Notes |
|---|---|---|---|
| blog | string | no | A Naver blog id or any link to the blog, for its report card. |
| post | string | no | A Naver post address (blog.naver.com/<id>/<logNo>) of any blog, or the id of a post published through Uplika, for that post's record. |
| runId | string | no | A runId from check_naver_visibility or scan_naver_blog_visibility. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
TikTok only. Do not call it for any other channel: 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 now, whether it can post at all, and its video length limit. Call it before every TikTok publish: the values are per account and change when the person ed
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountId | string | yes | The connected account to ask about. Required: these values are per account. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Instagram only. Lists audio you can put on an Instagram reel: music, or original sounds from other reels. Put the id you pick in options.instagram.audio.id when you call publish. Reels only. Works only for Instagram accounts connected via Facebook; an account connected with Instagram login answers not_supported, and the person has to reconnect it with Facebook. type is music (default) or original_
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountId | string | yes | The connected Instagram account. Required: trending audio differs per account. |
| type | string | no | music (default) or original_sound. |
| query | string | no | Optional keywords, up to 100 characters. Leave it out for this account's trending audio. With type music it only searches royalty-free music. |
| limit | number | no | How many to return, 1-50. Defaults to 25. |
| cursor | string | no | nextCursor from the previous call, to get the next page. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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_limited even when the platform allowance still has room.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountId | string | no | Limit to one account. Omit to cover every connected channel. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 in list_accounts yet. If the extension is offline you get 202 and the refresh runs when that browser comes back. On Thr
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountId | string | yes | The account id from list_accounts. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Use this only when you can HTTP PUT the file bytes yourself (a shell or code runtime). Web and mobile chat clients cannot, so do not call it there: for a file on the person's device use media_upload_link, for a public https address use media_from_url. 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
| Parameter | Type | Required | Notes |
|---|---|---|---|
| fileName | string | yes | — |
| contentType | string | yes | image/jpeg or image/png or image/webp or image/gif or video/mp4 or video/quicktime or video/webm or application/pdf or application/x-hwp or application/hwp+zip |
| bytes | number | yes | File size in bytes |
| width | number | no | Pixel width, if you know it |
| height | number | no | Pixel height, if you know it |
| altText | string | no | What the image shows, for people using screen readers. Write it whenever you can see the image. Applied to carousel items. |
| aiGenerated | boolean | no | true when the image or video was generated or substantially changed with AI. Naver Blog photos get its AI-use label; Instagram, YouTube and TikTok get their AI declaration turned on unless you set it |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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, not the file. Use a direct file URL that ends in the file itself. Accepted formats (read from the bytes, not the headers):
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | yes | Public https URL of the image or video file itself. |
| altText | string | no | What the image shows, for people using screen readers. Applied to carousel items. |
| aiGenerated | boolean | no | true when the image or video was generated or substantially changed with AI. Naver Blog photos get its AI-use label; Instagram, YouTube and TikTok get their AI declaration turned on unless you set it |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Media id from media_presign, media_from_url or media_upload_status. |
| aiGenerated | boolean | yes | true to mark as AI-made, false to clear. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 status is ready. Use this when the file is on their computer or phone; use media_from_url when the file already has a public
| Parameter | Type | Required | Notes |
|---|---|---|---|
| note | string | no | One line shown on the upload page, e.g. what you need them to upload. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 media id of the i-th image. Up to 20 images per call; pass offset to see the rest. A media with duplicateOf is the same b
| Parameter | Type | Required | Notes |
|---|---|---|---|
| token | string | yes | The token from media_upload_link. |
| offset | integer | no | Skip this many images before returning previews (default 0). |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Media id from media_presign |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
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 inside the messaging window. AI-written comment replies are comment_public_reply with replyMode "ai" (and comment_to_dm'
| Parameter | Type | Required | Notes |
|---|---|---|---|
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Automations on the connected accounts: name, channel, whether it is live or a draft, triggers, run count, and templateParams when the flow still has its template shape. Filter by accountId, status (draft or live) or templateId. Use get_automation to read one flow's document.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountId | string | no | Only automations on this connected account. |
| status | string | no | draft = not enabled, live = enabled. |
| templateId | string | no | Only automations made from this template (list_automation_templates). |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
One automation as a document: triggers, nodes, start. Also returns version, which put_automation and update_automation need, and templateParams when the flow still has its template shape. pastComments is the latest send_to_past_comments job with its progress, or null. Pass version to read an older saved version's document instead (list_automation_versions).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Automation id (af_…): id in list_automations, or data.id in the create_comment_to_dm, create_automation or duplicate_automation result. |
| version | integer | no | A saved version number from list_automation_versions. Leave out for the current one. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
The most common automation: when someone comments on a post, DM them. Creates a draft; nothing goes out until enable_automation. How Meta works: a DM cannot be started by the account. The only automatic door is a private reply to a comment, one per comment, within 7 days of the comment, and once the person answers the 24-hour window opens for the rest. Instagram can check whether the person fo
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountId | string | yes | Connected Instagram or Facebook account id from list_accounts. |
| post | string | yes | Our post id, the platform post id, a link to the post, "any", or "next". |
| keywords | array | no | Trigger words in the comment. Empty means every comment. |
| match | string | no | — |
| publicReply | array | no | Optional public replies under the comment, one picked at random. Posted after the private reply goes out, and skipped when it could not be sent, so a reply saying a DM was sent stays true. |
| publicReplyMode | string | no | fixed (default) uses publicReply. ai: the AI writes the public reply for each comment in the channel's persona; needs publicReplyInstruction. Counts toward the daily AI limit. |
| publicReplyInstruction | string | no | With publicReplyMode ai: what the public reply should say. DM contents (links, codes, prices) are never repeated in public. |
| likeComment | boolean | no | Like the comment first. Instagram accounts connected through Facebook only. |
| openingDm | boolean | no | Default true. false: deliver goes out as the private reply itself (no button, no window afterwards). |
| message | string | no | The opening DM (private reply). One message. Required unless openingDm is false. |
| buttonTitle | string | no | Button under the opening DM, at most 20 characters. |
| askEmail | boolean | no | Ask for their email after the tap and store it in contact field email. Three tries, then continue without. |
| emailMessage | string | no | — |
| emailRetry | string | no | — |
| requireFollow | boolean | no | Instagram only. Deliver only to followers; others are asked to follow and check again. |
| notFollowingMessage | string | no | — |
| recheckTitle | string | no | — |
| deliver | object | yes | What to send after the tap: text, up to three link buttons, and/or one file (fileUrl or mediaId). |
| followUp | string | no | Sent followUpAfterMinutes later if none of deliver.links was clicked. Needs openingDm and at least one link. |
| followUpAfterMinutes | number | no | 1 to 1380 (23 hours). Default 60. |
Create an automation from any template in list_automation_templates by passing its params. Creates a draft. For a flow no template covers, build the document yourself and call put_automation on the draft.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountId | string | yes | Connected account id from list_accounts. |
| templateId | string | yes | Template id from list_automation_templates. |
| params | object | yes | The template's params. |
| name | string | no | — |
| enabled | boolean | no | Default false. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Edit an automation by replacing its whole document: for flows no template covers, or that were already edited on the canvas. If get_automation shows templateParams, change it with update_automation instead (only the params you pass change; an Instagram follow check is requireFollow, notFollowingMessage and recheckTitle). Replacing the document of a flow that still has its template form is refused
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Automation id (af_…): id in list_automations, or data.id in the create_comment_to_dm, create_automation or duplicate_automation result. |
| version | integer | yes | — |
| name | string | no | — |
| doc | object | yes | One automation flow. triggers start it, nodes are the steps, start names the first node. Waiting is not a node: a send node with buttons and next: null waits for the person to tap one, and that button |
| detachTemplate | boolean | no | Only for a flow that still has its template form: true turns it into a canvas-only flow the form can no longer open. Default false. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Turn an automation live. This is the moment messages start going to real people. Confirm with the person first. Only one automation per account can wait for the next post: enabling a second one is refused with next_post_taken until the first binds to a post. Only one message flow without keywords (a default reply or AI replies) can be live per account, or one message would get two answers: ena
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Automation id (af_…): id in list_automations, or data.id in the create_comment_to_dm, create_automation or duplicate_automation result. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Run a live comment automation on comments that are already on the post: the ones it missed because they came before it was enabled, during an outage, or while another tool handled the account. An automation normally reacts only to new comments. How Meta works: a comment can get one private reply, and only within 7 days. Older comments cannot be reached, and a comment another app already answer
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Automation id (af_…): id in list_automations, or data.id in the create_comment_to_dm, create_automation or duplicate_automation result. |
| mode | string | yes | preview counts without sending, start queues the sends, stop halts a running job. |
| includeAnswered | boolean | no | Also send to comments that already have a reply from the account. Default false. |
| publicReply | boolean | no | Also post the trigger's public reply under each comment. Default false, so an old post does not get the same reply many times at once. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Stop an automation. Runs already waiting for a button stay waiting but nothing new starts.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Automation id (af_…): id in list_automations, or data.id in the create_comment_to_dm, create_automation or duplicate_automation result. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Edit an automation that still has its template shape, without rebuilding the whole document: pass only the template params you want to change (the same params as create_automation / create_comment_to_dm). Top-level fields are replaced, object fields such as deliver merge one level deep (deliver.text alone keeps deliver.links), null removes a field, arrays are replaced whole. Read it first with get
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Automation id (af_…): id in list_automations, or data.id in the create_comment_to_dm, create_automation or duplicate_automation result. |
| version | integer | yes | The version from get_automation or list_automations. |
| name | string | no | — |
| params | object | no | Template params to change. Only what you pass changes. |
| enabled | boolean | no | — |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Delete an automation and its run history. Cannot be undone. A live automation is refused with automation_live: disable it first, or pass force: true after the person confirms, because deleting it stops what is going out to people.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Automation id (af_…): id in list_automations, or data.id in the create_comment_to_dm, create_automation or duplicate_automation result. |
| force | boolean | no | Delete even if it is live. Default false. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Copy an automation as a new draft with the same triggers and settings, optionally with a new name. Runs and versions are not copied; a copy bound to a specific post keeps that post, a copy of a next-post flow waits for the next post again when enabled.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Automation id (af_…): id in list_automations, or data.id in the create_comment_to_dm, create_automation or duplicate_automation result. |
| name | string | no | Default: the original name with (copy). |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Check a flow document against the rules for one account without saving it: node shapes, references, the 24-hour window, and features still in Meta review. Answers problems with paths; an empty list means put_automation would accept it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountId | string | yes | The connected account the flow would run on. |
| doc | object | yes | One automation flow. triggers start it, nodes are the steps, start names the first node. Waiting is not a node: a send node with buttons and next: null waits for the person to tap one, and that button |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Saved versions of one automation (every put_automation or update_automation adds one). Read one with get_automation and version.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Automation id (af_…): id in list_automations, or data.id in the create_comment_to_dm, create_automation or duplicate_automation result. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Runs of one automation with their status and a step log. Status says where a run is or why it stopped: running, waiting, done, superseded, blocked_window (24-hour window closed), blocked_opt_out, blocked_paused (a person is handling that conversation), blocked_burst, blocked_ai_quota (the workspace used its daily automation AI limit; it resets at 00:00 UTC), failed_channel, failed_ai (the AI step
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Automation id (af_…): id in list_automations, or data.id in the create_comment_to_dm, create_automation or duplicate_automation result. |
| limit | integer | no | — |
| before | string | no | — |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
The inbox: DM conversations on Instagram and Facebook and mention threads on Threads. Each item says whether the 24-hour window is open and how long is left. state: open (default) or closed. kind: dm or mention.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| state | string | no | — |
| kind | string | no | — |
| unread | boolean | no | — |
| accountId | string | no | — |
| search | string | no | — |
| limit | integer | no | — |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
One conversation with its recent messages and the contact: name, whether they follow the account (Instagram only), tags, opt-out. AI drafts waiting for approval show as status draft.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Conversation id (cv_…) from list_conversations. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Send a message in a conversation as the account. Only inside the 24-hour window after the person's last message; outside it the call is refused with window_closed and nothing can be done until they write again. On a mention thread (Threads) this posts a public reply. Pass draftId to send an AI draft that was waiting for approval. Sending pauses automations on that conversation for 30 minutes.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Conversation id from list_conversations. |
| text | string | no | — |
| mediaId | string | no | Optional media id from media_presign. |
| draftId | string | no | Message id of an AI draft to send instead of new text. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
One contact: name, username, whether they follow the account and whether it follows them (Instagram only, and only for people who have messaged), follower count, tags, opt-out, and when the messaging window closes. Follower lists do not exist on any channel; this is the closest thing.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Contact id (ct_…): contact.id in list_conversations or read_conversation. |
| refresh | boolean | no | Re-read the profile from the channel first. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Threads posts that mention the connected account, delivered by webhook. Same shape as list_conversations with kind mention. Reply with send_dm, which posts publicly. Mentions need a permission of their own: when no connected Threads account holds it the list is empty and the response carries notice (code feature_in_review while that permission is in Meta app review, reconsent_required once reconne
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountId | string | no | — |
| unread | boolean | no | — |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
Threads only: approve (or ignore) a reply held by reply approval on one of the account's posts. Approving makes it public. Read the queue with pending: true.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| accountId | string | yes | — |
| replyId | string | no | Omit to list the pending queue instead. |
| approve | boolean | no | Default true. |
| workspaceId | string | no | Which workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again. |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install uplika or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
This listing is an address its publisher runs, and you connect to it directly — this marketplace is not in the path. The scanner reads packages and public source, and an address is neither. So there is no grade — not a withheld one, an unmeasured one.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.1.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish uplika can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.