The X (Twitter) MCP server for AI agents.

The Xpert MCP server connects Claude, ChatGPT, Cursor, VS Code or any MCP client to your X account. One OAuth sign-in gives your agent 196 tools to draft posts in your voice, schedule threads and X Articles, read analytics and find leads, limited to the scopes you grant.

Connector URL https://mcp.xpert.so/mcp. OAuth 2.1, no API key to paste.

Works with

  • Claude
  • Claude Code
  • Cursor
  • Windsurf
  • Cline
  • ChatGPT
  • VS Code

How do I connect Xpert to Claude, ChatGPT or Cursor?

Copy the connector URL, add it to your app, and approve once in your browser. Pick your app for its exact steps.

Copy the connector URL

https://mcp.xpert.so/mcp

One OAuth sign-in connects your X account. No API key to paste.

Pick your app

Connect Claude

  1. Open Claude → Settings → Connectors.
  2. Click “Add custom connector”.
  3. Paste the connector URL above, then Connect.
  4. Sign in with Xpert and authorize once in your browser.
Open Claude connectors

Endpoints

Streamable HTTP
https://mcp.xpert.so/mcp
Legacy SSE
https://mcp.xpert.so/sse
Open discovery, no sign-in
https://mcp.xpert.so/mcp/public

/mcp and /sse answer 401 until your client finishes OAuth. The open discovery endpoint serves the quickstart and tool index without it.

Xpert as an app in Claude and ChatGPT

A smaller, focused version of Xpert for chat. Each answer comes back as an interactive card you can schedule or post from, without leaving the conversation.

Add it to Claude

  1. Open Claude, then Settings, then Connectors. Find Xpert in the directory, or choose Add custom connector and paste https://mcp.xpert.so/claude.
  2. Sign in to Xpert and approve. Claude asks only to read your Xpert data and to draft, schedule and post for you.
  3. In a chat, ask “Draft a post about what I learned this week”.

Add it to ChatGPT

  1. Open ChatGPT, then Settings, then Apps, and connect Xpert. Before it's listed, turn on Developer mode under Advanced settings and create an app with https://mcp.xpert.so/chatgpt and OAuth.
  2. Sign in to Xpert and approve.
  3. Pick Xpert from the + menu in a chat and ask “Who should I reply to today?”.

What it can do

draft_postreads
Writes a post or thread in your voice, scores it against your history and fixes weak spots. Nothing is posted.
check_postreads
Scores any post 0 to 100 against X's ranking rules, your history and your niche, with a fix for each problem.
schedule_postwrites
Schedules a post or thread for a time you give, or your best time.
post_nowwrites
Publishes a post or thread to your X account right away.
list_scheduledreads
Shows what's in your posting queue.
cancel_scheduled_postwrites
Cancels a queued post and returns it to your drafts.
reply_ideasreads
Rising posts from your network with a reply drafted in your voice. You send replies yourself on X.
find_leadsreads
Searches X for people posting about the problem you solve and keeps only good fits.
find_viral_examplesreads
Finds high-performing X posts on a topic for inspiration.
network_briefreads
What the accounts you follow are talking about, with a short playbook.
get_accountreads
Your connected @handle with followers and the last day's reach.

What it will and won’t do

  • It only acts on the X account you connect to Xpert.
  • It never posts, schedules or cancels unless you ask it to.
  • It doesn’t send replies or DMs for you. Reply ideas open X with the reply filled in, and you send it.
  • It can’t read your DMs or change your Xpert account settings.
  • Drafting, scoring, lead search and posting use credits from your Xpert plan.

Your data

Xpert receives only what each tool needs, such as the text of a post to check, never your whole conversation. It reads only the Xpert data that request needs. See the privacy policy and terms. To disconnect, remove Xpert in your assistant’s settings.

Help

Email contact@xpert.so and we’ll get back to you within one business day.

Say it in plain English

You talk to your agent, and the agent calls the tool. Each ask here is paired with the real tool it calls.
A sample session in Claude Code. The tool calls are real names.
“Draft a thread about what we shipped this week, in my voice.”
calls compose_post
“Score this draft against my history before I post it.”
calls predict_post
“What is resonating in my network right now?”
calls network_pulse
“Find the best posts for me to reply to today.”
calls network_opportunities
“Schedule this for my best time tomorrow.”
calls schedule_post
“Which of my followers are bots?”
calls list_bot_followers
“Run a profile x-ray on @competitor and tell me their hook formulas.”
calls analyze_profile
“Any new leads from my keyword monitors?”
calls list_signals
“Write an X Article from this blog post with an AI cover.”
calls create_article

Every tool, in one place

196 typed tools, generated from the same manifest that drives the Xpert REST API and CLI. Open a group to see each tool and what it does.

Write and publish

45 tools

Drafts, AI composing in your voice, repurposing videos and posts, scheduling, queue slots and instant publishing.

repurpose_source
Repurpose studio: turn a YouTube video (its captions), a podcast episode page with a transcript or show notes, a blog post, a newsletter issue or pasted text into a 5 to 8 part thread and five standalone posts with no links, plus an X Article that credits the source when withArticle is true, all in the account's voice. Checks every draft for lines copied from the source (and rewrites them), near-copies of known viral posts, misquotes and figures the source doesn't give. Nothing is posted. Costs credits; the Article costs extra.
list_repurpose_jobs
Recent Repurpose studio runs for the active account, newest first: the source, its kind, how many drafts it gave and how many originality warnings are left.
get_repurpose_job
One Repurpose studio run: the source, the thread, the five posts, the X Article and the originality check.
list_scheduled_posts
List pending scheduled posts.
schedule_post
Schedule a draft for future publication.
cancel_scheduled_post
Cancel a pending scheduled post.
publish_now
Publish a draft immediately.
get_queue_slots
List the manual posting-queue time slots.
set_queue_slots
Replace the manual posting-queue time slots.
list_best_times
List data-driven best posting times.
list_drafts
List drafts.
create_draft
Create a draft (post / thread / article).
get_draft
Get a draft.
update_draft
Update a draft.
delete_draft
Delete a draft.
share_draft
Share a draft with a client (Scale): a private link, valid 30 days unless expiresInDays says otherwise, where they read the draft, comment and approve it or ask for changes without an Xpert login. The link is returned once; only a hash of it is kept, so it can't be shown again.
revoke_draft_share
Turn off one of a draft's share links. It stops working at once.
get_draft_collab
A draft's client review (Scale): its share links (never the link tokens), the approval state and who decided, comments from the team and from clients, and the activity log of who changed what, with AI assistant (MCP) and API edits kept apart from people's.
comment_on_draft
Add a team comment to a draft (Scale). Pass shareId to show it on that share link so the client sees it too; otherwise only the team does.
resolve_draft_comment
Mark a comment on a draft as resolved (Scale).
autopilot_draft
Agentic draft loop: generates a post/thread in your voice, predicts its hit score against YOUR history, applies its own critique (stronger opener + weak-span rewrites), re-scores, and does one targeted AI revision if still under targetScore. Returns the final draft, before/after scores, the prediction, and the step-by-step trace.
compose_post
Generate post text with AI in your voice. Returns the generated text.
rewrite_text
Rewrite text with AI. Returns the rewritten text.
predict_post
Predict how a draft post will perform: an engagement estimate from your own most-similar past posts plus an AI hook critique.
viral_check
Will this post go viral? One verdict covering every pre-publish case: format rules (links, hashtags, bait, length, duplicates), your own history, what already went viral in your niche, timing and account size, with a 0-100 score, a probability, and a fix per negative factor.
schedule_spacing
Smart spacing (Growth): the account's other posts within a feed session of a time, the share of its score a bunched post keeps under X's author diversity decay, the next clear time, and the new-author window for accounts under 1,000 followers.
voice_match
How much a draft sounds like the account's own posts: a 0-100 voice match against its closest posts, how AI it reads, and the lines that drift from its voice with why. Free.
preflight_check
The checklist before posting: voice match, AI tells, mute and report risk, creator payout safety (engagement asks, copied posts), originality, the link price and the AI-image label, each pass, warn or fail with a fix. Free.
fact_check
Check a draft's factual claims (numbers, dates, names, events, quotes) against the web: supported, disputed or unclear, with a note and sources per claim. Costs credits.
hook_lab
Hook Lab: twelve opening lines for one idea across six angles (story, contrarian, specific, question, list, lesson) in the account's voice, ranked by how likely each is to stop the scroll and how much it sounds like the account, with why each could work. Costs credits.
hook_lab_pick
Record which Hook Lab opening the user chose, next to the one ranked first, so Edit memory learns their taste. Free.
get_model_match
Best-model match for the active account: which AI model writes most like the user, from a monthly test where each candidate rewrites up to ten of their real posts from the core idea and Jev picks the closest. Returns each model's wins, trials and mean closeness (0 to 1), the winner and whether drafts use it, when the test ran, the model drafts use now and the council lineup. enabled is false on plans without it (Growth and up).
run_model_match
Run the best-model match now instead of waiting for the monthly run (Growth, once a day per account). Takes about a minute; the model usage is charged at cost, about 100 credits. Returns the new ranking.
council_draft
Council drafting (Scale): three or four top models each draft the brief as a post or thread in the account's voice, and Jev ranks the drafts on voice match, reach (would it stop the scroll) and how human it reads. Returns every draft best first with the three reads (0 to 1), the best two with a one-line reason. Drafts only, publishes nothing. Costs credits.
get_voice_tune
Auto-tuned voice (Scale): the voice prompt setup kept this week (which example posts and learned rules it carries), its closeness score against the default setup's (0 to 100), and every setup tried.
strategy_coach
Get an AI growth action plan for the next 7 days, grounded in your real analytics.
list_suggestions
List pending AI post suggestions.
refresh_suggestions
Generate missing AI post suggestions now.
post_suggestion
Publish a suggested post immediately.
dismiss_suggestion
Dismiss a suggested post.
list_templates
List the org's reusable tweet templates, most recently edited first.
create_template
Create a reusable tweet template (used in compose and as the auto-plug CTA source).
get_template
Get one tweet template.
update_template
Update a tweet template (partial).
delete_template
Delete a tweet template (also detaches it from any auto-plug).

Your voice

26 tools

Your voice guide and Voice DNA, the take bank and interviews, voice notes, and named voices for a brand or a client.

list_voices
The active account's named voices (Scale): up to five, such as founder, brand and Articles, each with where it is used by default (any, post, thread, reply, article), its instructions, rules and example posts, and which one is the default. Pass a voice's id as voiceId to compose, autopilot, hook_lab, council_draft or create_draft to write in it.
create_voice
Add a named voice to the active account (Scale, five at most): a name, where it is used by default, how it differs from the account's own voice, hard rules and example posts. Drafts in it keep the account's learned voice and follow these on top.
update_voice
Change a named voice: its name, where it is used, instructions, rules, example posts or whether it is the default.
delete_voice
Delete a named voice. Drafts that used it go back to the account's own voice.
set_default_voice
Make a named voice the account's default: drafts use it whenever no other voice is picked or set for the kind of post.
get_style_profile
Get the writing-style profile for the active account.
update_style_profile
Save manual edits to the writing-style profile.
reanalyze_style
Re-derive the style profile from cached posts.
regenerate_style_brief
Regenerate the account's About brief from live signals (bio, site, likes, bookmarks, lists).
get_voice_guide
How to write as this account, as one markdown document: the account brief, voice rules and Voice DNA, rules learned from the user's edits, their own takes, their best recent posts and the writing rules. Read it before drafting anything in the user's voice, then run preflight_check on the draft.
get_voice_dna
The account's Voice DNA: measured writing habits per context (posts, threads, replies: length, rhythm, line breaks, casing, punctuation, emoji, openers, endings, signature words, words never used), the humour and stance read, and the user's corrections.
correct_voice_dna
Switch a Voice DNA trait off or on, replace a word list (signature words, words never used, openers) or reset it to what was measured. key is '<context>.<trait>'.
search_my_posts
Semantic search over your own posts.
list_learned_rules
Edit memory: the writing rules Xpert learned from how you edit its drafts, strongest first, each with a before and after example and whether it shapes drafts now, plus how many draft edits it has recorded.
remove_learned_rule
Remove a rule Xpert learned from your edits. It stops shaping drafts and is never learned again.
voice_interview_status
The voice interview for the active account: the interview in progress (its transcript and the question waiting for an answer), whether the account has done its interview, whether this week's check-in is due, how many takes it has, and what an interview and a check-in cost.
start_voice_interview
Start the voice interview (kind onboarding: about nine questions on the user's work, stories, opinions, numbers, lessons and words) or this week's three-question check-in (kind checkin), or resume the one in progress. Returns the first question. The first completed interview is free; later ones and each check-in cost credits. Put the questions to the user and send their own answers; never answer for them.
answer_voice_interview
Send the user's answer to the current interview question (typed, or the transcript of a spoken answer). Returns the next question, or when the interview is done, the takes pulled from it. Only send what the user actually said.
finish_voice_interview
End the interview early and pull takes out of the answers so far. An interview closed before any answer costs nothing.
list_takes
The take bank: the user's own stories, opinions, numbers, lessons and beliefs, newest first, with counts per kind and how often drafts used each. Drafts draw on the closest takes instead of filler.
add_take
Add a take the user stated in their own words: a story, opinion, number, lesson or belief (kind is guessed when left out). Never invent one.
update_take
Edit a take's text, kind or topic.
archive_take
Archive a take: drafts and the pre-flight stop using it.
voice_note_to_posts
Turn a voice note into a post, a thread of 3 to 6 parts and two reply-ready takes, in the account's voice. Send what the user said as transcript (their words, never invented). rewrite runs from 0 (keep their words, only filler cut) to 100 (full rewrite for the feed); facts, numbers and opinions are kept at every level. Apps can send the recording instead, as multipart audio. Costs credits.
list_voice_notes
The active account's recent voice notes, newest first: each transcript, its rewrite level and the post, thread and takes drafted from it.
redraft_voice_note
Draft a voice note again at a new rewrite level (0 keeps the spoken words, 100 is a full rewrite). Returns the note with its new post, thread and takes. Costs credits, less than a new note.

Analytics and prediction

18 tools

Account metrics, growth history, content genome, the weekly what-worked read, engagement prediction and calibration.

analytics_overview
Account snapshot: followers, posts and 24h metric deltas.
analytics_growth
Follower/growth chart data.
analytics_activity
Daily activity buckets (posts, views, likes, engagement rate).
analytics_content
Content effectiveness stats and top posts.
post_metrics_history
Metric history for a single post.
analytics_realtime
Real-time metrics for the latest own posts.
follower_history
Daily follower-count history (gained/lost/net).
analytics_calibration
How well the AI predictor has matched reality for this account: measured samples, mean bias of actual vs predicted engagement rate (pct points), and share of predictions within 1pp.
analytics_genome
Content genome: your recent posts clustered into up to 6 labelled themes with post count and average engagement rate per theme, best first. Cached 24h.
weekly_read
The weekly what-worked read for the active account: last week's posts against the account's own previous weeks, what worked, what didn't, one thing to try next, underdog posts worth rewriting and how close the hit scores came to reality. On Growth it adds whoResponded: which follower segments reposted, replied to or quoted last week's posts against their share of the followers, with a one-line lesson (null until there is enough to say). Also lists earlier weeks. Written each Monday for a week with posts.
get_weekly_read
One week's what-worked read, by the Monday (UTC) the week began, as YYYY-MM-DD.
mark_weekly_read_seen
Mark a weekly read as seen, which also clears its in-app notification.
list_post_autopsies
Per-post autopsies for the active account, newest first: each original post a day or two after it went out, against the account's own usual (views, engagement rate and weighted engagement as multiples of usual, percentiles, the pre-post hit score against where it landed), a verdict (outperformed, typical or underperformed), Jev's hook, format and topic tags and a two-line lesson. On Growth, segments says which follower segments engaged against their share of the followers, with a one-line lesson (null until there is enough to say). Pass ids to get specific posts.
get_post_autopsy
One post's autopsy, by its X post id: its numbers against the account's usual, the verdict, tags, the two-line lesson and, on Growth, which follower segments engaged.
winning_formats
The account's own winning formats from the last 60 days of post autopsies: hook, format and topic combinations and media or length groups whose posts beat its usual engagement (median, at least 3 posts each), best first, with example posts. Build new posts on these rather than on everyone else's.
list_posts
List your own posts with metrics.
lookup_post
Look up ANY public X post by its id: text, author, media and metrics. Powers embed previews and post research.
list_post_repliers
Everyone who replied to a post, as an enriched outreach dataset: handle, bio, followers, their reply and a link, most-followed first, plus a downloadable CSV URL for export.

Timeline and network intelligence

15 tools

Read your home timeline, see what your network is amplifying, find the highest-leverage posts to reply to, and work the For you feed.

get_timeline
Read the home timeline (you + everyone you follow), newest first. Paginate older posts by passing `cursor` (an ISO date from the previous page's next_cursor).
draft_timeline_reply
Generate a voice-matched reply, remix, or quote for a post. Returns the drafted text only: it does not publish.
post_timeline_reply
Publish a reply, quote, or standalone remix straight to X. For reply/quote, pass the target `tweetId`.
list_foryou
The For You feed: pre-drafted, voice-matched replies to fresh rising posts from your network. Each card carries the target post and a ready reply draft.
dismiss_foryou
Dismiss a For You reply card.
regenerate_foryou
Regenerate the drafted reply on a For You card (metered), optionally built on your take and in one reply style.
post_foryou
Publish a For You reply to X now, optionally with edited text. Only for cards with replyVia 'api' (the post mentions the user); X refuses other replies from apps, so this answers 409 reply_needs_you with an intentUrl: use handoff_foryou.
schedule_foryou
Schedule a For You reply for later: pass when = 'next_slot', 'best_time', or an ISO datetime. Only for cards with replyVia 'api'; others answer 409 reply_needs_you.
handoff_foryou
The user sends a For You reply from their own X (X only takes most replies that way): returns intentUrl, X's composer pre-filled with the reply, records the text and takes the card off the feed. Give the user the link; nothing is posted by Xpert.
network_pulse
What's resonating across the accounts you follow right now: top posts of the last 48h ranked by engagement rate, plus the current author leaderboard.
network_authors
Leaderboard of the followed authors driving engagement in your feed, with each author's current top post.
network_opportunities
Reply opportunities: fresh posts from your network that are semantically in your lane AND still gaining engagement, the highest-leverage posts to reply to right now.
network_brief
AI intelligence brief on your corner of X: themes, momentum, and a concrete playbook grounded in what your network posted. Cached ~12h; pass refresh=1 to regenerate (metered).
sync_network
Re-embed new timeline posts and refresh the network author rollup now (normally hourly).
audience_interests
Semantic search over your FOLLOWERS' bios: who in your audience cares about a topic, with their bio and reach.

Leads and engagement

34 tools

Keyword monitors, intent-scored lead signals, reply suggestions, the approval queue, CRM contacts and alerts.

get_reply_budget
The daily reply budget for the active account: the replies a day the user set (null when off) and how many replies they handed to X or sent today (UTC). A pace the user chose, never a block.
check_reply
The free check before a reply goes out: whether it reads like AI (Jev's slop read and phrase tells) and, with postId, whether it closely repeats a reply already under that post. Returns one flag and its line; it never blocks a send.
shield_posts
AI Shield: for up to 20 posts (replies, mentions), how likely each was written by AI and how likely it came from an automated account, 0 to 1, with a label: 'automated' at 0.7 on the bot question, else 'ai' at the slop detector's verdict bar, else null. Probabilities, not proof. Free, capped per user.
list_signals
Leads found by your keyword monitors: posts the intent classifier scored as commercial intent (shopping / frustrated / curious), best first. Reply via the engagement item endpoints.
list_contacts
The org's CRM contact list (leads, engagers, partners) with tags and notes.
get_contact_by_handle
Look up a CRM contact by X handle.
add_contact
Add or update a contact by handle, with optional tags, notes and source.
add_contacts_batch
Save up to 50 X users to the org's Contacts CRM in one call (upsert by handle; existing notes are kept unless new ones are given). The assistant's Fresh-leads card uses this.
update_contact
Update a contact's name, tags or notes.
delete_contact
Delete a contact.
list_monitors
List engagement monitors.
create_monitor
Create an engagement monitor (mentions / keyword / competitor).
delete_monitor
Delete an engagement monitor.
list_engagement_items
List engagement items across monitors. sort=priority returns the reply-triage order: each mention carries triageLabel (question|praise|criticism|lead|spam|troll|other) and triagePriority 0-100 (how much it needs an answer).
suggest_engagement_reply
AI-generate a reply suggestion for an engagement item, optionally built on your take and in one reply style.
respond_to_engagement
Queue a reply to an engagement item for approval. Only for items with replyVia 'api' (a mention); others answer 409 reply_needs_you with an intentUrl: use handoff_engagement_item.
handoff_engagement_item
The user sends a reply to an engagement item from their own X: returns intentUrl (X's composer pre-filled), records the text and marks the item answered. Nothing is posted by Xpert.
ignore_engagement_item
Mark an engagement item as ignored.
list_notifications
In-app alerts raised by the background jobs: a post in its first-hour amplify window, an autopilot draft held for review, a paused campaign.
read_notification
Mark one notification as read.
read_all_notifications
Mark every notification as read.
list_dm_campaigns
List DM outreach campaigns.
create_dm_campaign
Create a DM outreach campaign (bulk messaging).
get_dm_campaign
Get a DM campaign and its targets.
launch_dm_campaign
Queue a DM campaign's targets for approval.
pause_dm_campaign
Pause a DM campaign.
get_automation_settings
Get automation settings for the active account.
update_automation_settings
Update automation settings (CTA, auto-DM, auto-delete).
set_digest_prefs
Set daily-digest (morning prep) preferences: local hour and timezone (null hour opts out).
list_approvals
List approval-queue items.
approve_item
Approve a queued item. A reply X won't take from apps answers 409 reply_needs_you with an intentUrl: use handoff_approval.
handoff_approval
The user sends a queued reply from their own X: returns intentUrl (X's composer pre-filled) and marks it sent. Nothing is posted by Xpert.
reject_item
Reject a queued item.
bulk_approvals
Bulk approve or reject queued items.

Research and discovery

15 tools

Semantic search over public posts, the viral-post library, competitor autopsies and profile x-rays.

list_competitors
List the competitor handles tracked for the active account (max 3).
add_competitor
Track a competitor handle (hard cap 3 per account). The weekly autopsy analyses their top posts against your own positioning.
delete_competitor
Stop tracking a competitor.
competitor_analysis
The cached weekly competitor autopsy: per-competitor observations of what's working for them, each with a concrete angle for you.
get_profile_xray
The cached Profile X-ray of any X account: voice, topics, what works, hook formulas, cadence, weaknesses, and how to get their attention. 404 until analyze_profile has run.
analyze_profile
Run (or re-run) a Profile X-ray on any public X account: pulls their recent posts, computes engagement stats, and produces a deep AI analysis cached for the org. Metered (credits).
browse_viral_library
Browse the global viral-post library; filter by niche/hook/format, sort by score or recency.
list_library_niches
List the niches the viral library covers.
search_viral_library
Semantic search across the viral library: find high-performing posts similar to a topic or to your own post.
discover_posts
Semantic search over a shared, growing corpus of public X posts: find high-performing tweets on any topic to riff on. Each search also backfills fresh results from the firehose into the shared corpus.
search_users
Find X ACCOUNTS by keyword (bio/name match): competitor discovery, prospecting, contact enrichment. Returns profiles with follower counts.
find_people
Find real X accounts matching an audience description: authors of posts matching your queries (active on the topic right now) merged with bio matches, deduped and enriched with bio, followers, and a sample post. The caller judges relevance and picks the keepers.
find_leads
Autopilot customer finding: checks your signal agents (keyword monitors) for fresh high-intent catches first, falls back to a live X search, and AI-qualifies every candidate against what you sell. Returns only fits (≥60) with a one-line reason each, plus whether each is already a contact.
x_list_posts
Tweets from a curated X List by list id: plug a List in as an inspiration source.
community_posts
Tweets from an X Community by community id: niche-community inspiration source.

Audience and followers

10 tools

Follower analytics, bot detection, relationship history with any handle.

audience_segments
Audience segments (founder / developer / marketer / creator / investor / …) over follower bios with counts and average churn risk, plus how many followers are at high risk of unfollowing.
mutuals_radar
Mutuals radar (Growth): the mutuals most likely to reply, ranked by how often they engage with the account's posts. A mutual's reply on an original weighs 20 instead of 5 in X's ranking.
audience_overview
Audience overview: follower counts (active, new this week, likely bots, suspicious) and recent followers.
sync_followers
Start a background sync of your followers, with bot scoring.
list_bot_followers
List flagged likely-bot and suspicious followers (worst first).
scan_bot_followers
Run an AI pass to re-judge borderline 'suspicious' followers using name/bio context.
mark_follower_removed
Mark a follower as removed (after you block or remove them on X).
block_follower
Block a follower on X via the API, then mark them removed.
unblock_follower
Unblock a follower on X (reverses block) and clear their removed flag.
get_relationship
Relationship/CRM status for a handle: whether they follow you, since when, bot risk, and how many of your posts they've engaged.

Articles and media

10 tools

Long-form X Articles from blocks, AI cover images, image generation, GIFs and media uploads.

text_to_image
Generate an image from a text prompt (default flux schnell). Pass `model` to pick one of your plan's catalogue models (GET /v1/models; each has its own credit price), plus `aspect`, `negativePrompt`, `steps`, `guidance` or `seed`. Returns a public image URL.
image_to_image
Restyle or vary a source image (`imageUrl`) from a prompt. `strength` (0..1) controls how far from the source to travel. Returns a public image URL.
search_gifs
Search Tenor for GIFs to attach to a post. Returns preview + attachable URLs.
attach_gif
Stage a picked GIF: fetches it server-side, stores it on the Xpert CDN, and returns a url to put in a draft block's mediaUrls (uploaded to X at publish).
generate_article_image
Generate an AI image with Recraft V3 and upload it to X: kind 'banner' renders the title as bold poster typography (for covers), 'inline' makes a no-text section illustration. Returns the X mediaId to attach plus a preview URL.
upload_article_image
Upload an image for the article editor (multipart 'file'); returns a CDN URL to embed.
resolve_article_media
Resolve an Xpert CDN image URL to an X mediaId for attaching to an article.
import_article
Pull a PUBLISHED X Article (anyone's) by its tweet id, mapped to editor blocks: competitor/article research.
create_article
Create a long-form X Article from blocks (text / heading / image-with-mediaId), with optional AI cover via coverMediaId. Set publish=true to go live immediately; otherwise it stays a draft on X.
upload_media
Upload an image to X (provide an image URL or base64). Returns a mediaId.

Account and products

23 tools

X account management, the product catalogue for plugs, API keys, onboarding and Learning mode.

get_me
Get the current user profile.
get_x_account
Get the active X account (auto-connects if needed).
list_x_accounts
List all X accounts you can act as.
set_autosync
Enable or disable auto-sync for the active X account.
resync_account
Reset the active X account and re-ingest its data.
disconnect_x_account
Disconnect an X account and delete its cached data.
list_api_keys
List active API keys.
create_api_key
Create an API key (the secret is returned once).
revoke_api_key
Revoke an API key.
onboarding_status
Check onboarding / ingest progress.
start_onboarding
Kick off background profile sync (requires a connected X account).
get_x_connect_url
Get a URL to connect a new X account (open it in a browser to finish).
learning_profile
Learning mode (opt-in, Settings → Learning): what Xpert has learned about how this user works and writes, summary, likes, dislikes, working style, suggested prompts, compose defaults.
set_learning_mode
Turn Learning mode on or off for the current user. Off by default; when on, the web app records clicks, navigation and writing to personalise the assistant and composer.
rebuild_learning_profile
Rebuild the Learning-mode profile from the last 30 days of activity right now (normally nightly). Needs Learning on and some activity.
clear_learning_data
Delete everything Learning mode has recorded and derived for the current user. Leaves the on/off setting unchanged.
list_products
List your products.
create_product
Add a product (name + optional URL). The URL is scraped to auto-fill its description.
get_product
Get one product.
update_product
Update a product.
rescrape_product
Re-scrape the product's URL to refresh its description.
draft_product_post
Draft an X post about the product, in your voice. Returns the generated text.
delete_product
Delete a product.
Always current
This list renders from the manifest the server runs, so a new endpoint shows up here, in the API and in the CLI at the same time.
Anything new
A generic xpert_api_call passthrough reaches any endpoint the typed tools do not cover yet, with the same scope checks.
Readable before sign-in
https://mcp.xpert.so/mcp/public serves the quickstart, the tool index and the OpenAPI document as MCP resources, no auth needed.
Also as OpenAPI
The same surface as REST: openapi.json, with the quickstart on the developer page.

Scoped like it matters

Connecting is OAuth 2.1 with PKCE, never a pasted API key. You grant scopes on a consent screen, and every tool call is checked against them on the server.
readRead & analytics
View your profile, X accounts, posts, analytics, drafts and suggestions.
writeAuthoring & publishing
Create and edit drafts, generate posts with AI, schedule and publish.
engageEngagement & automation
Manage monitors, reply suggestions, the approval queue and automation settings.
dmDM outreach
Create and run direct-message campaigns (bulk messaging).
adminAccount admin
Manage API keys and X account connections.

Read-only is a real option

Grant read alone and the agent can analyze everything but publish nothing.

Approvals still apply

Replies and DMs that Xpert drafts on its own wait in your approval inbox, and approving them takes the engage scope. Leave engage out and they wait for you.

What agents never get

Billing, admin surfaces and your X password are not reachable over MCP at all, enforced by a server-side denylist, not the client.

Prefer a terminal? Same brain, three doors.

MCP

For agents. The connector URL above, OAuth consent, 196 tools.

Set up MCP

CLI

For humans and scripts. npm i -g @xpertso/cli, then xpert login. Every endpoint as a subcommand, JSON output for jq.

CLI guide

REST API

For products. OAuth tokens or API keys against api.xpert.so/v1, with an OpenAPI 3.0 spec.

API quickstart

MCP server FAQ

Straight answers about connecting, permissions, what agents can and cannot do, and what it costs.

What is the Xpert MCP server?

It is a remote Model Context Protocol (MCP) server at mcp.xpert.so that exposes Xpert's full X (Twitter) growth toolkit as callable tools: drafting in your voice, scheduling, analytics, engagement prediction, lead monitoring, network intelligence, X Articles and more. Any MCP client such as Claude, ChatGPT, Cursor or VS Code can connect to it and act on your X account with your permission.

Which AI apps can connect to it?

Anything that speaks MCP over Streamable HTTP or SSE: Claude (web and desktop), Claude Code, ChatGPT connectors, Cursor, VS Code, Windsurf, Cline, and custom agents built with any MCP SDK. The connector URL is https://mcp.xpert.so/mcp and the server also publishes a machine-readable server card at /.well-known/mcp/server-card.json for automatic discovery.

How does authentication work? Is my X password involved?

No password ever touches the agent. Connecting uses OAuth 2.1 with PKCE: your browser opens xpert.so, you approve a consent screen, and the client receives a scoped access token. Your X account itself is connected to Xpert separately over X's own OAuth. The agent only ever holds a revocable Xpert token.

Can the agent post without my approval?

Only with the scopes you grant. Connect with the read scope alone and the agent can analyze everything but publish nothing. With the write scope it can publish posts and replies when it calls those tools, as you could in the app. Replies and DMs that Xpert drafts on its own wait in your approval inbox, and approving them takes the engage scope.

What are the permission scopes?

Five scopes gate every tool: read (profile, posts, analytics), write (drafts, AI composing, scheduling, publishing), engage (monitors, replies, the approval queue, automation), dm (direct-message campaigns), and admin (API keys and account connections). You choose which to grant on the consent screen, and each tool call is checked server-side against them.

Is there a CLI or REST API too?

Yes. The same surface is available as a CLI (npm i -g @xpertso/cli, then xpert login) and as a REST API at api.xpert.so with OAuth or API keys. All three share one manifest, so every capability ships to the app, the API, the CLI and MCP at the same time.

Is MCP access included in my plan?

Yes. The MCP server, the CLI and API keys are part of Xpert's paid plan, which starts with a free trial. Without an active plan, tool calls return an error that says so, and the pricing page lists what is included.

Why would I manage X from an AI agent instead of the app?

Because your agent already knows your context. Inside Claude or your editor it can read what you are working on, draft the announcement in your voice, check the engagement prediction, and queue it for your best time in one conversation, using the same brain the Xpert app uses.

Two minutes to connect.
Then your agent drafts, schedules and reports while you build.