X
OpenQuok MCP examples for X — tweets, media, and multi-part threads.
Connect your agent today
Draft from chat, review in your calendar, and publish only what you approve.
Channel quick reference
| Property | Value |
|---|---|
| Provider identifier | x |
| Max content length | 280 weighted (4000 when Verified) |
| Required attachments | None — text-only posts publish |
| OAuth setup | X setup guide |
Schedule a post to X
Schedule a post to X for tomorrow at 10am UTC: Excited to announce our new feature!
The agent calls integrationList, optionally integrationSchema with platform: x, then schedulePostTool:
{
"type": "schedule",
"date": "2026-06-27T10:00:00.000Z",
"socialPost": [
{
"integration": "<x-integration-id>",
"postsAndComments": ["Excited to announce our new feature!"],
"settings": { "who_can_reply_post": "everyone" }
}
]
} Post with an image URL
Schedule a tweet with this image https://example.com/launch.jpg and text “Launch day.”
{
"type": "schedule",
"date": "2026-06-27T10:00:00.000Z",
"socialPost": [
{
"integration": "<x-integration-id>",
"postsAndComments": ["Launch day."],
"attachments": ["https://example.com/launch.jpg"],
"settings": { "who_can_reply_post": "everyone" }
}
]
} Attach media in chat
Instead of a public URL in your prompt, attach the image directly in your MCP client chat — then ask the agent to schedule the tweet with that file and your caption.
Create a thread
Draft a three-part X thread: hook, two lessons learned, and a call to action.
Add multiple items to postsAndComments — the first string is the root tweet; the rest become replies:
{
"type": "schedule",
"date": "2026-06-27T10:00:00.000Z",
"socialPost": [
{
"integration": "<x-integration-id>",
"postsAndComments": [
"Thread: 5 things I learned this week",
"1. Consistency beats intensity",
"2. Start before you're ready"
],
"settings": { "who_can_reply_post": "everyone" }
}
]
} Weighted character counting
X counts URLs and some characters differently than plain length. Ask the agent to call integrationSchema first if you are near the limit.
Cross-account repost
Schedule a tweet from my brand X account tomorrow at 10am with body “Main tweet from our brand account” — then have my other X account repost it two minutes after publish. Use integrationList to find both channel IDs.
Cross-account reposts belong in settings on the publishing channel — not as extra postsAndComments strings. List acting channel UUIDs in integrationIds inside x.crossAccountPlugs:
{
"type": "schedule",
"date": "2026-06-27T10:00:00.000Z",
"socialPost": [
{
"integration": "<x-publish-integration-id>",
"postsAndComments": ["Main tweet from our brand account"],
"settings": {
"x": {
"crossAccountPlugs": [
{
"plugName": "x-repost-post-users",
"enabled": true,
"delayMs": 120000,
"integrationIds": ["<x-other-integration-id>"],
"fields": {}
}
]
}
}
}
]
} Repost, not reply
X cross-account plugs repost the published tweet from acting channels. They do not post reply comments from another account. Use postsAndComments for same-account thread replies. See CLI examples — X for the same x-repost-post-users shape.
Global plug when likes hit a threshold
On my X channel, create a global plug that replies “Appreciate the support!” when a tweet gets 100 likes — use integrationList first.
Global plugs are channel-level rules that fire when a published post’s likes reach a threshold. OpenQuok checks every six hours, up to three times per post.
- Call integrationList and pick the X channel UUID.
- Call plugsCatalog and read field names for autoPlugPost or autoRepostPost on x.
- Call plugsUpsert.
Auto-reply when likes hit 100
{
"integrationId": "<x-integration-id>",
"func": "autoPlugPost",
"fields": [
{ "name": "likesAmount", "value": "100" },
{ "name": "post", "value": "Appreciate the support — link in bio!" }
]
} Auto-repost when likes hit 100
{
"integrationId": "<x-integration-id>",
"func": "autoRepostPost",
"fields": [
{ "name": "likesAmount", "value": "100" }
]
} Pause or delete a global rule
Disable the global plug with id abc123 on my workspace.
{
"plugId": "<plug-id>",
"activated": false
} Call plugsActivate with activated: true to re-enable. Call plugsDelete to remove the row permanently.
Internal vs global
schedulePostTool.settings handles per-post cross-account reposts via x.crossAccountPlugs. plugsUpsert handles channel-level rules that watch likes on future publishes.