# MCP action catalog

> Every one of Xholic's 298 actions by area, with its MCP tool name and what it does.

Source: https://docs.xholic.ai/mcp/catalog/

All 298 actions. In an MCP client, the ones marked *loaded* are tools from the start; for the rest your AI calls:

```json
[
  {
    "tool": "find_actions",
    "arguments": {
      "query": "posting slots"
    }
  },
  {
    "tool": "run_read_action",
    "arguments": {
      "action": "scheduler.list_slots",
      "input": {}
    }
  }
]
```

`run_write_action` runs actions that change data or post, and only with your go-ahead in the conversation. With the full toolset switched on, every action below is its own tool under the name shown.

## Your profile

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `get_me` | [`me.get`](/actions/me/#who-i-am-on-x) | read · loaded | Load this before writing anything for the user. |

## Accounts

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `list_accounts` | [`accounts.list`](/actions/accounts/#connected-x-accounts) | read · loaded | List the X accounts this connection can act on (own, added and shared), with your role on each and which one is the default. |

## Context and voice

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `get_writing_kit` | [`context.writing_kit`](/actions/context/#writing-kit) | read · loaded | Material for writing posts in the user's voice: real posts that worked (their own winners, their circle this week, bookmarks, library outliers) to build each new post from, fresh facts and takes, and what they posted lately so you don't repeat it. |
| `update_account_context` | [`context.update`](/actions/context/#update-account-context) | write | Change the account's audience, goals, product context, topics or rules that every Xholic writer reads. |
| `context_products` | [`context.products`](/actions/context/#products-and-context) | read | The account's saved products with their facts (what it is, audience, features, proof), analysis limits and removal notices. |
| `context_bio_product_suggestion` | [`context.bio_product_suggestion`](/actions/context/#product-from-the-bio-link) | read | The link in the account's X bio when it isn't a saved product yet, so it can be added with context.add_product. |
| `context_add_product` | [`context.add_product`](/actions/context/#add-a-product) | write | Add a product by its website URL. |
| `context_refresh_product` | [`context.refresh_product`](/actions/context/#refresh-a-product) | write | Read the product's website again and update its facts. |
| `context_set_product_auto_refresh` | [`context.set_product_auto_refresh`](/actions/context/#product-auto-refresh) | write | Choose whether a product keeps refreshing automatically after its facts were edited by hand. |
| `context_update_product` | [`context.update_product`](/actions/context/#edit-product-facts) | write | Replace a product's facts. |
| `context_delete_product` | [`context.delete_product`](/actions/context/#remove-a-product) | write | Remove a product from the account's context. |
| `context_dismiss_product_notice` | [`context.dismiss_product_notice`](/actions/context/#dismiss-a-removal-notice) | write | Hide the notice that a product was removed automatically. |

## Profile check

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `profile_check` | [`profile.check`](/actions/profile/#profile-check) | read | Check the account's X profile (bio, pinned post, banner, link) against what makes strangers follow, with concrete fixes. |

## Updates

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `get_updates` | [`events.updates`](/actions/events/#what-happened-since-last-time) | read · loaded | Call at the start of a conversation. |

## Insights

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `whats_working` | [`insights.whats_working`](/actions/insights/#whats-working) | read · loaded | What worked for the account over a period and why: best posts, formats, topics and times, compared with their normal. |
| `insights_bank` | [`insights.bank`](/actions/insights/#insight-bank) | read | The account's knowledge areas and the insights Xholic mined from their posts, for teaching posts. |

## Niche

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `niche_now` | [`niche.now`](/actions/niche/#whats-working-in-my-niche) | read · loaded | Posts proven this week in the account's circle and niche, plus bookmarks, likes and library outliers. |

## Engage

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `who_to_engage` | [`engage.who_to_engage`](/actions/engage/#who-to-engage-now) | read · loaded | People worth replying to right now and why: unanswered mentions, the account's reply circle, and warm Signals leads. |
| `engage_reply_circle` | [`engage.reply_circle`](/actions/engage/#reply-circle) | read | The people the account trades replies with most, and who to reply to next to grow. |
| `engage_get_consent` | [`engage.get_consent`](/actions/engage/#engage-guidelines-status) | read | Whether the user accepted Engage's guidelines. |
| `engage_accept_consent` | [`engage.accept_consent`](/actions/engage/#accept-engage-guidelines) | write | Record that the user accepted Engage's guidelines for engaging on X. |
| `engage_list_feeds` | [`engage.list_feeds`](/actions/engage/#engage-feeds) | read | The account's saved Engage feeds (FEEDS) or extension timelines (TIMELINE). |
| `engage_create_feed` | [`engage.create_feed`](/actions/engage/#create-an-engage-feed) | write | Save a feed of posts to engage with: a topic, a contact list, an X list, or one account (timelines only). |
| `engage_create_feeds` | [`engage.create_feeds`](/actions/engage/#create-several-engage-feeds) | write | Save up to 8 Engage feeds in one call. |
| `engage_update_feed` | [`engage.update_feed`](/actions/engage/#edit-an-engage-feed) | write | Change a saved feed. |
| `engage_delete_feed` | [`engage.delete_feed`](/actions/engage/#delete-an-engage-feed) | write | Delete a saved Engage feed. |
| `engage_feed` | [`engage.feed`](/actions/engage/#read-an-engage-feed) | read | Posts to engage with from a saved feed (feedId) or an ad-hoc topic search (type TOPIC + query), top or latest. |
| `engage_set_item_state` | [`engage.set_item_state`](/actions/engage/#hide-or-mark-a-post-replied) | write | Hide a post from Engage feeds (a skip), or mark it replied or not replied. |
| `engage_clear_skips` | [`engage.clear_skips`](/actions/engage/#clear-hidden-posts) | write | Bring back every post the account hid from Engage feeds. |

## Mentions

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `mentions_list` | [`mentions.list`](/actions/mentions/#mentions) | read | The account's latest mentions and replies to its posts, synced by Xholic. |

## Replies

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `replies_mine` | [`replies.mine`](/actions/replies/#my-replies) | read | Replies the account sent, newest or best first. |
| `replies_prefetch` | [`replies.prefetch`](/actions/replies/#warm-up-a-reply) | read | Load an X post and its thread ahead of drafting a reply with Xholic's reply writer. |
| `replies_select_draft` | [`replies.select_draft`](/actions/replies/#pick-another-reply-draft) | write | Switch a reply generation to one of its other drafts (already paid for, free). |
| `replies_get_settings` | [`replies.get_settings`](/actions/replies/#reply-writer-settings) | read | The reply writer's custom instructions and whether replies may use the author's name. |
| `replies_update_settings` | [`replies.update_settings`](/actions/replies/#update-reply-writer-settings) | write | Change the reply writer's custom instructions or whether replies may use the author's name. |

## People

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `get_person` | [`people.get`](/actions/people/#look-up-a-person) | read · loaded | Everything about one X account: profile, recent posts, and the history with the user (replies, DMs, notes, lead status). |

## Posts

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `get_post` | [`posts.get`](/actions/posts/#look-up-a-post) | read · loaded | Any X post by id or URL with its numbers and context. |
| `posts_conversation` | [`posts.conversation`](/actions/posts/#post-conversation) | read | A post's thread and replies. |
| `schedule_post` | [`posts.schedule`](/actions/posts/#schedule-a-post) | publish · loaded | Schedule a post or thread on X at a time. |
| `publish_now` | [`posts.publish_now`](/actions/posts/#post-now) | publish · loaded | Post to X immediately. |

## X search

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `search_x` | [`x.search`](/actions/x/#search-x) | read · loaded | Live X search, one page of up to 20 posts. |

## Inspiration

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `search_inspiration` | [`inspiration.search`](/actions/inspiration/#search-the-inspiration-library) | read · loaded | Search Xholic's library of proven posts by idea, with outlier scores (how far a post beat its author's normal). |
| `inspiration_explain_structure` | [`inspiration.explain_structure`](/actions/inspiration/#explain-a-posts-structure) | write | Xholic AI breaks down why an Inspiration post works: hook, structure and reusable pattern. |

## Library

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `get_saved_posts` | [`library.saved`](/actions/library/#saved-posts) | read · loaded | The account's X bookmarks and likes mirrored by Xholic, plus saved posts. |
| `library_save` | [`library.save`](/actions/library/#save-a-post) | write | Save an X post to the user's library by its id. |
| `library_save_by_url` | [`library.save_by_url`](/actions/library/#save-a-post-by-url) | write | Save an X post to the user's library from its URL. |
| `library_unsave` | [`library.unsave`](/actions/library/#remove-a-saved-post) | write | Remove a post from the user's library. |

## Creators

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `creators_top_posts` | [`creators.top_posts`](/actions/creators/#a-creators-top-posts) | read | Another creator's best posts over a period. |

## Drafts

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `check_draft` | [`drafts.check`](/actions/drafts/#check-a-draft) | read · loaded | Free checks before posting: length for the account's X tier, links (Xholic drafts never contain links), near-copies of a source post, repeats of what the account posted recently, and thread structure. |
| `save_draft` | [`drafts.save`](/actions/drafts/#save-a-draft) | write · loaded | Save a post or thread as a draft in Xholic. |
| `draft_with_xholic` | [`drafts.with_xholic`](/actions/drafts/#write-with-xholics-writer) | write · loaded | Only when the user explicitly asks for Xholic's writer. |
| `draft_reply_with_xholic` | [`drafts.reply_with_xholic`](/actions/drafts/#reply-with-xholics-reply-writer) | write | Only when the user explicitly asks for Xholic's reply writer. |

## Queue

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `get_queue` | [`queue.list`](/actions/queue/#queue-and-drafts) | read · loaded | Scheduled posts and drafts, soonest first. |
| `reschedule_post` | [`queue.reschedule`](/actions/queue/#reschedule-a-post) | publish · loaded | Move a queued post to a new time. |
| `unschedule_post` | [`queue.unschedule`](/actions/queue/#unschedule-a-post) | write · loaded | Take a scheduled post out of the queue and keep it as a draft. |
| `edit_queued_post` | [`queue.edit`](/actions/queue/#edit-a-queued-post) | publish · loaded | Change the text, thread, media or automations of a draft or scheduled post. |
| `delete_queued_post` | [`queue.delete`](/actions/queue/#delete-a-draft-or-scheduled-post) | write · loaded | Delete a draft or scheduled post from Xholic. |
| `queue_counts` | [`queue.counts`](/actions/queue/#queue-counts) | read | How many posts are queued, drafted, posted and failed. |
| `queue_get_post` | [`queue.get_post`](/actions/queue/#get-a-queued-post) | read | One draft, scheduled, posted or failed post in Xholic with its text, thread, media, automations and status. |
| `queue_post_now` | [`queue.post_now`](/actions/queue/#post-a-queued-post-now) | publish | Publish an existing draft or scheduled post to X right away. |
| `queue_cancel` | [`queue.cancel`](/actions/queue/#cancel-a-post) | write | Cancel a draft, scheduled or failed post so it never goes out. |
| `queue_share_draft` | [`queue.share_draft`](/actions/queue/#share-a-draft-link) | write | Create a public read-only link to a draft so someone without Xholic can review it. |
| `queue_revoke_share` | [`queue.revoke_share`](/actions/queue/#turn-off-draft-links) | write | Turn off every public link to a draft. |
| `queue_add_automation_step` | [`queue.add_automation_step`](/actions/queue/#add-an-automation-to-a-live-post) | publish | Add one automation step to a post that is already live: repost, unrepost, delete, a plug reply after enough likes, or DMs to people who reply with a keyword. |
| `queue_update_automation_step` | [`queue.update_automation_step`](/actions/queue/#edit-a-live-posts-automation) | publish | Change a pending automation step on a live post. |
| `queue_remove_automation_step` | [`queue.remove_automation_step`](/actions/queue/#remove-a-live-posts-automation) | write | Remove a pending automation step from a live post before it runs. |

## Media

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `upload_media` | [`media.create_upload`](/actions/media/#upload-media) | write · loaded | Start a media upload (image, GIF or video). |
| `media_complete_upload` | [`media.complete_upload`](/actions/media/#finish-a-media-upload) | write | Mark an upload finished after the bytes were PUT to the upload URL. |
| `media_get` | [`media.get`](/actions/media/#media-status) | read | One uploaded media item's state. |
| `media_preview` | [`media.preview`](/actions/media/#media-preview-link) | read | A short-lived URL to view an uploaded media item. |
| `media_delete` | [`media.delete`](/actions/media/#delete-uploaded-media) | write | Delete an uploaded media item that no post uses. |
| `media_browse_klipy` | [`media.browse_klipy`](/actions/media/#find-a-gif-or-meme) | read | Search or browse KLIPY GIFs and memes to attach to a post. |
| `media_import_klipy` | [`media.import_klipy`](/actions/media/#import-a-gif-or-meme) | write | Copy a KLIPY GIF or meme into the account's media. |

## Content export

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `content_export` | [`content.export`](/actions/content/#export-content) | read | The account's posts with their numbers for a period, as data you can analyse. |

## Analytics

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `get_analytics` | [`analytics.summary`](/actions/analytics/#analytics) | read · loaded | Totals and a daily series for a period: impressions, engagement, followers, posts and replies counted separately. |
| `how_did_it_do` | [`analytics.content`](/actions/analytics/#how-posts-did) | read · loaded | How the account's posts performed, compared with its normal. |
| `analytics_growth` | [`analytics.growth`](/actions/analytics/#growth-funnel) | read | The follower funnel for the last 7 and 30 days (impressions to profile visits to follows), its weakest step and the profile check score. |
| `analytics_import_status` | [`analytics.import_status`](/actions/analytics/#analytics-sync-status) | read | Whether the account's post history is still importing, up to date or delayed, and how far it got. |
| `analytics_export_posts_csv` | [`analytics.export_posts_csv`](/actions/analytics/#export-post-stats-csv) | read | Every post in a period with its numbers as CSV text (up to 5,000 rows). |
| `analytics_export_daily_csv` | [`analytics.export_daily_csv`](/actions/analytics/#export-daily-stats-csv) | read | Daily totals for a period (posts, impressions, engagement, follower change) as CSV text. |
| `analytics_list_imports` | [`analytics.list_imports`](/actions/analytics/#analytics-imports) | read | X analytics CSV files imported into this account, with the days each one covered. |
| `analytics_import_csv` | [`analytics.import_csv`](/actions/analytics/#import-x-analytics-csv) | write | Import the account overview CSV exported from X analytics to fill in past days. |
| `analytics_delete_import` | [`analytics.delete_import`](/actions/analytics/#remove-an-analytics-import) | write | Remove an imported analytics file and the days it wrote. |

## Memory

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `remember` | [`memory.remember`](/actions/memory/#remember) | write · loaded | Save a fact, writing preference or answer about the user to the memory every Xholic writer reads. |
| `forget` | [`memory.forget`](/actions/memory/#forget) | write · loaded | Remove a memory the user says is wrong or outdated. |
| `memory_list` | [`memory.list`](/actions/memory/#saved-memories) | read | Everything the user told Xholic to remember. |

## Workers

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `get_workers` | [`workers.list`](/actions/workers/#workers) | read · loaded | The account's Workers (always-on AI writers): settings, schedule and status. |
| `get_worker_drafts` | [`workers.drafts`](/actions/workers/#worker-drafts) | read · loaded | Drafts a Worker wrote that are waiting for review. |
| `workers_overview` | [`workers.overview`](/actions/workers/#growth-overview) | read | The account's growth overview: milestones, Workers and what they produced. |
| `workers_find_creators` | [`workers.find_creators`](/actions/workers/#find-creators-for-a-worker) | read | Find X creators whose style a Worker can learn from. |
| `create_worker` | [`workers.create`](/actions/workers/#create-a-worker) | write · loaded | Create a Worker that writes posts on a schedule or on demand. |
| `update_worker` | [`workers.update`](/actions/workers/#edit-a-worker) | write · loaded | Change a Worker's instructions, voice, topics, products, size or schedule. |
| `pause_or_resume_worker` | [`workers.set_status`](/actions/workers/#pause-or-resume-a-worker) | write · loaded | Pause or resume a Worker. |
| `run_worker` | [`workers.run`](/actions/workers/#run-a-worker-now) | write · loaded | Queue a Worker to write a new batch now with Xholic's writer. |
| `workers_create_ready_made` | [`workers.create_ready_made`](/actions/workers/#create-the-ready-made-worker) | write | Create the preset Worker built from the account's context (voice, creators it already has posts for, products). |
| `workers_rebuild_ready_made` | [`workers.rebuild_ready_made`](/actions/workers/#rebuild-the-ready-made-worker) | write | Refresh the ready-made Worker's creators and brief from the account's current context. |
| `workers_cancel_queued_run` | [`workers.cancel_queued_run`](/actions/workers/#stop-a-queued-worker-run) | write | Stop a Worker run that is queued and hasn't started yet. |
| `workers_runs` | [`workers.runs`](/actions/workers/#worker-runs) | read | Recent Worker runs, newest first: status, trigger, credits and why a run failed or was skipped. |
| `workers_voice` | [`workers.voice`](/actions/workers/#takes-and-expertise) | read | The account's takes (opinions) and expertise areas that Workers write from, each marked as mined or added by the user. |
| `workers_add_take` | [`workers.add_take`](/actions/workers/#add-a-take) | write | Add an opinion the user holds, in their words, for Workers to write from. |
| `workers_remove_take` | [`workers.remove_take`](/actions/workers/#remove-a-take) | write | Remove a take so Workers stop writing from it. |
| `workers_add_expertise` | [`workers.add_expertise`](/actions/workers/#add-an-expertise-area) | write | Add a subject the account teaches, so Workers write knowledge posts about it. |
| `workers_remove_expertise` | [`workers.remove_expertise`](/actions/workers/#remove-an-expertise-area) | write | Remove an expertise area and its insight cards. |
| `review_worker_draft` | [`workers.review_draft`](/actions/workers/#review-a-worker-draft) | write · loaded | Move a Worker draft: DRAFT keeps it in the user's drafts, DISMISSED throws it away, TO_REVIEW puts it back in review. |
| `workers_draft_feedback` | [`workers.draft_feedback`](/actions/workers/#more-or-less-like-this) | write | Tell the Workers to write more or fewer drafts like this one. |
| `workers_draft_meme` | [`workers.draft_meme`](/actions/workers/#worker-meme-image) | write | The reaction image (GIF or meme) attached to a Worker meme draft. |
| `workers_set_draft_meme` | [`workers.set_draft_meme`](/actions/workers/#change-a-worker-meme-image) | write | Swap or remove the reaction image on a Worker meme draft. |

## Leads

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `get_leads` | [`leads.list`](/actions/leads/#leads) | read · loaded | Leads found by the account's Signals agents, hottest first, with why each one fits. |
| `set_lead_status` | [`leads.set_status`](/actions/leads/#mark-a-lead) | write · loaded | Mark a lead COLLECTED (keep), CONTACTED (reached out) or DISMISSED (not now). |
| `rate_lead` | [`leads.rate`](/actions/leads/#rate-a-lead) | write · loaded | Mark a lead as a FIT or NOT_FIT, with an optional short reason, so the Signals agent learns who to find. |

## Signals

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `signals_automation_setup` | [`signals.automation_setup`](/actions/signals/#agents-set-up-on-the-account) | read | Every Worker and Signals agent with its settings, for planning changes. |
| `signals_customer_brief` | [`signals.customer_brief`](/actions/signals/#customer-brief) | read | Who the account's customers are, what they ask, and where to find them, from Signals. |
| `signals_draft_audience` | [`signals.draft_audience`](/actions/signals/#draft-a-lead-audience) | read | Draft who a Signals agent should find, from a product, a URL or a description. |
| `signals_suggest_sources` | [`signals.suggest_sources`](/actions/signals/#suggest-lead-sources) | read | Suggest keywords, profiles and lists a Signals agent should watch. |
| `signals_test_searches` | [`signals.test_searches`](/actions/signals/#test-lead-searches) | read | Try search queries on live X before an agent uses them. |
| `create_signal_agent` | [`signals.create_agent`](/actions/signals/#create-a-signals-agent) | write · loaded | Create an always-on agent that finds leads on X from sources and an audience description. |
| `find_customers` | [`signals.find_customers`](/actions/signals/#find-customers-for-a-product) | write · loaded | One-click agent that finds people asking for what a product does, and its competitors' customers. |
| `signals_update_agent` | [`signals.update_agent`](/actions/signals/#edit-a-signals-agent) | write | Change a Signals agent's audience, sources, rubric or schedule. |
| `signals_set_status` | [`signals.set_status`](/actions/signals/#pause-or-resume-a-signals-agent) | write | Pause or resume a Signals agent. |
| `signals_dashboard` | [`signals.dashboard`](/actions/signals/#signals-overview) | read | Every Signals agent with its status, sources, last run and lead counts, plus the month's scoring quota and any ready-made or product agent that needs a rebuild. |
| `signals_search_profiles` | [`signals.search_profiles`](/actions/signals/#find-accounts-to-watch) | read | Search X accounts by name or handle to watch in a Signals agent (Profile or Followers sources). |
| `signals_source_details` | [`signals.source_details`](/actions/signals/#watched-source-details) | read | Names and avatars for X accounts and X lists a Signals agent watches. |
| `signals_create_ready_made` | [`signals.create_ready_made`](/actions/signals/#create-the-ready-made-signals-agent) | write | Create the one-click Signals agent built from the account's context and tested searches. |
| `signals_rebuild_ready_made` | [`signals.rebuild_ready_made`](/actions/signals/#rebuild-the-ready-made-signals-agent) | write | Refresh the ready-made Signals agent from the account's current context. |
| `signals_expand_ready_made` | [`signals.expand_ready_made`](/actions/signals/#add-searches-to-the-ready-made-agent) | write | Top the ready-made Signals agent up to the paid plan's size with more searches from the profile, keeping its current ones. |
| `signals_dismiss_expand` | [`signals.dismiss_expand`](/actions/signals/#hide-the-add-searches-offer) | write | Hide the offer to add more searches to the ready-made Signals agent, for good. |
| `signals_rebuild_product_agent` | [`signals.rebuild_product_agent`](/actions/signals/#update-a-find-customers-agent) | write | Rebuild a product's Find customers agent after the product changed. |
| `run_signal_agent` | [`signals.run_agent`](/actions/signals/#run-a-signals-agent-now) | write · loaded | Queue a Signals agent to search for leads now instead of waiting for its schedule. |
| `signals_runs` | [`signals.runs`](/actions/signals/#signals-runs) | read | Recent Signals agent runs, newest first, with what each found and scored. |
| `signals_agent_brief` | [`signals.agent_brief`](/actions/signals/#agents-customer-brief) | read | One Signals agent's weekly brief: themes, questions and competitors its leads talk about, with the people and posts behind each. |
| `signals_market_brief` | [`signals.market_brief`](/actions/signals/#market-brief) | read | The weekly brief across all of the account's Signals agents: one view of what the market asks for and who to reply to. |
| `signals_products` | [`signals.products`](/actions/signals/#products-and-their-customer-agents) | read | The account's products, each with its Find customers agent (and build progress) and competitors. |

## Competitors

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `competitors_list` | [`competitors.list`](/actions/competitors/#product-competitors) | read | A product's competitors, optionally discovering new ones. |
| `competitors_add` | [`competitors.add`](/actions/competitors/#add-a-competitor) | write | Add a competitor to a product. |
| `competitors_discover` | [`competitors.discover`](/actions/competitors/#discover-competitors) | write | Find a product's competitors and add them as suggestions to accept or dismiss. |
| `competitors_set_status` | [`competitors.set_status`](/actions/competitors/#accept-or-remove-a-competitor) | write | ACCEPTED keeps a suggested competitor; DISMISSED removes any competitor. |

## Contacts

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `get_contacts` | [`contacts.list`](/actions/contacts/#contacts) | read · loaded | Contacts and lists: search, filter by score or intent. |
| `contacts_export` | [`contacts.export`](/actions/contacts/#export-contacts) | read | Contacts in a list as data. |
| `add_to_contact_list` | [`contacts.add_to_list`](/actions/contacts/#add-someone-to-a-contact-list) | write · loaded | Add an X account to a contact list by handle. |
| `contacts_add` | [`contacts.add`](/actions/contacts/#add-a-known-person-to-a-list) | write | Add a person Xholic already has (by X user id, e.g. |
| `contacts_update` | [`contacts.update`](/actions/contacts/#update-a-contact) | write | Change a contact's status (NEW, SAVED, CONTACTED, DISMISSED) or its note. |
| `contacts_remove` | [`contacts.remove`](/actions/contacts/#remove-from-a-list) | write | Remove a contact from its list. |
| `contacts_save_note` | [`contacts.save_note`](/actions/contacts/#save-a-note-on-a-person) | write | Add a note about a person, or edit one by passing its id. |
| `contacts_delete_note` | [`contacts.delete_note`](/actions/contacts/#delete-a-note) | write | Delete a note about a person. |
| `contacts_search_profiles` | [`contacts.search_profiles`](/actions/contacts/#find-people-to-add) | read | Search X accounts by name or handle to add to a contact list. |
| `contacts_profile` | [`contacts.profile`](/actions/contacts/#contact-profile) | read | Everything Xholic knows about one person: profile, lists, notes, engagement with the account, DMs and, with leadId, why they were found as a lead. |
| `contacts_follower_import` | [`contacts.follower_import`](/actions/contacts/#follower-import-status) | read | Whether the account's own followers have been imported into Contacts, and the latest import's progress. |
| `contacts_import_followers` | [`contacts.import_followers`](/actions/contacts/#import-my-followers) | write | Queue an import of the account's own X followers into Contacts. |
| `contacts_imports` | [`contacts.imports`](/actions/contacts/#contact-imports) | read | X list imports into contact lists, with their progress. |
| `contacts_import_x_list` | [`contacts.import_x_list`](/actions/contacts/#import-an-x-list) | write | Queue an import of a public X list's members into a contact list. |
| `contacts_cancel_import` | [`contacts.cancel_import`](/actions/contacts/#stop-a-contact-import) | write | Stop a running X list import. |

## Audience

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `audience_dataset` | [`audience.dataset`](/actions/audience/#audience-dataset) | read | Collect a post's repliers, quoters or reposters, or an X list's members, as people you can filter, research and message. |

## Ask Xholic

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `ask_xholic` | [`ask.start`](/actions/ask/#hand-a-job-to-xholic) | write · loaded | Hand a long job to Xholic's own agent, e.g. |
| `ask_task` | [`ask.task`](/actions/ask/#ask-job-status) | read | Status and answer of a job started with ask_xholic or draft_with_xholic. |
| `ask_conversations` | [`ask.conversations`](/actions/ask/#ask-conversations) | read | The user's past Ask conversations, newest first, with search and paging. |
| `ask_conversation` | [`ask.conversation`](/actions/ask/#ask-conversation) | read | One Ask conversation with its messages and drafts. |
| `ask_catalog` | [`ask.catalog`](/actions/ask/#ask-models-and-skills) | read | Ask's models the plan can use, its built-in skills (playbooks) and the user's custom skills. |
| `ask_create_skill` | [`ask.create_skill`](/actions/ask/#create-an-ask-skill) | write | Save a reusable Ask skill: a named prompt the user can run again. |
| `ask_update_skill` | [`ask.update_skill`](/actions/ask/#edit-an-ask-skill) | write | Replace a custom Ask skill's title, description, prompt and model. |
| `ask_delete_skill` | [`ask.delete_skill`](/actions/ask/#delete-an-ask-skill) | write | Delete a custom Ask skill. |

## Action catalog

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `find_actions` | [`actions.find`](/actions/actions/#find-an-action) | read · loaded | Search everything Xholic can do (about 150 actions) and the docs. |

## Docs

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `read_doc` | [`docs.read`](/actions/docs/#read-a-docs-page) | read · loaded | Read a page of the Xholic docs by path, e.g. |

## Scheduler

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `scheduler_get_settings` | [`scheduler.get_settings`](/actions/scheduler/#scheduler-settings) | read | The account's scheduler settings: timezone, posting window, quote fallback and default post automations with saved templates. |
| `scheduler_update_settings` | [`scheduler.update_settings`](/actions/scheduler/#update-scheduler-settings) | publish | Replace the scheduler timezone and default post automations (with templates). |
| `scheduler_set_posting_window` | [`scheduler.set_posting_window`](/actions/scheduler/#set-the-posting-window) | write | Set the hours of the day posts may go out at, or clear it with null. |
| `scheduler_set_quote_fallback` | [`scheduler.set_quote_fallback`](/actions/scheduler/#set-the-quote-fallback) | write | Choose what happens when a scheduled quote post's original is gone at publish time: post without the quote, or fail the post. |
| `scheduler_lookup_quote` | [`scheduler.lookup_quote`](/actions/scheduler/#look-up-a-post-to-quote) | read | Preview the X post behind a URL before quoting it: author, text, time and media. |
| `scheduler_parse_time` | [`scheduler.parse_time`](/actions/scheduler/#parse-a-schedule-time) | read | Turn words like "tomorrow 9am" or "next friday at noon" into an exact ISO time in the account's timezone. |
| `scheduler_schedule_view` | [`scheduler.schedule_view`](/actions/scheduler/#calendar-view) | read | The posting calendar day by day: scheduled posts, open slots and best times, for up to 42 days. |
| `scheduler_dashboard_summary` | [`scheduler.dashboard_summary`](/actions/scheduler/#scheduler-summary) | read | What needs attention in the scheduler: failed posts, failed automations and what's coming up next. |
| `scheduler_acknowledge_alert` | [`scheduler.acknowledge_alert`](/actions/scheduler/#dismiss-a-scheduler-alert) | write | Mark a failed post or failed automation alert from scheduler.dashboard_summary as seen so it stops showing. |
| `best_posting_times` | [`scheduler.best_times`](/actions/scheduler/#best-times-to-post) | read · loaded | The best upcoming times for this account to post, from when its audience engages. |
| `scheduler_list_slots` | [`scheduler.list_slots`](/actions/scheduler/#weekly-posting-slots) | read | The account's weekly posting slots that "next slot" scheduling fills. |
| `scheduler_replace_slots` | [`scheduler.replace_slots`](/actions/scheduler/#replace-weekly-posting-slots) | write | Replace every weekly posting slot with this list. |

## Tags

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `list_tags` | [`tags.list`](/actions/tags/#list-tags) | read · loaded | The account's post tags (name, color, id). |
| `tags_create` | [`tags.create`](/actions/tags/#create-a-tag) | write | Create a post tag. |
| `tags_import_starter` | [`tags.import_starter`](/actions/tags/#add-the-starter-tags) | write | Add Xholic's starter tag set (missing ones only). |
| `tags_update` | [`tags.update`](/actions/tags/#edit-a-tag) | write | Rename a tag or change its color. |
| `tags_delete` | [`tags.delete`](/actions/tags/#delete-a-tag) | write | Delete a tag. |

## Composer

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `composer_rewrite` | [`composer.rewrite`](/actions/composer/#rewrite-with-xholic-ai) | write | Only when the user explicitly asks for Xholic's rewriter. |
| `composer_originality` | [`composer.originality`](/actions/composer/#originality-check-with-xholic-ai) | write | Only when the user explicitly asks. |
| `composer_mention_suggestions` | [`composer.mention_suggestions`](/actions/composer/#suggest-mentions) | read | X accounts matching a partial handle, from Xholic's data first. |

## Remix

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `remix_generate` | [`remix.generate`](/actions/remix/#remix-a-post-with-xholic-ai) | write | Only when the user explicitly asks for Xholic's remixer. |
| `remix_select_draft` | [`remix.select_draft`](/actions/remix/#pick-another-remix-draft) | write | Switch a remix to another of its drafts. |
| `remix_post` | [`remix.post`](/actions/remix/#post-a-remix) | publish | Post a remix to X now, optionally with edited text. |
| `remix_history` | [`remix.history`](/actions/remix/#remix-history) | read | Past remixes with their source posts and drafts, newest first. |
| `remix_list_presets` | [`remix.list_presets`](/actions/remix/#remix-presets) | read | The account's saved custom instructions for remixing. |
| `remix_create_preset` | [`remix.create_preset`](/actions/remix/#save-a-remix-preset) | write | Save a named custom instruction for remixing. |
| `remix_update_preset` | [`remix.update_preset`](/actions/remix/#edit-a-remix-preset) | write | Change a remix preset's label and instruction. |
| `remix_delete_preset` | [`remix.delete_preset`](/actions/remix/#delete-a-remix-preset) | write | Delete a remix preset. |

## Collections

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `collections_list` | [`collections.list`](/actions/collections/#collections) | read | The user's saved-post collections with counts. |
| `collections_create` | [`collections.create`](/actions/collections/#create-a-collection) | write | Create a collection for saved posts. |
| `collections_hooks` | [`collections.hooks`](/actions/collections/#hooks-collection) | write | Get the user's Hooks collection (for saved hook ideas), creating it if it doesn't exist. |
| `collections_move` | [`collections.move`](/actions/collections/#move-a-saved-post) | write | Put a saved post in a collection, or take it out with collectionId null. |
| `collections_reorder` | [`collections.reorder`](/actions/collections/#reorder-collections) | write | Set the display order of collections, by id. |
| `collections_rename` | [`collections.rename`](/actions/collections/#rename-a-collection) | write | Rename a collection or change its emoji (null removes it). |
| `collections_delete` | [`collections.delete`](/actions/collections/#delete-a-collection) | write | Delete a collection. |

## Articles

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `articles_list` | [`articles.list`](/actions/articles/#articles) | read | The account's X Articles (drafts, scheduled, published), newest first. |
| `create_article` | [`articles.create`](/actions/articles/#create-an-article) | write · loaded | Start a new X Article draft with a title. |
| `articles_eligibility` | [`articles.eligibility`](/actions/articles/#can-this-account-publish-articles) | read | Whether the X account can publish Articles (X requires Premium) and why not. |
| `articles_cover_usage` | [`articles.cover_usage`](/actions/articles/#ai-cover-allowance) | read | How many AI article covers are left today and this period. |
| `articles_get` | [`articles.get`](/actions/articles/#get-an-article) | read | One article with its title, subtitle, document, assets, status and version. |
| `update_article` | [`articles.update`](/actions/articles/#edit-an-article) | write · loaded | Save an article's title, subtitle or body. |
| `articles_delete` | [`articles.delete`](/actions/articles/#delete-an-article) | write | Delete an article from Xholic. |
| `articles_duplicate` | [`articles.duplicate`](/actions/articles/#duplicate-an-article) | write | Copy an article into a new draft. |
| `articles_ai_run` | [`articles.ai_run`](/actions/articles/#article-ai) | write | Only when the user explicitly asks for Xholic's article AI. |
| `articles_create_asset_upload` | [`articles.create_asset_upload`](/actions/articles/#upload-an-article-image) | write | Start an image upload for an article cover or inline image. |
| `articles_finalize_asset` | [`articles.finalize_asset`](/actions/articles/#finish-an-article-image-upload) | write | Mark an article image upload finished after the bytes were PUT to the upload URL. |
| `articles_import_klipy` | [`articles.import_klipy`](/actions/articles/#add-a-gif-or-meme-to-an-article) | write | Copy a KLIPY GIF or meme (from media.browse_klipy) into an article as its cover or an inline image. |
| `articles_delete_asset` | [`articles.delete_asset`](/actions/articles/#remove-an-article-image) | write | Remove an image from an article. |
| `schedule_article` | [`articles.schedule`](/actions/articles/#schedule-an-article) | publish · loaded | Schedule an article to publish on X at a time. |
| `publish_article` | [`articles.publish`](/actions/articles/#publish-an-article-now) | publish · loaded | Publish an article to X now. |
| `articles_cancel_schedule` | [`articles.cancel_schedule`](/actions/articles/#unschedule-an-article) | write | Take a scheduled article out of the queue; it stays a draft. |

## Contact lists

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `get_contact_lists` | [`contact_lists.list`](/actions/contact-lists/#contact-lists) | read · loaded | The account's contact lists with member counts, including which one is the close-accounts list. |
| `contact_lists_create` | [`contact_lists.create`](/actions/contact-lists/#create-a-contact-list) | write | Create a contact list. |
| `contact_lists_rename` | [`contact_lists.rename`](/actions/contact-lists/#rename-a-contact-list) | write | Rename a contact list. |
| `contact_lists_delete` | [`contact_lists.delete`](/actions/contact-lists/#delete-a-contact-list) | write | Delete a contact list and its memberships. |
| `contact_lists_set_close_accounts` | [`contact_lists.set_close_accounts`](/actions/contact-lists/#use-a-list-as-close-accounts) | write | Turn a list into the account's close-accounts list (people whose posts Home and Engage surface first), or turn that off. |

## Direct messages

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `dm_dashboard` | [`dm.dashboard`](/actions/dm/#dm-overview) | read | Direct messages at a glance: sender state (paused, stopped, needs reconnect), today's usage and limits, active campaigns and unread replies. |
| `dm_preview_recipients` | [`dm.preview_recipients`](/actions/dm/#find-people-to-dm) | write | Find people to message from a post's repliers, a search, handles, an X list, recent interactions or a contact list, with whether each can be messaged. |
| `send_dms` | [`dm.quick_send`](/actions/dm/#send-dms-now) | publish · loaded | Send one message to up to 500 people found with dm.preview_recipients, paced safely from the user's X account. |
| `dm_control_queue` | [`dm.control_queue`](/actions/dm/#pause-or-resume-all-dms) | publish | PAUSE_ALL holds every queued DM, RESUME_ALL continues, CANCEL_ALL_PENDING cancels everything not sent yet, ENABLE_SENDING turns DMs back on after a stop. |
| `dm_stop_all` | [`dm.stop_all`](/actions/dm/#stop-all-dms) | write | Emergency stop: cancel every pending DM and stop sending until turned back on with dm.control_queue ENABLE_SENDING. |
| `dm_campaigns` | [`dm.campaigns`](/actions/dm/#dm-campaigns) | read | The account's DM campaigns with status and totals, newest first. |
| `create_dm_campaign` | [`dm.create_campaign`](/actions/dm/#create-a-dm-campaign) | write · loaded | Create a draft DM campaign for a contact list. |
| `dm_campaign` | [`dm.campaign`](/actions/dm/#dm-campaign-details) | read | One DM campaign: steps, variants, schedule, rules and totals. |
| `dm_update_campaign` | [`dm.update_campaign`](/actions/dm/#edit-a-dm-campaign) | write | Replace a draft campaign's settings: send the whole draft (read it with dm.campaign first). |
| `dm_control_campaign` | [`dm.control_campaign`](/actions/dm/#pause-or-resume-a-campaign) | publish | PAUSE or RESUME a running campaign, or CANCEL_PENDING to cancel its unsent messages. |
| `dm_delete_campaign` | [`dm.delete_campaign`](/actions/dm/#delete-a-draft-campaign) | write | Delete a DM campaign that hasn't launched. |
| `dm_review_campaign` | [`dm.review_campaign`](/actions/dm/#check-a-campaign-before-launch) | read | Check a draft campaign before launch: who can be messaged, who is skipped and why, missing variables, and the outreach guidelines the user must accept. |
| `launch_dm_campaign` | [`dm.launch_campaign`](/actions/dm/#launch-a-dm-campaign) | publish · loaded | Launch a reviewed campaign: its messages start sending on its schedule. |
| `dm_preview_campaign` | [`dm.preview_campaign`](/actions/dm/#preview-campaign-messages) | write | Render a campaign step's message for a few recipients exactly as it will be sent. |
| `dm_duplicate_campaign` | [`dm.duplicate_campaign`](/actions/dm/#duplicate-a-campaign) | write | Copy a campaign's steps and settings into a new draft. |
| `dm_campaign_recipients` | [`dm.campaign_recipients`](/actions/dm/#campaign-recipients) | read | A campaign's recipients with each one's status, step and reply. |
| `get_dm_campaign_stats` | [`dm.campaign_stats`](/actions/dm/#dm-campaign-results) | read · loaded | How a campaign is doing: sent, replied, interested and booked, by step and A/B variant. |
| `dm_export_campaign` | [`dm.export_campaign`](/actions/dm/#export-a-campaign) | read | A campaign's recipients and results as CSV. |
| `dm_today` | [`dm.today`](/actions/dm/#assisted-dms-for-today) | read | Messages from ASSISTED campaigns ready for the user to send by hand today, with the rendered text and a link to each person's DMs. |
| `dm_mark_assisted_sent` | [`dm.mark_assisted_sent`](/actions/dm/#mark-an-assisted-dm-sent) | write | Record that the user sent an assisted DM by hand. |
| `dm_undo_assisted_sent` | [`dm.undo_assisted_sent`](/actions/dm/#undo-marking-an-assisted-dm-sent) | write | Put an assisted DM back in today's queue within a minute of marking it sent. |
| `dm_skip_recipient` | [`dm.skip_recipient`](/actions/dm/#skip-a-recipient) | write | Skip one person in a campaign so they aren't messaged. |
| `dm_cancel_recipient` | [`dm.cancel_recipient`](/actions/dm/#cancel-a-pending-dm) | write | Cancel a DM that is queued but not sent yet. |
| `get_dm_inbox` | [`dm.inbox`](/actions/dm/#dm-inbox) | read · loaded | DM conversations with replies, newest first, with each person's lead status. |
| `dm_thread` | [`dm.thread`](/actions/dm/#dm-conversation) | read | The full DM conversation with one person. |
| `dm_update_conversation` | [`dm.update_conversation`](/actions/dm/#update-a-dm-conversation) | write | Set a conversation's lead status (e.g. |
| `reply_to_dm` | [`dm.reply`](/actions/dm/#reply-to-a-dm) | publish · loaded | Send a DM reply in a conversation from the user's X account. |
| `dm_suggest_reply` | [`dm.suggest_reply`](/actions/dm/#suggest-a-dm-reply-with-xholic) | write | Have Xholic's AI suggest a reply in a DM conversation. |
| `dm_lists` | [`dm.lists`](/actions/dm/#dm-lists) | read | Contact lists available for DM campaigns, with sizes, custom fields and how many can be messaged. |
| `dm_estimate_import` | [`dm.estimate_import`](/actions/dm/#estimate-a-lead-import) | read | Estimate how many profiles an import (followers, following, keyword posters, X list, post engagers or handles) would bring in and what it uses of the plan's import pool. |
| `dm_queue_import` | [`dm.queue_import`](/actions/dm/#import-leads-for-dms) | write | Queue an import of X profiles into a contact list for DM campaigns. |
| `dm_import_csv` | [`dm.import_csv`](/actions/dm/#import-a-csv-of-leads) | write | Import handles and custom fields from CSV text (up to 200 KB) into a contact list. |
| `dm_imports` | [`dm.imports`](/actions/dm/#dm-lead-imports) | read | Lead imports with their progress, optionally for one list. |
| `dm_cancel_import` | [`dm.cancel_import`](/actions/dm/#stop-a-lead-import) | write | Stop a running lead import. |
| `dm_settings` | [`dm.settings`](/actions/dm/#dm-settings) | read | Default delivery mode, schedule and rules for new campaigns, the assisted daily limit and opt-out phrases. |
| `dm_update_settings` | [`dm.update_settings`](/actions/dm/#change-dm-settings) | write | Replace the DM settings: send all of them (read them with dm.settings first). |
| `dm_suppressions` | [`dm.suppressions`](/actions/dm/#do-not-message-list) | read | People the account will never DM. |
| `dm_suppress` | [`dm.suppress`](/actions/dm/#never-dm-someone) | write | Add a person to the do-not-message list and cancel their pending DMs. |
| `dm_bulk_suppress` | [`dm.bulk_suppress`](/actions/dm/#never-dm-these-people) | write | Add many handles to the do-not-message list at once and cancel their pending DMs. |
| `dm_unsuppress` | [`dm.unsuppress`](/actions/dm/#allow-dms-to-someone-again) | write | Remove a person from the do-not-message list. |
| `dm_inbound_rules` | [`dm.inbound_rules`](/actions/dm/#keyword-auto-replies) | read | Keyword rules that DM people automatically when they message or reply with a word like GUIDE. |
| `dm_create_inbound_rule` | [`dm.create_inbound_rule`](/actions/dm/#add-a-keyword-auto-reply) | publish | Add a rule that automatically DMs replyTemplate to anyone who sends the keyword. |
| `dm_update_inbound_rule` | [`dm.update_inbound_rule`](/actions/dm/#edit-a-keyword-auto-reply) | publish | Replace a keyword rule's keyword, reply or active state. |
| `dm_delete_inbound_rule` | [`dm.delete_inbound_rule`](/actions/dm/#delete-a-keyword-auto-reply) | write | Delete a keyword rule. |

## Home

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `home_feed` | [`home.feed`](/actions/home/#home-for-you-today) | read | The account's Home: overview numbers, the welcome drafts after sign-up, and up to five ranked cards for today (mentions to answer, leads, queue gaps, posts taking off, trends). |
| `home_card_action` | [`home.card_action`](/actions/home/#done-dismiss-or-snooze-a-home-card) | write | Mark a Home card done, dismiss it, snooze it or restore it, by the key and type home.feed returned. |
| `home_welcome_action` | [`home.welcome_action`](/actions/home/#welcome-drafts) | write | Act on the welcome drafts shown after sign-up: dismiss-message hides the intro, dismiss-draft or restore-draft one draft by position, retry rebuilds drafts that failed. |

## Settings

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `settings_account` | [`settings.account`](/actions/settings/#xholic-account) | read | The signed-in Xholic user's account: name, email, avatar and whether their main X login is still connected. |
| `settings_reply_preferences` | [`settings.reply_preferences`](/actions/settings/#reply-rules) | read | The account's custom rules for reply drafts (what every Xholic reply writer must follow). |
| `settings_update_reply_preferences` | [`settings.update_reply_preferences`](/actions/settings/#update-reply-rules) | write | Replace the account's custom reply rules. |
| `settings_about_you` | [`settings.about_you`](/actions/settings/#about-you-settings) | read | The account's About You settings as Stark shows them: the free-text description, selected topics and tones. |
| `settings_set_account_type` | [`settings.set_account_type`](/actions/settings/#set-account-type) | write | Tell Xholic whether the account is a person, a brand or a topic page, which changes the voice every writer uses. |
| `settings_suggest_interests` | [`settings.suggest_interests`](/actions/settings/#suggest-topics) | write | Suggest About You topics from the account's recent posts. |
| `settings_personalization` | [`settings.personalization`](/actions/settings/#personalization-settings) | read | The account's audience override, style vocabulary override and global rules that every writer reads, plus the generated style guide. |
| `settings_update_personalization` | [`settings.update_personalization`](/actions/settings/#update-personalization) | write | Replace the audience override, style vocabulary override and global rules. |
| `settings_regenerate_style_guide` | [`settings.regenerate_style_guide`](/actions/settings/#rebuild-the-style-guide) | write | Rebuild the account's writing style guide from its posts and style creators. |
| `settings_style_creators` | [`settings.style_creators`](/actions/settings/#style-creators) | read | The up to 3 creators the account writes like (favourite creators), with the current count. |
| `settings_search_style_creators` | [`settings.search_style_creators`](/actions/settings/#find-style-creators) | read | Search X creators to write like, by name or handle (at least 2 characters). |
| `settings_add_style_creator` | [`settings.add_style_creator`](/actions/settings/#add-a-style-creator) | write | Add one creator to write like (up to 3). |
| `settings_save_style_creators` | [`settings.save_style_creators`](/actions/settings/#set-style-creators) | write | Replace the creators to write like with this list (up to 3). |
| `settings_usage` | [`settings.usage`](/actions/settings/#x-data-usage) | read | The user's external X data usage per feature over the last few days (default 30). |
| `settings_quota` | [`settings.quota`](/actions/settings/#daily-limits) | read | What the plan allows today per feature and how much is used. |

## Billing

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `billing_status` | [`billing.status`](/actions/billing/#plan-and-subscription) | read | The user's plan and subscription state, including trial dates. |
| `billing_details` | [`billing.details`](/actions/billing/#billing-details) | read | The billing details on file for the subscription. |
| `billing_payments` | [`billing.payments`](/actions/billing/#payment-history) | read | Past payments and invoices. |
| `billing_credit_packs` | [`billing.credit_packs`](/actions/billing/#ai-credit-packs) | read | The AI credit packs the user can buy and their prices. |
| `billing_trial_eligibility` | [`billing.trial_eligibility`](/actions/billing/#trial-eligibility) | read | Whether a checkout would still include the free trial for this user. |

## Sharing

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `sharing_list` | [`sharing.list`](/actions/sharing/#account-sharing) | read | Who the user shared their X accounts with and which accounts others shared with them, with roles and pending invites. |

## Free tools

| Tool | Action | Kind | What it does |
| --- | --- | --- | --- |
| `x_profile_report` | [`free_tools.profile_report`](/actions/free-tools/#x-profile-report) | read | A free report on any public X account. |
| `shadowban_check` | [`free_tools.shadowban_check`](/actions/free-tools/#shadowban-check) | read | Check whether a public X account looks shadowbanned or limited in search, replies and suggestions. |
| `x_trend_regions` | [`free_tools.trend_regions`](/actions/free-tools/#x-trend-regions) | read | The regions X trends are available for, with their region slugs for x_trends. |
| `x_trends` | [`free_tools.trends`](/actions/free-tools/#x-trends) | read | What is trending on X in a region right now (from Xholic's recent snapshot). |
| `read_thread` | [`free_tools.read_thread`](/actions/free-tools/#read-a-thread) | read | Unroll an X thread from the link to any of its posts into one readable piece, with its media. |
| `card_preview` | [`free_tools.card_preview`](/actions/free-tools/#link-card-preview) | read | Show how a link will look as a card on X (title, description, image, card type) and what is missing from its tags. |
| `x_post_media` | [`free_tools.post_media`](/actions/free-tools/#post-media-links) | read | Get download links for the video, GIF or images in a public X post. |
| `x_username_check` | [`free_tools.username_check`](/actions/free-tools/#username-check) | read | Whether an X username is available, with similar available suggestions when it is taken. |
| `x_id_converter` | [`free_tools.x_id_convert`](/actions/free-tools/#x-id-converter) | read | Convert between an X username and its numeric user id, in either direction. |
| `x_follower_count` | [`free_tools.follower_count`](/actions/free-tools/#follower-count) | read | The current follower and following counts of a public X account. |
| `x_account_worth` | [`free_tools.account_worth`](/actions/free-tools/#account-worth) | read | An estimate of what a public X account is worth, from its followers, views and engagement on recent posts. |
| `engagement_calculator` | [`free_tools.engagement_calculator`](/actions/free-tools/#engagement-rate-calculator) | read | Calculate engagement rates from numbers you already have (followers, impressions, likes, replies, reposts, quotes). |
