x-use
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OPENAI_API_KEY | No | Optional. Only needed for server-side text generation (auto replies, composite draft tools, background automation). Interactive MCP use is keyless because the calling agent writes the text. | |
| OPENAI_BASE_URL | No | Optional. OpenAI-compatible endpoint, for example https://openrouter.ai/api/v1 or http://localhost:11434/v1 for Ollama. Defaults to api.openai.com. |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_accountsA | List configured accounts with secrets stripped (no cookies, no passwords, proxy credentials masked). Read-only, never starts a browser. |
| get_metricsA | Read recorded metrics for an account (counters + recent events). Read-only, never starts a browser. |
| search_tweetsA | Search recent X posts for a query string. Read-only (draft mode
does not apply). Reuses the account's warm browser session. |
| search_profileA | Read recent posts from ONE X profile. |
| get_tweetA | Read-only fetch of one tweet: text, author, public counts, typed media (photos + video posters) and the account's persona. With include_images=true (default) photos also attach as image content so a vision-capable client sees them; the envelope always carries URLs
|
| approve_draftA | Execute a pending draft created by a write tool. Runs the exact same execution path as direct mode (pacing, dedup, metrics). A draft can be approved exactly once; unknown or consumed ids return an error. |
| post_tweetA | Post a tweet from an account. |
| generate_and_postA | Generate a post about |
| reply_to_tweetA | Reply to a tweet. Pass explicit |
| prepare_replyA | Read-only reply context: the tweet's text AND media (photos attach as image content so your model can see them), plus the account's keywords and persona. YOUR model writes the reply itself, no server-side LLM, nothing posted. Then pass your text to reply_to_tweet(text=...) or queue_engagement(action="reply", text=...). |
| run_cycleA | Run the legacy batch automation cycle in the background and return
a run handle immediately (progress goes to the logs, this never
silent-blocks). |
| engageA | Engage with tweets found via keyword search. |
| queue_postA | Schedule a post for paced execution. Pass |
| queue_engagementA | Queue a like, retweet, or reply for paced execution. |
| list_queueA | List queued actions with their full payloads (exactly what will fire), plus per-status counts. limit 1-100; offset pages through local history. Read-only, never starts a browser. |
| cancel_queued_actionA | Cancel a pending or failed queued action. Done, processing, and already-cancelled items cannot transition. |
| process_queueA | Drain queued actions with jittered pacing and daily caps. THIS
CALL IS THE APPROVAL GATE for queued work: items execute through the
same pacing/dedup/metrics path as every other write action. With
|
| get_accountA | Show one account's masked config (no cookies, no password, proxy credentials masked) plus cookie-file status. Read-only, never starts a browser. |
| add_accountA | Add an account to config/accounts.json (validated, backed up,
atomic). |
| update_accountA | Partially update an account. Only provided fields change (None =
leave unchanged); pass an empty string to clear |
| set_account_activeA | Enable or pause an account without deleting it. Pausing closes its warm browser session. |
| remove_accountA | Remove an account from config/accounts.json. Requires confirm=true. Closes the account's warm session. The backup written during the mutation (config/backups/) is the recovery path; the cookie file is left on disk. |
| get_runtime_infoA | Inspect server/package versions, tool count and configured execution mode, backend workflow support and effective unlock allowance without starting a browser. Contains no credentials, paths, account identities or raw environment values. Configuration does not prove live X authentication; use get_account_health and a bounded read for that. |
| list_draftsA | List drafts, newest first. |
| get_draftA | Show one draft by id. Read-only. |
| reject_draftA | Reject a pending draft so it can never be approved. Local status change only, nothing touches X. |
| get_run_statusA | Poll run_cycle handles. With |
| get_account_healthA | Read-only health snapshot for one account: config presence, cookie-file validity, metrics counters, warm-session state, queue depth, pending drafts, and a transparent local readiness score out of 100. Unknown evidence earns no points; this does not predict X enforcement or establish live authentication. Never starts a browser. A config that fails validation is REPORTED (config.valid=false with the error), not raised, surfacing that is the point of a health check. |
| research_and_stageA | Search each keyword, keep relevant tweets (keyless heuristic), write a reply per tweet with the server-side LLM (persona-aware), and stage one reply DRAFT per tweet. Nothing is posted, review with list_drafts and approve selectively. Requires the 'llm' block in settings. |
| draft_post_variationsA | Generate |
| list_proxiesA | List proxy pools (size, masked members, rotation cursor), the global pool strategy, each account's assignment, and the global fallback proxy. Read-only, never starts a browser. |
| add_proxyA | Add a proxy URL to a named pool (created if new) in settings.json. Validated, deduped, backed up, atomic. Credentials are masked in the response. Assign it to accounts via update_account(proxy="pool:") or a direct URL. |
| remove_proxyA | Remove a proxy URL from a pool. Requires confirm=true. The response lists accounts still assigned pool:. Emptying a referenced pool is allowed but reported (those accounts fail closed until reassigned). |
| test_proxyA | Probe the effective proxy in an isolated, cookieless browser using the configured backend; visits only an IP-echo endpoint, never X. Explicit proxy_url wins; account assignments inherit the global proxy. Returns validated egress IP, startup/request latency and masked route. Async HTTP(S) authentication is supported; legacy Selenium rejects authenticated proxies. Legacy round_robin probes advance its cursor. |
| get_inboxB | Read visible inbox/requests/other summaries with all/unread/read filtering. Native Unread selection is verified when available; never opens or accepts a conversation. |
| get_conversationC | Read bounded visible conversation context and observed request/reply state. Cursor stays within the visible window; opening may clear X unread state. Does not accept requests. |
| search_conversationsB | Search the visible inbox locally; results are partial, not full message-history search. |
| send_messageB | Prepare a reviewed DM draft for one handle or conversation. Always requires approve_draft, even when draft_mode is off. |
| follow_profileA | Prepare a follow draft for one X profile; approve_draft performs the action. |
| get_profileC | Read public profile details using visible X page elements. |
| get_home_feedB | Read posts currently visible in the home feed; no engagement actions. |
| get_session_statusA | Inspect local session lifecycle (cold/starting/ready/busy/closing/ disconnected/closed) without reading cookies or starting a browser. Ready means locally usable transport, not verified live X authentication. Legacy backends may report unknown for a warm session. |
| close_sessionB | Close one account's browser context; retain the operator's cookie file. |
| get_account_safetyC | Read local limits, pause reason, and writes needing outcome reconciliation. |
| pause_account_actionsA | Pause browser actions durably until the operator explicitly resumes them. |
| resume_account_actionsA | After resolving a challenge, probe the signed-in home page and clear the local pause. Does not reset budgets. |
| resolve_action_outcomeA | After inspecting X, record succeeded or not_sent for an uncertain action. Repairs associated draft/queue history; queued not_sent work is cancelled and never resent automatically. Incorrect not_sent can cause duplicates. |
| unlock_inboxA | Unlock the owner's encrypted inbox once using a server environment variable. PIN never appears in tool arguments, drafts, logs or stored state. Inspect get_account_safety for remaining attempts and reset time; never loop on a rejected PIN or challenge. |
| get_profile_contextB | Preferred outreach read: exact profile details and bounded authored posts together. No draft or send. |
| get_profile_postsB | Read one author's posts, posts-and-replies, or media tab. feed: posts|replies|media. Results are bounded and partial. |
| get_profile_connectionsB | Read visible public followers/following. This is not a private address book or complete contact export. |
| preview_campaign_messageA | Preview one campaign member's exact personalized message and local eligibility without creating drafts, reserving a lead, or sending. Includes pause, opt-out and prior-reservation reasons. Eligibility is a snapshot; preparation and approval recheck it. No browser or LLM. |
| upsert_leadA | Add/update one local lead by X handle (unique per account). Omitted fields retain their values; notes stay local and never enter messages. Status: new, qualified, contacted, replied, closed, opted_out. Opt-out suppression is permanent and cannot be removed by upserting. |
| list_leadsA | List this account's local leads, optionally filtering by status or exact tag. limit 1-100; offset supports pagination. No browser starts. |
| get_leadB | Read one local lead belonging to this account, including its notes. |
| update_lead_statusA | Change a lead's local status. Only new/qualified leads can receive campaign drafts. opted_out permanently suppresses further outreach. |
| opt_out_leadB | Permanently suppress outreach to this account's lead handle. This blocks prepared campaign deliveries as well as future drafts. |
| create_campaignA | Create a local draft campaign. Personalize using {handle}, {name}, {display_name}, or {company}; include a recipient name/handle placeholder. {name} falls back to @handle. Notes cannot be templated. Nothing sends. |
| get_campaignC | Read this account's campaign and a membership page. limit 1-100; members_next_offset identifies the next page of local outcomes. |
| list_campaignsB | List this account's local campaigns (without membership details). Status: draft, ready, paused, completed. limit 1-100, with offset. |
| add_campaign_leadsA | Add 1-100 local leads from this account to a campaign. Repeated ids are ignored. The whole batch fails if any id belongs to another account. Adding a lead does not make an opted-out or closed lead eligible. |
| set_campaign_statusA | Set local campaign status: draft, ready, paused, completed. Pausing immediately blocks preparation and approval of existing drafts. Resume a paused campaign with ready. completed is terminal. |
| prepare_campaign_messagesA | Prepare at most 20 personalized private-message drafts for eligible new/qualified leads on an active account. Skip opt-outs and prior pending/delivered members. Preparation marks the campaign ready; review every exact payload and approve each draft individually. No bulk sends, browser, scraping, or LLM call occurs, even when draft_mode is off. |
| get_campaign_summaryB | Read local membership/delivery counts and opt-out suppression count. These are recorded outcomes; this tool never checks X or sends work. |
| prepare_outreachA | Fetch profile details and up to 10 authored posts, then prepare ONE local DM draft with your exact supplied text. Use get_profile_context to research and write a personalized message first. Context is a bounded visible subset; it is not a complete post history. No server LLM or message send occurs. Review the returned recipient, context and draft, then approve_draft individually; draft_mode does not bypass review. Opt-outs and account activation are rechecked after the browser read. |
| get_threadA | Read bounded visible conversation context around one exact X post. Includes ordered posts and media metadata; parent links remain unknown unless the page proves them. Results are partial, not a full archive. include_images attaches at most five photos/video posters with source mappings for YOUR model to analyze; no server LLM or video transcription. Read this before composing contextual replies or reply threads. |
| prepare_threadA | Stage 1-20 exact text/media posts for review; always creates a draft. Optional reply_to starts a reply thread. Every later post replies to the immediately preceding confirmed new post. No LLM is called. |
| get_thread_runC | Read durable local segment states, exact published URLs and next index. |
| continue_threadA | Resume an approved run only at a known unsubmitted segment after spacing/budget/preflight recovery. Uncertain segments are never resent. |
| cancel_threadA | Cancel remaining thread segments locally. Retains confirmed URLs and uncertain evidence; never deletes posts or clears safety uncertainty. An active send must finish before cancellation can be accepted. |
| get_account_analyticsB | Read the signed-in owner's X analytics availability. Requires X Premium when the observed paywall says so; unsupported layouts return no metrics. Distinct from local action metrics and public post counts. |
| get_notificationsB | Read bounded visible X notifications from a verified All or Mentions tab. Reports observed actors, related posts, type evidence and unread state; absent evidence remains unknown. Visiting this view may mark X notifications read. Results cover only the visible supported UI. |
| get_bookmarksA | Read bounded posts in the default bookmarks feed. Partial results; bookmark folders are not traversed. |
| bookmark_tweetA | Prepare a bookmark draft for one exact post. Always requires approve_draft. |
| remove_bookmarkB | Prepare removal of one bookmark. Always requires approve_draft. |
| unlike_tweetA | Prepare removal of your like from one exact post. Always requires approve_draft. |
| undo_retweetA | Prepare removal of your repost of one exact post. Always requires approve_draft. |
| unfollow_profileA | Prepare unfollowing one exact X profile. Always requires approve_draft. |
| edit_tweetA | Prepare a text edit of your own post. Supply its current exact text and replacement; configure self_handles. X must expose Edit post; eligibility/time limits apply. Always requires approval. Media replacement is unsupported. |
| delete_tweetA | Prepare permanent deletion of your own exact post. Supply its current text (empty for media-only). Always requires approve_draft; cannot be undone. |
| get_conversation_controlsC | Inspect visible request and conversation-menu controls. Opening may mark read; unsupported layouts return an error, never guessed capabilities. |
| manage_conversationA | Draft one inbox action: accept a request, mute/unmute notifications, or delete a conversation from your inbox. Delete cannot be undone locally and does not promise deletion for recipients. Always requires approval; only verified visible controls are supported. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| thread_workflow | Read an X conversation with attributed media, compose a reviewed multi-post thread or reply thread, and follow durable progress without duplicate submissions. |
| outreach_message | Research one exact X profile, write a personalized message from its authored posts, and prepare one reviewed DM draft with explicit delivery and recovery steps. |
| research_niche | Research what is worth engaging with on X for one account. Read-only: searches keywords and watched profiles, reads candidates including their images, and reports a scored shortlist. Stages nothing. |
| draft_replies | Write and stage X replies or posts for one account in its persona. Uses the draft or queue lane; check draft mode and auto-drain before staging. |
| review_and_publish | Review everything staged for one X account and publish only what the user approves by id. This is the workflow that makes things public. |
| daily_check | Daily digest for one X account: health, metrics, pending drafts, and queue state in one read-only pass, then act only on the user's direction. |
| setup_account | Set up x-use from nothing: verify the install, add an X account from a cookie export, and configure its niche, keywords, and persona. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| x-use accounts | Every configured X account with secrets stripped: id, active state, target keywords, and whether a persona is set. Never starts a browser. |
| x-use pending drafts | Every draft awaiting approval, across all accounts, with the exact text that would publish. Nothing here has reached X. |
TDQS
Scored across 82 tools
Many tools overlap in purpose: get_account_health, get_session_status, get_account_safety, get_metrics, and get_runtime_info all report account or server state, while get_profile, get_profile_posts, get_profile_context, search_profile, get_tweet, and prepare_reply all read profile/tweet context. With 82 tools, an agent can easily select a related but wrong read or write path, even though the descriptions attempt guidance.
All names use snake_case and are overwhelmingly verb_noun or verb_object (get_account_health, approve_draft, list_leads, add_proxy, remove_account). Minor deviations like engage, run_cycle, reply_to_tweet, and upsert_lead do not break the overall pattern. The naming is highly predictable.
82 tools is far beyond a well-scoped set; the domain is broad, but this many entry points imposes severe selection load and suggests redundant granularity. Per the rubric, 50+ tools is an extreme mismatch.
The surface covers accounts, proxies, drafts, queue, tweets, DMs, profiles, campaigns, leads, threads, analytics, and notifications with create/read/update/delete-style operations throughout. Minor asymmetries remain, such as no direct like/retweet alongside unlike_tweet/undo_retweet and no campaign/lead deletion, but these are workable.