Quickstart
You need an Xholic account with an active plan or trial and at least one connected X account. Everything below works on every plan.
Connect your AI (MCP)
Section titled “Connect your AI (MCP)”The server URL is the same everywhere:
https://api.xholic.ai/mcpClients that support OAuth open the Xholic sign-in and consent screen the first time you use it. Read and Write are ticked and Publish starts off; pick the X accounts it can use, then approve. When your AI first needs to post, it gives you a link to allow that in one click.
Claude
Section titled “Claude”Add a custom connector in Claude’s settings (Connectors → Add custom connector), paste the URL, and click Connect. Then ask something like “What happened on my X account this week?”.
ChatGPT
Section titled “ChatGPT”Add the URL as a custom connector (an app backed by an MCP server) in ChatGPT’s settings, then sign in when ChatGPT asks.
Claude Code
Section titled “Claude Code”claude mcp add --transport http xholic https://api.xholic.ai/mcpThen run /mcp inside Claude Code and pick xholic to sign in.
Cursor
Section titled “Cursor”Add Xholic to ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{ "mcpServers": { "xholic": { "url": "https://api.xholic.ai/mcp" } }}VS Code
Section titled “VS Code”Add it to .vscode/mcp.json:
{ "servers": { "xholic": { "type": "http", "url": "https://api.xholic.ai/mcp" } }}Clients without OAuth
Section titled “Clients without OAuth”Send an API key as a header instead. For example, in Claude Code:
claude mcp add --transport http xholic https://api.xholic.ai/mcp \ --header "Authorization: Bearer $XHOLIC_API_KEY"Or in a JSON config:
{ "mcpServers": { "xholic": { "url": "https://api.xholic.ai/mcp", "headers": { "Authorization": "Bearer xhk_your_key" } } }}Call the REST API
Section titled “Call the REST API”- In Xholic, open Settings → API / MCP / CLI and create an API key. Pick its scopes and the X accounts it can use. The key (
xhk_…) is shown once; store it as a secret. - Read your profile:
export XHOLIC_API_KEY="xhk_your_key"
curl https://api.xholic.ai/v1/me/get \ -H "Authorization: Bearer $XHOLIC_API_KEY"- Schedule a post (needs the
publishscope):
curl https://api.xholic.ai/v1/posts/schedule \ -H "Authorization: Bearer $XHOLIC_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "text": "Shipping beats planning. Every time.", "scheduledAt": "2026-11-03T09:00", "timezone": "Europe/London", "idempotencyKey": "launch-post-001" }'Every response starts with a readable summary, then data. Add "dryRun": true to any change to see what would happen without doing it. See Responses and errors.
Prefer clicking? The API playground runs any call from your browser with your key, in any of nine languages, and every change starts as a dry run. Each page of the REST API reference has a Try it button that opens its call there.
Use the CLI
Section titled “Use the CLI”npm i -g xholicxholic login # opens the browser to sign inxholic me getxholic posts schedule --text "Shipping beats planning." \ --scheduled-at 2026-11-03T09:00 --timezone Europe/LondonIn CI, set XHOLIC_API_KEY instead of logging in. See CLI.
- Authentication: keys, OAuth, scopes and accounts
- MCP tools: what your AI can do
- Credits: what costs anything, and the quote flow
- Webhooks: get events pushed to your server
