AdvisorPPC X Organic
This MCP server lets you manage an organic X (Twitter) account via a curated, policy-safe operator set: read timelines, posts, mentions, DMs, bookmarks, and users; create, reply, quote, repost, delete, thread, and hide replies; like/unlike, bookmark/unbookmark; upload media; send DMs; and run a built-in scheduler and agents — all with safety confirmations and no invented content.
Read & search: get authenticated user (
x_organic_get_me), lookup users/posts, user timeline, home timeline, mentions, recent search, list replies, quote tweets, liked posts, bookmarks.Write posts: create posts, replies, quotes, reposts, undo repost, delete posts, create threads (up to 25 posts), hide/unhide replies — all require
confirm=trueand user-supplied copy.Engage: like/unlike, bookmark/unbookmark (no mass actions).
Media: upload images/videos/GIFs for posts or DMs (chunked for video/large files), reply with media — media failures stop the action.
Inbox & DMs: list DM events, read a conversation, send a DM (one named recipient, confirm required), inbox summary.
Scheduler & agents: set up AdvisorPPC queue (X has no native schedule), create/list/cancel/pause/resume scheduled jobs, enable agents (publish queue, mention digest, inbox digest, health) — digests never auto-reply.
Safety & billing awareness: tool descriptions warn about per-post costs (links cost more), self-serve reply/quote restrictions, and forbid inventing content or handles.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AdvisorPPC X Organic Show me my recent mentions"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AdvisorPPC X Organic
Policy-safe organic X (Twitter) for MCP clients — Claude Code, Cursor, Grok, VS Code, or any Streamable HTTP host.
This is the posting / community-management connector. Ads live in atmosphere-ai/advisorppc-x-ads. Official XMCP at https://api.x.com/mcp is a 140–200 endpoint dump that bills per call; this package is a curated operator set (composites, confirm flags, skills).
Website · Tasks · Reverse-engineering · MCP v2 notes · Scheduler
What you get
Layer | Detail |
Protocol | MCP 2026-07-28 (SDK v2 |
Transports | stdio (local) and Streamable HTTP |
UI | MCP Apps dashboard + scheduler ( |
API |
|
Safety | Never invent copy; |
Scheduler | AdvisorPPC queue (X has none). HTTP auto-starts the worker. Import |
Related MCP server: x-mcp
Tools (40)
Read: x_organic_get_me · x_organic_lookup_user · x_organic_lookup_users · x_organic_search_users · x_organic_get_post · x_organic_lookup_posts · x_organic_user_posts · x_organic_my_timeline · x_organic_mentions · x_organic_search_recent · x_organic_list_replies · x_organic_get_quote_tweets · x_organic_liked_posts · x_organic_list_bookmarks
Write posts: x_organic_create_post · x_organic_reply · x_organic_quote · x_organic_repost · x_organic_unrepost · x_organic_delete_post · x_organic_create_thread · x_organic_hide_reply
Share: x_organic_like · x_organic_unlike · x_organic_bookmark · x_organic_unbookmark
Media: x_organic_upload_media (images + chunked tweet_video / dm_video, never amplify_video) · x_organic_reply_with_media
Inbox: x_organic_list_dm_events · x_organic_list_dm_conversation · x_organic_send_dm · x_organic_inbox_summary
Scheduler / agents: x_organic_scheduler_setup · x_organic_scheduler_status · x_organic_scheduler_settings · x_organic_schedule_list · x_organic_schedule_create · x_organic_schedule_cancel · x_organic_agents_list · x_organic_agent_set
Install
git clone https://github.com/atmosphere-ai/advisorppc-x-organic
cd advisorppc-x-organic
npm install
cp .env.example .env # set X_ACCESS_TOKEN
npm run buildToken: an X developer app with user-context OAuth 2.0 PKCE. Scopes:
tweet.read tweet.write users.read
dm.read dm.write
like.write bookmark.read bookmark.write
tweet.moderate.write media.write
follows.read offline.accessAuth URL https://x.com/i/oauth2/authorize, token URL https://api.x.com/2/oauth2/token. PKCE S256; X rejects client_secret_post. Always include offline.access or the token dies in ~2 hours.
Claude Code / Cursor (stdio)
{
"mcpServers": {
"advisorppc-x-organic": {
"command": "node",
"args": ["/absolute/path/to/advisorppc-x-organic/dist/index.js"],
"env": { "X_ACCESS_TOKEN": "…" }
}
}
}Or the plugin path: claude plugin marketplace add atmosphere-ai/advisorppc-x-organic then install advisorppc-x-organic@advisorppc.
Streamable HTTP
npm run start:http
# POST http://127.0.0.1:3333/mcp
# Authorization: Bearer <token> (overrides env)Grok web custom connector: server URL of your hosted /mcp, PKCE, scopes as above.
Grok Build CLI
[mcp_servers.advisorppc-x-organic]
command = "node"
args = ["/absolute/path/to/dist/index.js"]
[mcp_servers.advisorppc-x-organic.env]
X_ACCESS_TOKEN = "…"Safety
Action | Default | To override |
Post / reply / quote / thread / repost | refused |
|
DM send | refused |
|
Delete / hide | refused |
|
Failed media | stop | never attach a substitute |
Invented copy, handle, or media | forbidden | user supplies it |
Schedule | AdvisorPPC queue |
|
Pay-per-use (as of 2026): $0.015 per plain post, **$0.20 if the text contains a link**. Tool descriptions tell the model to warn before posting links.
Self-serve replies: on pay-per-use / Basic / Pro, replies to someone else only succeed if they @mentioned you or quoted you. Threading your own posts is the intended create_thread path. Quote-posting is Enterprise-only on those plans.
Skills (bundled)
Skill | When to use |
| Auth, tokens, first |
| Playbooks (publish thread, triage mentions, answer inbox) |
| How this server is built on MCP v2 |
| Inline dashboard / |
Scheduler (built-in)
X cannot natively schedule. Call x_organic_scheduler_setup once — it starts the worker and returns paste-ready configs for Claude, ChatGPT, Cursor, Grok, and the AdvisorPPC backend (import { createScheduler } from "@advisorppc/x-organic/schedule").
Agents: publish_queue (fires due jobs), mention_digest / inbox_digest (snapshots + optional webhook, never auto-reply), health. Details: docs/SCHEDULER.md.
Develop
npm test
npm run typecheck
npm run dev # stdio
npm run dev:httpWhat this is not
Not Ads, pixels, audiences, or campaigns — that is
atmosphere-ai/advisorppc-x-ads.Not a 1:1 clone of X’s official XMCP at
https://api.x.com/mcp.Not a native X scheduler. The built-in queue is AdvisorPPC's.
Not a Google Ads connector — that is
advisorppc-org/advisorppc-plugin→https://mcp.advisorppc.com/claude.
License
MIT for this repository. The AdvisorPPC name and hosted service remain Advisor Media.
Available Tools
40 toolsx_organic_agent_setEnable or configure an agentA
Turn an agent on/off and set every_ms. Live agents (if any) need confirm=true. mention_digest / inbox_digest never send replies or DMs.
Inputs: agent_id (required), confirm, enabled, every_ms.
x_organic_agents_listList scheduler agentsARead-only
Built-in agents: publish_queue, mention_digest, inbox_digest, health. Digests never auto-reply; they snapshot and optionally POST webhook_url for Claude/ChatGPT/AdvisorPPC.
Inputs: no named parameters.
x_organic_bookmarkBookmark a postC
POST /2/users/:id/bookmarks. Scope bookmark.write.
Inputs: post_id (required).
x_organic_create_postCreate postA
POST /2/tweets. Use only the copy/media the user supplied — never invent text or handles. Requires confirm=true after an explicit named ask. X API pay-per-use (as of 2026): ~$0.015 per plain post, ~$0.20 per post that contains a link. Warn the user before posting links. X API has no native schedule. Use AdvisorPPC x_organic_schedule_* tools — never invent a publish time outside the job store. Up to 4 photos, 1 GIF, or 1 video via media_ids from x_organic_upload_media.
Inputs: text, confirm, media_ids, reply_settings.
x_organic_create_threadCreate threadA
Composite: publish the first post, then chain the rest as replies (in_reply_to of the previous). Use only the array of copy the user supplied — never invent posts. Requires confirm=true once for the whole thread. If a later post fails, STOP and return what already went up. X API pay-per-use (as of 2026): ~$0.015 per plain post, ~$0.20 per post that contains a link. Warn the user before posting links. X API has no native schedule. Use AdvisorPPC x_organic_schedule_* tools — never invent a publish time outside the job store.
Inputs: posts (required), confirm, reply_settings.
x_organic_delete_postDelete postADestructive
DELETE /2/tweets/:id. You can only delete posts you authored. Requires confirm=true after the user named the exact post. Destructive and irreversible.
Inputs: post_id (required), confirm.
x_organic_get_meGet authenticated userARead-only
GET /2/users/me — the user on this OAuth2 token. Call first when you need user id for timeline, likes, bookmarks, or mentions. Never invent a handle.
Inputs: no named parameters.
x_organic_get_postGet one postARead-only
GET /2/tweets/:id with public metrics, author, media, and referenced posts.
Inputs: post_id (required).
x_organic_get_quote_tweetsQuote tweets of a postCRead-only
GET /2/tweets/:id/quote_tweets. Quote creation on self-serve is Enterprise-only; reading quotes is not.
Inputs: post_id (required), max_results, pagination_token.
x_organic_hide_replyHide or unhide a replyA
PUT /2/tweets/:id/hidden. Only works for replies on a conversation you own. Requires confirm=true. Scope tweet.moderate.write. hidden=true hides, false unhides.
Inputs: hidden (required), reply_id (required), confirm.
x_organic_inbox_summaryInbox summaryARead-only
Composite: fetch recent DM events and group by conversation with the last message. Use this to triage inbox, then x_organic_list_dm_conversation + x_organic_send_dm (confirm) to answer. Do not auto-reply.
Inputs: max_results, max_conversations.
x_organic_likeLike a postA
POST /2/users/:id/likes. Reversible. Scope like.write. Do not mass-like.
Inputs: post_id (required).
x_organic_liked_postsLiked postsBRead-only
GET /2/users/:id/liked_tweets. Defaults to the authenticated user.
Inputs: user_id, max_results, pagination_token.
x_organic_list_bookmarksList bookmarksBRead-only
GET /2/users/:id/bookmarks for the authenticated user. Scope bookmark.read.
Inputs: max_results, pagination_token.
x_organic_list_dm_conversationRead a DM conversationARead-only
GET /2/dm_conversations/:id/dm_events. Pass a conversation id from inbox_summary or list_dm_events. Scope dm.read.
Inputs: dm_conversation_id (required), max_results, pagination_token.
x_organic_list_dm_eventsList DM eventsBRead-only
GET /2/dm_events (MessageCreate). One page of inbox events with sender expansion. Scope dm.read. Do not dump DMs into public posts.
Inputs: max_results, dm_event_fields, pagination_token.
x_organic_list_repliesList replies to a postARead-only
Recent-search composite: conversation_id:{post_id} is:reply. Use this to triage comments. Billed per matching post. Then reply with x_organic_reply (confirm required; self-serve only if they summoned you).
Inputs: post_id (required), max_results, pagination_token.
x_organic_lookup_postsLookup postsBRead-only
GET /2/tweets?ids=… up to 100 ids the user named.
Inputs: post_ids (required).
x_organic_lookup_userLookup one userARead-only
Look up a user by username (without inventing @handles) or by numeric id. Uses GET /2/users/by/username/:username or GET /2/users/:id.
Inputs: user_id, username.
x_organic_lookup_usersLookup usersARead-only
Batch lookup. Pass usernames XOR ids (comma-separated v2). Never invent handles.
Inputs: user_ids, usernames.
x_organic_mentionsMentionsBRead-only
GET /2/users/:id/mentions for the authenticated user (or a named user_id you manage).
Inputs: user_id, max_results, pagination_token.
x_organic_my_timelineHome timelineARead-only
GET /2/users/:id/timelines/reverse_chronological for the authenticated user (home feed). Billed per read.
Inputs: max_results, pagination_token.
x_organic_quoteQuote a postA
POST /2/tweets with quote_tweet_id. Requires confirm=true. Quote-posting is Enterprise-only on self-serve/pay-per-use as of 2026-09 — expect 403 on those plans. Never invent post text, DM copy, handles, or media. Use only what the user supplied. X API pay-per-use (2026): ~$0.015/post, ~$0.20 if the text contains a link. Warn before posting links.
Inputs: quote_tweet_id (required), text, confirm, media_ids.
x_organic_replyReply to a postA
POST /2/tweets as a reply (in_reply_to_tweet_id). Requires confirm=true. Do not invent copy. Do not spam-reply. Self-serve / pay-per-use: replies to someone else only succeed if they @mentioned you or quoted you. Enterprise is unrestricted. Self-replies (your own thread) are the intended thread mechanism. X API pay-per-use (2026): ~$0.015/post, ~$0.20 if the text contains a link. Warn before posting links.
Inputs: in_reply_to_tweet_id (required), text, confirm, media_ids.
x_organic_reply_with_mediaReply with mediaA
Composite: upload media (if given) then reply. If upload fails, STOP — do not post a text-only substitute. Requires confirm=true. Self-serve / pay-per-use: replies to someone else only succeed if they @mentioned you or quoted you. Enterprise is unrestricted. Self-replies (your own thread) are the intended thread mechanism. X API pay-per-use (2026): ~$0.015/post, ~$0.20 if the text contains a link. Warn before posting links.
Inputs: in_reply_to_tweet_id (required), text, media, confirm, +2 more.
x_organic_repostRepostA
POST /2/users/:id/retweets. Requires confirm=true after the user named the post to repost.
Inputs: post_id (required), confirm.
x_organic_schedule_cancelCancel, pause, or resume a jobADestructive
Cancel (terminal), pause, or resume a named job id. confirm=true after the user named the job.
Inputs: job_id (required), action, confirm.
x_organic_schedule_createSchedule a jobA
Enqueue a future organic action on AdvisorPPC's queue (X cannot natively schedule). tool must be allowlisted. arguments must be the user-supplied copy/ids — never invent text. confirm=true after they named the time and the copy. Enables publish_queue so the worker will fire it. Kinds: once (run_at ISO), every (every_ms), cron (5-field).
Inputs: kind (required), tool (required), arguments (required), cron, +6 more.
x_organic_schedule_listList scheduled jobsARead-only
List AdvisorPPC queue jobs (not X native). Filter by status.
Inputs: status.
x_organic_scheduler_settingsScheduler settingsB
Get or patch timezone, digest webhook_url (Claude/ChatGPT/AdvisorPPC callback), tick_ms, public_url.
Inputs: tick_ms, timezone, public_url, webhook_url.
x_organic_scheduler_setupAuto-setup schedulerA
Self-configure the AdvisorPPC scheduler for Claude, ChatGPT, Cursor, Grok, raw HTTP, or the AdvisorPPC backend. Starts the in-process worker, writes the job store, returns paste-ready MCP snippets. Does not invent posts.
Inputs: vendor, timezone, public_url, webhook_url.
x_organic_scheduler_statusScheduler statusARead-only
AdvisorPPC's own job queue (X API has no native schedule). Shows worker, agents, upcoming jobs, last runs. HTTP mode starts the worker by itself.
Inputs: no named parameters.
x_organic_search_recentRecent searchARead-only
GET /2/tweets/search/recent (last 7 days). Query must be the user's. Billed per matching post. Do not run unbounded brand-watch loops.
Inputs: query (required), end_time, since_id, until_id, +3 more.
x_organic_search_usersSearch usersBRead-only
GET /2/users/search. Query must be what the user asked to find — do not invent people to follow.
Inputs: query (required), max_results, pagination_token.
x_organic_send_dmSend a Direct MessageA
Send one DM to a named recipient (participant_id or username) or an existing dm_conversation_id. Requires confirm=true after an explicit named ask. Never invent copy. One recipient — no bulk unsolicited DMs. Optional media_id from x_organic_upload_media with destination=dm. Do not spam-reply and do not send bulk unsolicited DMs. One named conversation at a time.
Inputs: text, confirm, media_id, username, +2 more.
x_organic_unbookmarkRemove bookmarkD
DELETE /2/users/:id/bookmarks/:tweet_id.
Inputs: post_id (required).
x_organic_unlikeUnlike a postB
DELETE /2/users/:id/likes/:tweet_id.
Inputs: post_id (required).
x_organic_unrepostUndo repostBDestructive
DELETE /2/users/:id/retweets/:tweet_id. Requires confirm=true.
Inputs: post_id (required), confirm.
x_organic_upload_mediaUpload mediaA
Upload an image or video for an organic post (tweet_image / tweet_gif / tweet_video) or a DM (dm_*). Images use simple upload; video and files >5MB use v2 chunked INIT/APPEND/FINALIZE and poll STATUS. Never amplify_video (ads). Provide exactly one of media_url or media. If the intended media failed to upload or process, STOP. Do not substitute a still, a source image, or a pre-existing library asset.
Inputs: media, media_url, destination.
x_organic_user_postsUser post timelineARead-only
GET /2/users/:id/tweets. Pass user_id from lookup/me. exclude=replies,retweets optional.
Inputs: exclude, user_id, max_results, pagination_token.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 40 tools
Most tools map to distinct X API resources and actions (create_post, reply, quote, repost, like, bookmark, etc.). A few overlapping utilities exist — list_dm_events vs inbox_summary both fetch recent DM events, and schedule_list vs scheduler_status both surface queue state — but descriptions clarify their intent.
Uniform x_organic_ prefix with mostly verb_noun structure (create_post, send_dm, lookup_user, schedule_cancel). Some deviations exist — user_posts, mentions, my_timeline, liked_posts — but they are readable and don't break the pattern.
40 tools is well beyond the heavy threshold. While the server covers posting, scheduling, DMs, media, and agents, the sheer count makes tool selection cumbersome and suggests scope creep that could have been consolidated (e.g., merging reply variants or DM listing helpers).
The toolkit covers the full organic X lifecycle: creation, engagement, reading, media upload, scheduling, agent monitoring, and DMs. Notable gaps are follow/unfollow management and follower/analytics endpoints, but the stated organic-purpose surface is largely complete.
Maintenance
Related MCP Connectors
Schedule and publish social posts across 9 platforms (Instagram, LinkedIn, X, TikTok, Facebook, Threads, Pinterest, Bluesky, Mastodon) straight from Claude, ChatGPT, Cursor, or any MCP client. Create, edit, and reschedule posts, upload media, and pull account and post analytics, follower demographics, and best-time windows. 20 tools, free on every plan.
Create, schedule, and publish social posts, manage accounts, and read analytics as MCP tools.
Agent-first social media publishing, scheduling, analytics, and unified inbox API + 16-tool MCP server across 18 social platforms (X, LinkedIn, Instagram, YouTube, TikTok, Threads, Bluesky, Reddit, Telegram, Discord, Mastodon, Facebook, Pinterest).
Social media MCP: publish, schedule & analyze posts on TikTok, Instagram, YouTube, LinkedIn & X
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides programmatic X (Twitter) engagement via MCP, offering 24 tools for search, timelines, notifications, bookmarks, profiles, and tweet actions through a headless browser.MIT
- FlicenseNot gradedqualityCmaintenanceEnables MCP-based interaction with the X (Twitter) API v2, supporting reads like timeline, mentions, and search, and writes through a two-step draft-and-confirm process that ensures human-visible previews before any public post.-
- AlicenseAqualityBmaintenanceEnables MCP clients to interact with the X (Twitter) API v2 through 41 typed tools for reading, searching, engaging, publishing, and managing content, with policy-based access control and session credit budgets to prevent overspending.4154 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to post, schedule, thread, delete, and analyze social media posts across platforms like X, Bluesky, LinkedIn, and Instagram through a single MCP interface.107 npmMIT