Are you an AI agent? Machine-readable entry points:/llms.txt/llms-full.txt/catalog.json

X MCP server for Claude and ChatGPT

Your assistant can publish posts on X, schedule them for later and check how they went. UniLink handles the X sign-in: you connect your X account once in UniLink, then connect the assistant to https://unilink.us/mcp.

How to connect

  1. Create a UniLink account

    Free to start. Publishing needs a paid plan. Get started free →

  2. Connect your X account

    In the UniLink Dashboard, open Social Planner → Integrations and connect X. You do this once. Open Integrations →

  3. Add UniLink to your assistant

    Sign in to UniLink when the assistant asks, and click Allow.

    Claude (claude.ai and Claude Desktop)

    1. Open Settings → Connectors → Add custom connector.
    2. Paste https://unilink.us/mcp and add it.
    3. Sign in to UniLink and click Allow.

    ChatGPT

    1. Turn on developer mode, then add a custom connector.
    2. Use the same URL: https://unilink.us/mcp.
    3. Sign in to UniLink and click Allow.

    Claude Code

    claude mcp add --transport http unilink https://unilink.us/mcp
    1. Run the command above.
    2. In Claude Code, run /mcp, pick unilink and sign in to UniLink.
    3. Click Allow.

Try asking

After you connect X, paste one of these into your assistant.

“Write a post under 280 characters about our launch today and publish it on X.”

“Schedule this on X for Monday at 08:00 UTC: "New episode is out. Link in bio."”

“Post the same announcement to X and LinkedIn, shortened for X.”

What to know about X

  • A post can be at most 280 characters.
  • A text-only post works; images and videos are optional.
  • Media must be public https URLs, up to 10 per post. A URL ending in .mp4, .mov, .avi or .webm is sent as a video, any other as an image.

Tools

5 tools, the same for every network. 2 of them need a paid plan.

smm_list_connected_accounts

Read-only

List connected social accounts

List the social media accounts connected to a profile, per platform (facebook, instagram, twitter, linkedin, telegram, pinterest, threads, discord, youtube), marking the account publish_to_social and schedule_social_post post to. Accounts are connected in the UniLink Dashboard, not here. Call this before publishing. Not paginated.

Arguments

  • profileIdintegerrequired

    Profile ID

readOnlyHint: truedestructiveHint: falseidempotentHint: trueopenWorldHint: false

publish_to_social

Posts to social mediaPaid plan

Publish a social post

Publish a post now to one or more of the profile's connected social accounts: one account per platform, the one smm_list_connected_accounts marks. It creates a campaign (see list_smm_campaigns) and sends it to each platform. Platforms that are not connected are skipped; if none is connected the call fails with NOT_CONNECTED. The text lists each platform as SUCCESS, FAILED or SKIPPED; for Instagram, SUCCESS means accepted and still processing, not yet live. Each platform applies its own rules (e.g. X allows 280 characters, Instagram needs an image or video, YouTube needs a video). Paid UniLink plans only, up to the profile's daily social post limit (10 by default) per 24 hours.

Arguments

  • profileIdintegerrequired

    Profile ID

  • contentstringrequired

    Post text, at most 5000 characters

  • platformsarray of stringrequired

    Platforms to post to, each at most once: facebook, instagram, twitter, linkedin, telegram, pinterest, threads, discord, youtube

  • mediaUrlsarray of stringoptional

    Optional public https:// image or video URLs to attach, at most 10, each at most 2048 characters. A URL whose path ends in .mp4, .mov, .avi or .webm is sent as a video, any other as an image.

  • titlestringoptional

    Optional campaign title shown in list_smm_campaigns, at most 512 characters (default: the start of content)

readOnlyHint: falsedestructiveHint: falseidempotentHint: falseopenWorldHint: true

schedule_social_post

Posts to social mediaPaid plan

Schedule a social post

Schedule a post to go out later to one or more of the profile's connected social accounts. Same as publish_to_social, but nothing is sent now: at scheduleAt UniLink publishes to each platform; follow it with list_smm_campaigns. Platforms that are not connected are skipped; if none is connected the call fails with NOT_CONNECTED. Paid UniLink plans only, up to the profile's daily social post limit (10 by default) per 24 hours, counted when the post is scheduled.

Arguments

  • profileIdintegerrequired

    Profile ID

  • contentstringrequired

    Post text, at most 5000 characters

  • platformsarray of stringrequired

    Platforms to post to, each at most once: facebook, instagram, twitter, linkedin, telegram, pinterest, threads, discord, youtube

  • scheduleAtstringrequired

    When to publish: ISO 8601 in UTC, e.g. 2026-03-01T10:00:00Z (a time without an offset is taken as UTC). Must be in the future.

  • mediaUrlsarray of stringoptional

    Optional public https:// image or video URLs to attach, at most 10, each at most 2048 characters. A URL whose path ends in .mp4, .mov, .avi or .webm is sent as a video, any other as an image.

  • titlestringoptional

    Optional campaign title shown in list_smm_campaigns, at most 512 characters (default: the start of content)

readOnlyHint: falsedestructiveHint: falseidempotentHint: falseopenWorldHint: true

list_smm_campaigns

Read-only

List social campaigns

List the profile's social media campaigns, newest first, with each campaign's status and platforms and each platform's post status and link. Paginated with take/skip: the text ends with a line Pagination: {"hasMore":true|false,"nextSkip":n|null}; while hasMore is true, call again with skip = nextSkip.

Arguments

  • profileIdintegerrequired

    Profile ID

  • takeintegeroptionaldefault: 20

    Number of campaigns (default 20, max 100)

  • skipintegeroptionaldefault: 0

    Offset (default 0)

readOnlyHint: truedestructiveHint: falseidempotentHint: trueopenWorldHint: false

get_campaign_details

Read-only

Get social campaign details

Get one social media campaign: status, schedule, text, and per platform the post status, link, error and engagement metrics. campaignId comes from list_smm_campaigns or from publish_to_social's result.

Arguments

  • profileIdintegerrequired

    Profile ID

  • campaignIdintegerrequired

    Campaign ID (from list_smm_campaigns)

readOnlyHint: truedestructiveHint: falseidempotentHint: trueopenWorldHint: false

All connector tools →

Questions

Which assistants can post to X through UniLink?

Claude, ChatGPT, Claude Code. Cursor needs Dynamic Client Registration, which UniLink doesn’t offer.

Does the assistant see my X password?

No. You connect X in UniLink (Social Planner → Integrations). The assistant only gets access to your UniLink account over OAuth 2.1, after you click Allow.

Is it free?

Listing connected accounts and campaigns works on every plan. Publishing and scheduling need a paid plan, up to the profile’s daily social post limit (10 by default) per 24 hours; on Free the assistant gets the answer "This is available on a paid UniLink plan."

What if X isn’t connected?

UniLink skips X and posts to the other networks you asked for; if none of them is connected, the call returns NOT_CONNECTED. Connect X in the Dashboard (Social Planner → Integrations) and ask again. If the daily post limit is used up, it returns LIMIT_REACHED.

How do I check that a post went out?

Ask the assistant. The publish result marks each network SUCCESS, FAILED or SKIPPED, and list_smm_campaigns and get_campaign_details show each network’s post status and link.

How labels work

No label
Works today. You can call it now.
Coming soon
Designed, not yet callable. Don’t build on it yet.
Not supported
UniLink doesn’t offer it. The reason is given next to it.
Paid plan
Works today on a paid plan. On Free it answers "This is available on a paid UniLink plan."