# com.uplika/uplika

Publish to social channels from your AI agent. Threads is live; nine more await review.

- **Type:** MCP server
- **Trust:** 30/100 (D), scored on the content rubric
- **Verification:** community-indexed — nobody has claimed this listing
- **Version:** 1.0.0
- **Author:** com.uplika
- **License:** Unknown
- **Endpoints:** streamable-http https://api.uplika.com/mcp
- **Source:** https://uplika.com
- **Endpoint health:** reachable (last checked 2026-09-21T05:30:10.846Z, 5 samples) — uptime is not a security property and is not part of the trust score
- **Compatible clients:** claude-code, cursor, copilot, chatgpt, gemini (basis: transport)

## Trust

30/100 (D), scored on the content rubric
- Publisher verified: no
- Install scripts: suspicious script found
- Prompt-injection scan: findings present
- Obfuscation scan: clean
- Evidence age: 0 days

## Security scan

- **Status:** warnings
- **Scanned:** 2026-09-21T05:30:10.846Z
- **Version scanned:** live
- **CVEs:** no coverage — this entry has no package coordinates to query OSV against, so "no known CVEs" is NOT asserted for it.
**Findings**
- injection-shaped content (note) in the `list_accounts` tool: Links to undeclared domain: uplika.com
- injection-shaped content (note) in the `select_channels` tool: Links to undeclared domain: uplika.com
- injection-shaped content (warning) in the `reply` tool: Exfiltration-shaped instruction

## Tools

45 declared. Observed from a live `tools/list` probe.
- `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 pu
- `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 th
- `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
- `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 
- `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 ca
- `publish` — Post to social channels. Channels open today: threads, instagram, youtube, facebook, bluesky, telegram, naver_blog, tiktok. Get accountIds from select_channels 
- `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. Replie
- `get_post` — One publish: per-target status and the reason any target failed. For a post link you probably want open_post instead.
- `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 re
- `update_post` — Change a scheduled or draft post before it goes out: content, mediaIds, accountIds, Naver Blog caps how many posts one ID publishes; when it does, this returns 
- `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
- `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, In
- `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
- `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,
- `like` — Like a post, or a reply under it when you pass replyTo. Idempotent: if it is already liked the call succeeds with already: true and nothing is toggled. There is
- `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 ac
- `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.
- `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.
- `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 aroun
- `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 h
- `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. 
- `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 arou
- `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,
- `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
- `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_c
- `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, 
- `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 
- `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 ima
- `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 
- `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
- `list_automations` — Automations on the connected accounts: name, channel, whether it is live or a draft, triggers, run count. Use get_automation to read one flow's document.
- `get_automation` — One automation as a document: triggers, nodes, start. Also returns version, which put_automation needs, and templateParams when the flow still has its template 
- `create_comment_to_dm` — 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
- `create_automation` — 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 yo
- `put_automation` — Replace an automation's whole document. Pass the version you got from get_automation; a stale version is refused with version_conflict so a concurrent edit is n
- `enable_automation` — Turn an automation live. **This is the moment messages start going to real people.** Confirm with the person first. Refuses with reconsent_required if the accou
- `disable_automation` — Stop an automation. Runs already waiting for a button stay waiting but nothing new starts.
- `list_automation_runs` — Runs of one automation with their status and a step log. Status names why a run stopped: blocked_window (24-hour window closed), blocked_opt_out, blocked_paused
- `list_conversations` — 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. st
- …and 5 more

## Install

**Verdict: do-not-install** — Do not install: 1 injection-shaped pattern found in this entry's own text — it may try to steer the model that loads it.
**Blocking**
- 1 injection-shaped pattern found in this entry's own text — it may try to steer the model that loads it. — tool:reply#secret: Exfiltration-shaped instruction
**Cautions** (coverage gaps and advisories — never blocking)
- No CVE coverage: this entry has no npm/PyPI coordinates to query OSV against, so "no known vulnerabilities" is not a claim that can be made about it.
- No publisher has proved control of this listing; it is indexed, not vouched for.
**Client configuration withheld.** Client configs are withheld because this entry has a blocking finding. Show the warnings below to the person installing it.
If they have seen the findings and still want to proceed, request the plan again with acknowledge_warnings=true.

## Blast radius

Extensive blast radius — deletes data; runs on someone else's infrastructure.
- Floor 35, ceiling 59 (tier: extensive)
- This is impact, not likelihood. A high radius is not a defect: a filesystem server is supposed to write files. It is never part of the trust score.

## Machine-readable views of this entry

- Signed JSON: https://forgeregistry.com/api/v1/packages/com.uplika%2Fuplika
- Install plan: https://forgeregistry.com/api/v1/packages/com.uplika%2Fuplika/install-plan
- Alternatives: https://forgeregistry.com/api/v1/alternatives/com.uplika%2Fuplika
- HTML page: https://forgeregistry.com/registry/com.uplika%2Fuplika
- MCP: POST https://forgeregistry.com/api/mcp → `forge_get_package` / `forge_install_plan`

## About this document

Generated by Forge (https://forgeregistry.com) — a compact rendering of the same record served, signed, at the JSON URL above. Trust and scan facts are the registry's own measurements; anything Forge did not measure is named as unmeasured rather than omitted.
