x-developer 2.4.1 → 2.4.5
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 +2 -2
- package/openclaw.plugin.json +1 -1
- package/package.json +5 -1
- 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 +65 -52
- package/skills/x-twitter-scraper/metadata.json +1 -1
- package/skills/x-twitter-scraper/references/api-endpoints.md +4 -40
- package/skills/x-twitter-scraper/references/mcp-setup.md +14 -7
- package/skills/x-twitter-scraper/references/python-examples.md +0 -2
- package/skills/x-twitter-scraper/references/types.md +4 -25
- package/skills/x-twitter-scraper/references/webhooks.md +2 -2
- package/skills/x-twitter-scraper/references/workflows.md +2 -2
|
@@ -124,7 +124,7 @@ POST /monitors
|
|
|
124
124
|
}
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
-
Event types: `tweet.new`, `tweet.quote`, `tweet.reply`, `tweet.retweet`, `
|
|
127
|
+
Event types: `tweet.new`, `tweet.quote`, `tweet.reply`, `tweet.retweet`, `webhook.test`.
|
|
128
128
|
|
|
129
129
|
Returns `409 monitor_already_exists` if the username is already monitored.
|
|
130
130
|
|
|
@@ -1046,6 +1046,8 @@ Returns a checkout URL for subscribing or managing the subscription. If already
|
|
|
1046
1046
|
|
|
1047
1047
|
Manage connected X accounts for write actions. All endpoints are free (no usage cost).
|
|
1048
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
|
+
|
|
1049
1051
|
### List X Accounts
|
|
1050
1052
|
|
|
1051
1053
|
```
|
|
@@ -1054,28 +1056,6 @@ GET /x/accounts
|
|
|
1054
1056
|
|
|
1055
1057
|
Returns all connected X accounts. Response: `{ accounts: [{ id, username, displayName, isActive, createdAt }] }`.
|
|
1056
1058
|
|
|
1057
|
-
### Connect X Account
|
|
1058
|
-
|
|
1059
|
-
```
|
|
1060
|
-
POST /x/accounts
|
|
1061
|
-
```
|
|
1062
|
-
|
|
1063
|
-
**Body:**
|
|
1064
|
-
|
|
1065
|
-
| Field | Type | Required | Description |
|
|
1066
|
-
|-------|------|----------|-------------|
|
|
1067
|
-
| `username` | string | Yes | X username (`@` auto-stripped) |
|
|
1068
|
-
| `email` | string | Yes | Email associated with the X account |
|
|
1069
|
-
| `password` | string | Yes | Account password (encrypted at rest) |
|
|
1070
|
-
| `totp_secret` | string | No | TOTP base32 secret for 2FA accounts |
|
|
1071
|
-
| `proxy_country` | string | No | Preferred proxy region (e.g. `"US"`, `"TR"`) |
|
|
1072
|
-
|
|
1073
|
-
**Response (201):** `{ id, username, isActive, createdAt }`
|
|
1074
|
-
|
|
1075
|
-
**Errors:** `409 account_already_connected`, `422 login_failed`
|
|
1076
|
-
|
|
1077
|
-
**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.
|
|
1078
|
-
|
|
1079
1059
|
### Get X Account
|
|
1080
1060
|
|
|
1081
1061
|
```
|
|
@@ -1090,23 +1070,7 @@ Returns `{ id, username, displayName, isActive, createdAt }`.
|
|
|
1090
1070
|
DELETE /x/accounts/{id}
|
|
1091
1071
|
```
|
|
1092
1072
|
|
|
1093
|
-
Permanently removes the account
|
|
1094
|
-
|
|
1095
|
-
### Re-authenticate X Account
|
|
1096
|
-
|
|
1097
|
-
```
|
|
1098
|
-
POST /x/accounts/{id}/reauth
|
|
1099
|
-
```
|
|
1100
|
-
|
|
1101
|
-
Use when a session expires or X requires re-verification.
|
|
1102
|
-
|
|
1103
|
-
**Body:** `{ "password": "...", "totp_secret": "..." }` (password required, totp_secret optional)
|
|
1104
|
-
|
|
1105
|
-
**Response:** `{ success: true }`
|
|
1106
|
-
|
|
1107
|
-
**Errors:** `422 reauth_failed`
|
|
1108
|
-
|
|
1109
|
-
**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.
|
|
1110
1074
|
|
|
1111
1075
|
---
|
|
1112
1076
|
|
|
@@ -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
|
|
|
@@ -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"])
|
|
@@ -81,9 +81,7 @@ type EventType =
|
|
|
81
81
|
| "tweet.new"
|
|
82
82
|
| "tweet.quote"
|
|
83
83
|
| "tweet.reply"
|
|
84
|
-
| "tweet.retweet"
|
|
85
|
-
| "follower.gained"
|
|
86
|
-
| "follower.lost";
|
|
84
|
+
| "tweet.retweet";
|
|
87
85
|
|
|
88
86
|
// ─── Events ──────────────────────────────────────────────
|
|
89
87
|
|
|
@@ -117,16 +115,7 @@ interface TweetEventData {
|
|
|
117
115
|
retweetedUsername?: string;
|
|
118
116
|
}
|
|
119
117
|
|
|
120
|
-
|
|
121
|
-
interface FollowerEventData {
|
|
122
|
-
followerId: string;
|
|
123
|
-
followerUsername: string;
|
|
124
|
-
followerName: string;
|
|
125
|
-
followerFollowersCount: number;
|
|
126
|
-
followerVerified: boolean;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
type EventData = TweetEventData | FollowerEventData;
|
|
118
|
+
type EventData = TweetEventData;
|
|
130
119
|
|
|
131
120
|
interface EventList {
|
|
132
121
|
events: Event[];
|
|
@@ -965,18 +954,8 @@ interface ConnectedXAccount {
|
|
|
965
954
|
createdAt: string; // ISO 8601 timestamp
|
|
966
955
|
}
|
|
967
956
|
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
email: string; // Email associated with X account
|
|
971
|
-
password: string; // Password (encrypted at rest)
|
|
972
|
-
totp_secret?: string; // TOTP base32 secret for 2FA accounts
|
|
973
|
-
proxy_country?: string; // Preferred proxy region (e.g. "US")
|
|
974
|
-
}
|
|
975
|
-
|
|
976
|
-
interface ReauthXAccountRequest {
|
|
977
|
-
password: string; // Current password
|
|
978
|
-
totp_secret?: string; // TOTP secret if 2FA enabled
|
|
979
|
-
}
|
|
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.
|
|
980
959
|
|
|
981
960
|
// ─── X Write ──────────────────────────────────────────
|
|
982
961
|
|
|
@@ -60,8 +60,8 @@ app.post("/webhook", express.raw({ type: "application/json" }), (req, res) => {
|
|
|
60
60
|
case "tweet.reply":
|
|
61
61
|
console.log(`Reply from @${event.username}: ${event.data.text}`);
|
|
62
62
|
break;
|
|
63
|
-
case "
|
|
64
|
-
console.log(`@${event.username}
|
|
63
|
+
case "tweet.retweet":
|
|
64
|
+
console.log(`@${event.username} retweeted`);
|
|
65
65
|
break;
|
|
66
66
|
}
|
|
67
67
|
|
|
@@ -131,7 +131,7 @@ const monitor = await xquikFetch("/monitors", {
|
|
|
131
131
|
method: "POST",
|
|
132
132
|
body: JSON.stringify({
|
|
133
133
|
username: "elonmusk",
|
|
134
|
-
eventTypes: ["tweet.new", "tweet.reply", "tweet.quote", "
|
|
134
|
+
eventTypes: ["tweet.new", "tweet.reply", "tweet.quote", "tweet.retweet"],
|
|
135
135
|
}),
|
|
136
136
|
});
|
|
137
137
|
|
|
@@ -149,7 +149,7 @@ const webhook = await xquikFetch("/webhooks", {
|
|
|
149
149
|
const events = await xquikFetch("/events?monitorId=7&limit=50");
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
Event types: `tweet.new`, `tweet.quote`, `tweet.reply`, `tweet.retweet`, `
|
|
152
|
+
Event types: `tweet.new`, `tweet.quote`, `tweet.reply`, `tweet.retweet`, `webhook.test`.
|
|
153
153
|
|
|
154
154
|
## Endpoint Guide
|
|
155
155
|
|