uplika

Tell your agent, and it posts to the channels you connected.

Community: Submitted by a user or imported; check the owner before granting accessDegradedNo sign-inGlobalFreeCan modify data

What it can do

  • 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
  • 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: "
  • List Platforms: Every channel and its rules: character limit, whether media is required, image count and size limits, and whether it is live yet. Read this instead of guessing a platform's limits.

What data it sees

Do you need an account

No: the server works without sign-in

Tell your agent, and it posts to the channels you connected. 17 tools over MCP: list channels, read each platform's limits, publish text or images, fetch metrics, reply, delete.

Threads is live; nine more channels await platform review.

Docs: https://uplika.com/en/docs/mcp

How to connect

How to connect uplika to Claude

The server address to paste into Claude settings:

https://uplika.run.tools

  1. Open Claude (claude.ai or the desktop app).
  2. Go to Settings → Connectors.
  3. Click Add custom connector.
  4. Paste the server address copied below into Remote MCP server URL and click Add.
  5. In a chat, click + → Connectors and switch the new connector on.

Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.

Authorization

After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.

How to connect uplika to ChatGPT

The server address to paste into ChatGPT settings:

https://uplika.run.tools

  1. Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
  2. Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
  3. Open Settings → Connectors and click Create.
  4. Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
  5. Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
  6. In a new chat open + → Apps/Connectors and enable the connector.

OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.

Authorization

On first use ChatGPT opens the service's sign-in window. Sign in and approve access.

How to connect uplika to Cursor

The server address to paste into Cursor settings:

https://uplika.run.tools

Fastest: click Open in Cursor below and confirm the prompt.

Manually:

  1. In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
  2. Paste the JSON copied below into ~/.cursor/mcp.json (per project: .cursor/mcp.json in the repo root).
  3. Save the file. The server appears in the MCP list; authorize it there if asked.

Authorization

If the service needs sign-in, an authorize button appears next to the server in the MCP list.

Server tool list (17)

Raw names from tools/list. Only developers need these.

list_accountsConnected 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_channelsPick 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 reason. Pass the returned accountIds to publish unchanged. `limits` is the tightest rule across the chosen channels, so write to that.
list_platformsEvery channel and its rules: character limit, whether media is required, image count and size limits, and whether it is live yet. Read this instead of guessing a platform's limits.
list_postsRecent publishes made through us and the per-target status of each. Posts that already existed on the channel are not here — use list_channel_posts for those.
list_channel_postsWhat is actually on the channel right now, including posts written in the Threads 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.
publishPost to social channels. Channels open today: threads. Get accountIds from select_channels — do not guess which channel the person meant. Threads text is up to 500 characters and emoji count as UTF-8 bytes. Over the limit nothing goes out to any channel, so shorten it before calling. To attach images, call media_presign and media_complete first, then pass the media ids here.
open_postEverything 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.
get_postOne publish: per-target status and the reason any target failed. For a post link you probably want open_post instead.
retry_postRetry the targets that failed on a publish. Targets that already went out are left alone, so this never double-posts. If nothing failed you get nothing_to_retry. Only applies to posts published through us.
delete_postDelete a post from the channel for good. This is not reversible, so confirm with the person first. Threads allows 100 deletes a day. Works on posts written in the Threads app as well, given the link.
list_repliesThe 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.
replyReply 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.
hide_replyHide 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.
get_insightsViews, 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.
get_quotaHow 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.
media_presignStep 1 of attaching an image. Returns a media id and a one-time uploadUrl. PUT the file bytes to uploadUrl with the same contentType, then call media_complete. Images only for now: image/jpeg, image/png, up to 8MB, 320-1440px wide.
media_completeStep 2 of attaching an image. 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.