x-developer 2.3.1 → 2.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -10
- package/openclaw.plugin.json +2 -2
- package/package.json +6 -3
- package/skills/check-mutuals/SKILL.md +50 -0
- package/skills/clean-followers/SKILL.md +66 -0
- package/skills/export-tweets-csv/SKILL.md +65 -0
- package/skills/extract-followers/SKILL.md +78 -0
- package/skills/find-bangers/SKILL.md +56 -0
- package/skills/find-influencers/SKILL.md +67 -0
- package/skills/find-viral-tweets/SKILL.md +75 -0
- package/skills/follow-unfollow/SKILL.md +79 -0
- package/skills/for-you-feed/SKILL.md +57 -0
- package/skills/going-viral/SKILL.md +64 -0
- package/skills/grow-followers/SKILL.md +61 -0
- package/skills/monitor-accounts/SKILL.md +77 -0
- package/skills/optimize-tweets/SKILL.md +73 -0
- package/skills/post-tweets/SKILL.md +105 -0
- package/skills/run-giveaway/SKILL.md +88 -0
- package/skills/search-tweets/SKILL.md +119 -0
- package/skills/send-dms/SKILL.md +88 -0
- package/skills/top-replies/SKILL.md +66 -0
- package/skills/track-competitors/SKILL.md +67 -0
- package/skills/track-hashtags/SKILL.md +81 -0
- package/skills/track-mentions/SKILL.md +83 -0
- package/skills/trending-news/SKILL.md +63 -0
- package/skills/tweet-analytics/SKILL.md +131 -0
- package/skills/tweet-ideas/SKILL.md +59 -0
- package/skills/tweet-replies/SKILL.md +77 -0
- package/skills/tweet-style/SKILL.md +68 -0
- package/skills/tweet-webhooks/SKILL.md +79 -0
- package/skills/update-x-profile/SKILL.md +71 -0
- package/skills/user-tweets/SKILL.md +125 -0
- package/skills/who-liked/SKILL.md +63 -0
- package/skills/who-quoted/SKILL.md +63 -0
- package/skills/who-retweeted/SKILL.md +62 -0
- package/skills/write-threads/SKILL.md +69 -0
- package/skills/write-tweets/SKILL.md +75 -0
- package/skills/x-articles/SKILL.md +79 -0
- package/skills/x-bookmarks/SKILL.md +57 -0
- package/skills/x-communities/SKILL.md +66 -0
- package/skills/x-lists/SKILL.md +65 -0
- package/skills/x-spaces/SKILL.md +62 -0
- package/skills/x-trends/SKILL.md +67 -0
- package/skills/x-twitter-scraper/SKILL.md +72 -60
- package/skills/x-twitter-scraper/metadata.json +2 -2
- package/skills/x-twitter-scraper/references/api-endpoints.md +7 -251
- package/skills/x-twitter-scraper/references/extractions.md +1 -1
- package/skills/x-twitter-scraper/references/mcp-setup.md +15 -8
- package/skills/x-twitter-scraper/references/mcp-tools.md +2 -7
- package/skills/x-twitter-scraper/references/pricing.md +2 -2
- package/skills/x-twitter-scraper/references/python-examples.md +0 -2
- package/skills/x-twitter-scraper/references/types.md +4 -171
- package/skills/x-twitter-scraper/references/webhooks.md +2 -2
- package/skills/x-twitter-scraper/references/workflows.md +3 -5
|
@@ -24,8 +24,6 @@ All requests require the `x-api-key` header. All responses are JSON. HTTPS only.
|
|
|
24
24
|
- [Subscribe](#subscribe)
|
|
25
25
|
- [X Accounts (Connected)](#x-accounts-connected)
|
|
26
26
|
- [X Write](#x-write)
|
|
27
|
-
- [Integrations](#integrations)
|
|
28
|
-
- [Automations](#automations)
|
|
29
27
|
- [Credits](#credits)
|
|
30
28
|
- [Support](#support)
|
|
31
29
|
|
|
@@ -126,7 +124,7 @@ POST /monitors
|
|
|
126
124
|
}
|
|
127
125
|
```
|
|
128
126
|
|
|
129
|
-
Event types: `tweet.new`, `tweet.quote`, `tweet.reply`, `tweet.retweet`, `
|
|
127
|
+
Event types: `tweet.new`, `tweet.quote`, `tweet.reply`, `tweet.retweet`, `webhook.test`.
|
|
130
128
|
|
|
131
129
|
Returns `409 monitor_already_exists` if the username is already monitored.
|
|
132
130
|
|
|
@@ -358,7 +356,7 @@ Returns full draw details including winners.
|
|
|
358
356
|
GET /draws/{id}/export?format=csv&type=winners
|
|
359
357
|
```
|
|
360
358
|
|
|
361
|
-
Formats: `csv`, `
|
|
359
|
+
Formats: `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, `xlsx`. Types: `winners` (default), `entries`. Entry exports capped at 100,000 rows (PDF capped at 10,000).
|
|
362
360
|
|
|
363
361
|
---
|
|
364
362
|
|
|
@@ -456,7 +454,7 @@ Returns job details with paginated results (up to 1,000 per page).
|
|
|
456
454
|
GET /extractions/{id}/export?format=csv
|
|
457
455
|
```
|
|
458
456
|
|
|
459
|
-
Formats: `csv`, `
|
|
457
|
+
Formats: `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, `xlsx`. 100,000 row limit (PDF 10,000). Exports include enrichment columns not in the API response.
|
|
460
458
|
|
|
461
459
|
---
|
|
462
460
|
|
|
@@ -1048,6 +1046,8 @@ Returns a checkout URL for subscribing or managing the subscription. If already
|
|
|
1048
1046
|
|
|
1049
1047
|
Manage connected X accounts for write actions. All endpoints are free (no usage cost).
|
|
1050
1048
|
|
|
1049
|
+
**Connecting or re-authenticating an X account is done by the user in the Xquik dashboard** at [xquik.com/dashboard/account](https://xquik.com/dashboard/account), not via this skill. The skill never handles X login credentials. The agent should direct the user to the dashboard when a new account needs to be connected or an existing session needs to be refreshed.
|
|
1050
|
+
|
|
1051
1051
|
### List X Accounts
|
|
1052
1052
|
|
|
1053
1053
|
```
|
|
@@ -1056,28 +1056,6 @@ GET /x/accounts
|
|
|
1056
1056
|
|
|
1057
1057
|
Returns all connected X accounts. Response: `{ accounts: [{ id, username, displayName, isActive, createdAt }] }`.
|
|
1058
1058
|
|
|
1059
|
-
### Connect X Account
|
|
1060
|
-
|
|
1061
|
-
```
|
|
1062
|
-
POST /x/accounts
|
|
1063
|
-
```
|
|
1064
|
-
|
|
1065
|
-
**Body:**
|
|
1066
|
-
|
|
1067
|
-
| Field | Type | Required | Description |
|
|
1068
|
-
|-------|------|----------|-------------|
|
|
1069
|
-
| `username` | string | Yes | X username (`@` auto-stripped) |
|
|
1070
|
-
| `email` | string | Yes | Email associated with the X account |
|
|
1071
|
-
| `password` | string | Yes | Account password (encrypted at rest) |
|
|
1072
|
-
| `totp_secret` | string | No | TOTP base32 secret for 2FA accounts |
|
|
1073
|
-
| `proxy_country` | string | No | Preferred proxy region (e.g. `"US"`, `"TR"`) |
|
|
1074
|
-
|
|
1075
|
-
**Response (201):** `{ id, username, isActive, createdAt }`
|
|
1076
|
-
|
|
1077
|
-
**Errors:** `409 account_already_connected`, `422 login_failed`
|
|
1078
|
-
|
|
1079
|
-
**Security:** This is a credential proxy endpoint. The agent transmits the user's X credentials to Xquik over HTTPS for session establishment. Credentials are encrypted at rest and never returned in responses. Before calling: (1) confirm with the user that they want to connect this account, (2) show which fields will be sent, (3) never log or retain credentials after the call.
|
|
1080
|
-
|
|
1081
1059
|
### Get X Account
|
|
1082
1060
|
|
|
1083
1061
|
```
|
|
@@ -1092,23 +1070,7 @@ Returns `{ id, username, displayName, isActive, createdAt }`.
|
|
|
1092
1070
|
DELETE /x/accounts/{id}
|
|
1093
1071
|
```
|
|
1094
1072
|
|
|
1095
|
-
Permanently removes the account
|
|
1096
|
-
|
|
1097
|
-
### Re-authenticate X Account
|
|
1098
|
-
|
|
1099
|
-
```
|
|
1100
|
-
POST /x/accounts/{id}/reauth
|
|
1101
|
-
```
|
|
1102
|
-
|
|
1103
|
-
Use when a session expires or X requires re-verification.
|
|
1104
|
-
|
|
1105
|
-
**Body:** `{ "password": "...", "totp_secret": "..." }` (password required, totp_secret optional)
|
|
1106
|
-
|
|
1107
|
-
**Response:** `{ success: true }`
|
|
1108
|
-
|
|
1109
|
-
**Errors:** `422 reauth_failed`
|
|
1110
|
-
|
|
1111
|
-
**Security:** Same credential proxy rules as POST /x/accounts — confirm with user, never log or retain credentials.
|
|
1073
|
+
Permanently removes the account from Xquik. Returns `{ success: true }`. Before calling, confirm with the user.
|
|
1112
1074
|
|
|
1113
1075
|
---
|
|
1114
1076
|
|
|
@@ -1289,208 +1251,6 @@ DELETE /x/communities/{id}/join
|
|
|
1289
1251
|
|
|
1290
1252
|
---
|
|
1291
1253
|
|
|
1292
|
-
## Integrations
|
|
1293
|
-
|
|
1294
|
-
Manage third-party integrations (currently Telegram) that receive monitor event notifications. All endpoints are free (no usage cost).
|
|
1295
|
-
|
|
1296
|
-
### Create Integration
|
|
1297
|
-
|
|
1298
|
-
```
|
|
1299
|
-
POST /integrations
|
|
1300
|
-
```
|
|
1301
|
-
|
|
1302
|
-
**Body:**
|
|
1303
|
-
|
|
1304
|
-
| Field | Type | Required | Description |
|
|
1305
|
-
|-------|------|----------|-------------|
|
|
1306
|
-
| `type` | string | Yes | Integration type: `"telegram"` |
|
|
1307
|
-
| `name` | string | Yes | Human-readable name |
|
|
1308
|
-
| `config` | object | Yes | Type-specific config. Telegram: `{ chatId: "-1001234567890" }` |
|
|
1309
|
-
| `eventTypes` | string[] | Yes | Event types: `tweet.new`, `tweet.quote`, `tweet.reply`, `tweet.retweet`, `draw.completed`, `extraction.completed`, `extraction.failed` |
|
|
1310
|
-
|
|
1311
|
-
**Response (201):** `{ id, type, name, config, eventTypes, isActive, createdAt }`
|
|
1312
|
-
|
|
1313
|
-
### List Integrations
|
|
1314
|
-
|
|
1315
|
-
```
|
|
1316
|
-
GET /integrations
|
|
1317
|
-
```
|
|
1318
|
-
|
|
1319
|
-
Returns all integrations. Response: `{ integrations: [...] }`.
|
|
1320
|
-
|
|
1321
|
-
### Get Integration
|
|
1322
|
-
|
|
1323
|
-
```
|
|
1324
|
-
GET /integrations/{id}
|
|
1325
|
-
```
|
|
1326
|
-
|
|
1327
|
-
Returns a single integration with full details.
|
|
1328
|
-
|
|
1329
|
-
### Update Integration
|
|
1330
|
-
|
|
1331
|
-
```
|
|
1332
|
-
PATCH /integrations/{id}
|
|
1333
|
-
```
|
|
1334
|
-
|
|
1335
|
-
**Body:** `{ "name": "...", "eventTypes": [...], "isActive": true|false, "silentPush": false, "scopeAllMonitors": true, "filters": {}, "messageTemplate": {} }` (all optional, at least 1 required)
|
|
1336
|
-
|
|
1337
|
-
### Delete Integration
|
|
1338
|
-
|
|
1339
|
-
```
|
|
1340
|
-
DELETE /integrations/{id}
|
|
1341
|
-
```
|
|
1342
|
-
|
|
1343
|
-
Permanently removes the integration. Returns `204 No Content`.
|
|
1344
|
-
|
|
1345
|
-
### Test Integration
|
|
1346
|
-
|
|
1347
|
-
```
|
|
1348
|
-
POST /integrations/{id}/test
|
|
1349
|
-
```
|
|
1350
|
-
|
|
1351
|
-
Sends a test notification. Returns success or failure status.
|
|
1352
|
-
|
|
1353
|
-
**Errors:** `502 delivery_failed`
|
|
1354
|
-
|
|
1355
|
-
### List Deliveries
|
|
1356
|
-
|
|
1357
|
-
```
|
|
1358
|
-
GET /integrations/{id}/deliveries
|
|
1359
|
-
```
|
|
1360
|
-
|
|
1361
|
-
View delivery attempts and statuses. Statuses: `pending`, `delivered`, `failed`, `exhausted`.
|
|
1362
|
-
|
|
1363
|
-
**Query:** `limit` (default 50).
|
|
1364
|
-
|
|
1365
|
-
---
|
|
1366
|
-
|
|
1367
|
-
## Automations
|
|
1368
|
-
|
|
1369
|
-
Trigger-driven workflow automation. Create flows with triggers (monitor events, schedules, search, inbound webhooks) and action steps.
|
|
1370
|
-
|
|
1371
|
-
### List Automations
|
|
1372
|
-
|
|
1373
|
-
```
|
|
1374
|
-
GET /automations
|
|
1375
|
-
```
|
|
1376
|
-
|
|
1377
|
-
Returns all flows. Response: `{ items: [{ id, name, slug, triggerType, triggerConfig, isActive, runCount, lastRunAt, minIntervalSeconds, pausedReason, templateSlug, xAccountId, createdAt, updatedAt }] }`.
|
|
1378
|
-
|
|
1379
|
-
### Create Automation
|
|
1380
|
-
|
|
1381
|
-
```
|
|
1382
|
-
POST /automations
|
|
1383
|
-
```
|
|
1384
|
-
|
|
1385
|
-
**Body:**
|
|
1386
|
-
```json
|
|
1387
|
-
{
|
|
1388
|
-
"name": "New Follower Welcome",
|
|
1389
|
-
"triggerType": "monitor_event",
|
|
1390
|
-
"triggerConfig": { "eventType": "follower.gained" },
|
|
1391
|
-
"templateSlug": "welcome-dm"
|
|
1392
|
-
}
|
|
1393
|
-
```
|
|
1394
|
-
|
|
1395
|
-
Trigger types: `monitor_event`, `schedule`, `search`, `webhook_inbound`.
|
|
1396
|
-
|
|
1397
|
-
**Response (201):** Flow object with `id`, `slug`, `isActive: false`.
|
|
1398
|
-
|
|
1399
|
-
Flows are created inactive. Add steps, then activate via `PATCH /automations/{slug}`.
|
|
1400
|
-
|
|
1401
|
-
Free: 2 flows. Subscribers: 10 flows.
|
|
1402
|
-
|
|
1403
|
-
### Get Automation
|
|
1404
|
-
|
|
1405
|
-
```
|
|
1406
|
-
GET /automations/{slug}
|
|
1407
|
-
```
|
|
1408
|
-
|
|
1409
|
-
Returns flow with steps and 20 most recent runs.
|
|
1410
|
-
|
|
1411
|
-
### Update Automation
|
|
1412
|
-
|
|
1413
|
-
```
|
|
1414
|
-
PATCH /automations/{slug}
|
|
1415
|
-
```
|
|
1416
|
-
|
|
1417
|
-
**Body:** `{ "expectedUpdatedAt": "...", "name": "...", "triggerType": "...", "triggerConfig": {...}, "isActive": true|false }`. `expectedUpdatedAt` required (optimistic concurrency). Returns `409 conflict` if stale.
|
|
1418
|
-
|
|
1419
|
-
Activation requires an active subscription and at least 1 action step.
|
|
1420
|
-
|
|
1421
|
-
### Delete Automation
|
|
1422
|
-
|
|
1423
|
-
```
|
|
1424
|
-
DELETE /automations/{slug}
|
|
1425
|
-
```
|
|
1426
|
-
|
|
1427
|
-
Deletes the flow and all its steps. Returns `{ success: true }`.
|
|
1428
|
-
|
|
1429
|
-
### Add Step
|
|
1430
|
-
|
|
1431
|
-
```
|
|
1432
|
-
POST /automations/{slug}/steps
|
|
1433
|
-
```
|
|
1434
|
-
|
|
1435
|
-
**Body:**
|
|
1436
|
-
```json
|
|
1437
|
-
{
|
|
1438
|
-
"stepType": "action",
|
|
1439
|
-
"actionType": "send_dm",
|
|
1440
|
-
"branch": "main",
|
|
1441
|
-
"config": { "message": "Welcome!" },
|
|
1442
|
-
"position": 0
|
|
1443
|
-
}
|
|
1444
|
-
```
|
|
1445
|
-
|
|
1446
|
-
Step types: `action`, `condition`, `extraction`. Max 10 steps per flow.
|
|
1447
|
-
|
|
1448
|
-
Action types: `create_tweet`, `follow`, `like`, `reply_tweet`, `retweet`, `send_dm`, `send_email`, `send_telegram`, `unfollow`.
|
|
1449
|
-
|
|
1450
|
-
Extraction types: all 23 extraction tool types (kebab-case, e.g. `reply-extractor`). Requires `outputName` for variable reference in later steps.
|
|
1451
|
-
|
|
1452
|
-
### Update Step
|
|
1453
|
-
|
|
1454
|
-
```
|
|
1455
|
-
PATCH /automations/{slug}/steps
|
|
1456
|
-
```
|
|
1457
|
-
|
|
1458
|
-
**Body:** `{ "stepId": "101", "config": {...}, "positionX": 250, "positionY": 100 }`. `stepId` required.
|
|
1459
|
-
|
|
1460
|
-
### Delete Step
|
|
1461
|
-
|
|
1462
|
-
```
|
|
1463
|
-
DELETE /automations/{slug}/steps
|
|
1464
|
-
```
|
|
1465
|
-
|
|
1466
|
-
**Body:** `{ "stepId": "101" }`.
|
|
1467
|
-
|
|
1468
|
-
### Update Step Positions
|
|
1469
|
-
|
|
1470
|
-
```
|
|
1471
|
-
PATCH /automations/{slug}/steps/positions
|
|
1472
|
-
```
|
|
1473
|
-
|
|
1474
|
-
Batch update canvas positions: `{ "positions": [{ "stepId": "101", "positionX": 250, "positionY": 100 }] }`.
|
|
1475
|
-
|
|
1476
|
-
### Test Automation
|
|
1477
|
-
|
|
1478
|
-
```
|
|
1479
|
-
POST /automations/{slug}/test
|
|
1480
|
-
```
|
|
1481
|
-
|
|
1482
|
-
Not yet implemented. Returns `{ status: "not_implemented" }`.
|
|
1483
|
-
|
|
1484
|
-
### Inbound Webhook Trigger
|
|
1485
|
-
|
|
1486
|
-
```
|
|
1487
|
-
POST /webhooks/inbound/{token}
|
|
1488
|
-
```
|
|
1489
|
-
|
|
1490
|
-
No auth header required. The URL token identifies the flow. Accepts any JSON body as trigger payload. Rate limited per flow (60/hour) and per user (300/hour).
|
|
1491
|
-
|
|
1492
|
-
---
|
|
1493
|
-
|
|
1494
1254
|
## Credits
|
|
1495
1255
|
|
|
1496
1256
|
### Get Credit Balance
|
|
@@ -1570,7 +1330,7 @@ Add a message to an existing ticket.
|
|
|
1570
1330
|
| 400 | `invalid_tweet_id` | Tweet ID is empty or invalid |
|
|
1571
1331
|
| 400 | `invalid_username` | X username is empty or invalid |
|
|
1572
1332
|
| 400 | `invalid_tool_type` | Extraction tool type not recognized |
|
|
1573
|
-
| 400 | `invalid_format` | Export format not `csv`, `
|
|
1333
|
+
| 400 | `invalid_format` | Export format not `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, or `xlsx` |
|
|
1574
1334
|
| 400 | `invalid_params` | Export query parameters are missing or invalid |
|
|
1575
1335
|
| 400 | `missing_query` | Required query parameter is missing |
|
|
1576
1336
|
| 400 | `missing_params` | Required query parameters are missing |
|
|
@@ -1588,15 +1348,12 @@ Add a message to an existing ticket.
|
|
|
1588
1348
|
| 402 | `no_addon` | No monitor addon on subscription |
|
|
1589
1349
|
| 403 | `monitor_limit_reached` | Plan monitor limit exceeded |
|
|
1590
1350
|
| 403 | `api_key_limit_reached` | API key limit reached (100 max) |
|
|
1591
|
-
| 403 | `flow_limit_reached` | Flow limit reached (free: 2, subscriber: 10) |
|
|
1592
|
-
| 403 | `step_limit_reached` | Step limit reached (10 per flow) |
|
|
1593
1351
|
| 404 | `not_found` | Resource does not exist |
|
|
1594
1352
|
| 404 | `user_not_found` | X user not found |
|
|
1595
1353
|
| 404 | `tweet_not_found` | Tweet not found |
|
|
1596
1354
|
| 404 | `style_not_found` | No cached style found |
|
|
1597
1355
|
| 404 | `draft_not_found` | Draft not found |
|
|
1598
1356
|
| 409 | `monitor_already_exists` | Duplicate monitor for same username |
|
|
1599
|
-
| 409 | `conflict` | Concurrent edit conflict (automation updates) |
|
|
1600
1357
|
| 422 | `login_failed` | X credential verification failed |
|
|
1601
1358
|
| 429 | - | Rate limited. Retry with backoff |
|
|
1602
1359
|
| 429 | `x_api_rate_limited` | X data source rate limited. Retry |
|
|
@@ -1604,4 +1361,3 @@ Add a message to an existing ticket.
|
|
|
1604
1361
|
| 502 | `stream_registration_failed` | Stream registration failed. Retry |
|
|
1605
1362
|
| 502 | `x_api_unavailable` | X data source temporarily unavailable |
|
|
1606
1363
|
| 502 | `x_api_unauthorized` | X data source authentication failed. Retry |
|
|
1607
|
-
| 502 | `delivery_failed` | Integration test delivery failed |
|
|
@@ -202,7 +202,7 @@ Returns paginated results (up to 1,000 per page). Each result includes:
|
|
|
202
202
|
GET /extractions/{id}/export?format=csv
|
|
203
203
|
```
|
|
204
204
|
|
|
205
|
-
Formats: `csv`, `
|
|
205
|
+
Formats: `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, `xlsx`. 100,000 row limit (10,000 for PDF).
|
|
206
206
|
|
|
207
207
|
Exports include enrichment columns not present in the API response.
|
|
208
208
|
|
|
@@ -8,7 +8,7 @@ Connect AI agents and IDEs to Xquik via the Model Context Protocol. The MCP serv
|
|
|
8
8
|
| Endpoint | `https://xquik.com/mcp` |
|
|
9
9
|
| Auth header | `x-api-key` |
|
|
10
10
|
|
|
11
|
-
> **Security:** Use a scoped, revocable API key
|
|
11
|
+
> **Security:** Use a scoped, revocable API key - not your primary account key. Where your platform supports environment variable interpolation (e.g., `${XQUIK_API_KEY}`), prefer that over hardcoding. Rotate keys periodically from the [dashboard](https://dashboard.xquik.com/account). Never commit API keys to version control.
|
|
12
12
|
|
|
13
13
|
## Claude.ai (Web)
|
|
14
14
|
|
|
@@ -16,19 +16,24 @@ Claude.ai supports MCP connectors natively via OAuth. Add Xquik as a connector f
|
|
|
16
16
|
|
|
17
17
|
## Claude Desktop
|
|
18
18
|
|
|
19
|
-
Claude Desktop only supports stdio transport
|
|
19
|
+
Claude Desktop only supports stdio transport, so it needs a local stdio-to-HTTP bridge. The recommended setup avoids runtime package fetches: **install the bridge globally first, then invoke the pinned binary directly.**
|
|
20
20
|
|
|
21
|
-
> **About `mcp-remote`:** [`mcp-remote`](https://www.npmjs.com/package/mcp-remote) is an open-source stdio-to-HTTP bridge
|
|
21
|
+
> **About `mcp-remote`:** [`mcp-remote`](https://www.npmjs.com/package/mcp-remote) is an open-source stdio-to-HTTP bridge (MIT license, [source on GitHub](https://github.com/geelen/mcp-remote)) maintained by the MCP ecosystem. It translates stdio to StreamableHTTP - it does not execute arbitrary code, access your filesystem, or modify your system. Always pin the version (`@0.1.38`) and audit the package on npm before installing.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
### Step 1: Install the bridge globally (one-time, audited)
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install -g mcp-remote@0.1.38
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Step 2: Add to `claude_desktop_config.json`
|
|
24
30
|
|
|
25
31
|
```json
|
|
26
32
|
{
|
|
27
33
|
"mcpServers": {
|
|
28
34
|
"xquik": {
|
|
29
|
-
"command": "
|
|
35
|
+
"command": "mcp-remote",
|
|
30
36
|
"args": [
|
|
31
|
-
"mcp-remote@0.1.38",
|
|
32
37
|
"https://xquik.com/mcp",
|
|
33
38
|
"--header",
|
|
34
39
|
"x-api-key:${XQUIK_API_KEY}"
|
|
@@ -38,7 +43,9 @@ Add to `claude_desktop_config.json`:
|
|
|
38
43
|
}
|
|
39
44
|
```
|
|
40
45
|
|
|
41
|
-
>
|
|
46
|
+
> Set the `XQUIK_API_KEY` environment variable before launching Claude Desktop, or replace `${XQUIK_API_KEY}` with your actual API key.
|
|
47
|
+
|
|
48
|
+
> **Prefer a hosted option?** Claude.ai (web) supports Xquik natively via OAuth - see the section above. No local bridge required.
|
|
42
49
|
|
|
43
50
|
## Claude Code
|
|
44
51
|
|
|
@@ -175,7 +182,7 @@ The MCP server (v2) at `https://xquik.com/mcp` provides 2 structured API tools:
|
|
|
175
182
|
| `explore` | Search the API endpoint catalog (read-only, no network calls) | Free |
|
|
176
183
|
| `xquik` | Execute API calls against your account | Varies by endpoint |
|
|
177
184
|
|
|
178
|
-
The agent sends structured API requests through the MCP server, which handles authentication and execution within the same first-party infrastructure as the REST API. All
|
|
185
|
+
The agent sends structured API requests through the MCP server, which handles authentication and execution within the same first-party infrastructure as the REST API. All 111 REST API endpoints across 10 categories are accessible: account, composition, credits, extraction, media, monitoring, support, twitter, x-accounts, and x-write.
|
|
179
186
|
|
|
180
187
|
## After Setup
|
|
181
188
|
|
|
@@ -18,7 +18,7 @@ interface EndpointInfo {
|
|
|
18
18
|
method: string;
|
|
19
19
|
path: string;
|
|
20
20
|
summary: string;
|
|
21
|
-
category: string; // account,
|
|
21
|
+
category: string; // account, composition, credits, extraction, media, monitoring, support, twitter, x-accounts, x-write
|
|
22
22
|
free: boolean;
|
|
23
23
|
parameters?: Array<{ name: string; in: 'query' | 'path' | 'body'; required: boolean; type: string; description: string }>;
|
|
24
24
|
responseShape?: string;
|
|
@@ -86,10 +86,6 @@ Use `explore` first to find endpoints, then `xquik` to call them.
|
|
|
86
86
|
| Follow/unfollow | `POST`/`DELETE /api/v1/x/users/{id}/follow` |
|
|
87
87
|
| Send a DM | `POST /api/v1/x/dm/{userId}` |
|
|
88
88
|
| Upload media | `POST /api/v1/x/media` |
|
|
89
|
-
| Create automation flow | `POST /api/v1/automations` |
|
|
90
|
-
| List automation flows | `GET /api/v1/automations` |
|
|
91
|
-
| Add step to flow | `POST /api/v1/automations/{slug}/steps` |
|
|
92
|
-
| Activate/deactivate flow | `PATCH /api/v1/automations/{slug}` |
|
|
93
89
|
| Open support ticket | `POST /api/v1/support/tickets` |
|
|
94
90
|
| List support tickets | `GET /api/v1/support/tickets` |
|
|
95
91
|
| Get user's recent tweets | `GET /api/v1/x/users/{id}/tweets` |
|
|
@@ -118,7 +114,6 @@ Use `POST /api/v1/extractions` ONLY for bulk data that simpler endpoints cannot
|
|
|
118
114
|
| **Analyze tweet style** | `POST /styles` -> `GET /styles/{username}` -> `POST /compose` with `styleUsername` |
|
|
119
115
|
| **Post a tweet** | `GET /x/accounts` -> `POST /x/tweets` with `account` + `text` |
|
|
120
116
|
| **Get trending news** | `GET /radar` (free, all 7 sources, via `xquik` tool) -> `POST /compose` with trending topic |
|
|
121
|
-
| **Create automation** | `POST /automations` -> `POST /automations/{slug}/steps` -> `PATCH /automations/{slug}` (activate) |
|
|
122
117
|
| **Open support ticket** | `POST /support/tickets` -> `GET /support/tickets/{id}` |
|
|
123
118
|
|
|
124
119
|
## Common Mistakes
|
|
@@ -147,5 +142,5 @@ These are NOT available via the MCP server:
|
|
|
147
142
|
|
|
148
143
|
## Cost Reference
|
|
149
144
|
|
|
150
|
-
- **Free**: account info, compose (all steps), styles (cached lookup/save/delete/compare), drafts, radar (via `xquik` tool, all 7 sources), subscribe, API keys,
|
|
145
|
+
- **Free**: account info, compose (all steps), styles (cached lookup/save/delete/compare), drafts, radar (via `xquik` tool, all 7 sources), subscribe, API keys, X account management, support tickets, credits (balance check, top up)
|
|
151
146
|
- **Subscription required**: tweet search, user lookup, tweet lookup, follow check, media download (first only, cached free), extractions, draws, style analysis (X API refresh), performance analysis, trends, all write actions (tweet, like, retweet, follow, DM, profile, media upload, communities)
|
|
@@ -62,7 +62,7 @@ Draws: 1 credit per participant. Extraction cost depends on the tool type:
|
|
|
62
62
|
|
|
63
63
|
### Free operations ($0)
|
|
64
64
|
|
|
65
|
-
Monitors, webhooks,
|
|
65
|
+
Monitors, webhooks, account status, radar (7 sources), extraction/draw history, cost estimates, tweet composition (compose, refine, score), style cache management, drafts, support tickets, API key management, X account management.
|
|
66
66
|
|
|
67
67
|
## Price Comparison vs Official X API
|
|
68
68
|
|
|
@@ -80,7 +80,7 @@ Monitors, webhooks, integrations, account status, radar (7 sources), extraction/
|
|
|
80
80
|
|
|
81
81
|
Two options without a monthly subscription:
|
|
82
82
|
|
|
83
|
-
**Credits**: Top up credits via `POST /credits/topup` ($10 minimum). 1 credit = $0.00015. Works with all
|
|
83
|
+
**Credits**: Top up credits via `POST /credits/topup` ($10 minimum). 1 credit = $0.00015. Works with all 111 endpoints.
|
|
84
84
|
|
|
85
85
|
**MPP**: 32 X-API endpoints accept anonymous on-chain payments. No account needed.
|
|
86
86
|
|
|
@@ -126,8 +126,6 @@ EVENT_HANDLERS = {
|
|
|
126
126
|
"tweet.reply": lambda u, d: print(f"Reply from @{u}: {d['text']}"),
|
|
127
127
|
"tweet.quote": lambda u, d: print(f"Quote from @{u}: {d['text']}"),
|
|
128
128
|
"tweet.retweet": lambda u, d: print(f"Retweet by @{u}"),
|
|
129
|
-
"follower.gained": lambda u, d: print(f"@{u} gained follower: @{d['followerUsername']}"),
|
|
130
|
-
"follower.lost": lambda u, d: print(f"@{u} lost follower: @{d['followerUsername']}"),
|
|
131
129
|
}
|
|
132
130
|
|
|
133
131
|
@app.route("/webhook", methods=["POST"])
|
|
@@ -14,7 +14,6 @@ Copy-pasteable TypeScript types for all Xquik API objects.
|
|
|
14
14
|
- [Extractions](#extractions)
|
|
15
15
|
- [X API](#x-api)
|
|
16
16
|
- [Trends](#trends)
|
|
17
|
-
- [Automations](#automations)
|
|
18
17
|
- [Support](#support)
|
|
19
18
|
- [Error](#error)
|
|
20
19
|
- [Request Bodies](#request-bodies)
|
|
@@ -82,9 +81,7 @@ type EventType =
|
|
|
82
81
|
| "tweet.new"
|
|
83
82
|
| "tweet.quote"
|
|
84
83
|
| "tweet.reply"
|
|
85
|
-
| "tweet.retweet"
|
|
86
|
-
| "follower.gained"
|
|
87
|
-
| "follower.lost";
|
|
84
|
+
| "tweet.retweet";
|
|
88
85
|
|
|
89
86
|
// ─── Events ──────────────────────────────────────────────
|
|
90
87
|
|
|
@@ -118,16 +115,7 @@ interface TweetEventData {
|
|
|
118
115
|
retweetedUsername?: string;
|
|
119
116
|
}
|
|
120
117
|
|
|
121
|
-
|
|
122
|
-
interface FollowerEventData {
|
|
123
|
-
followerId: string;
|
|
124
|
-
followerUsername: string;
|
|
125
|
-
followerName: string;
|
|
126
|
-
followerFollowersCount: number;
|
|
127
|
-
followerVerified: boolean;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
type EventData = TweetEventData | FollowerEventData;
|
|
118
|
+
type EventData = TweetEventData;
|
|
131
119
|
|
|
132
120
|
interface EventList {
|
|
133
121
|
events: Event[];
|
|
@@ -557,98 +545,6 @@ interface TrendList {
|
|
|
557
545
|
woeid: number;
|
|
558
546
|
}
|
|
559
547
|
|
|
560
|
-
// ─── Automations ────────────────────────────────────────
|
|
561
|
-
|
|
562
|
-
type TriggerType = "monitor_event" | "schedule" | "search" | "webhook_inbound";
|
|
563
|
-
|
|
564
|
-
type StepType = "action" | "condition" | "extraction";
|
|
565
|
-
|
|
566
|
-
type ActionType =
|
|
567
|
-
| "create_tweet"
|
|
568
|
-
| "follow"
|
|
569
|
-
| "like"
|
|
570
|
-
| "reply_tweet"
|
|
571
|
-
| "retweet"
|
|
572
|
-
| "send_dm"
|
|
573
|
-
| "send_email"
|
|
574
|
-
| "send_telegram"
|
|
575
|
-
| "unfollow";
|
|
576
|
-
|
|
577
|
-
interface AutomationFlow {
|
|
578
|
-
id: string;
|
|
579
|
-
name: string;
|
|
580
|
-
slug: string;
|
|
581
|
-
triggerType: TriggerType;
|
|
582
|
-
triggerConfig: Record<string, unknown>;
|
|
583
|
-
isActive: boolean;
|
|
584
|
-
runCount: string;
|
|
585
|
-
lastRunAt: string | null;
|
|
586
|
-
minIntervalSeconds: number;
|
|
587
|
-
pausedReason: string | null;
|
|
588
|
-
templateSlug: string | null;
|
|
589
|
-
xAccountId: string | null;
|
|
590
|
-
createdAt: string;
|
|
591
|
-
updatedAt: string;
|
|
592
|
-
}
|
|
593
|
-
|
|
594
|
-
interface AutomationStep {
|
|
595
|
-
id: string;
|
|
596
|
-
flowId: string;
|
|
597
|
-
stepType: StepType;
|
|
598
|
-
actionType: ActionType | null;
|
|
599
|
-
extractionType: string | null;
|
|
600
|
-
branch: "main" | "if_true" | "if_false";
|
|
601
|
-
config: Record<string, unknown>;
|
|
602
|
-
position: number;
|
|
603
|
-
positionX: number | null;
|
|
604
|
-
positionY: number | null;
|
|
605
|
-
parentStepId: string | null;
|
|
606
|
-
outputName: string | null;
|
|
607
|
-
createdAt: string;
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
interface AutomationRun {
|
|
611
|
-
id: string;
|
|
612
|
-
status: string;
|
|
613
|
-
startedAt: string;
|
|
614
|
-
completedAt: string | null;
|
|
615
|
-
errorMessage: string | null;
|
|
616
|
-
triggeredBy: string;
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
interface AutomationDetail extends AutomationFlow {
|
|
620
|
-
steps: AutomationStep[];
|
|
621
|
-
recentRuns: AutomationRun[];
|
|
622
|
-
}
|
|
623
|
-
|
|
624
|
-
interface CreateAutomationRequest {
|
|
625
|
-
name: string;
|
|
626
|
-
triggerType: TriggerType;
|
|
627
|
-
triggerConfig: Record<string, unknown>;
|
|
628
|
-
templateSlug?: string;
|
|
629
|
-
}
|
|
630
|
-
|
|
631
|
-
interface UpdateAutomationRequest {
|
|
632
|
-
expectedUpdatedAt: string;
|
|
633
|
-
name?: string;
|
|
634
|
-
triggerType?: TriggerType;
|
|
635
|
-
triggerConfig?: Record<string, unknown>;
|
|
636
|
-
isActive?: boolean;
|
|
637
|
-
triggerPositionX?: number | null;
|
|
638
|
-
triggerPositionY?: number | null;
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
interface AddStepRequest {
|
|
642
|
-
stepType: StepType;
|
|
643
|
-
branch: "main" | "if_true" | "if_false";
|
|
644
|
-
config: Record<string, unknown>;
|
|
645
|
-
position?: number;
|
|
646
|
-
parentStepId?: string;
|
|
647
|
-
actionType?: ActionType;
|
|
648
|
-
extractionType?: string;
|
|
649
|
-
outputName?: string;
|
|
650
|
-
}
|
|
651
|
-
|
|
652
548
|
// ─── Support ────────────────────────────────────────────
|
|
653
549
|
|
|
654
550
|
interface SupportTicket {
|
|
@@ -1058,18 +954,8 @@ interface ConnectedXAccount {
|
|
|
1058
954
|
createdAt: string; // ISO 8601 timestamp
|
|
1059
955
|
}
|
|
1060
956
|
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
email: string; // Email associated with X account
|
|
1064
|
-
password: string; // Password (encrypted at rest)
|
|
1065
|
-
totp_secret?: string; // TOTP base32 secret for 2FA accounts
|
|
1066
|
-
proxy_country?: string; // Preferred proxy region (e.g. "US")
|
|
1067
|
-
}
|
|
1068
|
-
|
|
1069
|
-
interface ReauthXAccountRequest {
|
|
1070
|
-
password: string; // Current password
|
|
1071
|
-
totp_secret?: string; // TOTP secret if 2FA enabled
|
|
1072
|
-
}
|
|
957
|
+
// Connecting an X account is done by the user in the Xquik dashboard,
|
|
958
|
+
// not through this skill. The skill never handles X login credentials.
|
|
1073
959
|
|
|
1074
960
|
// ─── X Write ──────────────────────────────────────────
|
|
1075
961
|
|
|
@@ -1107,57 +993,4 @@ interface UpdateProfileRequest {
|
|
|
1107
993
|
url?: string; // Website URL
|
|
1108
994
|
}
|
|
1109
995
|
|
|
1110
|
-
// ─── Integrations ─────────────────────────────────────
|
|
1111
|
-
|
|
1112
|
-
// Integration event types differ from monitor event types:
|
|
1113
|
-
// includes system events (draw/extraction) but NOT follower events
|
|
1114
|
-
type IntegrationEventType =
|
|
1115
|
-
| "tweet.new"
|
|
1116
|
-
| "tweet.quote"
|
|
1117
|
-
| "tweet.reply"
|
|
1118
|
-
| "tweet.retweet"
|
|
1119
|
-
| "draw.completed"
|
|
1120
|
-
| "extraction.completed"
|
|
1121
|
-
| "extraction.failed";
|
|
1122
|
-
|
|
1123
|
-
interface Integration {
|
|
1124
|
-
id: string; // Unique integration ID
|
|
1125
|
-
type: string; // Integration type ("telegram")
|
|
1126
|
-
name: string; // Human-readable name
|
|
1127
|
-
config: Record<string, unknown>; // Type-specific config (Telegram: { chatId })
|
|
1128
|
-
eventTypes: IntegrationEventType[]; // Subscribed event types
|
|
1129
|
-
isActive: boolean; // Whether the integration is active
|
|
1130
|
-
createdAt: string; // ISO 8601 timestamp
|
|
1131
|
-
updatedAt: string; // ISO 8601 timestamp
|
|
1132
|
-
}
|
|
1133
|
-
|
|
1134
|
-
interface CreateIntegrationRequest {
|
|
1135
|
-
type: string; // "telegram"
|
|
1136
|
-
name: string; // Human-readable name
|
|
1137
|
-
config: { chatId: string }; // Telegram config
|
|
1138
|
-
eventTypes: IntegrationEventType[]; // Event types to subscribe to
|
|
1139
|
-
}
|
|
1140
|
-
|
|
1141
|
-
interface UpdateIntegrationRequest {
|
|
1142
|
-
name?: string; // New name
|
|
1143
|
-
eventTypes?: string[]; // New event types
|
|
1144
|
-
isActive?: boolean; // Activate/deactivate
|
|
1145
|
-
silentPush?: boolean; // Silent notifications
|
|
1146
|
-
scopeAllMonitors?: boolean; // Scope to all monitors
|
|
1147
|
-
filters?: Record<string, unknown>; // Filters
|
|
1148
|
-
messageTemplate?: Record<string, unknown>; // Custom message template
|
|
1149
|
-
}
|
|
1150
|
-
|
|
1151
|
-
interface IntegrationDelivery {
|
|
1152
|
-
id: string; // Delivery ID
|
|
1153
|
-
integrationId: string; // Integration ID
|
|
1154
|
-
sourceType: string; // "monitor_event" | "extraction" | "draw"
|
|
1155
|
-
sourceId: string; // Source record ID
|
|
1156
|
-
eventType: string; // Event type
|
|
1157
|
-
status: string; // "pending" | "delivered" | "failed" | "exhausted"
|
|
1158
|
-
lastError?: string; // Last error message
|
|
1159
|
-
attempts: number; // Delivery attempt count
|
|
1160
|
-
deliveredAt?: string; // ISO 8601 timestamp
|
|
1161
|
-
createdAt: string; // ISO 8601 timestamp
|
|
1162
|
-
}
|
|
1163
996
|
```
|