# Xreply

> Generate, schedule, and publish tweets in your voice using AI. Browse viral content, manage preferences, and track billing.

- Skill: `dvcrn/xreply` (Agent Skill)
- Install (CLI): `npx skillmds@latest add dvcrn/xreply`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvcrn/xreply/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dvcrn (https://skillmd.com/u/dvcrn)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/dvcrn/xreply

---


# XReply — AI Tweet Generator

Generate, schedule, and publish tweets in your voice using AI. Browse viral content for inspiration, manage your post queue, and track billing and quota.

## Authentication

All tools require an `XREPLY_TOKEN` environment variable — a JWT token from XreplyAI Settings. This is automatically injected by OpenClaw when set in your skill config.

## MCP Server

The XReply MCP server is published as `@xreplyai/mcp` on npm. You invoke tools via `mcporter`:

```
mcporter call 'npx @xreplyai/mcp' <tool_name> [param:value ...]
```

To discover all available tools and their parameters:

```
mcporter list 'npx @xreplyai/mcp' --all-parameters
```

## Tools

### Discovery

#### xreply_viral_library

Browse high-performing tweets (100+ likes) for inspiration. Filter by niche, keyword, and time range. Requires Pro or BYOK subscription.

```
mcporter call 'npx @xreplyai/mcp' xreply_viral_library
mcporter call 'npx @xreplyai/mcp' xreply_viral_library niche:ai sort:top_engaged
mcporter call 'npx @xreplyai/mcp' xreply_viral_library niche:saas query:pricing time_range:7d
mcporter call 'npx @xreplyai/mcp' xreply_viral_library niche:startups sort:recent page:2
```

Parameters:
- `niche` (optional): `ai` | `saas` | `marketing` | `productivity` | `startups` | `growth`
- `sort` (optional): `top_engaged` (default) | `recent`
- `query` (optional): keyword search within tweet text
- `time_range` (optional): `7d` | `30d`
- `page` (optional): page number, 20 results per page (default: 1)

---

### Generation

#### xreply_posts_generate

Generate a single AI post in the user's voice and auto-save it as a draft. Returns the generated body and saved post ID. Counts as 1 against the daily quota (5/day free, 100/day pro).

```
mcporter call 'npx @xreplyai/mcp' xreply_posts_generate
mcporter call 'npx @xreplyai/mcp' xreply_posts_generate topic:"my SaaS hit 1000 users"
mcporter call 'npx @xreplyai/mcp' xreply_posts_generate topic:"lessons from year 1" angle:story_arc
mcporter call 'npx @xreplyai/mcp' xreply_posts_generate angle:one_liner
```

Parameters:
- `topic` (optional): topic or prompt for the post (max 280 chars)
- `angle` (optional): `one_liner` | `list` | `question` | `story_arc` | `paragraph` | `my_voice`

#### xreply_posts_generate_batch

Generate multiple AI posts at once. Each post counts as 1 against the daily quota — check billing first if quota is a concern. A batch of 9 will exhaust a free account.

```
mcporter call 'npx @xreplyai/mcp' xreply_posts_generate_batch category:personalized count:5
mcporter call 'npx @xreplyai/mcp' xreply_posts_generate_batch category:trending count:3
mcporter call 'npx @xreplyai/mcp' xreply_posts_generate_batch category:viral count:9
```

Parameters:
- `category` (required): `personalized` | `trending` | `viral`
- `count` (required): number of posts to generate (1–9, must not exceed remaining daily quota)

---

### Post Management

#### xreply_posts_list

List all posts in the queue — drafts, scheduled, and recent posts. Returns post IDs, body text, status, and scheduled times.

```
mcporter call 'npx @xreplyai/mcp' xreply_posts_list
```

No parameters.

#### xreply_posts_create

Save a post draft. The post is not published until you call `xreply_posts_publish`.

```
mcporter call 'npx @xreplyai/mcp' xreply_posts_create body:"Your tweet text here"
mcporter call 'npx @xreplyai/mcp' xreply_posts_create body:"Tweet text" auto_rt_hours:24
```

Parameters:
- `body` (required): post body text (max 280 chars)
- `auto_rt_hours` (optional): hours after publishing to auto-retweet (e.g. `24`)

#### xreply_posts_edit

Edit a post's body, scheduled time, or auto-retweet setting. Cannot edit posts that are processing or already published.

```
mcporter call 'npx @xreplyai/mcp' xreply_posts_edit id:123 body:"Updated tweet text"
mcporter call 'npx @xreplyai/mcp' xreply_posts_edit id:123 'scheduled_at:2026-03-15T09:00:00Z'
mcporter call 'npx @xreplyai/mcp' xreply_posts_edit id:123 body:"New text" auto_rt_hours:48
```

Parameters:
- `id` (required): post ID (integer)
- `body` (optional): new body text (max 280 chars)
- `scheduled_at` (optional): ISO 8601 datetime string — omit to leave unchanged; to unschedule, omit the field and the post reverts to draft
- `auto_rt_hours` (optional): hours after publishing to auto-retweet — omit to leave unchanged

#### xreply_posts_delete

Delete a post. Cannot delete posts that are processing or already published.

```
mcporter call 'npx @xreplyai/mcp' xreply_posts_delete id:123
```

Parameters:
- `id` (required): post ID (integer)

---

### Publishing

#### xreply_posts_publish

Publish or schedule a post to X/Twitter. Requires X account to be connected. Scheduling horizon depends on the subscription plan.

```
mcporter call 'npx @xreplyai/mcp' xreply_posts_publish id:123
mcporter call 'npx @xreplyai/mcp' xreply_posts_publish id:123 'scheduled_at:2026-03-15T09:00:00Z'
```

Parameters:
- `id` (required): post ID (integer)
- `scheduled_at` (optional): ISO 8601 datetime to schedule; omit to publish immediately

---

### Context

#### xreply_billing_status

Get subscription tier (free/byok/pro), quota usage, daily limits, and subscription details.

```
mcporter call 'npx @xreplyai/mcp' xreply_billing_status
```

No parameters.

#### xreply_voice_status

Get voice profile status — whether it has been analyzed, tweet count, AI provider configured, and writing style summary.

```
mcporter call 'npx @xreplyai/mcp' xreply_voice_status
```

No parameters.

#### xreply_preferences_get

Get current post generation preferences — tone, emoji usage, and default structure.

```
mcporter call 'npx @xreplyai/mcp' xreply_preferences_get
```

No parameters.

#### xreply_preferences_set

Update post generation preferences. Provide only the fields you want to change.

```
mcporter call 'npx @xreplyai/mcp' xreply_preferences_set tone:witty
mcporter call 'npx @xreplyai/mcp' xreply_preferences_set tone:professional include_emoji:false
mcporter call 'npx @xreplyai/mcp' xreply_preferences_set structure:story_arc
```

Parameters:
- `tone` (optional): `auto` | `casual` | `professional` | `witty` | `empathetic`
- `include_emoji` (optional): `true` | `false`
- `structure` (optional): `one_liner` | `paragraph` | `question` | `list` | `story_arc`

#### xreply_rules_list

List custom writing rules applied during generation — e.g. "never use hashtags", "always end with a question". Requires Pro or BYOK subscription.

```
mcporter call 'npx @xreplyai/mcp' xreply_rules_list
```

No parameters.

---

## Workflow Examples

### Generate and schedule a post

```
1. mcporter call 'npx @xreplyai/mcp' xreply_posts_generate topic:"ship fast, learn faster" angle:story_arc
   → returns { body: "...", post: { id: 42, ... } }
2. mcporter call 'npx @xreplyai/mcp' xreply_posts_publish id:42 'scheduled_at:2026-03-12T09:00:00Z'
```

### Browse viral content for inspiration, then generate

```
1. mcporter call 'npx @xreplyai/mcp' xreply_viral_library niche:saas sort:top_engaged
   → review viral tweet formats
2. mcporter call 'npx @xreplyai/mcp' xreply_posts_generate topic:"inspired by those formats" angle:list
```

### Plan posts for the week

```
1. mcporter call 'npx @xreplyai/mcp' xreply_billing_status
   → check remaining quota before a large batch
2. mcporter call 'npx @xreplyai/mcp' xreply_posts_generate_batch category:personalized count:7
   → generates 7 drafts
3. mcporter call 'npx @xreplyai/mcp' xreply_posts_list
   → review the queue
4. mcporter call 'npx @xreplyai/mcp' xreply_posts_edit id:101 'scheduled_at:2026-03-11T09:00:00Z'
   mcporter call 'npx @xreplyai/mcp' xreply_posts_edit id:102 'scheduled_at:2026-03-12T09:00:00Z'
   → schedule each post
```

### Edit and publish an existing draft

```
1. mcporter call 'npx @xreplyai/mcp' xreply_posts_list
   → find the draft ID
2. mcporter call 'npx @xreplyai/mcp' xreply_posts_edit id:55 body:"Revised tweet text"
3. mcporter call 'npx @xreplyai/mcp' xreply_posts_publish id:55
```

---

## Error Handling

**Token expired:** If tools return a 401 error, the `XREPLY_TOKEN` has expired (tokens last 30 days). Ask the user to get a fresh token from XreplyAI Settings and update it in their OpenClaw config.

**Quota exhausted:** If generation returns a quota error (e.g. "Daily generation quota exhausted"), call `xreply_billing_status` to check limits and inform the user. Quota resets at midnight.

**Quota insufficient for batch:** If `xreply_posts_generate_batch` returns `quota_insufficient: true`, reduce `count` to the `available` value shown in the response, or ask the user to confirm.

**Schedule out of range:** If scheduling returns a validation error, the requested time exceeds the plan's scheduling horizon. Call `xreply_billing_status` to check `max_schedule_days` and suggest an earlier time.

**Cannot edit/delete:** Posts with status `processing` or `posted` cannot be edited or deleted. Call `xreply_posts_list` to check the current status.

**Viral library requires Pro:** If `xreply_viral_library` or `xreply_rules_list` returns a 403, inform the user these features require a Pro or BYOK subscription.

