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
https://mcp.xpert.so/mcpOne OAuth sign-in connects your X account. No API key to paste.
Pick your app
Connect Claude
- Open Claude → Settings → Connectors.
- Click “Add custom connector”.
- Paste the connector URL above, then Connect.
- Sign in with Xpert and authorize once in your browser.
Connect Claude Code
Run in your terminal
claude mcp add --transport http xpert https://mcp.xpert.so/mcp- Run the command, then sign in with Xpert when the browser opens.
Connect Cursor
…or add to ~/.cursor/mcp.json
{
"mcpServers": {
"xpert": {
"url": "https://mcp.xpert.so/mcp"
}
}
}Connect VS Code
Add via the CLI
code --add-mcp '{"name":"xpert","url":"https://mcp.xpert.so/mcp"}'…or add to .vscode/mcp.json
{
"servers": {
"xpert": {
"url": "https://mcp.xpert.so/mcp"
}
}
}Connect Windsurf
Add to ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"xpert": {
"url": "https://mcp.xpert.so/mcp"
}
}
}Connect Cline
Add to cline_mcp_settings.json
{
"mcpServers": {
"xpert": {
"url": "https://mcp.xpert.so/mcp"
}
}
}Connect ChatGPT
- Open ChatGPT → Settings → Connectors (requires a plan with connectors).
- Add a custom connector and paste the URL above.
- Authorize with Xpert in your browser.
Connect Other
Standard MCP config
{
"mcpServers": {
"xpert": {
"url": "https://mcp.xpert.so/mcp"
}
}
}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 - Server card
- /
.well-known/ mcp/ server-card.json - OAuth metadata
- /
.well-known/ oauth-authorization-server
/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
Add it to Claude
- Open Claude, then Settings, then Connectors. Find Xpert in the directory, or choose Add custom connector and paste
https://mcp.xpert.so/claude. - Sign in to Xpert and approve. Claude asks only to read your Xpert data and to draft, schedule and post for you.
- In a chat, ask “Draft a post about what I learned this week”.
Add it to ChatGPT
- 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/chatgptand OAuth. - Sign in to Xpert and approve.
- 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
- “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
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_callpassthrough reaches any endpoint the typed tools do not cover yet, with the same scope checks. - Readable before sign-in
https:/serves the quickstart, the tool index and the OpenAPI document as MCP resources, no auth needed./ mcp.xpert.so/ mcp/ public - Also as OpenAPI
- The same surface as REST: openapi.json, with the quickstart on the developer page.
Scoped like it matters
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.
CLI
For humans and scripts. npm i -g @xpertso/cli, then xpert login. Every endpoint as a subcommand, JSON output for jq.
REST API
For products. OAuth tokens or API keys against api.xpert.so/v1, with an OpenAPI 3.0 spec.
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.