AdvisorPPC X Organic
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| X_ACCESS_TOKEN | Yes | X API access token with user-context OAuth 2.0 PKCE permissions |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| x_organic_get_meA | 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. |
| x_organic_lookup_userA | 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. |
| x_organic_lookup_usersA | Batch lookup. Pass usernames XOR ids (comma-separated v2). Never invent handles. |
| x_organic_search_usersB | GET /2/users/search. Query must be what the user asked to find — do not invent people to follow. |
| x_organic_get_postA | GET /2/tweets/:id with public metrics, author, media, and referenced posts. |
| x_organic_lookup_postsB | GET /2/tweets?ids=… up to 100 ids the user named. |
| x_organic_user_postsA | GET /2/users/:id/tweets. Pass user_id from lookup/me. exclude=replies,retweets optional. |
| x_organic_my_timelineA | GET /2/users/:id/timelines/reverse_chronological for the authenticated user (home feed). Billed per read. |
| x_organic_mentionsB | GET /2/users/:id/mentions for the authenticated user (or a named user_id you manage). |
| x_organic_search_recentA | 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. |
| x_organic_list_repliesA | 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). |
| x_organic_get_quote_tweetsC | GET /2/tweets/:id/quote_tweets. Quote creation on self-serve is Enterprise-only; reading quotes is not. |
| x_organic_liked_postsB | GET /2/users/:id/liked_tweets. Defaults to the authenticated user. |
| x_organic_list_bookmarksB | GET /2/users/:id/bookmarks for the authenticated user. Scope bookmark.read. |
| x_organic_create_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. Do not fake a queue or invent a publish time. Up to 4 photos, 1 GIF, or 1 video via media_ids from x_organic_upload_media. |
| x_organic_replyA | 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. |
| x_organic_quoteA | 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. |
| x_organic_repostA | POST /2/users/:id/retweets. Requires confirm=true after the user named the post to repost. |
| x_organic_unrepostB | DELETE /2/users/:id/retweets/:tweet_id. Requires confirm=true. |
| x_organic_delete_postA | DELETE /2/tweets/:id. You can only delete posts you authored. Requires confirm=true after the user named the exact post. Destructive and irreversible. |
| x_organic_create_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. Do not fake a queue or invent a publish time. |
| x_organic_hide_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. |
| x_organic_likeA | POST /2/users/:id/likes. Reversible. Scope like.write. Do not mass-like. |
| x_organic_unlikeB | DELETE /2/users/:id/likes/:tweet_id. |
| x_organic_bookmarkC | POST /2/users/:id/bookmarks. Scope bookmark.write. |
| x_organic_unbookmarkD | DELETE /2/users/:id/bookmarks/:tweet_id. |
| x_organic_upload_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. |
| x_organic_reply_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. |
| x_organic_list_dm_eventsB | GET /2/dm_events (MessageCreate). One page of inbox events with sender expansion. Scope dm.read. Do not dump DMs into public posts. |
| x_organic_list_dm_conversationA | GET /2/dm_conversations/:id/dm_events. Pass a conversation id from inbox_summary or list_dm_events. Scope dm.read. |
| x_organic_send_dmA | 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. |
| x_organic_inbox_summaryA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| x-organic-dashboard | Inline table of posts, mentions, or DM conversations from the last tool result. |
TDQS
Scored across 32 tools
Each tool maps to a specific X API endpoint or composite workflow, with read vs. write and single vs. batch clearly separated. The only places an agent could hesitate are the DM-reading tools (list_dm_events, list_dm_conversation, inbox_summary) and the several post-creation variants, but the descriptions provide enough distinction.
The x_organic_ prefix plus snake_case gives the whole set a consistent visual and lexical pattern. Some names deviate from the verb_noun convention (mentions, my_timeline, liked_posts, inbox_summary), but these are minor and predictable.
At 32 tools this is above the comfortable 3-15 range and feels heavy, though the breadth covers posts, engagement, DMs, search, users, and media uploads. The count is defensible for a full X API integration but risks overwhelming selection unless the naming and descriptions carry the load.
The surface covers the core organic X lifecycle well: create/delete posts, threads, replies, quotes, likes, bookmarks, reposts, DMs, and media. Minor gaps such as follow/unfollow, DM deletion/read state, and a single upload-and-create-post composite exist, but agents can work around them.